Dense Retrieval — Bi-encoder biến query và doc thành vector, tìm bằng cosine
Tại sao tìm kiếm từ khóa 'start car' bỏ lỡ tài liệu về 'vehicle ignition'? Dense Retrieval dùng bi-encoder để biến text thành vector ngữ nghĩa, giải quyết lexical mismatch bằng cosine similarity trong không gian embedding.
Bạn từng gõ "cách khởi động xe hơi" vào ô tìm kiếm nhưng bỏ lỡ đúng đoạn tài liệu viết "vehicle ignition procedures" chưa? Đó là lexical mismatch — khoảng cách giữa cách người dùng diễn đạt và cách tài liệu được viết. Dense Retrieval chính là giải pháp khiến máy tính hiểu ý nghĩa thay vì chỉ ghép chữ.
Vấn đề
Traditional search (BM25, TF-IDF) hoạt động như thủ thư tra từ khóa: nó đếm số lần từ xuất hiện và đánh trọng số theo tần suất. Cách này chết dở khi gặp:
- Synonymy: "Bắt đầu xe" và "khởi động ô tô" là một ý, nhưng BM25 thấy chúng như hai thực thể khác biệt.
- Paraphrase: "Làm thế nào để bật máy xe" vs "quy trình đánh lửa động cơ" — cùng nghĩa, khác từ vựng hoàn toàn.
- Conceptual search: Người dùng tìm "phương pháp tăng tốc database" nhưng tài liệu hay dùng "index optimization" — không có từ khóa chung nào overlap.
Vấn đề cốt lõi: BM25 là word-matching, không phải meaning-matching. Nó thiếu khả năng nắm bắt semantic similarity — mối liên hệ ngữ nghĩa giữa các cụm từ khác nhau.
Ý tưởng cốt lõi
Dense Retrieval biến search thành "tra tọa độ trên bản đồ ngữ nghĩa" thay vì "so khớp từ khóa".
Thay vì lưu trữ text dưới dạng chuỗi ký tự, dense retrieval dùng bi-encoder — hai mạng neural (thường là BERT-based) — để nén query và document thành các vector dày đặc (dense vectors, thường 768 hoặc 1024 chiều). Khoảng cách góc (cosine similarity) giữa hai vector chính là độ liên quan ngữ nghĩa.
Đây là lossy compression protocol: mỗi document bị nén thành "semantic hash" cố định, đánh đổi độ chính xác tuyệt đối để lấy 1000× speedup qua pre-computed index và matrix multiplication.
Cơ chế "aha moment":
- Dual-encoder architecture: Query encoder và document encoder (thường share weights) chiếu text vào cùng không gian embedding .
- Semantic geometry: Training contrastive loss kéo giãn không gian như tấm cao su — các concept liên quan bị ép gần nhau, không liên quan bị đẩy xa.
- Approximate Nearest Neighbor (ANN): Thay vì so sánh query với triệu document một cách tuần tự (O(N)), FAISS/HNSW cho phép tìm neighbor gần nhất trong sub-linear time (O(log N) hoặc O(1) với hash).
That's it. Không cần parse syntax, không cần inverted index. Chỉ là: vector hóa → tìm láng giềng gần nhất.
Tại sao nó hoạt động
Dot product là "đo góc đồng hướng": Khi tính , bạn đo mức độ alignment giữa hai vector. Nếu "medical" và "healthcare" là đồng nghĩa, training ép chúng trỏ cùng hướng (high cosine similarity), bất kể từ surface form khác nhau.
Hard negatives là chìa khóa: Model chỉ học được phân biệt tinh tế khi bị ép phân biệt giữa "gần đúng" và "chính xác". Contrastive learning dùng in-batch negatives và curated hard negatives để tạo margin rõ ràng trong không gian vector.
Tại sao ANN chấp nhận được: Trong retrieval, bạn không cần tìm đúng document duy nhất — bạn cần đừng bỏ lỡ thứ gì tốt. Approximate search với recall@100 > 95% là đủ, vì stage tiếp theo (cross-encoder reranking) sẽ tinh chỉnh precision.
Ý nghĩa thực tế
So sánh với lexical search:
| Đặc điểm | BM25/TF-IDF | Dense Retrieval |
|---|---|---|
| Matching | Exact keyword | Semantic meaning |
| Synonymy | Fail (cần query expansion) | Handle tự nhiên |
| Speed | Fast (inverted index) | Fast (ANN index) |
| Domain shift | Robust | Cần fine-tuning nếu out-of-domain |
| Interpretability | High (xem được từ khóa) | Low (black box vectors) |
| Memory | Nhỏ (chỉ lưu term index) | Lớn (float32 vectors ~4 bytes/dim) |
Benchmarks thực tế:
- DPR (Dense Passage Retrieval) đạt 79.4% Top-20 accuracy trên Natural Questions, vượt trội so với BM25 (59.1%).
- Hybrid retrieval (dense + BM25) thường tăng 10–30% trên BEIR benchmark.
- LTRe framework cho phép training nhanh hơn 170× nhờ cached document indices.
Ai đang dùng:
- OpenAI (
text-embedding-ada-002/3), Cohere Embed, Google (two-tower models) cho search sản phẩm. - RAG systems: Pinecone, Weaviate, Milvus làm vector database backend.
- Late-interaction models như ColBERTv2 (kết hợp sparse và dense).
Limitations — những gì technique này KHÔNG giải quyết:
- Domain sensitivity: Embedding trained trên Wikipedia sụp đổ khi đưa vào legal/medical domain chuyên sâu nếu không fine-tune.
- Index staleness: Thay đổi model = phải re-encode toàn bộ corpus (đắt ở billion-scale).
- Lexical blind spots: Tên riêng, mã số, ID codes (rare tokens) thường bị miss vì embedding học từ ngữ nghĩa, không phải ký tự.
- Memory cost: 100M documents × 768-dim × 4 bytes ≈ 300GB FP32 (mitigated bằng quantization xuống INT8/INT4).
Đào sâu hơn
Paper gốc:
- Dense Passage Retrieval for Open-Domain Question Answering (Karpukhin et al., 2020) — Nền tảng bi-encoder cho QA.
- Approximate Nearest Neighbor Negative Contrastive Learning (Zhan et al., 2020) — LTRe framework tối ưu training.
Cùng cụm (RAG & Retrieval):
- RAG — Tìm trước, generate sau — Pipeline end-to-end kết hợp retrieval và generation.
- Cross-Encoder & Reranking — Precision stage sau dense retrieval (recall rẻ trước, precision đắt sau).
- Vector Databases — FAISS, HNSW và mechanics của ANN search.
Đọc tiếp:
- Word Embeddings — Nền tảng không gian vector cho ngôn ngữ (cần hiểu để nắm dense retrieval).
- Multi-Agent (Level 2) — Hệ thống agent phức tạp thường dùng dense retrieval để truy xuất tool/knowledge.
RAG — Tìm trước, generate sau, model biết cả điều chưa được train
RAG (Retrieval-Augmented Generation) giải quyết triệu chứng 'ảo giác' của LLM bằng cách truy xuất thông tin từ bộ nhớ ngoài trước khi sinh câu trả lời, giúp AI luôn cập nhật và trích dẫn nguồn chính xác.
Cross-Encoder & Reranking — Recall rẻ trước, precision đắt sau
Giải thích two-stage retrieval pipeline: dùng bi-encoder rẻ tiền để lấy rộng top-1000, cross-encoder đắt đỏ để chọn lọc top-10 chính xác.