Hướng dẫn dùng Cross-Encoder để loại bỏ thông tin nhiễu khi xây context

Đỗ Minh Đức Đỗ Minh Đức
Chia sẻ bài viết

Nếu bạn từng triển khai hệ thống RAG hay xây dựng context cho mô hình ngôn ngữ lớn, chắc chắn đã gặp tình huống dữ liệu trả về từ cơ sở vector có rất nhiều đoạn nghe có vẻ gần gũi nhưng thực ra không liên quan. Đó chính là thông tin nhiễu. Bài viết này sẽ hướng dẫn cách áp dụng Cross-Encoder để sắp xếp lại và lọc ra những kết quả thật sự liên quan, giúp context gọn nhẹ, chính xác và hữu ích hơn cho mô hình.

Vì sao cần loại bỏ thông tin nhiễu khi xây context?

Trong pipeline của RAG, luồng xử lý cơ bản thường là:

Người dùng đặt câu hỏi → Truy vấn embedding → Tìm kiếm trong cơ sở vector → Lấy top-k đoạn văn → Xây dựng context → Đưa vào mô hình.

Nghe có vẻ trơn tru, nhưng thực tế kết quả trả về không phải lúc nào cũng chuẩn. Cơ sở vector chỉ so sánh độ gần trong không gian embedding, chứ chưa thật sự hiểu nội dung sâu sắc. Kết quả là bạn nhận được nhiều đoạn gần giống nhưng chẳng mấy liên quan. Điều này dẫn đến một loạt vấn đề:

  • Context dài, thừa chữ, dễ vượt quá giới hạn token.
  • Mô hình bị nhiễu, trả lời lạc đề hoặc thiếu chính xác.
  • Tốn thêm chi phí xử lý vì phải gánh cả những đoạn văn không cần thiết.

Cross-Encoder và vai trò trong việc lọc kết quả

Bi-Encoder vốn quen thuộc trong vector search, nhưng nó chỉ mã hoá truy vấn và tài liệu riêng rẽ, sau đó so sánh điểm gần nhau. Tốc độ nhanh, nhưng độ chính xác có giới hạn.

Cross-Encoder thì khác. Nó nhận cả truy vấn và đoạn văn cùng lúc, tính toán trực tiếp mức độ liên quan. Điều này giống như một người đọc cả câu hỏi lẫn đoạn văn, rồi mới quyết định xem chúng có thực sự liên quan không. Nhờ vậy, kết quả sắp xếp lại chính xác hơn nhiều. Trong thực tế, dev thường kết hợp cả hai:

  • Dùng Bi-Encoder để tìm nhanh top-50.
  • Sau đó dùng Cross-Encoder để sắp xếp lại, chọn ra top-5 đoạn chuẩn nhất.

Cách làm này vừa tiết kiệm, vừa hiệu quả.

Pipeline tích hợp Cross-Encoder

Quy trình cơ bản sẽ có các bước sau:

  1. Nhận câu hỏi từ người dùng, mã hoá bằng Bi-Encoder và tìm kiếm trong cơ sở vector để lấy top-k kết quả.
  2. Dùng Cross-Encoder tính điểm liên quan cho từng cặp truy vấn – đoạn văn.
  3. Sắp xếp lại các kết quả dựa trên điểm số, chọn ra một số ít đoạn có liên quan cao nhất.
  4. Ghép các đoạn này thành context cuối cùng để đưa vào mô hình AI sinh câu trả lời.

Ví dụ code đơn giản trong Python:

from sentence_transformers import CrossEncoder
model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')

pairs = [(query, doc) for doc in retrieved_docs]
scores = model.predict(pairs)
ranked = sorted(zip(retrieved_docs, scores), key=lambda x: x[1], reverse=True)
final_context = [doc for doc, score in ranked[:5]]

Lợi ích khi áp dụng Cross-Encoder

  • Context gọn hơn, tập trung đúng ý, không kéo theo đoạn lạc đề.
  • Mô hình sinh câu trả lời chính xác và mạch lạc hơn.
  • Giảm số lượng token, tiết kiệm chi phí xử lý.
  • Có thể điều chỉnh linh hoạt số lượng kết quả giữ lại để cân bằng giữa tốc độ và chất lượng.

Lưu ý quan trọng cho dev

  • Cross-Encoder tiêu tốn tài nguyên, nên chỉ dùng để sắp xếp lại một tập nhỏ, không áp dụng cho toàn bộ dữ liệu.
  • Nên triển khai thành một dịch vụ riêng để dễ quản lý và mở rộng.
  • Hãy dùng cache cho các truy vấn lặp lại nhiều lần để giảm tải.
  • Ghi log cả kết quả trước và sau khi lọc để tiện theo dõi và debug.

Kết luận

Loại bỏ thông tin nhiễu khi xây context là bước quan trọng giúp hệ thống RAG hoạt động ổn định và mang lại kết quả tin cậy. Cross-Encoder chính là công cụ lọc tinh, đảm bảo chỉ những đoạn liên quan nhất được đưa vào mô hình. Kết hợp Bi-Encoder để tìm nhanh và Cross-Encoder để sắp xếp lại, dev có thể xây dựng pipeline vừa nhanh, vừa chính xác, vừa tiết kiệm chi phí.
 

Đỗ Minh Đức
Tác giả
Đỗ Minh Đức
Giám đốc sản phẩm BizChat AI

Với gần 20 năm kinh nghiệm trong ngành công nghệ, Đỗ Minh Đức hiện là Giám đốc Sản phẩm Bizfly Martech tại VCCorp. Anh được biết đến là một trong bốn người đặt nền móng cho BizChatAI, giải pháp ứng dụng trí tuệ nhân tạo để chăm sóc khách hàng tự động đa kênh.

Anh tập trung phát triển BizChatAI như một "trợ lý ảo" cho doanh nghiệp, giúp tự động hóa việc tương tác và CSKH. Công nghệ này đang thay đổi mạnh mẽ cách doanh nghiệp tiếp cận khách hàng, từ việc gửi tin nhắn, quà tri ân tự động đến ứng dụng hiệu quả cho các chuỗi bán lẻ và nhà hàng... Qua các bài viết của mình, anh chia sẻ sâu hơn về những lợi ích và cách thức hoạt động của chatbot trong kinh doanh.

Bài viết nổi bật

Mời bạn trải nghiệm AI Chat Agent - Trợ lý ảo tư vấn khách hàng của Bizfly

Trong thời đại mà khách hàng mong muốn được phản hồi ngay lập tức, việc để họ phải chờ vài phút cũng có thể khiến doanh nghiệp đánh mất cơ hội. Đó là lý do Bizfly phát triển AI Chat Agent - trợ lý ảo có khả năng tư vấn, giải đáp.....