Hybrid Search trong RAG: Kết hợp BM25 (Full-text) và Vector Dense Embedding
Điểm mù chết người của Vector Search thuần túy Rất nhiều hệ thống RAG chỉ sử dụng tìm kiếm tương đồng vector Cosine Similarity. Tuy nhiên, Vector Search thường thất bại trong các trường hợp: - Tìm ki…
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Điểm mù chết người của Vector Search thuần túy#
Rất nhiều hệ thống RAG chỉ sử dụng tìm kiếm tương đồng vector (Cosine Similarity). Tuy nhiên, Vector Search thường thất bại trong các trường hợp:
- Tìm kiếm chính xác mã sản phẩm, mã lỗi (ví dụ:
ERR_404_PG_CONN). - Tìm kiếm tên riêng, từ viết tắt nội bộ của công ty.
- Các con số chính xác (ví dụ: "Doanh thu quý 3 năm 2024").
Để khắc phục điểm mù này, giải pháp tiêu chuẩn công nghiệp hiện nay là Hybrid Search kết hợp giữa Keyword Search (BM25) và Vector Search (Dense Embedding).
Cơ chế hoạt động của Reciprocal Rank Fusion (RRF)#
Thuật toán RRF lấy kết quả xếp hạng từ 2 công cụ tìm kiếm và tính toán lại điểm số chung:
def reciprocal_rank_fusion(results_bm25, results_vector, k=60):
rrf_scores = {}
# 1. Tính điểm từ kết quả BM25
for rank, doc in enumerate(results_bm25):
doc_id = doc.id
rrf_scores[doc_id] = rrf_scores.get(doc_id, 0) + 1.0 / (k + rank + 1)
# 2. Cộng dồn điểm từ kết quả Vector Search
for rank, doc in enumerate(results_vector):
doc_id = doc.id
rrf_scores[doc_id] = rrf_scores.get(doc_id, 0) + 1.0 / (k + rank + 1)
# 3. Sắp xếp lại theo điểm tổng hợp cao nhất
sorted_docs = sorted(rrf_scores.items(), key=lambda x: x[1], reverse=True)
return sorted_docs
Kết quả cải thiện đo lường được#
- Tỉ lệ tìm chính xác mã lỗi kỹ thuật tăng từ 34% lên 96%.
- Tỉ lệ trúng tài liệu liên quan cho các câu hỏi tổng quát duy trì ở mức 91%.
- Không làm tăng đáng kể độ trễ nếu database hỗ trợ sẵn hybrid search (như Elasticsearch, Qdrant hoặc PostgreSQL với pg_trgm + pgvector).
Góc thảo luận#
Hệ thống tìm kiếm của bạn đang dùng cơ chế nào? Bạn đã thử nghiệm tính năng Hybrid Search của Qdrant hoặc PostgreSQL chưa?
Xem thêm nội dung liên quan:
Thảo luận
1 phản hồi
Tham gia thảo luận
Bài liên quan trong #AI & Trợ lý lập trình
-
Lập trình viên có bị thay thế bởi AI không? 5 kỹ năng bắt buộc phải nâng cấp trong 2 năm tới
Hoàng Nam (Tech Lead) · 💬 1 -
Áp dụng Model Context Protocol (MCP) của Anthropic để kết nối AI với Postgres và Docker
Hoàng Nam (Tech Lead) · 💬 1 -
So sánh mô hình Embedding đa ngữ: OpenAI text-embedding-3 vs BGE-M3 vs Cohere
Minh Trí (AI Engineer) · 💬 1 -
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Cấu hình Rate Limiting ở tầng Nginx và API Gateway: Chống DDOS Layer 7 hiệu quả
Đức Huy (DevOps Specialist) · 💬 1