Retrieval (bi-encoder) embed query và docs độc lập rồi so cosine → nhanh (có thể scale tới hàng triệu docs) nhưng độ chính xác hạn chế vì không "nhìn" query và doc cùng nhau.
Re-ranking (cross-encoder) đưa cặp (query, doc) vào model để chấm điểm relevance trực tiếp → chính xác hơn nhiều nhưng chậm (phải chạy một forward pass cho mỗi cặp, không cache được như embedding).
Giải pháp: two-stage retrieval — bi-encoder retrieve top-K (K=50-100) nhanh → cross-encoder rerank giữ top-N (N=3-10) chất lượng cao. Chi phí chỉ chạy trên K thay vì toàn bộ corpus.
Khi nên dùng:
- Chất lượng top-5 quan trọng (Q&A, customer support).
- Domain phức tạp, nhiều nội dung gần giống.
- Corpus lớn nên retrieval gọi top-K rộng để đảm bảo recall.
Khi KHÔNG cần: corpus nhỏ, latency rất ngặt, hoặc query đơn giản.
Model phổ biến: Cohere Rerank v3, BGE reranker (baai/bge-reranker-large, v2-m3), Jina Reranker, ColBERTv2 (late-interaction, cân bằng tốc độ & chất lượng). Benchmark cải thiện NDCG@10 thường 10-25% so với chỉ dùng bi-encoder.