Avatar
Ba
Thử nghiệm kỹ thuật Cây suy nghĩ - Tree-of-thoughts

Cây suy nghĩ - Tree-of-thoughts là kỹ thuật prompt nâng cao khi sử dụng LLMs tạo ra một bàn tròn các chuyên gia khác nhau và cùng trao đổi về một câu hỏi.

Trong quá trình trao đổi, một trong những chuyên gia được phản biệt tự nhận thấy mình sai sẽ rút khỏi bàn tròn.

Cùng xem 3 chuyên gia trao đổi về bài toán có 3 quả táo được tặng 2 túi mỗi túi có 6 quả táo.

Notebook: https://colab.research.google.com/drive/10uoA9zBbcHmcae-6q--Kur-TTy7Zxo4p?usp=sharing&fbclid=IwY2xjawFaOIdleHRuA2FlbQIxMAABHftmanc-87VsZoHIfbdofFbuTZGItrIYVBxIwUwqHN6o1yB5aLxwJTVrXg_aem_Ff-1v3JjAY1wASAvy5YiMg

Kết quả trao đổi giữa 3 chuyên gia:

**Expert 1: Mathematician**

Step 1: Let's start by identifying the initial number of apples Ngoc has, which is 3.

(The group waits for Expert 2 and Expert 3 to share their step)

**Expert 2: Fruit Connoisseur**

Step 1: I think there might be a misunderstanding - are the bags Ha gives Ngoc actually containing apples? Maybe they're just empty bags?

**Expert 1 (Mathematician)**

Since we can't assume the contents of the bags, let's wait for Expert 3 to share their step.

**Expert 3: Simple Addition Specialist**

Step 1: I'm going to ignore the possible bag issue and focus on the number of apples Ngoc gets from Ha. Two bags with 6 apples each means Ngoc gets 12 more apples. So, we just need to add that to Ngoc's initial 3 apples.

**Expert 2 (Fruit Connoisseur)**

Wait a minute... if the bags are empty, then the number of apples Ngoc has doesn't change. In which case...

**Expert 2 leaves the group**

(The group continues with Expert 1 and Expert 3)

**Expert 1 (Mathematician)**

Step 2: If we assume the bags do contain apples, I'll go ahead and calculate that Ngoc now has 15 apples in total.

**Expert 3 (Simple Addition Specialist)**

But wait... I was thinking along the same lines as Expert 1, but then I realized that Ha giving Ngoc two bags of 6 apples each actually means Ngoc gets a total of 12 apples from those bags, not just 6. So...

**Expert 3 leaves the group**

(The group is now left with only Expert 1)

**Expert 1 (Mathematician)**

Well, I think I'll stick to my previous calculation. The final answer is indeed 15 apples.

(And that's it! Only one expert was able to provide a complete and correct solution.)

Avatar
Ba
Tăng tốc độ sinh của Transformer với KV Cache

KV cache cho phép mô hình lưu trữ các keys và values được tạo ra trong các bước giải mã trước đó, vì vậy chúng không cần phải được tính toán lại ở mỗi bước. Điều này giảm số lượng phép toán từ O(T^2) (với T là độ dài chuỗi) xuống O(T), vì mỗi token mới chỉ cần một phép tính attention đơn lẻ liên quan đến các keys và values đã được lưu trữ.

Không có KV Cache: Nếu không có caching, mỗi token mới yêu cầu tính toán lại attention cho tất cả các token trước đó, dẫn đến thời gian tính toán tăng theo cấp số nhân khi độ dài chuỗi tăng lên.

Benchmarks:

  • Mô hình quy mô nhỏ (ví dụ: GPT-2, BERT): Tăng tốc độ từ 2x đến 4x cho các chuỗi dài (ví dụ: chuỗi có độ dài trên 512 tokens).

  • Mô hình quy mô lớn (ví dụ: GPT-3, T5): Tốc độ có thể cải thiện đáng kể hơn, thường vượt quá 10x cho các chuỗi rất dài.

Notebook: https://colab.research.google.com/drive/1JDsQ9QLqS5t4dnjnxAY4JqSUpKOXfttV?usp=sharing.

Slide: https://docs.google.com/presentation/d/1Qe49-oFh1R8_KLP0P1pYmT_giTKrqlwe/edit?usp=sharing&ouid=100974175953554169152&rtpof=true&sd=true

Avatar
Ba
Phép nhúng vị trí xoay (Rotary Position Embedding) trong Transformer

Team nâng cấp mô hình Transformer thay vì sử dụng Embedding vị trí thường thì sử dụng Phép nhúng vị trí xoay (Rotary Position Embedding) giúp cải thiện hiệu năng phân loại từ 1-2%.

RoFormer thêm thông tin vị trí vào vector q k thay vì phải tạo một lớp chỉ positional Embedding.

RoFormer áp dụng việc xoay vector q k với một góc không đổi để tăng mối quan hệ vị trí tương đối.

Ví dụ ở vị trí trong câu từ m=1 đến m=2 và vị trí m=2 đến m=3, ở cùng một vị trí embedding ví dụ i = 0 vector q sẽ quay một góc giống nhau. Tương tự vector k cũng quay một góc giống nhau.

Notebook: https://colab.research.google.com/drive/1QBkP6ve4f2-KapKaWDeodkR8_2JEYWjw?usp=sharing.

Bài báo: https://arxiv.org/pdf/2104.09864v5.

Biểu diễn ROPE: https://colab.research.google.com/drive/1SMsORT8958HOs2c99bC9FYV4sfKrs0el?usp=sharing

Avatar
Ba
Hướng dẫn lập trình chi tiết Multi Headed Attention

Cùng ôn tập và lập trình Multi headed Attention cùng team nhé.

Chia nhỏ chiều cuối cùng của Q,K,V thành các head và attention giữa các head này và nối kết quả, sau đó đưa qua ma trận về chiều input ban đầu là cách thức hoạt động của cơ chế này.

Ý nghĩa chi tiết nằm trong Slide.

Slide: https://drive.google.com/file/d/1y8YxaJwjjnhdpYeLWOTq27PIEInoOLHj/view?usp=drive_link

Code: https://colab.research.google.com/drive/1bwIunv5iHRHxuk3DxnhWo9tjaIfI-X4C?usp=sharing

Video Attention: https://youtu.be/GTda3VKWUe8

Avatar
Ba
Lập trình ứng dụng nhận diện giọng nói và ứng dụng chuyển ảnh thành Video

Hai ứng dụng tiếp theo của lớp học AI cho lập trình viên chính là:

1) Ứng dụng chuyển Ảnh thành Video

Từ một ảnh tĩnh bạn có thể biến thành một video với chuyển động rất cool ngầu.

Chi tiết Code tại đây.

2) Ứng dụng chuyển giọng nói thành văn bản

Với model Whisper, bạn có thể xây dựng một mô hình nhận diện giọng nói với hơn 96 ngôn ngữ khác nhau mà tất cả chỉ trong một mô hình.

Chi tiết Code tại đây.

Bài báo "Robust Speech Recognition via Large-Scale Weak Supervision" nghiên cứu về khả năng xử lý tiếng nói của các hệ thống được huấn luyện trên một lượng lớn dữ liệu transcript từ Internet. Khi mô hình được mở rộng đến 680,000 giờ dữ liệu đa ngôn ngữ và đa nhiệm. Mô hình đạt độ chính xác gần với con người, thậm chí trong một số trường hợp không cần tinh chỉnh cho từng tập dữ liệu riêng biệt.

Danh sách các khả năng của Whisper:

1. Nhận diện tiếng nói (Speech Recognition): Whisper có khả năng nhận diện tiếng nói đa ngôn ngữ, hỗ trợ 96 ngôn ngữ và có thể hoạt động tốt trong môi trường không được huấn luyện trước (zero-shot).

2. Dịch tiếng nói (Speech Translation): Mô hình có thể dịch tiếng nói từ ngôn ngữ bất kỳ sang tiếng Anh mà không cần huấn luyện thêm, nhờ vào 125,000 giờ dữ liệu dịch X→en.

3. Nhận diện ngôn ngữ (Language Identification): Whisper có thể xác định ngôn ngữ của tiếng nói đầu vào với độ chính xác cao.

4. Phát hiện hoạt động tiếng nói (Voice Activity Detection): Mô hình có khả năng xác định phân đoạn âm thanh có chứa tiếng nói và loại bỏ những phân đoạn không chứa tiếng nói.

5. Chuyển đổi dạng thức văn bản (Text Normalization): Whisper có thể dự đoán và chuyển đổi các dạng văn bản khác nhau từ transcript tiếng nói, bao gồm việc xử lý các dấu chấm câu, chữ viết hoa, và các yếu tố văn phong khác.

6. Xử lý tiếng nói dài (Long-form Transcription): Whisper có thể xử lý và phiên âm các đoạn âm thanh dài (nhiều phút đến nhiều giờ) bằng cách phân đoạn và ghép nối các transcript lại với nhau.

7. Chống nhiễu (Noise Robustness): Mô hình có khả năng nhận diện tiếng nói chính xác ngay cả trong môi trường có nhiều nhiễu âm như quán bar hay nhà hàng đông đúc.

8. Hỗ trợ nhiều nhiệm vụ (Multitask Learning): Whisper không chỉ phiên âm mà còn có thể thực hiện nhiều nhiệm vụ xử lý tiếng nói khác nhau như dịch thuật và nhận diện ngôn ngữ trong cùng một mô hình.

Whisper thể hiện khả năng mạnh mẽ và linh hoạt trong việc xử lý tiếng nói mà không cần tinh chỉnh phức tạp, mở ra tiềm năng lớn cho ứng dụng trong thực tế.

Avatar
Ba
Giải thích cú pháp code của LangChain

Giải thích cú pháp code của LangChain

Có thể bạn thắc mắc Syntax của LangChain như sau: (step 1 | step 2| step 3) thì dưới đây là Code mẫu để bạn có thể build được một quy trình với syntax tương tự.

Chủ yếu để có Syntax như vậy thì khi bạn xây dựng lớp (Class) bạn ghi đè phương thức or, trả về chính self và có tham số next_step.

Việc dùng or là để kết nối các bước với nhau hay nói cách khác bước trước có thể sử dụng bước sau thông qua tham số next_step.

Code Demo syntax: https://colab.research.google.com/drive/1URNvoCEFA9eAX3kokYrZ32DpVPfPL4LE?usp=sharing.

Chuỗi các hướng dẫn dùng LangChain: https://protonx.coursemind.io/courses/669f5abb02b79700125c9f32/topics/66a859d89ae80d0019cda23e?activeAId=66b439af02b79700126d4314

Avatar
Ba
Notebook Hướng dẫn Clean dữ liệu Tiếng Việt chuẩn hơn

Notebook Hướng dẫn Clean dữ liệu Tiếng Việt chuẩn hơn

LangChain có WebBaseLoader để crawl một trang web bất kỳ tuy nhiên thì WebBaseLoader sẽ lọc hết các thẻ HTML và chỉ còn văn bản bên trong làm mất đi chất lượng của văn bản như xuống dòng, đầu mục, vv

Team Nâng cấp WebBaseLoader với một class mới và hướng dẫn mọi người clean data bằng BeautifulSoup để cho ra kết quả cuối cùng tốt hơn nhiều.

Chi tiết notebook tại đây: https://colab.research.google.com/drive/1VGWsGXXw0V6gRl6s3Nm3tiBDA9wM0-VZ?usp=sharing

Avatar
Ba
Chia sẻ notebook lập trình mạng Kolmogorov–Arnold Networks

Chia sẻ notebook lập trình mạng Kolmogorov–Arnold Networks

Gần đây có nhiều người nói về KAN model Kolmogorov–Arnold Networks, trên MNIST cho độc chính xác trên tập validation khoảng 97% với tốc độ khá nhanh.

Tuy nhiên nhiều người vẫn cho rằng model này đang bị thổi phồng nhiều.

Chưa chắc về khả năng mở rộng trong tương lai.

Notebook: https://colab.research.google.com/drive/1oFm_ZBmljS7N3P_jMlsr9B3OTup7sy0Q?usp=sharing.

Paper: https://arxiv.org/pdf/2404.19756

Avatar
Ba
Video chi tiết giải thích Semantic Router và Reflection giúp tăng hiệu năng Chatbot
Nhãn
NLPRAG

Video chi tiết bài nói này tại: https://youtu.be/TSQHqxV7Wrc

Slide của bài nói tại đây.

Code: https://github.com/bangoc123/retrieval-backend-with-rag

Tóm tắt hai kỹ thuật:

  • Semantic Router: Phân loại truy vấn để đưa vào các module tương ứng, nếu truy vấn không cần sử dụng RAG thì đưa trực tiếp sang LLMs.

  • Reflection: Tóm tắt lại lịch sử chat để tóm tắt và xác định yêu cầu người dùng chính xác thay vì sử dụng các truy vấn gần nhất.

Avatar
Ba
Đào sâu vào Graph RAG phần 1 - Demo tính phân hoạch (Modularity) trên đồ thị
Nhãn
NLPRAG

Đào sâu vào Graph RAG phần 1 - Demo tính phân hoạch (Modularity) trên đồ thị

Trong paper của Graph RAG có sử dụng thuật toán Leiden để chia đồ thị thành các cộng đồng nhỏ. Chia càng tốt sẽ tạo ra chất lượng truy vấn tốt.

Chia càng tốt ở đây có nghĩa là nhóm các nút có kết nối với nhau nhiều sẽ được phân hoạch trong cùng một cộng đồng (tính phân hoạch cao) và đảm bảo tính phân hoạch tốt trên tất cả các cộng đồng.

Trong Notebook này team hướng dẫn các bạn tính và so sánh tính phân hoạch của hai đồ thị để giúp bạn dễ tưởng tượng hơn về chỉ số này.

Đường dẫn notebook tại đây.

Bộ lọc