- Để mô hình AI hữu ích trong một ngữ cảnh cụ thể, nó cần có khả năng truy cập kiến thức nền
- Các nhà phát triển thường օգտագործում Retrieval-Augmented Generation (RAG) để cải thiện kiến thức của mô hình AI
- Các giải pháp RAG truyền thống thường loại bỏ ngữ cảnh khi mã hóa thông tin, nên nhiều khi không thể truy xuất được thông tin liên quan
- Contextual Retrieval là một phương pháp cải thiện đáng kể giai đoạn truy xuất của RAG, sử dụng hai kỹ thuật con là Contextual Embeddings và Contextual BM25
- Phương pháp này có thể giảm tỷ lệ thất bại khi truy xuất xuống 49%, và khi kết hợp với reranking có thể giảm tới 67%
- Nhà phát triển có thể dễ dàng triển khai giải pháp Contextual Retrieval của riêng mình cùng với Claude
Lưu ý về việc dùng prompt dài
- Nếu knowledge base nhỏ hơn 200.000 token, có thể đưa toàn bộ knowledge base vào prompt cung cấp cho mô hình
- Gần đây Claude đã ra mắt prompt caching, giúp cách tiếp cận này nhanh hơn nhiều và hiệu quả hơn về chi phí
- Khi knowledge base lớn hơn, cần một giải pháp có khả năng mở rộng tốt hơn, và khi đó Contextual Retrieval là cần thiết
Cơ bản về RAG: mở rộng tới knowledge base lớn
- Với các knowledge base lớn hơn không vừa trong context window, giải pháp phổ biến là RAG
- RAG chia knowledge base thành các chunk văn bản nhỏ hơn, chuyển chúng thành vector embedding, rồi lưu vào cơ sở dữ liệu vector để có thể truy xuất theo độ tương đồng ngữ nghĩa
- Các mô hình embedding rất giỏi trong việc nắm bắt quan hệ ngữ nghĩa, nhưng có thể bỏ lỡ các kết quả khớp chính xác quan trọng
- BM25 là một hàm xếp hạng dùng lexical matching để tìm các từ hoặc cụm từ khớp chính xác, đặc biệt hiệu quả với các truy vấn chứa định danh duy nhất hoặc thuật ngữ kỹ thuật
- Các giải pháp RAG có thể truy xuất các chunk phù hợp nhất chính xác hơn bằng cách kết hợp embedding và BM25 theo các bước sau:
- Chia knowledge base ("corpus" tài liệu) thành các chunk văn bản nhỏ hơn, thường chỉ vài trăm token hoặc ít hơn
- Tạo mã hóa TF-IDF và embedding ngữ nghĩa cho các chunk này
- Dùng BM25 để tìm các chunk hàng đầu dựa trên khớp chính xác
- Dùng embedding để tìm các chunk hàng đầu dựa trên độ tương đồng ngữ nghĩa
- Kết hợp và loại bỏ trùng lặp kết quả từ (3) và (4) bằng kỹ thuật rank fusion
- Thêm top K chunk vào prompt để tạo câu trả lời
Giới thiệu Contextual Retrieval
- Trong RAG truyền thống, vì tài liệu bị chia thành các chunk nhỏ hơn nên từng chunk riêng lẻ có thể thiếu đủ ngữ cảnh
- Contextual Retrieval giải quyết vấn đề này bằng cách thêm ngữ cảnh mô tả riêng cho từng chunk ở phía trước mỗi chunk
- Claude hỗ trợ triển khai Contextual Retrieval bằng prompt yêu cầu cung cấp ngữ cảnh ngắn gọn cho từng chunk, mô tả chunk đó dựa trên ngữ cảnh của toàn bộ tài liệu
- Nhờ prompt caching, Contextual Retrieval có thể được sử dụng với Claude với chi phí thấp
Cải thiện hiệu năng
- Contextual Embeddings giảm 35% tỷ lệ thất bại khi truy xuất top 20 chunk (5,7% → 3,7%)
- Kết hợp Contextual Embeddings và Contextual BM25 giúp giảm 49% tỷ lệ thất bại (5,7% → 2,9%)
Những điểm cần cân nhắc khi triển khai
- Cân nhắc cách chia tài liệu thành các chunk
- Contextual Retrieval cải thiện hiệu năng với mọi mô hình embedding, nhưng một số mô hình có thể hưởng lợi nhiều hơn
- Prompt chung hoạt động tốt, nhưng có thể đạt kết quả tốt hơn với prompt tùy biến theo miền hoặc trường hợp sử dụng cụ thể
- Thêm nhiều chunk hơn vào context window sẽ làm tăng khả năng bao gồm thông tin liên quan
- Luôn chạy đánh giá để xác nhận rằng việc truyền các chunk đã được ngữ cảnh hóa và phân biệt giữa ngữ cảnh với chunk có thể cải thiện quá trình tạo phản hồi
Tiếp tục cải thiện hiệu năng bằng reranking
- Reranking là kỹ thuật lọc thường dùng để đảm bảo chỉ các chunk liên quan nhất mới được chuyển tới mô hình
- Thực hiện truy xuất ban đầu để lấy các chunk top đầu có khả năng liên quan
- Chuyển top N chunk cùng truy vấn của người dùng vào mô hình reranking
- Dùng mô hình reranking để chấm điểm từng chunk theo mức độ liên quan và tầm quan trọng với prompt, sau đó chọn top K chunk
- Chuyển top K chunk vào mô hình làm ngữ cảnh để tạo kết quả cuối cùng
- Contextual Embedding và Contextual BM25 sau reranking giúp giảm 67% tỷ lệ thất bại khi truy xuất top 20 chunk (5,7% → 1,9%)
- Các cân nhắc về chi phí và độ trễ
- Reranking có thể ảnh hưởng đến độ trễ và chi phí, đặc biệt khi phải sắp xếp lại số lượng lớn chunk
- Tồn tại sự đánh đổi giữa việc rerank nhiều chunk hơn để có hiệu năng tốt hơn và rerank ít hơn để giảm độ trễ và chi phí
Kết luận
- Họ đã thực hiện nhiều bài kiểm thử trên nhiều loại bộ dữ liệu khác nhau để so sánh nhiều tổ hợp kỹ thuật được mô tả ở trên (mô hình embedding, sử dụng BM25, sử dụng truy xuất theo ngữ cảnh, sử dụng reranking, tổng số kết quả top K được truy xuất)
- Kết quả như sau:
- Embedding + BM25 tốt hơn chỉ dùng embedding
- Trong các embedding được thử nghiệm, Voyage và Gemini cho kết quả tốt nhất
- Đưa top 20 chunk vào mô hình hiệu quả hơn so với chỉ đưa top 10 hoặc 5 chunk
- Thêm ngữ cảnh vào chunk giúp cải thiện đáng kể độ chính xác truy xuất
- Reranking tốt hơn không reranking
- Tất cả các lợi ích này đều cộng dồn: để tối đa hóa cải thiện hiệu năng, có thể kết hợp contextual BM25 và contextual embeddings (của Voyage hoặc Gemini) đã qua bước reranking, rồi thêm 20 chunk vào prompt
- Khuyến nghị mọi nhà phát triển làm việc với knowledge base hãy thử nghiệm cách tiếp cận này bằng cookbook được cung cấp để đạt tới mức hiệu năng mới
Chưa có bình luận nào.