Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 4 — Re-ranking và index freshness: nâng precision, giữ dữ liệu tươi

Đã đọc 0/10 mục · còn khoảng 4 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Bài 3 giúp bạn đẩy recall lên. Nhưng recall cao mà đưa quá nhiều nhiễu vào context sẽ hại generation. Bài này giải hai vấn đề: xếp hạng lại (re-ranking) để chọn tinh, và giữ index luôn mới (freshness) để không trả lời bằng dữ liệu cũ.

Re-ranking — hai tầng để vừa rộng vừa tinh

Ý tưởng: retrieve rộng, re-rank tinh.

  • Tầng 1 — Retrieve (recall-first): dùng vector/hybrid search lấy nhanh top-N lớn (ví dụ 50 chunk). Mục tiêu: đảm bảo chunk đúng nằm đâu đó trong 50 cái này (recall cao).
  • Tầng 2 — Re-rank (precision-first): một cross-encoder / reranker đọc kỹ từng cặp (câu hỏi, chunk) và chấm điểm liên quan chính xác hơn, rồi chọn ra top-k nhỏ (ví dụ 5) để đưa vào context.
Vì sao re-rank mạnh hơn retrieval thuần: retrieval dùng embedding được tính trước, độc lập với câu hỏi; reranker nhìn câu hỏi và chunk cùng lúc nên đánh giá sự liên quan tinh vi hơn. Nhược điểm: chậm và tốn hơn — nên chỉ áp lên top-N đã lọc, không áp lên toàn corpus.

Ví dụ

Câu hỏi: "Chính sách hoàn tiền cho đơn hàng quốc tế?" Vector search trả về 50 chunk, trong đó có cả "hoàn tiền nội địa" (gần về ý nghĩa nhưng sai ngữ cảnh). Reranker đọc kỹ, đẩy chunk "hoàn tiền quốc tế" lên #1 và dìm chunk nội địa xuống. Kết quả: context sạch hơn, câu trả lời đúng hơn, ít token hơn.

Khi nào cần reranker

  • Khi recall@N cao nhưng recall@k (k nhỏ) thấp → tức chunk đúng có trong danh sách nhưng bị xếp hạng thấp. Đây là dấu hiệu kinh điển cần reranker.
  • Khi context bị nhiễu làm mô hình lạc hướng.
  • Cân nhắc chi phí/độ trễ: reranker thêm một chặng inference. Với sản phẩm cần độ trễ thấp, đo kỹ trade-off.

Index freshness — dữ liệu tươi hay ôi

Một sản phẩm RAG trả lời bằng những gì có trong index. Nếu index cũ, câu trả lời sẽ đúng cú pháp nhưng sai sự thật.

Các khía cạnh freshness

  • Độ trễ cập nhật (indexing lag): từ lúc tài liệu thay đổi đến lúc vào index mất bao lâu? Chính sách giá đổi hôm nay mà index cập nhật sau 1 tuần là thảm họa cho chatbot bán hàng.
  • Xóa/ẩn tài liệu hết hiệu lực: tài liệu bị thu hồi phải bị gỡ khỏi index, nếu không hệ thống trích dẫn nguồn đã chết.
  • Phiên bản hóa (versioning): khi tài liệu có nhiều phiên bản, đảm bảo truy hồi đúng bản hiện hành; giữ metadata ngày hiệu lực.
  • Re-index khi đổi mô hình embedding hoặc chiến lược chunking: nếu không, dữ liệu cũ và mới không đồng nhất.

Ví dụ

Bệnh viện dùng RAG tra phác đồ. Phác đồ cập nhật liều thuốc, nhưng bản cũ vẫn nằm trong index và không có metadata ngày. Reranker vô tình chọn bản cũ. Hệ thống trả liều sai — kèm citation trông rất đáng tin. Đây là rủi ro nghiêm trọng: freshness không chỉ là kỹ thuật, mà là an toàn.

Khung tư duy: retrieval là một pipeline có SLA

Coi retrieval như một dây chuyền có cam kết dịch vụ (SLA):

  • Recall SLA: recall@k tối thiểu chấp nhận được.
  • Freshness SLA: tài liệu mới phải vào index trong vòng X giờ.
  • Latency SLA: tổng thời gian retrieve + rerank + generate.

Checklist vận hành

  • [ ] Đo indexing lag thực tế, đặt ngưỡng cảnh báo.
  • [ ] Có quy trình gỡ tài liệu hết hiệu lực khỏi index.
  • [ ] Lưu metadata ngày hiệu lực / phiên bản cho mỗi chunk.
  • [ ] Thử reranker và đo delta recall@k, precision, độ trễ.
  • [ ] Kiểm tra định kỳ: câu trả lời có đang trích nguồn còn hiệu lực không?

Sai lầm thường gặp

  • Thêm reranker trước khi biết vấn đề là ranking hay recall. Nếu chunk đúng còn chẳng có trong top-N, reranker vô dụng — hãy sửa retrieval trước.
  • Quên chuyện gỡ tài liệu cũ. Index chỉ biết thêm, không biết quên, cho đến khi có người dùng bị thông tin sai.
  • Không có metadata ngày/phiên bản, khiến hệ thống trộn lẫn bản cũ và mới.
  • Bỏ qua độ trễ của reranker, làm sản phẩm chậm đến mức người dùng bỏ đi.
  • Coi index là "làm một lần". Freshness là công việc liên tục, cần cron và giám sát.
Bài 5 sẽ chuyển sang chẩn đoán: khi câu trả lời sai, làm sao biết lỗi ở retrieval hay ở generation — và làm citation trung thực.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi