向量检索 vs 关键词检索
1️⃣ 考察意图
面试官想看你是否真正理解检索系统在RAG中的核心地位,而非只会调库。考察类型是工程取舍+系统设计。刁钻点在于:很多人只会背“向量检索语义好,关键词检索精确”,但一问到何时必须放弃向量检索、混合检索的融合策略如何选型、延迟和成本如何权衡就露馅。答好了能展示你对检索整条链路的掌控力:从embedding模型选型、索引构建到在线融合策略,以及面对长尾查询的兜底能力。
2️⃣ 标准答
核心对比:原理与适用边界
- 关键词检索(BM25):基于倒排索引和TF-IDF变体。默认参数k1=1.5, b=0.75,核心是词频归一化和文档长度惩罚。优势:精确匹配,可解释性强,零延迟(毫秒级),对罕见实体(如产品ID、代码变量名)召回率极高。劣势:无法处理同义词(“汽车”搜不到“轿车”),对拼写错误鲁棒性差。
- 向量检索(如DPR/ColBERT-v2):将文本映射到dense embedding空间,用余弦相似度或内积检索。优势:语义匹配,能召回“苹果”和“水果”这类同义/相关表达。劣势:依赖领域embedding模型(通用模型在医疗/法律领域Recall@10可能掉20%+),索引构建成本高(百万级文档需数小时),且对高频词(stop words)敏感。
工程取舍:为什么不能无脑用向量检索
- 成本陷阱:向量检索的索引内存占用是关键词的10-100倍。1000万文档,BM25倒排索引约2GB,而768维float32向量索引(HNSW)需约30GB。在延迟敏感场景(<50ms),BM25是更安全的选择。
- 长尾查询:当查询包含专有名词(如“GPT-4o 128k上下文”),BM25的精确匹配能直接命中,而向量检索可能因embedding模型未见过该词而召回无关结果。实际落地中,混合检索(Hybrid Search) 是标配,而非二选一。
混合检索的三种融合策略
- RRF(Reciprocal Rank Fusion):对两个检索结果按排名倒数加权。公式:
score = 1/(k + rank),k默认60。优点:无需调参,对分数尺度不敏感。缺点:忽略分数绝对值,可能拉低高置信度结果。 - 线性加权:
score = α * vector_score + (1-α) * bm25_score。优点:可精细控制权重。缺点:需要归一化分数(如min-max或softmax),α需在验证集上调优(通常0.3-0.7)。 - RAG-Fusion(基于RRF的变体):先对查询做HyDE(生成假设文档),再分别检索后融合。优点:提升查询扩展能力。缺点:增加一次LLM调用,延迟增加200-500ms。
实际落地的坑+解法
- 坑1:向量检索对领域敏感。用通用模型(如text-embedding-ada-002)检索法律文书,Recall@10可能只有30%。解法:用领域微调模型(如Legal-BERT)或对比学习训练(如SimCSE),或退而求其次用BM25兜底。
- 坑2:混合检索的延迟爆炸。同时跑向量和关键词检索,延迟翻倍。解法:用级联检索——先用BM25快速过滤(top-1000),再对结果做向量重排序(rerank),总延迟控制在100ms内。
- 坑3:分数归一化导致信息丢失。BM25分数范围0-10,向量分数0-1,直接加权会偏向BM25。解法:用Platt缩放或分位数归一化,将分数映射到同一分布。
场景选择决策树
- 查询含精确实体(代码/ID/日期)→ 纯BM25
- 查询是开放域问题(“如何做蛋糕”)→ 纯向量检索
- 查询混合(“苹果公司2024年财报”)→ 混合检索(RRF或级联)
- 延迟<50ms且文档量<100万 → BM25+向量重排序
- 延迟<200ms且文档量>1000万 → 纯BM25或稀疏检索(SPLADE)
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从原理、工程取舍、混合策略三个层面回答。原理上,BM25基于词频精确匹配,向量检索基于语义相似度。工程上,向量检索成本高、对领域敏感,BM25在精确查询上更可靠。混合检索推荐RRF融合,但要注意延迟和分数归一化。总结一句:没有银弹,根据查询类型和延迟预算选择,通常用BM25兜底+向量检索做语义扩展。”
4️⃣ 高频追问 & 应对
追问 1:你说向量检索对领域敏感,具体怎么评估?有没有量化指标?
评估用域内Recall@k。例如在MS MARCO(通用)和BioASQ(生物)上对比:通用模型在BioASQ上Recall@10可能从80%掉到55%。量化方法:用领域测试集(至少1000条查询),计算纯向量检索的Recall@10和MRR。如果低于60%,必须微调或换BM25。微调成本:用领域文档做对比学习,1000条标注数据即可提升10-15个点。
追问 2:RRF的k值怎么调?有没有理论依据?
k值控制对低排名结果的惩罚力度。k越小,低排名结果权重越低。理论依据:RRF假设排名比分数更可靠。调参方法:在验证集上网格搜索k=10, 30, 60, 100,用NDCG@10评估。经验值:k=60是默认值,适合大多数场景。如果BM25和向量检索结果差异大(如重叠率<30%),k应调小(如30)以放大高排名结果。
追问 3:如果查询是“2024年苹果公司营收”,但文档里写的是“Apple Inc. 2024 revenue”,向量检索能召回吗?
能,但取决于embedding模型是否见过“苹果→Apple”的映射。如果模型在通用语料上训练,大概率能。但更安全的做法:用查询重写(Query Rewriting)将“苹果公司”改写为“Apple Inc.”,或直接用BM25做精确匹配。实际落地中,这种查询建议用混合检索:BM25召回“Apple Inc.”,向量检索召回“苹果公司”,RRF融合后排名靠前。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“向量检索一定比关键词检索好,因为语义理解更强” → ✅ 正确切入:向量检索在精确匹配上不如BM25,且成本高、对领域敏感,需要根据场景选择。
- ❌ 说“混合检索就是简单加权,权重设0.5就行” → ✅ 正确切入:混合检索有RRF、线性加权、级联等多种策略,权重需要调参,且分数归一化是关键坑点。
- ❌ 说“向量检索延迟高,所以不用” → ✅ 正确切入:延迟可以通过HNSW索引(搜索复杂度O(log n))和级联策略优化,不能一刀切否定。
6️⃣ 简历呼应
- 如果你有RAG项目:从“我在XX项目中用混合检索解决了长尾查询问题”切入,具体说用了RRF还是级联,Recall提升了多少(如从70%到85%)。
- 如果你只做过传统NLP:用“BM25类似传统TF-IDF,向量检索类似word2vec的语义扩展”类比,强调从精确匹配到语义匹配的演进,以及如何用BM25做baseline。
- 如果你是校招无项目:聚焦“在MS MARCO数据集上复现了混合检索系统,对比了BM25、DPR和RRF的Recall@10”,展示对评估指标和调参的理解。
- 《From Word Embeddings to Document Distances》(WMD论文)
- 《SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking》
- 《ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction》
- 《HyDE: Precise Zero-Shot Dense Retrieval without Relevance Labels》
- 《Reciprocal Rank Fusion: A Simple and Effective Approach to Combining Search Results》