Tạo sinh dựa trên truy xuất tăng cường

**Tạo sinh dựa trên truy xuất tăng cường** (tiếng Anh: **retrieval-augmented generation** hoặc **RAG**) là một kỹ thuật cho phép các mô hình ngôn ngữ lớn (LLM) truy xuất và kết hợp thông tin mới. Với RAG, các LLM không trả lời truy vấn của người dùng ngay lập tức. Thay vào đó, chúng sẽ tham khảo một bộ tài liệu được chỉ định trước. Những tài liệu này bổ sung thông tin cho dữ liệu huấn luyện có sẵn của LLM. Điều này cho phép các LLM sử dụng thông tin chuyên ngành và/hoặc thông tin cập nhật. Đây là những thông tin không có trong dữ liệu huấn luyện. Ví dụ, kỹ thuật này giúp các chatbot dựa trên LLM truy cập dữ liệu nội bộ của công ty. Nó cũng giúp tạo ra các phản hồi dựa trên những nguồn đáng tin cậy.

RAG cải thiện các mô hình ngôn ngữ lớn (LLM) bằng cách tích hợp cơ chế truy xuất thông tin trước khi tạo ra phản hồi. Không giống như các LLM truyền thống chỉ dựa vào dữ liệu huấn luyện tĩnh, RAG lấy văn bản có liên quan từ cơ sở dữ liệu, tài liệu được tải lên, hoặc các nguồn trên web. Theo *Ars Technica*, "RAG là một cách để cải thiện hiệu suất của LLM. Về cơ bản, nó kết hợp quy trình của LLM với quy trình tìm kiếm trên web hoặc tra cứu tài liệu khác để giúp LLM bám sát vào sự thật." Phương pháp này giúp giảm thiểu hiện tượng ảo giác của AI, hiện tượng này đã khiến các chatbot mô tả những chính sách không tồn tại, hoặc đề xuất các vụ án không có thật cho luật sư đang tìm kiếm án lệ để hỗ trợ cho lập luận của họ.

RAG cũng làm giảm nhu cầu huấn luyện lại các LLM bằng dữ liệu mới. Điều này giúp tiết kiệm chi phí tính toán và tài chính. Ngoài việc tăng hiệu quả, RAG còn cho phép các LLM trích dẫn nguồn trong câu trả lời. Nhờ đó, người dùng có thể xác minh các nguồn được trích dẫn. Điều này mang lại sự minh bạch cao hơn, vì người dùng có thể kiểm tra chéo nội dung được truy xuất để đảm bảo tính chính xác và phù hợp.

Thuật ngữ RAG lần đầu tiên được giới thiệu trong một bài báo nghiên cứu năm 2020 của Meta.

## RAG và các hạn chế của LLM
Các LLM có thể cung cấp thông tin không chính xác. Ví dụ, khi Google lần đầu tiên trình diễn công cụ LLM của mình là "Google Bard", mô hình này đã đưa ra thông tin sai về Kính thiên văn Không gian James Webb. Sai sót này đã góp phần làm giá trị cổ phiếu của công ty giảm 100 tỷ đô la. RAG được sử dụng để ngăn chặn những lỗi này, nhưng nó không giải quyết được tất cả các vấn đề. Ví dụ, các LLM có thể tạo ra thông tin sai lệch ngay cả khi lấy dữ liệu từ các nguồn chính xác, nếu chúng diễn giải sai ngữ cảnh. Tạp chí *[[MIT Technology Review]]* đưa ra ví dụ về một phản hồi do AI tạo ra, nói rằng, "Hoa Kỳ đã có một tổng thống Hồi giáo, Barack Hussein Obama." Mô hình đã truy xuất thông tin này từ một cuốn sách học thuật có tựa đề tu từ là *Barack Hussein Obama: Tổng thống Hồi giáo đầu tiên của nước Mỹ?* LLM đã không "biết" hoặc "hiểu" ngữ cảnh của tiêu đề, do đó đã tạo ra một tuyên bố sai sự thật.

Các LLM tích hợp RAG được lập trình để ưu tiên thông tin mới. Kỹ thuật này được gọi là "nhồi nhét câu lệnh" (prompt stuffing). Nếu không có kỹ thuật nhồi nhét câu lệnh, đầu vào của LLM do người dùng tạo ra. Với kỹ thuật này, ngữ cảnh liên quan bổ sung được thêm vào đầu vào để định hướng cho phản hồi của mô hình. Cách tiếp cận này cung cấp cho LLM thông tin quan trọng ngay từ đầu trong câu lệnh. Điều này khuyến khích mô hình ưu tiên dữ liệu được cung cấp hơn là kiến thức có sẵn từ quá trình huấn luyện.

## Quy trình
Tạo sinh dựa trên truy xuất tăng cường (RAG) nâng cao các mô hình ngôn ngữ lớn (LLM) bằng cách tích hợp một cơ chế truy xuất thông tin. Cơ chế này cho phép các mô hình truy cập và sử dụng dữ liệu bổ sung ngoài bộ dữ liệu huấn luyện ban đầu. AWS cho biết, "RAG cho phép các LLM truy xuất thông tin liên quan từ các nguồn dữ liệu bên ngoài để tạo ra các phản hồi chính xác và phù hợp với ngữ cảnh hơn" ("lập chỉ mục"). Phương pháp này giảm sự phụ thuộc vào các bộ dữ liệu tĩnh, vốn có thể nhanh chóng trở nên lỗi thời. Khi người dùng gửi một truy vấn, RAG sử dụng một bộ truy xuất tài liệu để tìm kiếm nội dung liên quan từ các nguồn có sẵn, trước khi tích hợp thông tin truy xuất được vào phản hồi của mô hình ("truy xuất"). *Ars Technica* lưu ý rằng "khi có thông tin mới, thay vì phải huấn luyện lại mô hình, tất cả những gì cần làm là tăng cường cơ sở tri thức bên ngoài của mô hình bằng thông tin cập nhật" ("tăng cường"). Bằng cách tích hợp linh hoạt dữ liệu liên quan, RAG cho phép các LLM tạo ra các phản hồi có đầy đủ thông tin và có cơ sở ngữ cảnh hơn ("tạo sinh"). IBM tuyên bố rằng "trong giai đoạn tạo sinh, LLM lấy thông tin từ câu lệnh đã được tăng cường và từ biểu diễn nội tại của dữ liệu huấn luyện để tổng hợp một câu trả lời hấp dẫn, phù hợp với người dùng tại thời điểm đó.

### Các giai đoạn chính của RAG
#### Lập chỉ mục
Thông thường, dữ liệu cần tham chiếu được chuyển đổi thành các nhúng từ (embeddings) của LLM. Đây là các biểu diễn số học dưới dạng một không gian vectơ lớn. RAG có thể được sử dụng trên dữ liệu phi cấu trúc (thường là văn bản), bán cấu trúc, hoặc có cấu trúc (ví dụ: đồ thị tri thức). Các nhúng từ này sau đó được lưu trữ trong một cơ sở dữ liệu vectơ để cho phép truy xuất tài liệu.

#### Truy xuất
Khi có một truy vấn từ người dùng, một bộ truy xuất tài liệu sẽ được gọi đầu tiên. Nó sẽ chọn ra các tài liệu phù hợp nhất để sử dụng cho việc tăng cường truy vấn. Việc so sánh này có thể được thực hiện bằng nhiều phương pháp khác nhau. Các phương pháp này phụ thuộc một phần vào loại lập chỉ mục được sử dụng.

#### Tăng cường
Mô hình đưa thông tin liên quan đã truy xuất này vào LLM thông qua kỹ thuật tạo lệnh cho truy vấn gốc của người dùng. Các phiên bản mới hơn () cũng có thể tích hợp các mô-đun tăng cường cụ thể. Chúng có các khả năng như mở rộng truy vấn sang nhiều lĩnh vực, sử dụng bộ nhớ và tự cải thiện để học hỏi từ các lần truy xuất trước đó.

#### Tạo sinh
Cuối cùng, LLM có thể tạo ra đầu ra dựa trên cả truy vấn và các tài liệu đã được truy xuất. Một số mô hình tích hợp các bước bổ sung để cải thiện đầu ra. Các bước này bao gồm xếp hạng lại thông tin đã truy xuất, lựa chọn ngữ cảnh và tinh chỉnh.

## Cải tiến
Các cải tiến cho quy trình cơ bản nêu trên có thể được áp dụng ở các giai đoạn khác nhau trong luồng RAG.

### Bộ mã hóa
Các phương pháp này tập trung vào việc mã hóa văn bản thành các vectơ đặc hoặc thưa. Các vectơ thưa, mã hóa định danh của một từ, thường có độ dài bằng từ điển và chứa chủ yếu là các số không. Các vectơ đặc, mã hóa ý nghĩa, thì nhỏ gọn hơn và chứa ít số không hơn. Nhiều cải tiến khác nhau có thể cải thiện cách tính toán độ tương đồng trong các kho vectơ (cơ sở dữ liệu).

