微信扫码
添加专属顾问
我要投稿
告别新手级RAG!专业级后检索优化技术详解,让你的检索结果更精准高效。核心内容:1. 后检索优化的三大策略:重排、压缩、校正2. 重点解析重排技术中的倒数排序融合(RRF)算法3. 多路召回结果整合的实践难点与解决方案
众所周知,检索是检索增强生成 (RAG) 系统的核心。它直接决定哪些文档片段给到大语言模型(LLM)来生成最终答案。
不过,并不是所有的检索结果都是理想的。比如,在返回的前K个文档结果中,并不是最相关的。还有返回的结果过于冗长或已经过时,也会影响最终答案的质量。
在前面我们通过两篇文章学习了两种预检索优化策略:
查询路由(Query Routing)和查询构建(Query Construction)。
它们主要专注于提高RAG系统在检索过程中的效率,而我们今天想聊聊关于一些检索后的优化策略,能够有效的提高检索结果的质量。
常见的检索后优化策略如下:
因为篇幅原因,这篇文章我将重点聚焦于其中的“重排”技术。
简单来说,重排就是在拿到初步的检索结果后,不直接用,而是再“加工”一遍。通过更精细的算法,对这些结果进行重新打分和排序,把最相关的顶上去,把不相关的踢出去。
RRF(Reciprocal Rank Fusion)是一种简单有效的数据融合算法,它是将多个来源、评分标准各不相同的检索结果中,整合成最终统一的结果列表。
对于一些复杂的RAG场景中,想要得到更好的检索结果,可以通过综合多路召回结果表现来实现。这些检索路径可以是关键词检索和向量检索的结合、向量存储和结构化数据库存储的结合或者是不同检索策略(比如不同的分块策略、索引策略) 的结合。
但在实践中这里就会遇到一个难点,每路召回的评分标准并不是一样的(比如BM25的评分标准是关键词匹配得分,而语义检索使用的是余弦相似度)。如果我们只是简单的把这些分数相加,只会让结果变得更混乱,很难准确的得到最终的排名。
RRF算法就很好的解决这个问题。它的核心则是不关心这些标准不一样的分数,而只关注文档在每个检索结果列表中的“排名”。通过这种方式,它能将所有检索结果统一起来,有效的综合多路召回的优势,得到一个更加精确的最终排名。
RRF算法公式如下:
d:代表一个特定的文本块,它是我们希望进行排名的对象。
R:代表一个集合,包含了所有检索结果列表。
r:代表集合 R 中的一个具体的检索列表。
r(d):代表文档 d 在某个具体的检索列表 r 中的排名(Rank)。
k:是一个平滑常数,通常设为一个较小的正整数,如 60。它的作用是防止排名靠前的文档得分过高,从而平衡排名靠前和靠后文档的贡献。
这样,对于一个文档 d,它在每个检索结果列表中的排名越高(即 r(d) 越小),其分母 (k+r(d)) 就越小,分子 1 不变,所以该文档在该列表中的得分就越高。最后,将这个文档在所有检索列表中的得分相加,就得到了它的最终 RRF 分数。得分越高,最终排名就越靠
RRF算法实现的重排它不涉及检索结果与查询之间的语义关系。而Cross-Encoder重排就是基于Cross-Encoder模型,在语义层面上实现的重排。
Cross-Encoder的工作原理是将用户的“查询”和每个“文档”作为一个整体,共同输入到一个深度学习模型(如Transformer)中进行计算,进而精确的判断两者之间的相关性。
优点是精确度极高。它能够深度分析查询与文档之间细微的语义关系,非常适合对结果的准确性要求很高的应用场景。
缺点是计算成本巨大并且效率低。每对“查询-文档”都需要一次完整的模型推理,导致GPU资源消耗大,延迟高。
基于上面的特点,因此在RAG系统中,Cross-Encoder通常被用在初始排序后的精细排序过程中。
首先,使用双编码器(Bi-Encoder)或稀疏嵌入模型从大数据集中快速进行初步的检索,然后再利用Cross-Encoder对于初步筛选的文本块结果集中(Top-100)进行一次精排,最终返回最相关的文本块(Top-10)。
ColBERT采取的是一种“延迟交互”策略。首先,离线将所有文档预计算成更细粒度的“词元级”向量(Token-level Embeddings)并存储。在用户查询时,只需计算查询的向量,然后与预存的文档向量进行高效比较,避免了对每个文档都进行完整的模型推理。
优点是精度和成本之间取得了很好的平衡。它比传统的向量检索要更精准,比Cross-Encoder又快得多、成本低得多,所以可以处理更大规模的候选文档集(如数百甚至上千)。
当然也有缺点,它需要使用大量的存储空间来存储所有文档的词元级向量,需要使用几十GB甚至更多。
所以它适合场景是拥有海量的文档库,又希望获取比简单向量检索更好的召回率,但又不希望像Cross-Encoder那样需要更多成本和更多时间开销。
无论是Cross-Encoder重排还是ColBERT重排,都是基于经典的深度学习模型的重排方法。现在进入到了大模型时代后,重排技术也迎来了新的进展。
利用大语言模型(LLM)的强大语义理解能力,通过设计特定的提示词(Prompt) 来对结果进行排序。例如,你可以让LLM“根据这份工作描述,对候选人简历进行排序”或“优先选择最近发布的、来源更权威的文章”等。
优化是有很好的灵活性。 可以根据任意复杂的、动态的、甚至类似人类主观判断的标准来进行排序,而且还不需要重新训练模型。
缺点当然就很明显,效率低而且还要承担不小的费用。每次调用LLM的API都会受网络影响有明显的延时,还要承担调用API服务商的费用。
因此在实际应用中,可以将以上方法组合成一个分层流水线:
使用BM25或基础向量搜索等快速、低成本的方法,从海量数据中捞出几百到上千个可能相关的文档,确保“召回率”。
使用像 ColBERT 这样的中间层技术,对上一步的结果进行处理,将其精简到50-100个,并进行更精准的排序。
对最后剩下的几十个最相关的结果,使用 Cross-Encoder 或 LLM 进行最终的精排,确保呈现给用户的顶部结果是质量最高的。
这种组合分层方法可以在控制总体成本和延迟的同时,将搜索结果的精准度实现最大化,既兼顾了性能还能得到不错的结果。
在构建高性能的RAG系统应用时,检索只是完成了每一步。为了不断的提高最终答案生成的质量,经过初步检索结果进行后检索优化流程至关重要。
这次我们探讨了四种主流的重排技术,它们各有各的优势和特点,适用于不同的应用场景。并且利用它们各自的优势还可以组合成一个分层流水线,通过这种组合策略,我们可以在成本、延迟和精度这三个维度上找到最佳的平衡点,从而打造出真正智能、高效的RAG系统。
示例代码可以去我的GitHub仓库中查看
🔗GitHub地址:https://github.com/yilane/rag-related/tree/main/src/06-post-retrieval/01-re-ranking
创作不易,感谢支持!
如果这篇文章对你有帮助,欢迎点赞、转发,让更多的朋友了解RAG优化技术!
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-09-09
切块、清洗、烹饪:RAG知识库构建的三步曲
2025-09-09
终结 “闭卷考试”:RAG 如何从根源上构建可信的AI应用
2025-09-09
你的RAG应用为什么总“胡说八道”?这份21项优化自查清单,帮你根治AI幻觉
2025-09-08
万字长文详解腾讯优图RAG技术的架构设计与创新实践
2025-09-08
运用 Elasticsearch 进行向量搜索及创建 RAG 应用
2025-09-08
通过两个案例,看RAG如何解决大模型的“知识短板”
2025-09-06
给AI装上一个'超级大脑':信息检索如何改变RAG系统的游戏规则
2025-09-05
别让你的RAG“吃”垃圾数据了!从源头构建高质量知识库的深度文档解析指南
2025-06-20
2025-06-20
2025-07-15
2025-06-24
2025-06-24
2025-07-16
2025-06-23
2025-07-09
2025-06-15
2025-06-20
2025-09-03
2025-08-28
2025-08-25
2025-08-20
2025-08-11
2025-08-05
2025-07-28
2025-07-09