当 Embedding 不够用时:混合检索架构的决策框架
大多数 RAG 实现都以同样的方式开始:启动一个向量数据库,使用一个不错的模型嵌入文档,在查询时运行余弦相似度,然后发布。演示效果看起来很棒。相关性感觉出奇地好。然后你将其部署到生产环境,发现“Error 221”检索到了关于“Error 222”的文档,搜索特定的产品 SKU 会出现语义相似但错误的条目,而添加日期过滤器会导致检索质量大幅下降。
向量搜索是一个真正强大的工具。但在大多数生产环境的检索工作负载中,仅靠它是不够的。在 2025 年,通过 RAG 获胜的团队并不会在稠密嵌入(dense embeddings)和关键词搜索之间做选择——他们会刻意同时使用两者。
这是一个决策框架,用于判断混合检索何时值得增加复杂性,以及如何在不破坏延迟预算的情况下构建每一层。
纯向量搜索失效的场景
稠密嵌入将文档压缩为高维向量 ,语义相似的文本会落在附近。这正是你希望在用户查询“我们的退款政策是什么”而文档显示“我们接受 30 天内退货”时发生的情况。语义桥梁解决了词汇不匹配的问题。
它在以下三类情况下的失败是可以预见的:
精确匹配查找。 错误代码、产品 ID、API 方法名称、序列号——这些都需要精确或近乎精确的文本匹配。嵌入对所有维度取平均值意味着“Error 221”和“Error 222”在向量空间中非常接近,因为它们都是同一系统中的错误。如果检索系统在用户报告 Error 221 时显示 Error 222 的缓解步骤,那它比没用更糟糕;它在误导用户。
罕见词汇和专业术语。 在训练语料库中出现频率较低的词汇,其嵌入是不稳定的。在一个混合文档集中搜索“HNSW”,可能会检索到关于近似最近邻搜索的通用文章,而不是使用该确切术语的特定文档。技术文档、医疗记录和法律文本中充满了这类术语。
布尔和结构化查询。 向量搜索没有“关于主题 A 且具有属性 B 的文档”这种原生概念。通过元数据(日期范围、作者、类别、产品线)进行过滤,要么作为后处理步骤发生(降低召回率),要么被集成到 ANN 遍历中,但这需要仔细实现,以避免检索质量彻底崩溃。
向量搜索和 BM25 之间的差距在于它们以正交的方式失败。BM25 漏掉的(语义衔接、同义词匹配),稠密嵌入可以捕捉。嵌入漏掉的(精确术语、罕见词汇、结构化约束),BM25 可以很好地处理。这种正交性是混合检索的核心论点。
BM25:为什么这个拥有 30 年历史的算法依然重要
BM25 (Best Match 25) 是一种概率排名函数,它根据词频(查询词出现的频率)和逆文档频率(这些词在整个语料库中的罕见程度)为文档评分。它运行在倒排索引上,在通用硬件上即可处理数十亿文档,并在不需要 GPU 的情况下以个位数毫秒级的速度返回结果。
在基准测试中,BM25 在 BEIR 基准测试(18 个信息检索数据集的平均值)上实现了 43.4 的 NDCG@10。稠密检索模型通常在通用语义查询上表现更好,但在技术和特定领域的语料库(API 文档、法律文件、医疗记录)中,BM25 往往能赶上甚至超过稠密检索器,因为精确的词汇比语义相似性更具预测性。
BM25 的更新也非常简单。添加文档,更新倒排索引。无需重新嵌入,无需重建向量索引,不需要 GPU。对于更新频率高的语料库,这一点至关重要:正如一个生产团队所说,在添加或更改文档时保持向量索引的新鲜度是一个“巨大且众所周知的难题”。增量 ANN 索引更新非常复杂,以至于许多团队干脆不更新,在过时的嵌入上运行数周而不知情。
结合 BM25 和稠密检索
标准方法是独立运行两个检索器,从每个检索器中获取前 k 个结果,然后将它们合并。合并策略的重要性比大多数团队意识到的要大。
互惠排名融合 (Reciprocal Rank Fusion, RRF) 已成为主流的组合方法。RRF 不是组合原始相似度分数(不同检 索器的分数级数通常不兼容),而是组合排名位置。每个文档从每个检索器获得 1 / (rank + k) 的分数,其中 k 是一个平滑常数(通常为 60),防止排名靠前的项目占据主导地位。出现在两个排名列表中的文档会同时获得两个分数,这使得它们在合并结果中升至顶部。
RRF 的核心优势在于它与分数无关。你不需要归一化或对齐不同检索器的评分函数,这意味着你可以组合任意检索系统而无需额外校准。经过多个团队的大量测试,RRF 的表现始终优于更复杂的加权方案。它的简洁性降低了过拟合风险,并使其在不同查询分布中保持稳健。
加权分数组合(归一化原始分数并使用调整后的权重进行混合)是一种替代方案,但它需要特定领域的权重校准,并且对分布偏移很敏感。对于大多数团队来说,RRF 是正确的默认选择。
在比较精确匹配和语义查询的混合查询基准测试中,使用 RRF 的混合检索实现了 0.85 的 NDCG,而任何单一检索器的性能都较低。IBM 研究院发现,在 BM25 + 稠密组合中添加稀疏向量(通过 SPLADE,一种学习型稀疏扩展模型)会产生另一个有意义的提升——IBM 报告称这种三路混合是最佳的。Pinecone 的基准测试数据表明,三路混合检索比单一方法检索的检索质量提高了约 48%。
成本是运行两条或三条检索路径带来的额外检索延迟。对于大多数生产系统来说,这是值得的。与 LLM 调用所花费的时间相比,并行运行 BM25 和稠密检索带来的延迟增加很小,而且召回率的提高通常允许你传递更少的文档给 LLM——从而降低下游的 Token 成本。