* Hiệu suất được cải thiện bằng cách tối ưu hóa cách tính độ tương đồng của vectơ. Tích vô hướng giúp nâng cao điểm tương đồng, trong khi tìm kiếm hàng xóm gần nhất xấp xỉ (ANN) cải thiện hiệu quả truy xuất so với tìm kiếm K hàng xóm gần nhất (KNN).
* Độ chính xác có thể được cải thiện bằng Tương tác muộn (Late Interactions), cho phép hệ thống so sánh các từ một cách chính xác hơn sau khi truy xuất. Điều này giúp tinh chỉnh xếp hạng tài liệu và cải thiện mức độ phù hợp của tìm kiếm.
* Các phương pháp vectơ lai (hybrid vector) có thể được sử dụng để kết hợp các biểu diễn vectơ đặc với các vectơ one-hot thưa. Cách này tận dụng hiệu quả tính toán của tích vô hướng thưa so với các phép toán trên vectơ đặc.
* Các kỹ thuật truy xuất khác tập trung vào việc cải thiện độ chính xác bằng cách tinh chỉnh cách chọn tài liệu. Một số phương pháp truy xuất kết hợp các biểu diễn thưa, chẳng hạn như SPLADE, với các chiến lược mở rộng truy vấn để cải thiện độ chính xác và độ phủ của tìm kiếm.

### Các phương pháp lấy bộ truy xuất làm trung tâm
Các phương pháp này nhằm mục đích nâng cao chất lượng truy xuất tài liệu trong cơ sở dữ liệu vectơ:

* Tiền huấn luyện bộ truy xuất bằng *Tác vụ Cloze đảo ngược* (Inverse Cloze Task - ICT). Đây là một kỹ thuật giúp mô hình học các mẫu truy xuất bằng cách dự đoán văn bản bị che trong tài liệu.
* Tăng cường dữ liệu lũy tiến, được sử dụng trong *Tăng cường đa dạng để truy xuất đặc tổng quát hóa* (Diverse Augmentation for Generalizable Dense Retrieval - DRAGON), cải thiện khả năng truy xuất đặc bằng cách lấy mẫu các ví dụ phủ định khó trong quá trình huấn luyện.
* Tối ưu hóa bộ truy xuất có giám sát giúp điều chỉnh xác suất truy xuất cho phù hợp với phân phối xác suất của mô hình tạo sinh. Quá trình này bao gồm việc truy xuất k-vectơ hàng đầu cho một câu lệnh nhất định, tính điểm độ bối rối (perplexity) của phản hồi được tạo ra, và giảm thiểu phân kỳ KL giữa các lựa chọn của bộ truy xuất và xác suất của mô hình để tinh chỉnh việc truy xuất.
* Các kỹ thuật xếp hạng lại (reranking) có thể tinh chỉnh hiệu suất của bộ truy xuất bằng cách ưu tiên các tài liệu được truy xuất phù hợp nhất trong quá trình huấn luyện.

### Mô hình ngôn ngữ

Bằng cách thiết kế lại mô hình ngôn ngữ có tính đến bộ truy xuất, một mạng nơ-ron nhỏ hơn 25 lần có thể đạt được độ bối rối tương đương với các mạng lớn hơn nhiều. Vì được huấn luyện từ đầu, phương pháp này (Retro) phải chịu chi phí huấn luyện cao mà sơ đồ RAG ban đầu đã tránh được. Giả thuyết đặt ra là bằng cách cung cấp kiến thức chuyên ngành trong quá trình huấn luyện, Retro cần ít tập trung hơn vào lĩnh vực đó và có thể dành nguồn tài nguyên trọng số nhỏ hơn của mình chỉ cho ngữ nghĩa ngôn ngữ. Mô hình ngôn ngữ được thiết kế lại được trình bày ở đây.

Có báo cáo cho rằng Retro không thể tái tạo được, vì vậy các sửa đổi đã được thực hiện để khắc phục điều này. Phiên bản dễ tái tạo hơn được gọi là Retro++ và bao gồm RAG trong ngữ cảnh (in-context RAG).

### Phân đoạn
Phân đoạn (Chunking) bao gồm các chiến lược khác nhau để chia nhỏ dữ liệu thành các vectơ. Điều này giúp bộ truy xuất có thể tìm thấy các chi tiết trong đó.

Ba loại chiến lược phân đoạn là:

* Độ dài cố định có chồng chéo. Cách này nhanh và dễ thực hiện. Việc chồng chéo các đoạn liên tiếp giúp duy trì ngữ cảnh ngữ nghĩa giữa các đoạn.
* Phân đoạn dựa trên cú pháp có thể chia tài liệu thành các câu. Các thư viện như spaCy hoặc NLTK cũng có thể hỗ trợ việc này.
* Phân đoạn dựa trên định dạng tệp. Một số loại tệp có các đoạn tự nhiên được tích hợp sẵn, và tốt nhất là nên tôn trọng chúng. Ví dụ, các tệp mã nguồn nên được phân đoạn và vector hóa dưới dạng toàn bộ hàm hoặc lớp. Các tệp HTML nên giữ nguyên các thẻ  hoặc các phần tử  được mã hóa base64. Cần có những cân nhắc tương tự đối với các tệp pdf. Các thư viện như Unstructured hoặc Langchain có thể hỗ trợ phương pháp này.

