← Resources
By Sora Kashiwagi
— Senior Engineer, Vector Search
·
· TUTORIAL
混合搜索:将 BM25 与向量搜索结合用于 RAG
关键词(BM25)搜索与向量搜索以相反的方式失败,而这恰恰是生产环境 RAG 将两者结合的原因。本指南讲解两种方法的原理、融合(RRF)如何合并结果、重排序的作用,以及混合搜索何时能明显胜过纯向量搜索。
两种以不同方式失败的搜索
BM25(词法搜索或关键词搜索)依据精确词项的重叠为文档打分,给稀有词项更高的权重,并对文档长度施加惩罚。它是确定性的,运行在倒排索引之上。向量(语义)搜索将查询和文档编码为稠密嵌入,通过最近邻相似度进行检索,能够捕捉语义、同义词和释义——甚至跨越语言边界。
它们的弱点恰好互为镜像。BM25 会遗漏同义词和概念:对于“database memory issues”的查询,如果字面词汇不同,就找不到标题为“cache eviction policies”的页面。而向量搜索会遗漏精确词元——首字母缩写、SKU、错误代码、ID、型号——并受语义漂移的影响,例如对“Nike running shoes”的查询会返回嵌入相近却错误的“Adidas running shoes”结果。由于二者的失败模式互补,单独使用任何一种都不够。
混合搜索的工作原理
混合搜索并行运行词法(BM25)与稠密(向量)检索,再将两个排名结果列表合并为一个。合并这一步才是关键所在,因为 BM25 分数和向量相似度分数处于完全不同的量级——你无法直接相加。
这正是主流融合方法 Reciprocal Rank Fusion (RRF) 只使用排名位置、而非原始分数的原因。每个文档的融合分数,是在两个检索器中将 1 除以(k 加上其排名)后求和,其中 k 是一个小常数(通常为 60;一些研究使用 20)。由于完全忽略分数的分布,RRF 无需归一化,开箱即用——这就是它成为大多数向量数据库默认选项的原因。
RRF 与加权融合的对比
RRF 并非唯一选项。加权(alpha)融合会对两组分数进行归一化,再用可调权重将其混合:alpha 为 0 是纯关键词,1 是纯向量,0.5 表示均衡,默认值通常偏向语义、落在 0.75 左右。一些引擎还提供相对分数融合和基于分布的融合。
这里存在取舍:RRF 鲁棒且参数少,非常适合不想按语料库逐一调参的场景。加权融合则给了你一个调节旋钮——对于标识符密集的技术内容,可调低 alpha 以偏向精确词项匹配;对于自然语言问题,可调高 alpha 以偏向语义。先从 RRF 开始;当你有明确理由要偏向某个检索器时,再考虑加权融合。
重排序的位置
混合检索是第一阶段,重排序是第二阶段。快速检索器(BM25、向量或混合)拉取一个候选集,随后交叉编码器在单次前向传播中以完整的交叉注意力联合编码查询与文档,对每个候选重新打分。交叉编码器比第一阶段的检索器精确得多,但在整个语料库上运行代价过高,因此只对 top-k 候选重新打分。
因此,规范的生产流水线是:混合检索(BM25 + 向量,用 RRF 融合)→ 交叉编码器或 LLM 重排序器 → 将顶部结果送入模型上下文。每个阶段都各司其职、做自己最擅长的事——先保召回,后求精确。
它真的有用吗?以及如何在 osFoundry 中构建
提升是真实存在的,但取决于你的数据。Elastic 的 BEIR 研究发现,RRF 混合搜索将平均 NDCG@10 相比单独使用 BM25 提升了约 18%,相比强大的学习型编码器提升幅度略小,并且在测试的每个数据集上都与 BM25 持平或更优。随着稠密模型的改进,混合搜索的边际增益已经收窄——在域内数据上往往只有几个百分点——但在域外语料库、稀有词项以及混合自然语言与精确标识符的查询上,其增益仍然最大。混合搜索仍是生产环境的默认选择。
osFoundry 的自定义 RAG 流水线将其以可组合的阶段、而非黑盒的形式暴露出来:BM25 阶段和向量阶段并行运行,融合阶段(默认 RRF,加权融合作为可选项)将二者合并,重排序阶段在结果到达模型之前对其进行精炼。你可以在配置中针对每个知识库调整词法与语义的平衡,无需编写底层管道代码即可实现 retrieve-fuse-rerank 模式。
Frequently asked questions
- 关键词搜索和语义搜索有什么区别?
- 关键词(词法)搜索(如 BM25)匹配精确词项并对稀有词项加权——精确,但对同义词视而不见。语义(向量)搜索将语义编码为嵌入并按相似度匹配,因此能捕捉释义和相关概念,但可能遗漏 ID 和错误代码等精确词元。二者在相反的情形下各擅胜场。
- 什么是混合搜索?
- 混合搜索并行运行关键词(BM25)与向量检索,并用融合算法将二者的排名结果合并到一个列表中。它之所以存在,是因为两种方法以不同方式失败——向量擅长同义词和概念,BM25 擅长精确词项、标识符和稀有术语——因此结合两者能同时提升召回率和精确率。
- 什么是 Reciprocal Rank Fusion (RRF)?
- RRF 仅使用排名位置(而非原始分数)来合并两个排名列表。每个文档的融合分数,是在各检索器中将 1 除以(k 加上其排名)后求和,其中 k 是一个小常数(通常为 60)。由于忽略了 BM25 与向量搜索互不兼容的分数量级,它无需归一化,且开箱即用、效果良好。
- 混合搜索何时优于纯向量搜索?
- 当查询将自然语言与精确标识符混合、使用稀有或特定领域的术语、针对域外内容运行,或涉及多语言时。对于嵌入良好的域内数据上的纯概念性问题,纯向量搜索可能已经够用。但对于充满代码和产品名称的技术知识库,混合搜索显然更胜一筹。
- 向量搜索为什么会遗漏精确词项和 ID?
- 嵌入将文本压缩为固定大小的向量,捕捉的是语义而非精确拼写,因此错误代码、SKU 和首字母缩写等稀有词元会被抹平——这种特性有时被称为结构性盲点。模型知道一段文字讲的是什么,却不知道其中是否含有你所搜索的字面字符串,而这恰恰是 BM25 的强项。
- RRF 还是加权融合——应该用哪个?
- 先从 RRF 开始:它鲁棒、参数少,无需按语料库调参。当你有明确理由要偏向某个检索器时,再切换到加权(alpha)融合——对于标识符密集的内容,用较低的 alpha 偏向精确词项匹配;对于自然语言问题,用较高的 alpha 偏向语义。
- 混合搜索会增加延迟或成本吗?值得吗?
- 它要运行两次检索外加一个融合步骤,因此会有一些开销,再加上重排序还会进一步增加。对大多数 RAG 系统而言,召回率和精确率的提升足以让它物有所值,尤其是在技术性或混合内容的语料库上。如果你的数据嵌入良好、纯属概念性,而延迟又至关重要,那么纯向量或许就够了——请在自己的查询上实测。
Sources