原文链接:LLM:RAG
1、RAG 概览
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索(IR)和 LLM 的技术。它的核心思想是在 LLM 生成回答之前,通过检索相关文档来增强生成内容的上下文信息,从而帮助 LLM 更好地理解用户的查询并基于外部知识库生成更为准确和详细的回答。
RAG 通常由两个主要部分组成:
-
检索(Retrieval): 首先,模型会根据输入的查询从一个预先构建的文档集合(例如数据库、搜索引擎结果等)中检索出一组相关文档。检索的方式可以使用传统的信息检索方法,如 BM25,或者基于深度学习的向量检索方法(如FAISS)
-
生成(Generation): 然后,将检索到的文档与查询一同输入到 LLM 中,模型会基于这些输入生成最终的答案。LLM 能够根据提供的上下文信息来理解并生成更准确、更符合用户需求的内容
这种方式的优势在于,LLM 通过利用外部知识库来减少 “模型幻觉”(hallucination)问题,即生成模型由于缺乏足够信息而产生的虚假或不准确的答案。
LLM 自身的局限性1:
- 在没有答案的情况下提供虚假信息
- 当用户需要特定的当前响应时,提供过时或通用的信息
- 从非权威来源创建响应
- 由于术语混淆,不同的培训来源使用相同的术语来谈论不同的事情,因此会产生不准确的响应
RAG 的流程大致如下1:
- 外部数据创建: 将来自多种来源的数据转化为向量,并存储在数据库中
- 相关性检索: 基于用户查询,检索与之相关的外部信息
- 增强提示: 将检索到的信息与用户查询一起输入 LLM,生成准确的答案
- 更新外部数据: 定期更新外部数据,确保知识库的时效性
在相关研究中2,RAG 被分为三个阶段:初级检索增强生成(Naive RAG)、高级检索增强生成(Advanced RAG)和模块化检索增强生成(Modular RAG)。(注:本文以下内容整理自综述2)
1.1、Naive RAG
Naive RAG 研究范式代表了最早的方法,其遵循传统的流程,包括索引构建、检索和生成,这一流程也被称为 “检索-读取” 框架。
- 索引构建
- 索引构建从对各种格式(如PDF、HTML、Word 和 Markdown)的原始数据进行清理和提取开始,然后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本会被分割成更小、易于处理的文本块。然后,使用嵌入模型将这些文本块编码为向量表示形式,并存储在向量数据库中
- 检索
- 在收到用户查询后, RAG 系统会使用与索引构建阶段相同的编码模型,将查询转换为向量表示形式。然后,它会计算查询向量与已索引语料库中文本块向量之间的相似度得分。系统会对与查询相似度最高的前 K 个文本块进行排序并检索出来。这些文本块随后会被用作提示信息中扩展的上下文内容
- 生成
- 将提出的查询和选定的文档综合成一个连贯的提示信息,大语言模型的任务就是针对这个提示信息给出回复。大语言模型回答问题的方式可能会因特定任务的标准而有所不同,它既可以利用自身固有的参数知识,也可以将回复限制在所提供文档中包含的信息范围内。在持续对话的情况下,任何现有的对话历史记录都可以整合到提示信息中,使模型能够有效地进行多轮对话交互
然而,Naive RAG 存在一些明显的缺点:
- 检索挑战
- 检索阶段常常在精确率和召回率方面存在困难,这会导致选择到不匹配或不相关的文本块,并且可能会遗漏关键信息
- 生成困难
- 在生成回复时,模型可能会面临 “幻觉” 问题,即生成的内容在检索到的上下文中没有依据。这个阶段的输出还可能存在不相关、有害或有偏差的问题,从而降低了回复的质量和可靠性
- 信息整合障碍
- 将检索到的信息与不同的任务进行整合可能具有挑战性,有时会导致输出内容不连贯或缺乏条理。当从多个来源检索到相似信息时,这个过程还可能会出现冗余,从而导致回复内容重复。确定不同段落的重要性和相关性,并确保风格和语气的一致性,这进一步增加了问题的复杂性。面对复杂的问题,仅基于原始查询进行一次检索可能不足以获取足够的上下文信息
此外,还有一个问题是,生成模型可能会过度依赖增强信息,导致输出内容只是简单地重复检索到的内容,而没有添加有洞察力或经过综合处理的信息。
1.2、Advanced RAG
Advanced RAG 专注于提高检索质量,采用预检索和后检索策略。为了解决索引构建方面的问题,Advanced RAG 通过使用滑动窗口、细粒度分割以及纳入元数据等方式,对其索引构建技术进行了优化。
此外,还采用了多种优化方法来简化检索过程:
- 预检索过程
- 主要关注优化索引结构和原始查询。优化索引 的目的是提高正在被索引的内容的质量。这涉及到一些策略:提高数据粒度、优化索引结构、添加元数据、对齐优化以及混合检索。而 查询优化 的目的则是让用户的原始问题更加清晰,并且更适合检索任务。常用的方法包括查询重写、查询转换、查询扩展
- 后检索过程
- 后检索过程主要方法包括对 文本块重新排序 和 上下文压缩。对检索到的信息进行重新排序,以便将最相关的内容移到提示信息的重要位置。这一概念已在诸如 LlamaIndex2、LangChain3 和 HayStack 等框架中得以实现。直接将所有相关文档输入到 LLMs 中可能会导致信息过载,无关内容会冲淡对关键细节的关注。为了缓解这一问题,检索后的工作重点在于选择关键信息,突出重要部分,并缩短要处理的上下文内容
1.3、Modular RAG
Modular RAG 架构采用了多种策略来改进其各个组件,例如添加用于相似度搜索的搜索模块,并通过微调来优化检索器。引入重构的 RAG 模块和重新排列的 RAG 管道等创新方法以应对特定的挑战。Modular RAG 支持其组件之间的顺序处理以及集成的端到端训练。
1.3.1、新模块
Modular RAG 框架引入了额外的专用组件,以增强检索和处理能力。
- 搜索模块
- 可适应特定场景,能够使用 LLM 生成的代码和查询语言,直接在搜索引擎、数据库和知识图谱等各种数据源中进行搜索
- RAG-Fusion 通过采用多查询策略来解决传统搜索的局限性,该策略将用户查询扩展到不同的视角,利用并行向量搜索和智能重新排序来挖掘显式知识和变革性知识
- 记忆模块
- 利用 LLM 的记忆功能来指导检索,创建一个无边界的记忆池,通过迭代自我增强,使文本与数据分布更紧密地对齐。RAG 系统中的路由功能可在各种数据源中导航,为查询选择最佳路径,无论是进行摘要提取、特定数据库搜索,还是合并不同的信息流
- 预测模块
- 旨在通过 LLM 直接生成上下文来减少冗余和噪声,以确保相关性和准确性
- 任务适配器模块
- 使 RAG 能够适应各种下游任务,为零样本输入自动检索提示信息,并通过少样本查询生成创建特定于任务的检索器
1.3.2、新模式
Modular RAG 允许模块替换或重新配置来应对特定挑战,从而具有显著的适应性,其超越了 Naive RAG 和 Advanced RAG 的固定结构,后者的特点是简单的 “检索” 和 “阅读” 机制。
此外,Modular RAG 通过集成新模块或调整现有模块之间的交互流程来扩展这种灵活性,提高了其在不同任务中的适用性。
- Rewrite-Retrieve-Read 利用 LLM 的能力,通过重写模块和大语言模型反馈机制来优化检索查询,以更新重写模型
- Generate-Read 等方法用 LLM 生成的内容取代了传统的检索
- Recite-Read 则强调从模型权重中进行检索,增强了模型处理知识密集型任务的能力
- 混合检索 策略集成了关键词搜索、语义搜索和向量搜索,以满足不同的查询需求
- 采用子查询(sub-queries)和 假设文档嵌入(HyDE) 的方法,通过关注生成的答案与真实文档之间的嵌入相似度,来提高检索的相关性
在模块排列和交互方面的调整上,例如 演示-搜索-预测(Demonstrate-Search-Predict,DSP) 框架以及 迭代检索生成(ITER-RETGEN) 的迭代 “检索-阅读-检索-阅读” 流程,展示了如何动态地利用模块输出以增强另一个模块的功能,体现了对增强模块协同作用的深入理解。Modular RAG Flow 的灵活编排,通过诸如 灵活自适应检索引擎(FLARE) 和 自检索增强生成(Self-RAG) 等技术展示了自适应检索的优势。
灵活架构的另一个好处是,RAG 系统可以更轻松地与其他技术(如微调或强化学习)集成。例如,可以包括微调检索器以获得更好的检索结果,微调生成器以获得更个性化的输出,或者进行协作式微调。
1.4、RAG 与微调(Fine-tuning)
在 LLMs 的优化方法中, RAG 常常被拿来与微调(FT)以及提示工程进行比较。每种方法都有其独特的特点,如图所示,使用一个象限图,从两个维度来说明这三种方法之间的差异:外部知识需求 和 模型适配需求。
提示工程利用模型的固有能力,对外部知识和模型适配的需求最小。RAG 可以被比作是为模型提供了一本量身定制的教科书,用于信息检索,非常适合精确的信息检索任务。相比之下,FT 类似于一个学生随着时间的推移将知识内化,适用于需要复制特定结构、风格或格式的场景。
RAG 在动态环境中表现出色,它能够提供实时的知识更新,并且可以有效地利用外部知识源,同时具有较高的可解释性。然而,它存在较高的延迟问题,并且在数据检索方面需要考虑伦理因素。另一方面,FT 则更加静态,需要重新训练才能进行更新,但它能够对模型的行为和风格进行深度定制。FT 在数据集准备和训练方面需要大量的计算资源,虽然它可以减少 “幻觉” 问题,但在处理不熟悉的数据时可能会面临挑战。
在对它们在不同主题的各种知识密集型任务上的性能进行的多项评估中,虽然无监督微调显示出了一定的改进,但 RAG 在处理训练过程中遇到的已有知识以及全新的知识时,始终优于无监督微调。此外,研究发现 LLMs 很难通过无监督微调来学习新的事实性信息。在 RAG 和 FT 之间做出选择,取决于应用场景中对数据动态性、定制化以及计算能力的特定需求。RAG 和 FT 可以相互补充,在不同层面上增强模型的能力。
2、检索
在 RAG 的背景下,从数据源中高效检索相关文档至关重要。这涉及到几个关键问题,比如检索源、检索粒度、检索的预处理以及相应嵌入模型的选择。
2.1、检索来源
RAG 依赖外部知识来增强 LLMs ,而检索源的类型和检索单元的粒度都会影响最终的生成结果。
2.1.1、数据结构
最初,文本是主流的检索源。随后,检索源扩展到包括半结构化数据(PDF)和结构化数据(知识图谱,KG)以进行增强。除了从原始外部源进行检索之外,最近的研究中还有一个日益增长的趋势,即利用 LLMs 自身生成的内容来进行检索和增强。
非结构化数据,如文本,是使用最广泛的检索源,主要从语料库中收集。对于开放域问答(ODQA)任务,主要的检索源是维基百科转储数据。除了百科全书式的数据外,常见的非结构化数据还包括跨语言文本以及特定领域的数据(如医学领域和法律领域)。
半结构化数据,通常是指包含文本和表格信息组合的数据,比如 PDF。处理半结构化数据对传统的 RAG 系统来说是一个挑战。首先,文本分割过程可能会无意中分割表格,导致在检索过程中数据损坏。其次,将表格纳入数据会使语义相似度搜索变得复杂。在处理半结构化数据时,一种方法是利用 LLMs 的代码能力,对数据库中的表格执行文本到 SQL(Text-2-SQL)查询,例如 TableGPT。或者,也可以将表格转换为文本格式,以便使用基于文本的方法进行进一步分析。然而,这两种方法都不是最佳解决方案,这表明在这一领域有很大的研究空间。
结构化数据,如知识图谱(KGs),通常经过验证,可以提供更精确的信息。KnowledGPT 生成知识库搜索查询,并将知识存储在个性化的知识库中,增强了 RAG 模型的知识丰富度。为了应对 LLMs 在理解和回答关于文本图的问题方面的局限性,G-Retriever 整合了图神经网络(GNNs)、 LLMs 和 RAG ,通过对 LLM 的软提示来增强对图的理解和问答能力,并采用了带收益收集的斯坦纳树(PCST)优化问题来进行有针对性的图检索。相反,构建、验证和维护结构化数据库需要额外的精力。
大语言模型生成的内容,为了解决 RAG 中外部辅助信息的局限性,一些研究专注于挖掘 LLMs 的内部知识。SKR 将问题分为已知或未知,有选择地应用检索增强。GenRead 用 LLM 生成器取代了检索器,发现 LLM 生成的上下文通常包含更准确的答案,因为与因果语言建模的预训练目标有更好的一致性。Selfmem 使用检索增强生成器迭代地创建一个无边界的记忆池,使用记忆选择器选择作为原始问题对偶问题的输出,从而自我增强生成模型。这些方法强调了在 RAG 中创新数据源利用的广泛性,力求提高模型性能和任务有效性。
2.1.2、检索粒度
从理论上讲,粗粒度的检索单元可以为问题提供更多相关信息,但它们也可能包含冗余内容,这可能会干扰下游任务中的检索器和语言模型。另一方面,细粒度的检索单元粒度会增加检索负担,并且不能保证语义完整性和满足所需的知识。
在 文本 中,检索粒度从细到粗,包括词元(Token)、短语(Phrase)、句子(Sentence)、命题(Proposition)、文本块(Chunks)、文档(Document)。
其中,DenseX 提出了使用命题作为检索单元的概念。命题被定义为文本中的原子表达式,每个命题都封装了一个独特的事实片段,并以简洁、自包含的自然语言格式呈现。这种方法旨在提高检索的精度和相关性。
在 知识图谱(KG) 上,检索粒度包括实体(Entity)、三元组(Triplet)和子图(sub-Graph)。检索粒度也可以适应下游任务,例如在推荐任务中检索项目 ID 以及检索句子对。
2.2、索引优化
在索引构建阶段,文档将被处理、分割,并转换为嵌入向量存储在向量数据库中。索引构建的质量决定了在检索阶段是否能够获取正确的上下文。
2.2.1、分块策略
最常见的方法是根据固定数量的词元(例如,100、256、512)将文档分割成文本块。较大的文本块可以捕获更多的上下文,但它们也会产生更多的噪声,需要更长的处理时间和更高的成本。而较小的文本块可能无法完全传达必要的上下文,但它们的噪声较少。
然而,文本块会导致句子内的截断,促使了递归分割和滑动窗口方法的优化,通过在多个检索过程中合并全局相关信息来实现分层检索。尽管如此,这些方法仍然无法在语义完整性和上下文长度之间取得平衡。因此,像 Small2Big 这样的方法被提了出来,其中句子(小单元)被用作检索单元,并且将前后的句子作为(大)上下文提供给 LLMs。
2.2.2、元数据附加
文本块可以用元数据信息进行丰富,如页码、文件名、作者、类别时间戳等。随后,可以根据这些元数据对检索进行过滤,限制检索的范围。在检索过程中为文档时间戳分配不同的权重,可以实现时间感知的 RAG ,确保知识的新鲜度并避免过时的信息。
除了从原始文档中提取元数据之外,元数据也可以人工构建。例如,添加段落摘要,以及引入假设性问题。这种方法也被称为反向假设文档嵌入(Reverse HyDE)。具体来说,使用 LLM 生成可以由文档回答的问题,然后在检索过程中计算原始问题与假设性问题之间的相似度,以减少问题与答案之间的语义差距。
2.2.3、结构索引
增强信息检索的一种有效方法是为文档建立分层结构。通过构建这种结构,RAG 系统可以加快对相关数据的检索和处理。
分层索引结构,文件以父子关系排列,文本块与它们相关联。数据摘要存储在每个节点上,有助于快速遍历数据,并帮助 RAG 系统确定提取哪些文本块。这种方法还可以减轻由于块提取问题导致的错觉。
知识图谱索引,在构建文档的分层结构中使用知识图谱(KG)有助于保持一致性。它描绘了不同概念和实体之间的联系,显著降低了产生错觉的可能性。另一个优点是将信息检索过程转换为 LLM 可以理解的指令,从而提高知识检索的准确性,并使 LLM 能够生成上下文连贯的回复,从而提高 RAG 系统的整体效率。为了捕捉文档内容和结构之间的逻辑关系,KGP 提出了一种使用知识图谱(KG)在多个文档之间建立索引的方法。这个知识图谱由节点(代表文档中的段落或结构,如页面和表格)和边(表示段落之间的语义/词汇相似度或文档结构内的关系)组成,有效地解决了多文档环境中的知识检索和推理问题。
2.3、查询优化
Naive RAG 面临的主要挑战之一是直接依赖用户的原始查询作为检索基础。提出一个精确清晰的问题并非易事,考虑欠妥的查询会导致检索效果不佳。有时问题本身较为复杂,语言组织也不够完善。另一个难题在于语言的复杂性和歧义性。语言模型在处理专业词汇或有多种含义的模糊缩写时常常会遇到困难。例如,它们可能无法辨别 “LLM” 在法律语境中是指大语言模型(Large Language Model)还是法学硕士(Master of Laws)。
2.3.1、查询扩展
将单个查询扩展为多个查询可以丰富查询内容,提供更多上下文,以弥补特定细微差别方面的不足,从而确保生成答案具有最佳相关性。
- Multi-Query:通过使用提示工程借助 LLM 扩展查询,然后可以并行执行这些查询。查询扩展并非随机进行,而是经过精心设计的
- Sub-Query:子问题规划过程指的是生成必要的子问题,这些子问题组合起来能够为回答原始问题提供上下文。从原则上讲,这种添加相关上下文的过程与查询扩展类似。具体而言,可以使用最少到最多提示法将一个复杂问题分解为一系列更简单的子问题
- Chain-of-Verification(CoVe):扩展后的查询会由 LLM 进行验证,以达到减少 “幻觉” 的效果。经过验证的扩展查询通常具有更高的可靠性
2.3.2、查询转换
其核心概念是基于转换后的查询而非用户的原始查询来检索文本块。
- 查询重写:原始查询并不总是最适合 LLM 进行检索,特别是在现实场景中。因此可以提示 LLM 对查询进行重写。除了使用 LLM 进行查询重写,还可以使用专门的小型语言模型,如 RRR(Rewrite-retrieve-read)。在淘宝应用的查询重写方法 BEQUE 显著提高了长尾查询的召回效果,进而提升了商品交易总额(GMV)
另一种查询转换方法是使用提示工程让 LLM 根据原始查询生成一个新的查询,用于后续检索。HyDE 构建假设文档(对原始查询的假设答案),其关注的是答案到答案之间的嵌入相似度,而非针对问题或查询寻找嵌入相似度。使用回溯提示法,将原始查询进行抽象,生成一个高层次概念问题(回溯问题)。在 RAG 系统中,回溯问题和原始查询都会用于检索,并且检索结果都会作为语言模型生成答案的依据。
2.3.3、查询路由
根据不同的查询,路由到不同的 RAG 管道,这适用于旨在适应各种场景的多功能 RAG 系统。
- 元数据路由/过滤:第一步是从查询中提取关键词(实体),然后根据关键词和文本块中的元数据进行过滤,以缩小搜索范围
- 语义路由:另一种路由方法是利用查询的语义信息
当然,也可以采用混合路由方法,结合语义和基于元数据的方法,以增强查询路由效果。
2.4、Embedding
在 RAG 中,检索是通过计算问题和文档文本块的嵌入向量之间的相似度(例如余弦相似度)来实现的,其中嵌入模型的语义表示能力起着关键作用。这主要包括稀疏编码器(如,BM25)和密集检索器(如,基于 BERT 架构的预训练语言模型)。近期的研究引入了一些知名的嵌入模型,如 AngIE、Voyage、BGE 等,这些模型受益于多任务指令调优。
2.4.1、混合检索
稀疏和密集嵌入方法捕捉不同的相关性特征,通过利用互补的相关性信息,它们可以相互受益。例如,稀疏检索模型可用于为训练密集检索模型提供初始搜索结果。此外,预训练语言模型(PLMs)可用于学习词项权重,以增强稀疏检索。
具体而言,研究还表明,稀疏检索模型可以增强密集检索模型的零样本检索能力,并帮助密集检索器处理包含稀有实体的查询,从而提高鲁棒性。
2.4.2、微调嵌入模型
当上下文与预训练语料库有显著偏差时,特别是在医疗保健、法律实践等充满专业术语的高度专业化领域,在领域数据集上微调嵌入模型就变得至关重要,以减少这种偏差。
除了补充领域知识外,微调的另一个目的是使检索器和生成器保持一致。例如,使用 LLM 的结果作为微调的监督信号,即 LSR(大语言模型监督的检索器)。
- PROMPTAGATOR 利用 LLM 作为少样本查询生成器,创建特定任务的检索器,解决有监督微调中的挑战,特别是在数据稀缺的领域
- LLM-Embedder 利用 LLM 为多个下游任务生成奖励信号。检索器使用两种类型的监督信号进行微调:数据集的硬标签和来自 LLM 的软奖励。这种双信号方法促进了更有效的微调过程,使嵌入模型能够适应各种下游应用
- REPLUG 利用检索器和 LLM 计算检索文档的概率分布,然后通过计算 KL 散度进行有监督训练。这种简单有效的训练方法通过使用语言模型作为监督信号来提高检索模型的性能,无需特定的交叉注意力机制
- 此外,受基于人类反馈的强化学习(RLHF)的启发,利用基于语言模型的反馈通过强化学习来增强检索器
2.5、适配器
微调模型可能会面临一些挑战,例如通过应用程序编程接口(API)集成功能,或者解决本地计算资源有限带来的限制。因此,一些方法选择引入外部适配器来辅助对齐。
- 为了优化 LLM 的多任务能力,UP-RISE 训练了一个轻量级提示检索器,它可以从预构建的提示池中自动检索适合给定零样本任务输入的提示
- AAR(增强适配检索器) 引入了一个通用适配器,用于适应多个下游任务
- PRCA 添加了一个可插拔的奖励驱动上下文适配器,以提高在特定任务上的性能
- BGM 固定检索器和 LLM ,并在它们之间训练一个桥梁序列到序列(Seq2Seq)模型。该桥梁模型旨在将检索到的信息转换为 LLM 可以有效处理的格式,使其不仅能够重新排序,还能为每个查询动态选择段落,并可能采用更高级的策略,如重复策略
- PKG 通过指令微调引入了一种将知识集成到白盒模型中的创新方法。在这种方法中,直接替换检索器模块,根据查询生成相关文档。这种方法有助于解决微调过程中遇到的困难,并提高模型性能
3、生成
检索完成后,直接将所有检索到的信息输入到 LLM 中进行问答并非明智之举。接下来将从调整检索内容和调整大语言模型这两个角度介绍相应的调整方法。
3.1、上下文整理
冗余信息会干扰大语言模型的最终生成结果,过长的上下文还会使大语言模型出现 “中间迷失” 问题。和人类一样,大语言模型往往只关注长文本的开头和结尾,而忽略中间部分。因此,在 RAG 系统中,通常需要对检索到的内容进行进一步处理。
3.1.1、重新排序
从根本上对文档文本块进行重新排列,优先突出最相关的结果,有效减少文档总量。在信息检索中,它具有双重作用,既是增强器又是过滤器,为语言模型提供更精炼的输入,以便进行更精确的处理。
重新排序可以使用基于规则的方法,这些方法依赖于预定义的指标,如多样性、相关性和平均倒数排名(MRR);也可以使用基于模型的方法,如 BERT 系列的编解码器模型(例如 SpanBERT)、专门的重新排序模型(如 Cohere rerank 或 bge-raranker-large)以及通用大语言模型(如 GPT)。
3.1.2、上下文选择/压缩
在 RAG 过程中,一个常见的误解是认为尽可能多地检索相关文档并将它们连接成一个冗长的检索提示会有所帮助。然而,过多的上下文会引入更多噪声,削弱大语言模型对关键信息的感知。
(Long) LLMLingua 利用小型语言模型(SLMs),如 GPT-2 Small 或 LLaMA-7B,检测并移除不重要的词元,将其转换为一种人类难以理解但大语言模型容易理解的形式。这种方法为 prompt 压缩提供了一种直接且实用的方式,无需对大语言模型进行额外训练,同时平衡了语言完整性和压缩率。
PRCA 通过训练一个信息提取器来解决这个问题。同样,RECOMP 采用类似的方法,通过对比学习训练一个信息凝聚器,每个训练数据点由一个正样本和五个负样本组成,编码器在此过程中使用对比损失进行训练。
除了压缩上下文,减少文档数量也有助于提高模型答案的准确性。如 Filter-Reranker 范式,结合了大语言模型和小型语言模型的优势。在这个范式中,小型语言模型作为过滤器,大语言模型作为重排器。研究表明,指示大语言模型对小型语言模型识别出的具有挑战性的样本进行重新排列,能显著提高各种信息提取(IE)任务的性能。
另一种简单有效的方法是让大语言模型在生成最终答案之前评估检索到的内容。这使大语言模型能够通过自我评判过滤掉相关性较差的文档。例如,在 Chatlaw 中,会提示大语言模型对参考的法律条款进行自我评估,以判断其相关性。
3.2、大语言模型微调
根据具体场景和数据特征对大语言模型进行有针对性的微调可以取得更好的效果。这也是使用本地部署大语言模型的最大优势之一。当大语言模型在特定领域缺乏数据时,可以通过微调为其提供额外的知识。Huggingface 的微调数据也可以作为初始步骤使用。
微调的另一个好处是能够调整模型的输入和输出。例如,它可以使大语言模型适应特定的数据格式,并按照指令以特定的风格生成响应。对于涉及结构化数据的检索任务,SANTA 框架实施了三方训练方案,以有效涵盖结构和语义的细微差别。第一阶段专注于检索器,利用对比学习来优化查询和文档的嵌入表示。
通过强化学习使大语言模型的输出与人类或检索器的偏好保持一致是一种可行的方法。例如,手动标注最终生成的答案,然后通过强化学习提供反馈。除了与人类偏好对齐,还可以与微调模型和检索器的偏好对齐。当无法使用强大的专有模型或更大参数的开源模型时,一种简单有效的方法是对更强大的模型(如 GPT-4)进行知识蒸馏。
大语言模型的微调也可以与检索器的微调相协调,以实现偏好对齐。一种典型的方法,如 RA-DIT,使用 KL 散度使检索器和生成器的评分函数保持一致。
4、RAG 中的增强过程
在 RAG 领域,标准做法通常是进行一次检索步骤,然后进行生成。这种方式效率不高,而且对于需要多步推理的复杂问题来说往往不够,因为它所能提供的信息范围有限。针对这一问题,如图,许多研究对检索过程进行了优化:

