混合检索
混合检索是一种检索技术,它并行运行稠密向量检索(语义)和稀疏关键词检索(BM25),然后将结果融合成单一的排序列表。它在一次查询中同时捕捉“语义相似”和“精确 token 匹配”。
混合检索是一种检索技术,它并行运行稠密向量检索(语义)和稀疏关键词检索(BM25),然后将结果融合成单一的排序列表。它在一次查询中同时捕捉“语义相似”和“精确 token 匹配”。
为什么重要
稠密向量检索擅长语义匹配(“实惠的笔记本电脑”≈“预算型笔记本”),但在产品代码、SKU 和专有名词等罕见 token 上会失效。关键词检索能精准命中确切 token,却会漏掉同义改写。混合检索两者兼得,Anthropic、OpenAI 和 Elastic 的生产级 RAG 系统都报告称,混合检索的表现持续优于任一单独方法,在真实世界的检索基准上通常带来 10–30% 的召回率提升。
工作原理
1. 双路检索:同一查询同时通过两个索引运行,即向量索引(稠密嵌入)和倒排索引(BM25 或 TF-IDF)。
2. 分数归一化:稠密分数和稀疏分数处于不同的量纲上。需要对它们进行归一化,可采用 min-max、z-score 或基于排名的方式。
3. 融合:将分数合并为单一排序。最常用的方法有:
- 倒数排名融合(RRF):
score = Σ 1/(k + rank_i),基于排名,无需调参,极其稳健。 - 加权求和:
α * dense + (1-α) * sparse,需要为每个领域调节 α。 - 学习式融合:用一个小模型为每个查询预测最优权重。
4. 可选的重排序:用一个 cross-encoder 对融合后的 top-k 候选重排序,以获得最终精度。
何时使用
领域特定词汇:医学代码、法律引文、零件编号。
混合查询类型:当用户既用自然语言又用精确字符串进行搜索时。
长尾召回很重要:BM25 仍能大放异彩的罕见查询。
仅靠向量得到零结果时:这往往是精确匹配的失败,混合检索可以修复它。
权衡取舍
延迟:两个索引意味着两次查询。可通过并行执行来缓解。
索引存储:你需要同时维护向量索引和倒排索引。
调参复杂度:加权融合需要带标注的数据来调节。RRF 则绕开了这一点。
并非总是更优:在嵌入表现非常强的领域(纯同义改写任务)中,仅用稠密检索即可与混合检索持平。
混合检索 vs 纯向量检索
| 维度 | 纯向量 | 混合 |
|---|---|---|
| 语义匹配 | 强 | 强 |
| 精确 token 匹配 | 弱 | 强 |
| 罕见 token、SKU | 弱 | 强 |
| 基础设施 | 简单 | 两个索引 |
| 典型召回提升 | 基准 | +10–30% |
现代向量数据库(Pinecone、Weaviate、Qdrant、Elasticsearch)都将混合检索作为一等功能提供,因此运维成本很低。
Sources: