文章讨论了RAG应用中单一检索策略的局限性,特别是专有名词匹配失败和语义漂移问题。提出采用混合检索(结合向量检索和关键词检索)并通过RRF算法融合结果,以提高召回率。随后引入Cross-Encoder重排序技术对候选文档进行精细筛选,提升检索精度。这种"漏斗筛选"架构在保证计算效率的同时,显著提升了RAG系统的检索准确性和适用性,特别适合法律、医疗、金融等对精确性要求高的领域。

前排提示,文末有大模型AGI-CSDN独家资料包哦!

在构建 RAG应用时,很多初学者会陷入一个误区:认为 RAG 等同于“将文档切片,存入向量数据库,然后进行语义搜索”。

在 demo 阶段,这种纯向量检索的方案通常表现良好。但在面对真实的业务数据时,我们经常会遇到两类典型的“检索失效”场景:

  1. 专有名词匹配失败:用户搜索特定的产品型号“X-2000 处理器”或错误代码“Error 503”,向量模型可能会返回关于“高性能芯片”或“网络故障”的通用描述,却漏掉了包含确切型号或代码的那篇文档。因为在向量空间中,这些字符的语义特征并不明显。
  2. 语义漂移:用户搜索“不含糖的饮料”,向量检索可能会返回大量包含“糖”和“饮料”这两个词的文档,甚至包括“含糖饮料”,因为它捕捉到了相关性,却忽略了逻辑上的否定关系。

为了解决这些问题,我们需要引入一套更完善的检索策略:混合检索(Hybrid Search)与重排序(Rerank)

01 为什么单一检索策略会失效?

要理解混合检索的必要性,首先需要理解两种主流检索技术的底层逻辑及其局限性。

1.向量检索(Dense Retrieval)

  • 原理:将文本转化为高维向量,计算查询与文档在语义空间中的距离。
  • 优势:擅长捕捉语义关联和同义词。例如,它知道“电脑”和“计算机”是相似的。
  • 劣势:对精确匹配不敏感。对于人名、缩写、序列号、特定术语等缺乏语义信息的关键词,效果往往不如传统搜索。

2.关键词检索(Sparse Retrieval / BM25)

  • 原理:基于词频(TF-IDF)统计,计算查询词在文档中出现的频率和重要性。
  • 优势精确匹配能力极强。如果文档中包含用户输入的生僻词,它一定能找出来。
  • 劣势:无法理解语义。它不知道“苹果”和“iPhone”有关联,也无法处理同义词或跨语言查询。

结论:在真实的知识库场景中(如企业 Wiki、法律合同、医疗病历),用户的查询往往既包含语义意图,又包含精确关键词。单一的检索方式无法同时满足这两点。

02 解决方案:混合检索与 RRF 融合

混合检索的核心思想是:并行执行向量检索和关键词检索,然后将两者的结果合并

但这带来了一个数学难题:分数的不可比性

  • 向量检索返回的是 余弦相似度(通常在 0 到 1 之间,如 0.85)。
  • BM25 返回的是 加权得分(可能在 0 到 20 甚至更高,如 12.5)。

直接将 0.85 和 12.5 相加是没有意义的。我们需要一种算法,能够忽略分数的绝对值,仅基于排名来融合结果。这就是 RRF(Reciprocal Rank Fusion,倒数排序融合)

RRF 算法原理

RRF 的计算公式非常简洁:

其中 rank 是文档在某一个检索列表中的排名(第 1 名,第 2 名…),k 是一个常数(通常取 60)。

RRF 的工作逻辑:

  1. 如果一个文档在向量检索中排第 1,在 BM25 中也排第 1,它的分数会非常高。
  2. 如果一个文档仅在 BM25 中排第 1,但在向量检索中未出现,它依然能获得一个较高的分数,有机会进入最终列表。
  3. 这种机制确保了系统既能召回语义相关的文档,也能召回包含精确关键词的文档,极大地提升了召回率(Recall)

03 Cross-Encoder 重排序 (Rerank)

通过混合检索,我们解决了“找不全”的问题(提高了召回率)。但此时返回的 Top-K 列表(例如前 50 个文档)中,可能依然包含很多噪音。

例如,搜索“iPhone 15 价格”,混合检索可能会召回:

  1. iPhone 15 的发布新闻(相关)
  2. iPhone 14 的降价信息(关键词匹配,但无关)
  3. 安卓手机对比评测(语义相关,但无关)

为了让 LLM 看到最精准的信息,我们需要在检索和生成之间,增加一个精排(Rerank)环节。

Bi-Encoder vs Cross-Encoder

  • 向量检索(Bi-Encoder):为了速度,查询和文档是独立编码的。模型在计算相似度时,并没有真正“看到”两者的交互细节。这是一种“粗排”。
  • 重排序模型(Cross-Encoder):这是一种精度极高的模型。它将“用户查询”和“候选文档”拼接在一起,送入模型进行深度推理,计算它们的相关性得分。
重排序策略:
  1. 广撒网:使用混合检索召回 Top 50 甚至 Top 100 的文档。
  2. 精挑选:使用 Cross-Encoder 模型(如 BGE-Reranker)对这 50 个文档进行逐一打分。
  3. 截断:只保留得分最高的 Top 5 文档发送给 LLM。

这种策略在计算成本检索精度之间取得了最佳平衡:用低成本的检索方式快速筛选候选集,用高成本的重排序模型在小范围内进行精细筛选。

04 总结与通用实践建议

构建一个高可用的 RAG 检索系统,本质上是一个漏斗筛选的过程。

  1. 第一层(L1):混合检索。结合 Vector 和 BM25,利用 RRF 算法,尽可能多地召回可能相关的文档(Recall 优先)。这一步的目标是“宁滥勿缺”。
  2. 第二层(L2):重排序。利用 Cross-Encoder 模型对 L1 的结果进行语义精排(Precision 优先)。这一步的目标是“去伪存真”。

适用场景建议:

  • 法律/医疗/金融领域:这些领域充斥着专业术语和精确数字,必须使用混合检索,否则单纯的向量检索会丢失关键细节。
  • 技术文档/代码库:代码中的变量名、错误码是唯一的,BM25 在此场景下权重极高,混合检索是刚需。
  • 通用客服/闲聊:如果对精度要求不高,且追求极致响应速度,可以仅使用向量检索,省去 Rerank 的时间开销。

技术在不断演进,但“关键词匹配”与“语义理解”互补的逻辑,以及“粗排+精排”的分层架构,是搜索推荐领域长期验证的最佳实践,也是当前构建 RAG 系统不可或缺的基石。

CSDN独家福利

最后,感谢每一个认真阅读我文章的人,礼尚往来总是要有的,下面资料虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