4.1、迭代检索
迭代检索是一种基于初始查询和目前已生成的文本,反复对知识库进行搜索的过程,它能为 LLMs 提供更全面的知识库。实践证明,这种方法通过多次检索迭代提供额外的上下文参考,增强了后续答案生成的鲁棒性。然而,它可能会受到语义不连续性和无关信息累积的影响。
ITER-RETGEN 用了一种协同方法,将 “检索增强生成” 与 “生成增强检索” 相结合,用于需要重现特定信息的任务。该模型利用解决输入任务所需的内容作为检索相关知识的上下文基础,进而在后续迭代中促进生成更优质的回复。
4.2、递归检索
递归检索常用于信息检索和自然语言处理(NLP)中,以提高搜索结果的深度和相关性。这个过程包括根据之前搜索得到的结果,迭代地优化搜索查询。递归检索旨在通过反馈循环逐渐聚焦于最相关的信息,从而提升搜索体验。
思维链信息检索(IRCoT) 使用思维链来引导检索过程,并利用检索结果优化思维链。思维树(ToC) 创建了一个澄清树,系统地优化查询中的模糊部分。在复杂的搜索场景中,当用户的需求一开始并不完全明确,或者所寻求的信息高度专业化或具有细微差别时,这种方法尤其有用。该过程的递归性质允许持续学习和适应用户的需求,通常会提高用户对搜索结果的满意度。
为了应对特定的数据场景,递归检索和多跳检索技术会结合使用。递归检索涉及使用结构化索引以分层方式处理和检索数据,这可能包括在基于文档或长 PDF 的摘要进行检索之前对其部分内容进行总结。随后,在文档内进行二次检索以细化搜索,体现了该过程的递归特性。相比之下,多跳检索旨在深入挖掘图结构数据源,提取相互关联的信息。
4.3、自适应检索
以 灵活自适应检索引擎(Flare) 和 自检索增强生成(Self-RAG) 为代表的自适应检索方法,对 RAG 框架进行了优化,使 LLMs 能够主动确定检索的最佳时机和内容,从而提高所获取信息的效率和相关性。
这些方法是 LLMs 在操作中进行主动判断这一更广泛趋势的一部分,就像自动生成式预训练变换器(AutoGPT)、工具变换器(Toolformer)和图工具变换器(Graph-Toolformer)等模型智能体所展示的那样。
例如,图工具变换器(Graph-Toolformer) 将其检索过程分为不同步骤,在这些步骤中, LLMs 主动使用检索器、应用自我提问技术并使用少样本提示来发起搜索查询。这种主动方式使 LLMs 能够决定何时搜索必要信息,类似于智能体使用工具。
WebGPT 集成了一个强化学习框架,用于训练 GPT-3 模型在文本生成过程中自主使用搜索引擎。它通过特殊标记来引导这个过程,这些标记便于进行搜索引擎查询、浏览结果和引用参考文献等操作,从而通过使用外部搜索引擎扩展了 GPT-3 的能力。
前瞻性主动检索增强生成(Forward-Looking Active REtrieval,Flare) 通过监控生成过程的置信度(由生成词元的概率表示)来自动确定检索时机。当概率低于某个阈值时,就会激活检索系统来收集相关信息,从而优化检索周期。
Self-RAG 引入了 “反思标记”,使模型能够对其输出进行自我审视。这些标记有两种类型:“检索” 和 “评判”。模型自主决定何时激活检索,或者也可以通过预定义的阈值触发该过程。在检索过程中,生成器会在多个段落上进行片段级别的束搜索,以得出最连贯的序列。评判分数用于更新细分分数,并且在推理过程中可以灵活调整这些权重,以定制模型的行为。自检索增强生成(Self-RAG)的设计无需额外的分类器,也不依赖自然语言推理(NLI)模型,从而简化了决定何时启动检索机制的决策过程,并提高了模型在生成准确回复时的自主判断能力。
5、任务与评估
5.1、下游任务
RAG 的核心任务仍然是问答(QA),包括传统的单跳/多跳问答、多项选择问答、特定领域问答以及适合 RAG 的长篇问答场景。除了问答之外,RAG 还在不断拓展到多个下游任务,如信息提取(IE)、对话生成、代码搜索等。表二总结了 RAG 的主要下游任务及其对应的数据集。
5.2、评估目标
过去,对 RAG 模型的评估主要集中在它们在特定下游任务中的表现。这些评估采用适合手头任务的既定指标。例如,问答评估可能依赖精确匹配(EM)和 F1 分数,而事实核查任务通常以准确率作为主要指标。BLEU 和 ROUGE 指标也常用于评估答案质量。像 RALLE 这样用于自动评估 RAG 应用的工具,同样基于这些特定任务的指标进行评估。尽管如此,专门针对评估 RAG 模型独特特征的研究明显不足。主要评估目标包括:
- 检索质量
- 评估检索质量对于确定检索器组件所获取上下文的有效性至关重要。来自搜索引擎、推荐系统和信息检索系统领域的标准指标被用于衡量 RAG 检索模块的性能。诸如命中率、平均倒数排名(MRR)和归一化折损累积增益(NDCG)等指标常用于此目的
- 生成质量
- 生成质量的评估主要关注生成器从检索到的上下文中合成连贯且相关答案的能力。这种评估可以根据内容的目标分为两类:无标签内容和有标签内容。对于无标签内容,评估包括生成答案的忠实性、相关性和无害性。相比之下,对于有标签内容,重点在于模型所生成信息的准确性
5.3、评估维度
当前对 RAG 模型的评估实践强调三个主要质量分数和四种关键能力,这些共同为评估 RAG 模型的两个主要目标——检索和生成提供依据。
- 质量分数:质量分数从不同角度评估了 RAG 模型在信息检索和生成过程中的效率
- 上下文相关性:评估检索到的上下文的精确性和特异性,确保相关性并最小化与无关内容相关的处理成本
- 答案忠实性:确保生成的答案与检索到的上下文一致,保持连贯性并避免矛盾
- 答案相关性:要求生成的答案与所提出的问题直接相关,有效解决核心问题
- 所需能力:RAG 评估还包括四种体现其适应性和效率的能力。这些能力对于模型在各种挑战和复杂场景下的性能至关重要,会影响质量分数
- 抗噪声能力:评估模型处理与问题相关但缺乏实质信息的噪声文档的能力
- 否定拒绝能力:评估模型在检索到的文档不包含回答问题所需知识时克制回答的辨别能力
- 信息整合能力:评估模型综合多个文档中的信息以解决复杂问题的能力
- 反事实鲁棒性:测试模型即使在被告知文档中可能存在错误信息的情况下,仍能识别并忽略已知不准确内容的能力
上下文相关性和抗噪声能力对于评估检索质量很重要,而答案忠实性、答案相关性、否定拒绝能力、信息整合能力和反事实鲁棒性对于评估生成质量很重要。
必须认识到,这些来自相关研究的指标是传统的衡量方法,尚未代表一种成熟或标准化的量化 RAG 评估维度的方法。一些评估研究中也开发了针对 RAG 模型细微差别定制的自定义指标。
5.4、评估基准和工具
为了便于对 RAG 进行评估,已经提出了一系列基准测试和工具。这些工具提供了定量指标,不仅可以衡量 RAG 模型的性能,还能增强对模型在各个评估维度上能力的理解。著名的基准,如 RGB、RECALL 和 CRUD,专注于评估 RAG 模型的关键能力。同时,像 RAGAS、ARES 和 TruLens8 这样的先进自动化工具使用 LLMs 来评判质量分数。
参考文献
什么是 RAG(检索增强生成)? ↩︎ ↩︎
Retrieval-Augmented Generation for Large Language Models: A Survey ↩︎ ↩︎