Yujun's Blog

别再二选一了!BM25和向量检索,我全都要!

March 20, 2025 (7mo ago)AI

别再二选一了!BM25和向量检索,我全都要!

兄弟们,咱们上次聊了怎么在BM25、FAISS和HNSW之间做选择。聊完之后,我发现很多兄弟陷入了一个新的“幸福的烦恼”:

  • 用BM25吧,关键词匹配是准,但用户稍微换个说法,比如把“公司报销流程”说成“差旅费怎么报”,它就找不到了,太“死板”。
  • 用向量检索吧,语义理解是强,能get到用户的意图,但有时候会“飘”,召回一些看似相关但核心关键词对不上的结果,不够“精确”。

这就好像你手里有两个偏科的员工,一个只会埋头干活、不懂变通;另一个想法很多、天马行空,但总抓不住重点/images/banner/posts/ai/rag.png 。咋办?最好的办法,就是让他俩组个队,取长补短!

这就是我们今天要聊的,RAG系统的进阶玩法——混合检索(Hybrid Search)

为什么单打独斗已经不够用了?

我们先来看一个简单的例子,用户搜索:“苹果营养成分”。

  • BM25(关键词检索) 会冲上去,把所有包含“苹果”和“营养”这两个词的文档都给你捞出来。它很精准,但如果有一篇高质量文章,标题是《探讨水果的健康价值》,里面详细讲了各种水果的营养,它可能就错过了。
  • 向量检索 则会去理解“苹果营养成分”这句话背后的语义。它可能会找到《探讨水果的健康价值》这篇,因为它知道“苹果”是一种“水果”,“营养成分”和“健康价值”在语义上高度相关。但它也可能给你推荐一篇讲“苹果公司财报”的文章,因为“苹果”这个词的向量表示被污染了。

看到了吗?单靠任何一方,都有可能挂一漏万。而混合检索的作用,就是把这两位“偏科生”的优势结合起来:既要关键词匹配的精准,也要语义搜索的广度。 它能同时找到包含“苹果”、“营养”的文档,也能找到讨论“水果健康价值”的内容,最后通过一个更聪明的“裁判”来重新排序,选出最优的结果。

拆解混合检索的“三板斧”

一套标准的混合检索架构,通常由这三个核心组件构成,像一套组合拳,一招接一招。

  1. 第一招:关键词匹配 (Keyword Matching) 这通常是我们的老朋友BM25。它的任务就是快、准、狠,迅速把那些跟查询关键词一字不差的文档给筛选出来。这是我们结果的“基本盘”,保证了结果的精准度下限。

  2. 第二招:语义检索 (Semantic Search) 这位选手就是我们熟悉的向量检索了。它利用BERT、GPT这类强大的模型,把用户的查询和文档都转换成向量,然后在高维空间里计算相似度。它的任务是“开疆拓土”,去发现那些虽然关键词不完全匹配,但意思上高度相关的文档,保证了我们召回的“广度”。

  3. 第三招:结果重排序 (Reranking) 这是最关键,也是最能体现“智能”的一步。前两招分别从两个路径把结果捞了回来,现在我们有两份“候选名单”。怎么办? Reranking模型就像一个总决赛的“主裁判”,它会拿到这两份名单,然后对每个候选文档,结合原始的查询,进行一次更精细、更深入的打分。它不再是简单地看向量距离,而是会综合考虑语法、上下文、相关性等更复杂的因素,最后给出一个最终的、更权威的排名。

这个“先召回、后排序”的架构,是目前业界最主流、最高效的玩法。

效果如何?1+1 > 2

设计这么一套复杂的架构,我们图啥?当然是为了效果。

  • 更高的召回率 (Recall):通过关键词和语义的组合,我们把搜索的网撒得更大了。原来可能被错过的相关文档,现在都能被捞回来,确保我们不会漏掉关键信息。
  • 更高的准确率 (Precision):有了Reranking这个“火眼金睛”的主裁判,最终排在最前面的结果,质量会高得多。它能把那些只是“沾点边”的结果往后排,把真正“命中靶心”的结果顶到最前面,极大提升了用户体验。

在处理那些复杂的、信息量大的搜索任务时,这套组合拳的效果尤为明显。

在Dify这样的平台里,混合检索长啥样?

光说理论太空洞。现在很多AI应用开发平台,比如Dify,已经把混合检索做成了开箱即用的功能。在这些平台里,你通常会看到下面这些设置,让你能像调配方一样,调出最适合你业务的检索策略:

  • 检索模式开关:最基础的,让你能在“仅关键词”、“仅向量”和“混合检索”之间一键切换。
  • 权重分配 (Weighting):通常会有一个滑块或者数字输入框,让你来决定关键词检索和向量检索结果的权重。比如,你觉得关键词更重要,可以设置成70%的关键词权重 + 30%的向量权重。
  • Reranking模型选择:平台可能会内置几种不同的重排序模型,有轻量级的跑得快,有重量级的效果好,让你根据自己的成本和性能需求来选择。
  • Top-K参数:让你精细地控制每个阶段的数量。比如,你可以设置“关键词召回Top 20,向量召回Top 20,然后把这40个结果(去重后)送给Reranker,最后返回Top 5给用户”。

通过这些可视化的配置,我们这些开发者就能很方便地实验和调整,找到最佳的平衡点。

写在最后

在RAG的世界里,检索的质量直接决定了最终生成内容的上限。当我们还在为选择BM25还是向量检索而纠结时,其实真正的答案是:小孩子才做选择,成年人全都要!

混合检索通过“关键词”和“语义”两条腿走路,再配上一个聪明的“Reranker大脑”,构建出了一套更全面、更精准、更强大的知识召回体系。这已经不再是一个“高级选项”,而正在成为构建严肃、生产级RAG应用的“新标配”。

Comments