很多团队在搭建 RAG 时直接上了向量数据库,结果发现:用户搜一个具体的产品型号、一个错误码或一个人名,系统却返回了一堆“语义相近”但完全不相关的内容。向量检索和关键词检索各有盲区,把两者结合起来的混合检索,往往是提升召回质量最直接的方法之一。

两种检索方式的特点

关键词检索(BM25)

BM25 是经典的关键词相关性算法,核心思想是:查询词在文档中出现得越多、在整个语料中越稀有,文档得分越高,同时对文档长度做归一化。

  • 优势:精确匹配专有名词、编号、代码和罕见术语;结果可解释;不需要训练模型,速度快、成本低。
  • 劣势:不理解同义词和语义,比如搜“退货”找不到只写了“退换商品”的文档。

向量检索

把查询和文档都转换为向量,按语义相似度排序,原理见文本向量入门。

  • 优势:理解同义表达和口语化问题,能跨越用词差异。
  • 劣势:对精确字符串不敏感,型号“X200”和“X300”在向量空间里可能非常接近;对否定、数字等细节区分度有限。

两者的优劣几乎完全互补,这就是混合检索的出发点。

如何融合两路结果

加权分数融合

把两种检索的得分分别归一化,再按权重相加。问题在于两种分数的分布差异很大,归一化方式和权重都需要调试,换一批数据可能就要重新调整。

倒数排名融合(RRF)

RRF 不看原始分数,只看排名:一篇文档在每路结果中的排名越靠前,得分越高,最终按综合得分排序。它不需要处理分数尺度问题,实现简单、表现稳定,是很多系统的默认选择。

融合后再重排

先用两路检索各取一批候选,合并去重后交给重排序模型精排。这种“粗召回 + 精排序”的方式通常效果最好,重排序的细节见重排序模型指南。

中文场景的特别注意

分词质量

BM25 依赖分词。中文没有天然的空格分隔,分词器的选择直接影响效果。对于专业领域,要把产品名、术语、内部缩写加入自定义词典,否则可能被切成无意义的碎片。

中英混排与编号

技术文档中常见中英文混排、版本号、错误码,需要确认分词器能正确处理这些字符串,不会把“v2.3.1”拆得七零八落。

繁简与同义词

如果语料中存在繁简混用或大量同义词,可以在关键词检索端做繁简转换和同义词扩展。

落地步骤建议

  1. 先搭基线:分别跑纯向量和纯关键词检索,用同一批真实问题评估召回率;
  2. 分析失败案例:区分哪些问题是语义理解失败,哪些是精确匹配失败;
  3. 引入 RRF 融合:观察两类失败是否同时改善;
  4. 加入重排序:在融合结果上做精排,进一步提升前几名的准确率;
  5. 按查询类型动态调整:如果查询中包含明显的编号或代码,可以提高关键词检索的权重。

很多向量数据库和搜索引擎已经内置混合检索能力,选型时可以把它作为一项重要考量,参见向量数据库怎么选。

小结

向量检索懂语义,关键词检索懂字面,二者结合才能覆盖用户提问的多样性。RRF 融合加上重排序,是兼顾效果与实现成本的实用方案。别忘了中文分词和领域词典,它们常常是决定关键词检索效果的关键。