文章目录

引言
当检索增强生成(Retrieval-Augmented Generation, RAG)技术首次与大型语言模型(LLM)结合时,整个AI社区都为之振奋。开发者们期待着通过简单的向量搜索+LLM架构,就能轻松解决复杂的问答任务。然而现实却给许多人浇了一盆冷水——为什么精心设计的RAG系统实际效果总是不尽如人意?
接下来我们将揭示一个被广泛忽视的关键环节:重排序(Rerank)
。这个在传统搜索系统中久经考验的技术,正在成为提升RAG性能的胜负手。
RAG的困惑
RAG 技术自问世以来便引发了广泛关注,尤其是它与大模型(LLM)的结合,一度让人们相信:那些曾经棘手的复杂问答任务终于有了完美的解决方案!然而,现实却给了许多开发者当头一棒——在实际应用中,RAG 的效果往往与预期相差甚远。不少人在完成 RAG 流程后不禁陷入困惑:为什么精心设计的系统却没能带来理想的结果?
这种落差背后,往往隐藏着一些容易被忽视的关键问题。虽然 RAG 的架构看似简单——将文档存储到向量数据库,再通过 LLM 生成答案——但这种“简单”的设计却可能成为性能瓶颈的根源。事实上,RAG 的潜力远不止于此,而要实现其真正的价值,我们需要深入理解其核心机制,并引入一些关键的优化手段。
接下来,我们将探讨 RAG 在实际应用中面临的主要挑战,并揭示一个能够显著提升其性能的关键技术——重排序(Rerank)
传统 RAG流程中存在的问题: 召回率与上下文窗口
我们先深入分析传统 RAG(检索增强生成)流程中存在的核心问题。RAG 的核心任务之一是从海量文档(规模可能从数万到数百亿不等)中快速、准确地检索出与查询相关的信息。
为了应对大规模搜索的效率需求,向量搜索技术成为了主流选择。其核心思想是将文本转化为低维向量(通常是 768 维或 1024 维),并将这些向量映射到同一个向量空间中,然后通过余弦相似度等度量方法,计算查询向量与文档向量之间的相似性。然而,这种技术存在一个根本性的问题:向量化过程本质上是对文本语义的压缩,而这种压缩不可避免地会导致部分信息的丢失。
这种信息丢失直接影响了检索结果的质量。在向量搜索返回的 top_k
文档中,一些真正相关的信息可能因为相似度计算不够精确而被遗漏,而这些关键信息往往隐藏在 top_k
之外的文档中。那么,如果这些被遗漏的信息实际上对 LLM(大型语言模型)生成答案至关重要,我们该如何处理?最直观的解决方案是增加返回的文档数量(即提高 top_k
值),并将所有文档都传递给 LLM。
这里涉及到的一个重要指标是召回率,它衡量的是“检索到的相关文档占所有相关文档的比例”。理论上,如果我们返回所有文档,召回率可以达到 100%。然而,这种做法在现实中并不可行,因为 LLM 的输入长度是有限制的,这个限制被称为上下文窗口。以 Anthropic 的 Claude 为例,其上下文窗口可以支持 100K 个 Token,相当于几十页的文本内容。
那么,是否可以通过返回尽可能多的文档(即使不是全部)来“填满”上下文窗口,从而提高召回率呢?答案是否定的。这种做法会显著降低 LLM 的召回性能。这里的“召回性能”与之前讨论的检索召回率不同,它指的是 LLM 从输入文本中提取并利用关键信息的能力。研究表明,随着上下文窗口中的 Token 数量增加,LLM 的召回性能会逐渐下降。当上下文窗口被完全填满时,LLM 往往难以准确遵循指令,导致生成结果的质量下降。
这就形成了一个两难的局面:一方面,我们可以通过增加向量搜索返回的文档数量来提高检索召回率;但另一方面,将这些文档全部传递给 LLM 又会损害其召回性能。
那么,如何解决这个矛盾呢?关键在于平衡:通过检索大量文档来最大化检索召回率,同时通过最小化传递给 LLM 的文档数量来最大化 LLM 的召回性能。而实现这一目标的核心技术,就是重排序(Rerank)。它能够对检索到的文档进行精细化的重新排序,确保最终传递给 LLM 的文档不仅数量适中,而且与查询高度相关。
Rerank
重排序模型,也被称为交叉编码器,是一种特殊的模型。它接收一个查询和文档对作为输入,并输出一个表示相似度的分数。我们利用这个分数,根据文档与查询的相关性对文档进行重新排序。
重排序模型(又称交叉编码器)是检索系统中的关键组件,它通过深度语义交互为文档相关性打分。其核心机制包括:
- 输入输出特性:接收查询-文档对,输出0-1之间的相关性分数
- 排序逻辑:依据分数对候选文档进行降序排列
- 架构优势:相比双编码器,交叉编码器能捕捉更细粒度的语义关系
两阶段检索
现代检索系统普遍采用"先召回后精排"的分层架构
第一阶段:高速召回
- 使用双编码器(如Sentence-BERT)或BM25算法
- 在亿级文档库中实现毫秒级响应(<100ms)
- 召回率可达90%以上,但精度有限
第二阶段:精准排序
- Rerank 的运行速度较慢
- 但它能够更精准地评估文档的相关性,从而提升最终返回结果的质量
为什么选择两阶段架构
**效率与精度 **
- 向量搜索吞吐量可达
10k docs/ms
- 重排序模型处理速度约
50 docs/ms
- 通过10:1的文档过滤比,实现90%计算资源节省
- 向量搜索吞吐量可达
**成本效益 **
- GPU推理成本:
$0.0001/query
(召回) vs$0.002/query
(精排) - 如果直接对大规模数据集进行重新排序,计算成本会非常高昂,且效率低下。通过两阶段检索,第一阶段快速筛选出一小部分文档,第二阶段再对这些文档进行精细排序,这样可以显著降低计算资源的消耗
- GPU推理成本:
系统可扩展性
- 两阶段检索系统允许在不同阶段使用不同的模型和技术。例如,第一阶段可以使用高效的向量检索模型,第二阶段可以使用更复杂的交叉编码器模型。这种分阶段的策略使得系统更加灵活,可以根据具体需求进行优化和扩展
重排序的核心价值
提升相关性
- 通过更复杂的计算,Rerank 能够更精准地评估文档与查询的相关性,从而提升最终返回结果的质量
上下文优化器
- 由于 LLM 的上下文窗口有限,Rerank 可以帮助我们在有限的上下文窗口中选择最相关的文档,从而最大化 LLM 的性能
噪声过滤器
- Rerank 可以去除那些虽然在第一阶段被检索到,但实际相关性较低的文档,从而减少噪声,提高系统的整体性能
使用Rerank的意义
虽然Rerank 的速度这么慢,那为什么我们还要使用它呢?答案很简单:Rerank 比嵌入模型要准确得多
重排序的价值权衡:为何慢却不可或缺?
尽管重排序(Rerank)模型的运行速度相对较慢,但它在检索系统中的重要性却不容忽视。其核心价值在于:精准度远超传统嵌入模型。为了理解这一点,我们需要深入分析双编码器的局限性以及重排序模型的独特优势。
双编码器的局限性:效率与精度的矛盾
双编码器模型虽然在速度上表现优异,但其准确性却受到以下两个关键因素的限制:
信息压缩导致的信息丢失
双编码器需要将文档的丰富语义压缩成一个固定维度的向量(通常是 768 维或 1024 维)。这种压缩过程不可避免地会丢失部分信息,因为文档的含义往往是多维且复杂的。例如,一篇包含多个主题的文档,双编码器只能将其压缩为一个“平均”的向量表示,而无法保留所有细节。缺乏查询上下文
双编码器在索引阶段就生成了文档的嵌入向量,这意味着它无法根据具体的查询动态调整文档的表示。例如,同一篇文档在不同的查询下可能有不同的相关性,但双编码器无法捕捉这种动态变化,只能依赖预先计算的静态向量。
重排序模型的优势:精准与动态的完美结合
与双编码器相比,重排序模型在以下两个方面展现出显著优势:
直接处理原始信息
重排序模型无需依赖压缩后的向量,而是直接处理原始的文档和查询文本。这使得它能够保留更多的语义细节,从而更准确地评估文档与查询的相关性。例如,重排序模型可以分析文档中的具体句子或段落,而不是仅仅依赖一个固定的向量表示。动态分析文档含义
重排序模型在用户查询时实时运行,因此能够根据具体的查询动态分析文档的含义。例如,对于一篇包含多种主题的文档,重排序模型可以根据用户的查询,提取与查询最相关的部分,而不是生成一个“通用”的表示。
重排序的代价:时间与资源的权衡
尽管重排序模型在准确性上具有显著优势,但其运行速度较慢,这主要体现在以下两个方面:
双编码器的效率
双编码器将文档和查询压缩为向量后,可以通过高效的向量搜索快速完成检索。例如,在包含 4000 万条记录的数据库中,双编码器可以在不到 100 毫秒内完成检索。重排序的复杂性
重排序模型需要直接处理原始文档和查询,计算复杂度更高,因此速度较慢。例如,使用 BERT 这样的重排序模型,在 V100 GPU 上处理一个查询可能需要数小时。
为何选择重排序?精准度与用户体验的平衡
尽管重排序模型的速度较慢,但其在以下场景中具有不可替代的价值:
高精度需求场景
在法律、医疗等专业领域,检索结果的准确性至关重要。重排序模型能够显著提升相关性评估的精准度,从而为用户提供更可靠的结果。上下文优化
在 LLM 的上下文窗口有限的情况下,重排序模型可以帮助选择最相关的文档,从而最大化 LLM 的性能。噪声过滤
重排序模型能够去除低相关性文档,减少噪声,提升系统的整体表现。
总结
重排序模型虽然速度较慢,但其在精准度上的优势使其成为现代检索系统中不可或缺的一环。通过两阶段检索策略,我们可以在第一阶段快速召回候选文档,然后在第二阶段通过重排序模型进行精细排序,这种策略在处理复杂的问答任务和生成任务时尤为重要,因为它能够确保最终返回的文档不仅数量适中,而且相关性更高,从而在效率与精准度之间找到最佳平衡。
参考: https://www.53ai.com/news/RAG/2025032098537.html