
RAG系统中的“守门人”:重排器的奥秘与选择 原创
在信息爆炸的时代,我们每天都在与海量的数据打交道。无论是学术研究、商业决策还是日常学习,获取准确、可靠且及时的信息至关重要。而Retrieval Augmented Generation(RAG)系统的出现,就像是一场信息处理的革命,它将大型语言模型(LLMs)的强大语言生成能力与外部知识源相结合,为我们提供了更精准、更可信的回答。然而,RAG系统输出的质量,从根本上依赖于它检索到的信息的质量。这时,重排器(Reranker)就成为了关键的“守门人”,确保只有最优质的信息能够进入最终的输出。
今天,我们就来深入探讨一下RAG中的重排器,看看它们为什么不可或缺,何时发挥作用,可能存在的权衡,以及不同类型的重排器都有哪些。
一、什么是RAG中的重排器?
想象一下,你正在撰写一篇详细的学术论文。最初的信息检索过程,就像是从一个庞大的图书馆数据库中收集与你的主题相关的所有资料——文章、书籍、会议论文、原始数据等。这些资料中,很多可能只是与主题擦边、过时或者质量不高。而重排器,就像是一个严谨的研究者,对每一个来源进行评估,检查它的相关性、可信度和影响力,优先筛选出那些高度相关、权威的研究,以便为你的论点提供支持。只有这些经过精心挑选的资料,才会被大型语言模型(LLM)引用和整合,构建出最终有理有据的论文。它确保了只有最好的信息能够进入最终的输出。
从技术角度来看,重排器是信息检索系统中的一个组件,它在初始检索之后,对检索结果进行二次过滤。初始检索(例如基于嵌入或关键词的向量相似性搜索)会返回一组可能与查询相关的文档。重排器的任务是对这些结果进行重新排序,这个过程不仅仅依赖于初始检索的评分。重排器会使用匹配技术,更深入、更细致地分析查询与每个检索到的文档之间的关系。它们根据对查询相关性的更细微理解,对文档进行优先级排序,从而提高传递给LLM的文档质量和顺序。
这种两阶段的方法——快速的初始检索,紧接着是更精确的重排——在速度和结果质量之间达到了平衡。
二、为什么要在RAG中使用重排器?
虽然基于嵌入的初始检索方法在寻找与查询语义相似的文档方面既快速又有效,但它们也有局限性:
- 语义理解有限:嵌入有时会错过复杂文档或查询中细微的语义差异或上下文。那些有重要但细微差别的相似句子,可能会有非常接近的向量表示。
- 维度限制:将丰富、复杂的信息表示在一个相对低维的嵌入空间中,不可避免地会导致一些信息丢失,或者出现不同概念被放置得太接近的情况(即碰撞)。
- 泛化问题:嵌入在与训练数据相似的数据上表现最好。它们可能难以准确捕捉到熟悉领域之外的信息的相关性。
这些局限性可能导致检索到的文档与查询只有松散的相关性,而将这些文档传递给LLM可能会导致“幻觉”(即生成与事实不符的内容)。
而重排器正是在初始基于嵌入的检索不足之处表现出色的地方:
- 超越简单的向量相似性:重排器采用的技术不仅仅依赖于向量相似性。
- 细粒度比较:一些重排器可能会将文档分解成更小的上下文化单元,进行更细致的比较(例如“Bag-of-Embedding”方法)。
- 结合语义理解与基于关键词的技术:通过结合语义理解与基于关键词的技术,重排器可以生成更强大的相关性评分。
- 通过关注查询与文档部分之间的核心上下文关系来提高泛化能力。
三、重排器的类型
重排器的种类繁多,而且这是一个活跃的研究领域。在本文中,我们将介绍几种主要类型的重排器,每种类型都有其独特的性能、计算成本和实现复杂性特点。
(一)交叉编码器(Cross Encoders)
交叉编码器模型将查询和文档对作为输入,输出一个相关性评分。通过同时处理查询和文档,它们能够捕捉到查询和文档中术语和概念之间高度细微的相互作用和依赖关系,从而做出精确的相关性判断。然而,对于每个检索到的文档,交叉编码器都需要将查询和文档一起处理,这使得它们在处理非常大的初始结果集或需要极低延迟的应用场景时不太理想。
(二)多向量重排器(Multi-Vector Rerankers)
像ColBERT这样的模型采用多向量表示法来表示文档,并使用后期交互机制——这意味着查询和文档的表示是独立编码成一组向量的。相关性计算涉及比较这些向量集,通常使用查询和文档表示之间的向量相似性。多向量重排器的一个优势是速度。由于文档表示是预先计算好的,检索和初始排名过程非常快。与交叉编码器的全交叉注意力机制相比,多向量重排器的后期交互在计算上更轻量。
(三)微调的LLM重排器(Fine-tuned LLM Rerankers)
虽然大型预训练的LLM对语言有很强的理解能力,但它们并不天生知道如何在信息检索的上下文中根据相关性评分对文档进行排名。通过在排名数据上微调较小的LLM,它们可以成为高效的重排器。微调的重排器分为两类:
- 编码器-解码器模型:这类模型将排名任务视为一个生成问题。例如RankT5,它被训练成输出代表查询文档对相关性的特定标记。
- 仅解码器模型:像RankZephyr和RankGPT这样的模型通过生成相关性评分或基于提示策略的排名来评估相关性。
微调的LLM重排器可以提供出色的性能,但它们计算成本高、耗时且延迟可能更高。
(四)将LLM作为重排器的裁判(LLM as a Judge for Reranking)
与其专门为排名微调一个模型,不如直接利用大型LLM的推理能力,通过提示策略让LLM充当裁判,评估文档的相关性。一些提示策略包括:
- 逐点式(Pointwise):LLM单独评估每个文档相对于查询的相关性,通常是在评分尺度上,或者通过生成相关性陈述。然后根据生成的评分或相关性判断对结果进行排序。
- 列表式(Listwise):LLM被给予查询和一组文档,并被要求返回按排名顺序排列的文档标识符。由于LLM上下文窗口的限制,这通常需要以较小的批次或窗口处理文档。
- 成对式(Pairwise):LLM被展示查询和两个文档,并被要求识别哪一个是更相关的。然后将许多成对比较的结果聚合起来,以产生最终排名(例如,使用AllPairs等算法)。
(五)重排器API(Reranking APIs)
我们还可以使用Cohere、Jina或Mixedbread等提供的重排器API。这些服务通过简单的API调用提供重排能力,方便快捷。
四、如何选择合适的RAG重排器?
选择最适合RAG应用的重排器需要考虑多个因素:
(一)相关性提升
这是重排器的主要目标。可以通过信息检索指标(如NDCG,归一化折扣累积增益)来评估,该指标考虑了相关文档的位置,或者使用特定于应用的指标(如归因,LLM的回答由重排文档支持的频率)。
(二)延迟
重排步骤会增加整个检索过程的延迟。交叉编码器和LLM作为裁判的重排器通常延迟较高。
(三)上下文理解
重排器如何处理不同长度和复杂性的查询和文档?有些重排器更适合处理较短的段落,而有些则能有效处理较长的文档。
五、总结
选择并有效地实现一个重排器是构建高性能、可靠RAG系统的关键步骤。重排器作为重要的质量控制环节,确保传递给LLM的信息尽可能相关和准确,从而减少幻觉,甚至可能降低成本。
通过了解不同类型的重排器——从精确的交叉编码器、高效的多向量模型到强大的微调LLM和便捷的API——并根据相关性提升、延迟和成本等因素仔细评估它们,你可以显著提高RAG应用的准确性和效率。随着RAG领域的不断发展,对包括关键重排步骤在内的每个阶段都有清晰的可见性和控制权,是构建可靠、有效系统的关键。
本文转载自Halo咯咯 作者:基咯咯
