多路召回融合难?几种简单策略帮你提升检索质量

在RAG(检索增强生成)系统中,召回(Retrieval)环节直接决定了后续生成答案的上限。传统的做法通常是单一检索方式,比如只用向量相似度或只用关键词匹配。但每种方法都有其盲区:向量检索可能漏掉精确关键词,关键词检索可能忽略语义相关的内容。为了解决这个问题,我们引入多路召回——同时使用多种检索方式(如向量、关键词、知识图谱等)从不同角度获取文档,然后将结果融合起来。然而,“融合”说起来容易,做起来却有不少坑。本文将用通俗的语言和例子,带你了解多路召回融合的难点,并介绍几种实用的融合策略。


一、为什么需要多路召回?

想象一下,你是一个导游,游客问你:“北京有什么好玩的地方?”你可能会用几种方式寻找答案:

  • 向量检索:像用“语义雷达”扫描,找到描述“有趣景点”、“推荐去处”的内容,可能搜到故宫、长城、798艺术区。

  • 关键词检索:像用“关键词探测器”,直接查找包含“好玩”、“景点”这些词的介绍,可能搜到一些网红打卡地。

  • 知识图谱:像查“关系网”,找出“景点”与“亲子”、“免费”等属性的关联,得到适合家庭的公园。

如果只用其中一种,你可能会错过很多好选择。多路召回就是同时调用这些方法,收集更全面的候选答案。


二、多路召回融合的三大难点

把多个来源的结果合并起来,并不只是简单的叠加。你会遇到这些问题:

  1. 得分不可比:向量检索给出的相似度分数(如0.85)和关键词检索的BM25分数(如12.3)不是一个量纲,不能直接相加。

  2. 结果重复:同一个文档可能被多种方式都召回了,需要去重。

  3. 阈值难定:到底哪些结果太差应该扔掉?设一个固定分数阈值可能不适用于所有查询。


三、四种常见的融合策略

1. 加权融合:给每种检索方式“发工资”

最直接的方法是为每种检索方式分配一个权重,比如向量检索权重0.7,关键词检索权重0.3。然后对每个文档,将它的得分乘以对应权重后相加。权重可以根据业务特点手动调整,比如在电商搜索中,关键词匹配可能更重要,就把关键词权重调高。

例子:你既是“语义雷达”又是“关键词探测器”。雷达发现一个景点得分0.9,探测器给它8分。你决定雷达权重0.6,探测器权重0.4,那么最终得分 = 0.9×0.6 + 8×0.4 = 0.54 + 3.2 = 3.74。虽然两个分数差距大,但加权后还能比较。

2. 去重:去掉“双胞胎”结果

不同检索方式可能召回同一个文档。用集合(set)就能轻松去重。但要注意,去重后可能丢失一些信息(比如同一个文档被两种方式都认为相关,这恰恰说明它很重要),所以去重后往往还需要重新排序。

例子:雷达和探测器都找到了“故宫”,你只需要保留一条“故宫”记录,但可以记下它被两种方法同时认可,适当加分。

3. 阈值过滤:设定“淘汰线”

为了防止低质量结果混入,可以设定一个阈值,低于阈值的文档直接扔掉。阈值可以是固定的(比如分数低于0.5),也可以是动态计算的,比如用“平均分+标准差”。如果某个文档的分数低于平均分减一个标准差,就认为它偏离太远,剔除。

例子:你收集了10个景点推荐,平均分7分,标准差2分。那么“平均分-标准差”=5分。得分低于5的景点(比如某不知名公园只有3分)就不推荐给游客了。

4. 大模型重排序:请“专家”二次打分

如果对质量要求极高,可以请大模型当“评审员”,让它对召回的文档逐一评分。你可以设计提示词,让大模型评估文档与查询的相关性,输出0-100的分数。然后按分数排序。这种方法质量最高,因为大模型能深入理解语义,但速度慢,成本高。

例子:雷达和探测器给你找了10个景点,你请一位资深导游(大模型)挨个看介绍,给它们打分。导游认为“故宫”95分,“天坛”90分,“南锣鼓巷”70分……最后你按这个新排序推荐给游客。


四、效率与质量的权衡:没有银弹

不同的融合策略在效率和质量上各有取舍:

  • 加权融合 + 去重 + 阈值过滤:速度快,适合对延迟敏感的场景(如实时搜索)。

  • 大模型重排序:质量高,但耗时,适合离线处理或对答案准确性要求极高的场景。

在实际应用中,你可以组合使用。比如先用简单算法快速过滤掉大部分低分文档,再对剩下少量候选用大模型精细打分。这样既保证了速度,又提升了质量。


五、总结

多路召回融合是RAG系统从“能用”走向“好用”的关键一步。通过组合不同检索方式,我们能更全面地捕捉用户需求。而融合过程中的难点——得分不可比、重复、阈值设定——都可以通过加权、去重、动态阈值和大模型重排序等策略解决。选择哪种策略,取决于你的业务场景是更看重速度还是更看重质量。希望这篇文章能帮你理清思路,让多路召回不再“难”。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