### Đồ thị tri thức
Thay vì sử dụng tài liệu làm nguồn để vector hóa và truy xuất, người ta có thể sử dụng Đồ thị tri thức (Knowledge Graphs). Người ta có thể bắt đầu với một bộ tài liệu, sách, hoặc các văn bản khác, và chuyển đổi chúng thành một đồ thị tri thức bằng một trong nhiều phương pháp, bao gồm cả việc sử dụng các mô hình ngôn ngữ. Khi đồ thị tri thức được tạo, các đồ thị con có thể được vector hóa, lưu trữ trong cơ sở dữ liệu vectơ, và được sử dụng để truy xuất như trong RAG thông thường. Ưu điểm ở đây là đồ thị có cấu trúc dễ nhận biết hơn so với các chuỗi văn bản. Cấu trúc này có thể giúp truy xuất các sự kiện phù hợp hơn cho việc tạo sinh. Đôi khi cách tiếp cận này được gọi là GraphRAG.

### Tìm kiếm kết hợp
Đôi khi, việc tìm kiếm trong cơ sở dữ liệu vectơ có thể bỏ sót những thông tin quan trọng cần thiết để trả lời câu hỏi của người dùng. Một cách để giảm thiểu điều này là thực hiện tìm kiếm văn bản truyền thống. Sau đó, kết quả tìm kiếm này được thêm vào các đoạn văn bản được liên kết với các vectơ đã truy xuất từ tìm kiếm vectơ. Cuối cùng, văn bản kết hợp lai này được đưa vào mô hình ngôn ngữ để tạo sinh.

### Đánh giá và Tiêu chuẩn
Các hệ thống RAG thường được đánh giá bằng các bộ tiêu chuẩn (benchmarks) được thiết kế để kiểm tra cả độ chính xác của việc truy xuất và chất lượng của việc tạo sinh. Các bộ dữ liệu phổ biến bao gồm BEIR, một bộ các tác vụ truy xuất thông tin trên nhiều lĩnh vực khác nhau, và Natural Questions hoặc Google QA cho việc hỏi đáp miền mở (open-domain QA).

Trong các lĩnh vực có yêu cầu cao như luật pháp và y tế, các bộ tiêu chuẩn dành riêng cho từng lĩnh vực ngày càng được sử dụng nhiều hơn. Ví dụ, LegalBench-RAG là một bộ tiêu chuẩn mã nguồn mở được thiết kế để kiểm tra chất lượng truy xuất trên các tài liệu pháp lý. Nó đánh giá độ phủ (recall) và độ chính xác (precision) cho các quy trình RAG khác nhau bằng cách sử dụng các câu hỏi và tài liệu pháp lý trong thực tế.

## Thách thức
RAG không phải là giải pháp hoàn chỉnh cho vấn đề ảo giác ở các LLM. Theo *Ars Technica*, "Nó không phải là một giải pháp trực tiếp vì LLM vẫn có thể tạo ra ảo giác xung quanh tài liệu nguồn trong phản hồi của mình."

Mặc dù RAG cải thiện độ chính xác của các mô hình ngôn ngữ lớn (LLM), nó không loại bỏ được tất cả các thách thức. Một hạn chế là dù RAG làm giảm nhu cầu huấn luyện lại mô hình thường xuyên, nó không loại bỏ hoàn toàn nhu cầu này. Ngoài ra, các LLM có thể gặp khó khăn trong việc nhận ra khi nào chúng không có đủ thông tin để đưa ra một câu trả lời đáng tin cậy. Nếu không được huấn luyện cụ thể, các mô hình có thể tạo ra câu trả lời ngay cả khi chúng nên thể hiện sự không chắc chắn. Theo IBM, vấn đề này có thể phát sinh khi mô hình thiếu khả năng tự đánh giá giới hạn kiến thức của chính nó.

Các hệ thống RAG có thể truy xuất các nguồn thông tin đúng sự thật nhưng lại gây hiểu lầm, dẫn đến sai sót trong việc diễn giải. Trong một số trường hợp, một LLM có thể trích xuất các phát biểu từ một nguồn mà không xem xét ngữ cảnh của nó, dẫn đến một kết luận không chính xác. Thêm vào đó, khi đối mặt với thông tin mâu thuẫn, các mô hình RAG có thể gặp khó khăn trong việc xác định nguồn nào là chính xác. Chúng có thể kết hợp các chi tiết từ nhiều nguồn, tạo ra các phản hồi trộn lẫn thông tin lỗi thời và cập nhật một cách gây hiểu lầm. Theo tạp chí *[[MIT Technology Review]]*, những vấn đề này xảy ra vì các hệ thống RAG có thể diễn giải sai dữ liệu mà chúng truy xuất.

## Tham khảo