Một bản mẫu RAG của một nhà phát triển đã từ chối trả lời bất kỳ truy vấn nào có độ tương đồng cosine dưới 0,50. Nó hoạt động hoàn hảo—cho đến khi mô hình embedding được thay đổi. Sau đó, lớp bảo vệ đã để lọt các câu trả lời sai một cách âm thầm. Sự cố này chứng minh rằng một ngưỡng tương đồng được mã hóa cứng (hard-coded) có thể bị sụp đổ khi thay đổi mô hình, một rủi ro đe dọa bất kỳ hệ thống nào dựa vào độ tương đồng embedding để kiểm tra tính an toàn.
Tại sao ngưỡng này lại quan trọng
Các đường ống (pipeline) RAG thường sử dụng một lớp bảo vệ tương đồng (similarity guard): nếu độ tương đồng cosine giữa một truy vấn và tài liệu gần nhất của nó thấp hơn một con số được thiết lập sẵn, hệ thống sẽ hủy bỏ câu trả lời. Lớp bảo vệ này giúp ngăn mô hình gặp hiện tượng ảo giác (hallucination) khi ngữ cảnh truy xuất được quá yếu. Trong thiết lập ban đầu, ngưỡng 0,50 giúp hệ thống hoạt động trung thực—các truy vấn không thể trả lời sẽ có điểm dưới ngưỡng, còn các truy vấn có thể trả lời sẽ nằm trên ngưỡng đó.
Khi backend embedding thay đổi, mức cắt 0,50 tương tự không còn phân tách được hai nhóm này nữa. Pipeline bắt đầu trả về các phản hồi đầy tự tin nhưng sai lệch mà không hề gặp lỗi hay thông báo lỗi rõ ràng nào. Sự thất bại này đã vượt qua các chỉ số xếp hạng tiêu chuẩn và chỉ lộ ra khi con người nhận thấy sự sai lệch.
Hình học không mang tính phổ quát
Mỗi mô hình embedding ánh xạ ngôn ngữ vào một không gian cao chiều với cấu trúc hình học riêng. Do đó, các giá trị tương đồng cosine có ý nghĩa khác nhau tùy thuộc vào từng mô hình. Một mức điểm 0,50 có thể nằm ở ranh giới của một khoảng cách rõ rệt đối với mô hình này, nhưng lại nằm sâu trong vùng chồng lấn đối với mô hình khác.
- Voyage-3 – đường 0,50 nằm giữa các truy vấn không thể trả lời có điểm thấp và các truy vấn có thể trả lời có điểm cao. Lớp bảo vệ hoạt động đúng như dự kiến.
- BGE-Small – nhiều truy vấn không thể trả lời có điểm trên 0,50, vì vậy lớp bảo vệ không bao giờ kích hoạt. Việc nâng mức cắt lên 0,70 sẽ khôi phục lại biên độ an toàn.
- Hashing-64 – điểm số của các truy vấn có thể trả lời và không thể trả lời trộn lẫn chặt chẽ đến mức không có một ngưỡng duy nhất nào có thể phân tách chúng; mô hình này quá yếu để có thể hỗ trợ một lớp bảo vệ tương đồng.
Những trường hợp này minh họa một sự thật rộng lớn hơn: một ngưỡng thuộc về một cặp mô hình-dữ liệu cụ thể, chứ không phải là một quy tắc phổ quát.
Cái giá tiềm ẩn của một hằng số
Ngưỡng tương đồng xuất hiện trong nhiều tác vụ hạ nguồn (downstream tasks):
- bộ nhớ đệm ngữ nghĩa (semantic caching)
- phát hiện trùng lặp (duplicate detection)
- kiểm tra mức độ liên quan của tài liệu (document relevance checks)
- khớp thực thể (entity matching)
Việc sử dụng một giá trị hằng số giả định rằng tất cả các mô hình embedding đều chia sẻ cùng một phân phối điểm số—một giả định nguy hiểm. Khi giả định này sai, các hệ thống sẽ âm thầm tạo ra các đầu ra có vẻ tự tin nhưng sai lệch, làm xói mòn lòng tin của người dùng và cung cấp dữ liệu sai lệch cho các quyết định hạ nguồn.
Hiệu chuẩn lớp bảo vệ cho từng mô hình
Giải pháp rất đơn giản: đừng bao giờ triển khai một hằng số được mã hóa cứng. Hãy coi ngưỡng là một siêu tham số (hyper-parameter) cần phải được tinh chỉnh cho mỗi mô hình embedding mới.
- Tập hợp một bộ dữ liệu kiểm định (validation set) vừa phải, có gắn nhãn, bao gồm cả các truy vấn có thể trả lời và không thể trả lời.
- Tính toán độ tương đồng cosine cho từng cặp truy vấn-tài liệu bằng mô hình mục tiêu.
- Vẽ biểu đồ hai phân phối hoặc tính toán tỷ lệ tự tin sai (false-confident rate)—tỷ lệ các truy vấn không thể trả lời vượt quá ngưỡng ứng viên.
- Chọn giá trị tương đồng nhỏ nhất giúp giữ tỷ lệ tự tin sai dưới mức rủi ro có thể chấp nhận được.
Vì mục tiêu là ngăn chặn sự tự tin thái quá, các chỉ số xếp hạng truyền thống như mean reciprocal rank (MRR) là không đủ. Tỷ lệ tự tin sai đo lường trực tiếp chế độ thất bại của lớp bảo vệ.
Ý kiến phản biện: “Một số mô hình hoạt động tốt ngay lập tức”
Đúng là một số mô hình hoạt động ổn định, chẳng hạn như Voyage-3 trong ví dụ, tình cờ khớp với ngưỡng bảo vệ 0,50. Tuy nhiên, điều đó không đảm bảo sự ổn định trong tương lai. Việc cập nhật mô hình, tinh chỉnh (fine-tuning), hoặc thậm chí là sự thay đổi trong tập dữ liệu gốc (corpus) có thể làm thay đổi phân phối tương đồng, khiến lớp bảo vệ bị hỏng một lần nữa. Việc dựa vào một sự trùng hợp may mắn duy nhất sẽ dẫn đến sự chủ quan.
Những điều cần theo dõi tiếp theo
-
-
-
Bài học rút ra
Ngưỡng tương đồng không phải là một công tắc an toàn phổ quát; nó là một lớp bảo vệ đặc thù cho từng mô hình, cần phải được hiệu chuẩn mỗi khi bạn thay đổi backend embedding hoặc dữ liệu mà nó tiếp nhận. Việc phớt lờ sự thật này sẽ khiến các hệ thống RAG rơi vào tình trạng ảo giác âm thầm, làm mất đi mục đích cốt lõi của lớp bảo vệ. Con đường đáng tin cậy duy nhất là hiệu chuẩn hệ thống theo từng mô hình và giám sát liên tục tỷ lệ tự tin sai.
