综述

作者: Yunfan Gao¹, Yun Xiong², Xinyu Gao³, Kangxiang Jia⁴, Jinliu Pan⁵, Yuxi Bi⁶, Yi Dai⁷, Jiawei Sun⁸, Meng Wang⁹, Haofen Wang¹⁰
通讯作者: Email: haofen.wang@tongji.edu.cn
资源: 可在 https://github.com/Tongji-KGLLM/RAG-Survey 获取
¹上海智能自主系统研究院,同济大学
²复旦大学计算机科学与技术学院,上海市数据科学重点实验室
³同济大学设计与创新学院


摘要

大语言模型(LLMs)展示了令人印象深刻的能力,但在处理领域特定或知识密集型任务时仍面临显著挑战,尤其是当处理超出其训练数据的查询或需要最新信息时,容易产生“幻觉”。检索增强生成(RAG)通过从外部数据库中检索相关知识,增强了生成的准确性和可信度,特别是在知识密集型任务中。RAG 将 LLMs 的内在知识与外部数据库的动态存储库协同结合。本文详细回顾了 RAG 范式的发展,包括 Naive RAG、Advanced RAG 和 Modular RAG,并深入探讨了 RAG 框架的三个核心组成部分:检索、生成和增强技术。本文还介绍了最新的评估框架和基准,最后指出了当前面临的挑战和未来的研究方向。

关键词: 大语言模型,检索增强生成,自然语言处理,信息检索


一、引言

大语言模型(LLMs)取得了显著的成功,但在处理领域特定或知识密集型任务时仍存在显著局限性,尤其是在处理超出其训练数据的查询或需要最新信息时,容易产生“幻觉”。为了克服这些挑战,检索增强生成(RAG)通过从外部知识库中检索相关文档块,增强了 LLMs 的能力。通过引用外部知识,RAG 有效减少了生成事实错误内容的问题。RAG 的集成使得其在聊天机器人和 LLMs 的实际应用中得到了广泛采用,成为推动 LLMs 发展的关键技术。

RAG 技术近年来迅速发展,相关研究的技术树如图 1 所示。RAG 在大模型时代的发展轨迹表现出几个明显的阶段特征。最初,RAG 的诞生与 Transformer 架构的兴起同步,专注于通过预训练模型(PTM)增强语言模型。这一阶段的特征是通过预训练技术进行基础性工作。随后,ChatGPT 的到来标志着 RAG 研究的一个重要转折点,LLMs 展示了强大的上下文学习(ICL)能力。RAG 研究转向为 LLMs 提供更好的信息,以回答更复杂和知识密集型的任务,推动了 RAG 研究的快速发展。随着研究的深入,RAG 的增强不再局限于推理阶段,而是开始与 LLM 微调技术结合。

尽管 RAG 领域发展迅速,但尚未有系统的综述来阐明其更广泛的轨迹。本文旨在填补这一空白,通过梳理 RAG 的发展过程,并展望其未来的发展方向,重点关注 RAG 在 LLMs 中的集成。本文总结了来自 100 多项 RAG 研究的三种主要研究范式,并分析了“检索”、“生成”和“增强”等核心阶段的关键技术。另一方面,当前的研究更多关注方法,缺乏对如何评估 RAG 的分析和总结。本文全面回顾了适用于 RAG 的下游任务、数据集、基准和评估方法。总体而言,本文旨在为读者和专业人士提供关于大模型和 RAG 的详细和结构化的理解,阐明检索增强技术的演变,评估各种方法在各自背景下的优缺点,并推测未来的趋势和创新。

我们的贡献如下:

  • 本文对最先进的 RAG 方法进行了全面系统的回顾,阐明了其通过 Naive RAG、Advanced RAG 和 Modular RAG 等范式的演变。
  • 我们识别并讨论了 RAG 过程中的核心技术,特别是“检索”、“生成”和“增强”方面,并深入探讨了这些组件如何协同工作,形成一个有效且一致的 RAG 框架。
  • 我们总结了当前的 RAG 评估方法,涵盖了 26 个任务、近 50 个数据集,概述了评估目标和指标,以及当前的评估基准和工具。此外,我们展望了 RAG 的未来方向,强调了应对当前挑战的潜在改进。

本文的结构如下:第二部分介绍了 RAG 的主要概念和当前范式。接下来的三个部分分别探讨了核心组件——“检索”、“生成”和“增强”。第三部分重点介绍了检索中的优化方法,包括索引、查询和嵌入优化。第四部分集中在生成中的后检索过程和 LLM 微调。第五部分分析了三种增强过程。第六部分重点介绍了 RAG 的下游任务和评估系统。第七部分主要讨论了 RAG 当前面临的挑战及其未来的发展方向。最后,本文在第八部分进行了总结。


二、RAG 概述

RAG 的典型应用如图 2 所示。用户向 ChatGPT 提出一个关于最近广泛讨论的新闻的问题。由于 ChatGPT 依赖于预训练数据,它最初无法提供有关最新发展的更新。RAG 通过从外部数据库中获取相关知识来填补这一信息空白。在这种情况下,它收集了与用户查询相关的新闻文章。这些文章与原始问题结合,形成了一个全面的提示,使 LLMs 能够生成一个信息丰富的答案。

RAG 研究范式不断发展,我们将其分为三个阶段:Naive RAG、Advanced RAG 和 Modular RAG,如图 3 所示。尽管 RAG 方法具有成本效益且优于原生 LLM,但它们也存在一些局限性。Advanced RAG 和 Modular RAG 的发展正是为了应对 Naive RAG 中的这些特定缺陷。

A. Naive RAG

Naive RAG 研究范式代表了最早的方法论,在 ChatGPT 广泛采用后不久便获得了关注。Naive RAG 遵循传统流程,包括索引、检索和生成,也被称为“检索-阅读”框架。

索引:首先对原始数据进行清理和提取,数据格式多样,如 PDF、HTML、Word 和 Markdown,然后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本被分割成较小的可处理块。这些块随后通过嵌入模型编码为向量表示,并存储在向量数据库中。这一步骤对于在后续检索阶段实现高效的相似性搜索至关重要。

检索:在收到用户查询后,RAG 系统使用与索引阶段相同的编码模型将查询转换为向量表示。然后计算查询向量与索引语料库中块向量之间的相似性分数。系统优先检索与查询最相似的前 K 个块。这些块随后用作提示中的扩展上下文。

生成:提出的查询和选定的文档被合成为一个连贯的提示,大语言模型的任务是生成响应。模型的回答方法可能因任务特定标准而异,允许其利用其固有的参数知识或将响应限制在提供的文档中包含的信息。在持续对话的情况下,任何现有的对话历史都可以集成到提示中,使模型能够有效地进行多轮对话交互。

然而,Naive RAG 存在一些显著的缺点:

  • 检索挑战:检索阶段通常面临精度和召回率的问题,导致选择不匹配或不相关的块,并遗漏关键信息。
  • 生成困难:在生成响应时,模型可能面临幻觉问题,生成的内容不受检索上下文的支持。此阶段还可能遇到输出的不相关性、毒性或偏见,影响响应的质量和可靠性。
  • 增强障碍:将检索到的信息与不同任务集成可能具有挑战性,有时会导致不连贯或脱节的输出。当从多个来源检索到类似信息时,该过程还可能遇到冗余,导致重复响应。确定各种段落的重要性和相关性,并确保风格和语气的一致性,进一步增加了复杂性。面对复杂问题,基于原始查询的单一检索可能不足以获取足够的上下文信息。

此外,生成模型可能过度依赖增强信息,导致输出仅仅是重复检索到的内容,而没有添加有见地或综合的信息。

B. Advanced RAG

Advanced RAG 引入了特定的改进以克服 Naive RAG 的局限性。专注于提高检索质量,它采用了预检索和后检索策略。为了解决索引问题,Advanced RAG 通过使用滑动窗口方法、细粒度分割和元数据的结合来改进其索引技术。此外,它还结合了几种优化方法来简化检索过程。

预检索过程:在此阶段,主要重点是优化索引结构和原始查询。优化索引的目标是提高被索引内容的质量。这涉及以下策略:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。而查询优化的目标是使用户的原始问题更清晰,更适合检索任务。常见的方法包括查询重写、查询转换、查询扩展和其他技术。

后检索过程:一旦检索到相关上下文,关键是将其与查询有效集成。后检索过程中的主要方法包括重新排序块和上下文压缩。重新排序检索到的信息以将最相关的内容重新定位到提示的边缘是一个关键策略。这一概念已在 LlamaIndex、LangChain 和 HayStack 等框架中实现。将所有相关文档直接输入 LLMs 可能导致信息过载,稀释对关键细节的关注。为了缓解这一问题,后检索工作集中在选择基本信息,强调关键部分,并缩短要处理的上下文。

C. Modular RAG

模块化 RAG 架构超越了前两种 RAG 范式,提供了更高的适应性和多功能性。它结合了多种策略来改进其组件,例如添加用于相似性搜索的搜索模块,并通过微调改进检索器。引入了诸如重构 RAG 模块和重新排列 RAG 管道等创新,以应对特定挑战。模块化 RAG 方法的转变正在变得普遍,支持其组件的顺序处理和集成端到端训练。尽管其独特性,模块化 RAG 建立在 Advanced 和 Naive RAG 的基础原则之上,展示了 RAG 家族的进步和精细化。

新模块:模块化 RAG 框架引入了额外的专用组件,以增强检索和处理能力。搜索模块适应特定场景,支持跨各种数据源(如搜索引擎、数据库和知识图谱)的直接搜索,使用 LLM 生成的代码和查询语言。RAG-Fusion 通过采用多查询策略扩展用户查询为不同视角,利用并行向量搜索和智能重新排序来揭示显式和转化性知识。记忆模块利用 LLM 的记忆来指导检索,创建一个无界记忆池,通过迭代自我增强使文本更紧密地符合数据分布。RAG 系统中的路由通过不同的数据源导航,为查询选择最佳路径,无论是涉及摘要、特定数据库搜索还是合并不同的信息流。预测模块旨在通过 LLM 直接生成上下文来减少冗余和噪声,确保相关性和准确性。最后,任务适配器模块为各种下游任务定制 RAG,自动检索零样本输入的提示,并通过少样本查询生成创建任务特定的检索器。这种全面的方法不仅简化了检索过程,还显著提高了检索信息的质量和相关性,以增强的精度和灵活性满足广泛的任务和查询。

新模式:模块化 RAG 通过允许模块替换或重新配置以应对特定挑战,提供了显著的适应性。这超越了 Naive 和 Advanced RAG 的固定结构,其特点是简单的“检索”和“阅读”机制。此外,模块化 RAG 通过集成新模块或调整现有模块之间的交互流程扩展了这种灵活性,增强了其在不同任务中的适用性。

诸如 Rewrite-Retrieve-Read 模型等创新利用 LLM 的能力通过重写模块和 LM 反馈机制来改进检索查询,提高任务性能。同样,Generate-Read 等方法用 LLM 生成的内容取代传统检索,而 Recite-Read 则强调从模型权重中检索,增强模型处理知识密集型任务的能力。混合检索策略结合了关键词、语义和向量搜索,以满足不同的查询。此外,使用子查询和假设文档嵌入(HyDE)通过关注生成答案与真实文档之间的嵌入相似性来提高检索相关性。

模块排列和交互的调整,例如 Demonstrate-Search-Predict(DSP)框架和 ITERRETGEN 的迭代 Retrieve-Read-Retrieve-Read 流程,展示了动态使用模块输出以增强另一个模块功能的优势,说明了增强模块协同作用的复杂理解。模块化 RAG 流程的灵活编排展示了通过 FLARE 和 Self-RAG 等技术实现自适应检索的好处。这种方法超越了固定的 RAG 检索过程,通过评估不同场景下检索的必要性。灵活架构的另一个好处是 RAG 系统可以更容易地与其他技术(如微调或强化学习)集成。例如,这可以涉及微调检索器以获得更好的检索结果,微调生成器以获得更个性化的输出,或进行协作微调。

D. RAG 与微调

随着 LLMs 的普及,其增强方法引起了广泛关注。在 LLMs 的优化方法中,RAG 经常与微调(FT)和提示工程进行比较。每种方法都有其独特的特点,如图 4 所示。我们使用象限图来说明三种方法在两个维度上的差异:外部知识需求和模型适应需求。提示工程利用模型的内在能力,对外部知识和模型适应的需求最低。RAG 可以被比作为模型提供量身定制的教科书以进行信息检索,非常适合精确的信息检索任务。相比之下,FT 类似于学生随着时间的推移内化知识,适用于需要复制特定结构、风格或格式的场景。

RAG 在动态环境中表现出色,提供实时知识更新和有效利用具有高可解释性的外部知识源。然而,它伴随着更高的延迟和关于数据检索的伦理考虑。另一方面,FT 更为静态,需要重新训练以进行更新,但能够深度定制模型的行为和风格。它需要大量的计算资源进行数据集准备和训练,虽然可以减少幻觉,但在处理不熟悉的数据时可能面临挑战。

在对各种知识密集型任务在不同主题上的表现进行的多次评估中,[28] 发现,尽管无监督微调显示出一些改进,但 RAG 始终优于它,无论是对于训练期间遇到的知识还是全新的知识。此外,研究发现 LLMs 难以通过无监督微调学习新的事实信息。RAG 和 FT 之间的选择取决于应用环境中对数据动态性、定制性和计算能力的具体需求。RAG 和 FT 并不相互排斥,可以相互补充,在不同层次上增强模型的能力。在某些情况下,它们的结合使用可能会带来最佳性能。涉及 RAG 和 FT 的优化过程可能需要多次迭代才能达到满意的结果。


三、检索

在 RAG 的背景下,从数据源中高效检索相关文档至关重要。涉及几个关键问题,例如检索源、检索粒度、检索的预处理以及相应嵌入模型的选择。

A. 检索源

RAG 依赖外部知识来增强 LLMs,而检索源的类型和检索单元的粒度都会影响最终的生成结果。

数据结构:最初,文本是检索的主流来源。随后,检索源扩展到包括半结构化数据(PDF)和结构化数据(知识图谱,KG)以进行增强。除了从原始外部源检索外,最近的研究趋势还包括利用 LLMs 自身生成的内容进行检索和增强。

非结构化数据,如文本,是最广泛使用的检索源,主要从语料库中收集。对于开放域问答(ODQA)任务,主要检索源是 Wikipedia Dump,当前主要版本包括 HotpotQA(2017 年 10 月 1 日)和 DPR(2018 年 12 月)。除了百科全书数据,常见的非结构化数据还包括跨语言文本和领域特定数据(如医疗和法律领域)。

半结构化数据:通常指包含文本和表格信息的数据,如 PDF。处理半结构化数据对传统 RAG 系统提出了挑战,主要有两个原因。首先,文本分割过程可能会无意中分离表格,导致检索过程中数据损坏。其次,将表格纳入数据可能会使语义相似性搜索复杂化。在处理半结构化数据时,一种方法是利用 LLMs 的代码能力在数据库中的表上执行 Text-2-SQL 查询,例如 TableGPT。或者,可以将表格转换为文本格式以使用基于文本的方法进行进一步分析。然而,这两种方法都不是最佳解决方案,表明该领域存在大量的研究机会。

结构化数据,如知识图谱(KGs),通常是经过验证的,可以提供更精确的信息。KnowledgeGPT 生成 KB 搜索查询并将知识存储在个性化库中,增强了 RAG 模型的知识丰富性。为了应对 LLMs 在理解和回答有关文本图的问题时的局限性,G-Retriever 集成了图神经网络(GNNs)、LLMs 和 RAG,通过软提示 LLM 增强图理解和问答能力,并采用 Prize-Collecting Steiner Tree(PCST)优化问题进行有针对性的图检索。相反,构建、验证和维护结构化数据库需要额外的努力。

LLMs 生成的内容:为了解决 RAG 中外部辅助信息的局限性,一些研究专注于利用 LLMs 的内部知识。SKR 将问题分类为已知或未知,选择性地应用检索增强。GenRead 用 LLM 生成器取代检索器,发现 LLM 生成的上下文通常包含更准确的答案,因为它们更好地符合因果语言建模的预训练目标。Selfmem 迭代创建一个无界记忆池,使用检索增强的生成器,通过记忆选择器选择输出作为原始问题的双重问题,从而自我增强生成模型。这些方法强调了 RAG 中创新数据源利用的广度,努力提高模型性能和任务有效性。

检索粒度:除了检索源的数据格式外,检索数据的粒度也是一个重要因素。理论上,粗粒度检索单元可以提供更多与问题相关的信息,但它们也可能包含冗余内容,这可能会分散检索器和语言模型在下游任务中的注意力。另一方面,细粒度检索单元增加了检索的负担,并不能保证语义完整性和满足所需知识。在推理过程中选择合适的检索粒度可以是一个简单而有效的策略,以提高密集检索器的检索和下游任务性能。

在文本中,检索粒度从细到粗,包括词、短语、句子、命题、块、文档。其中,DenseX 提出了使用命题作为检索单元的概念。命题被定义为文本中的原子表达式,每个命题封装一个独特的事实片段,并以简洁、自包含的自然语言格式呈现。这种方法旨在提高检索精度和相关性。在知识图谱(KG)上,检索粒度包括实体、三元组和子图。检索粒度也可以适应下游任务,例如在推荐任务中检索项目 ID 和在句子对中检索。详细信息如表 I 所示。

B. 索引优化

在索引阶段,文档将被处理、分割并转换为嵌入,存储在向量数据库中。索引构建的质量决定了在检索阶段是否能够获得正确的上下文。

分块策略:最常见的方法是将文档按固定数量的词(例如 100、256、512)分割成块。较大的块可以捕获更多的上下文,但也会产生更多的噪声,需要更长的处理时间和更高的成本。而较小的块可能无法完全传达必要的上下文,但噪声较少。然而,分块会导致句子内的截断,促使优化递归分割和滑动窗口方法,通过跨多个检索过程合并全局相关信息实现分层检索。尽管如此,这些方法仍然无法在语义完整性和上下文长度之间取得平衡。因此,提出了诸如 Small2Big 等方法,其中句子(小)用作检索单元,并提供前后句子作为(大)上下文给 LLMs。

元数据附加:块可以通过元数据信息(如页码、文件名、作者、类别、时间戳)进行丰富。随后,可以根据此元数据进行过滤检索,限制检索范围。在检索过程中为文档时间戳分配不同的权重可以实现时间感知的 RAG,确保知识的新鲜度并避免过时信息。

除了从原始文档中提取元数据外,还可以人工构建元数据。例如,添加段落摘要以及引入假设问题。这种方法也称为 Reverse HyDE。具体来说,使用 LLM 生成可以由文档回答的问题,然后在检索过程中计算原始问题与假设问题之间的相似性,以减少问题与答案之间的语义差距。

结构化索引:增强信息检索的一种有效方法是为文档建立层次结构。通过构建层次结构,RAG 系统可以加快相关数据的检索和处理。

层次索引结构:文件按父子关系排列,块与其链接。数据摘要存储在每个节点,有助于快速遍历数据并帮助 RAG 系统确定要提取的块。这种方法还可以缓解由块提取问题引起的幻觉。

知识图谱索引:利用 KG 构建文档的层次结构有助于保持一致性。它描绘了不同概念和实体之间的联系,显著减少了幻觉的可能性。另一个优势是将信息检索过程转化为 LLM 可以理解的指令,从而提高知识检索的准确性,并使 LLM 能够生成上下文连贯的响应,从而提高 RAG 系统的整体效率。为了捕捉文档内容和结构之间的逻辑关系,KGP 提出了一种使用 KG 在多个文档之间构建索引的方法。该 KG 由节点(代表文档中的段落或结构,如页面和表格)和边(指示段落之间的语义/词汇相似性或文档结构内的关系)组成,有效解决了多文档环境中的知识检索和推理问题。

C. 查询优化

Naive RAG 的主要挑战之一是直接依赖用户的原始查询作为检索基础。制定一个精确而清晰的问题是困难的,轻率的查询会导致检索效果不佳。有时,问题本身很复杂,语言组织不当。另一个困难在于语言的复杂性和歧义性。语言模型在处理专业词汇或具有多重含义的模糊缩写时常常遇到困难。例如,它们可能无法区分“LLM”是指“大语言模型”还是法律背景下的“法学硕士”。

查询扩展:将单个查询扩展为多个查询丰富了查询内容,为解决特定细微差别的缺乏提供了进一步的上下文,从而确保生成答案的最佳相关性。

多查询:通过提示工程扩展查询,这些查询可以并行执行。查询扩展不是随机的,而是精心设计的。

子查询:子问题规划过程表示生成必要的子问题,以在结合时完全回答原始问题。添加相关上下文的过程在原则上类似于查询扩展。具体来说,可以使用最少到最多的提示方法将复杂问题分解为一系列更简单的子问题。

验证链(CoVe):扩展的查询通过 LLM 进行验证,以达到减少幻觉的效果。经过验证的扩展查询通常表现出更高的可靠性。

查询转换:核心概念是基于转换后的查询而不是用户的原始查询检索块。

查询重写:原始查询并不总是最适合 LLM 检索,尤其是在现实场景中。因此,我们可以提示 LLM 重写查询。除了使用 LLM 进行查询重写外,还可以使用专门的较小语言模型,如 RRR(重写-检索-读取)。在淘宝中实施的查询重写方法 BEQUE 显著提高了长尾查询的召回效果,导致 GMV 上升。

另一种查询转换方法是使用提示工程让 LLM 基于原始查询生成查询以进行后续检索。HyDE 构建假设文档(假设的原始查询答案)。它专注于从答案到答案的嵌入相似性,而不是寻求问题或查询的嵌入相似性。使用 Step-back Prompting 方法,原始查询被抽象为生成一个高级概念问题(step-back 问题)。在 RAG 系统中,step-back 问题和原始查询都用于检索,结果都用作语言模型答案生成的基础。

查询路由:基于不同的查询,路由到不同的 RAG 管道,这适用于设计用于适应多样化场景的多功能 RAG 系统。

元数据路由器/过滤器:第一步是从查询中提取关键词(实体),然后根据块中的关键词和元数据进行过滤以缩小搜索范围。

语义路由器:另一种路由方法涉及利用查询的语义信息。具体方法参见语义路由器。当然,也可以采用混合路由方法,结合语义和基于元数据的方法以增强查询路由。

D. 嵌入

在 RAG 中,检索是通过计算问题嵌入和文档块嵌入之间的相似性(例如余弦相似性)来实现的,其中嵌入模型的语义表示能力起着关键作用。这主要包括稀疏编码器(BM25)和密集检索器(BERT 架构的预训练语言模型)。最近的研究引入了突出的嵌入模型,如 AngIE、Voyage、BGE 等,它们受益于多任务指令微调。Hugging Face 的 MTEB 排行榜评估了嵌入模型在 8 个任务中的表现,涵盖了 58 个数据集。此外,C-MTEB 专注于中文能力,涵盖了 6 个任务和 35 个数据集。对于“使用哪种嵌入模型”没有一刀切的答案。然而,某些特定模型更适合特定用例。

混合检索:稀疏和密集嵌入方法捕捉不同的相关性特征,可以通过利用互补的相关性信息相互受益。例如,稀疏检索模型可用于为训练密集检索模型提供初始搜索结果。此外,预训练语言模型(PLMs)可用于学习术语权重以增强稀疏检索。具体来说,它还表明稀疏检索模型可以增强密集检索模型的零样本检索能力,并帮助密集检索器处理包含稀有实体的查询,从而提高鲁棒性。

微调嵌入模型:在上下文与预训练语料库显著偏离的情况下,特别是在医疗、法律实践和其他充满专有术语的领域,微调嵌入模型在自己的领域数据集上变得至关重要,以缓解这种差异。

除了补充领域知识外,微调的另一个目的是对齐检索器和生成器,例如使用 LLM 的结果作为微调的监督信号,称为 LSR(LM 监督的检索器)。PROMPTAGATOR 利用 LLM 作为少样本查询生成器,创建任务特定的检索器,解决了监督微调中的挑战,特别是在数据稀缺的领域。另一种方法 LLM-Embedder 利用 LLMs 在多个下游任务中生成奖励信号。检索器通过两种类型的监督信号进行微调:数据集的硬标签和来自 LLMs 的软奖励。这种双信号方法促进了更有效的微调过程,使嵌入模型适应各种下游应用。REPLUG 使用检索器和 LLM 计算检索文档的概率分布,然后通过计算 KL 散度进行监督训练。这种简单而有效的训练方法通过使用 LM 作为监督信号增强了检索模型的性能,消除了对特定交叉注意力机制的需求。此外,受 RLHF(从人类反馈中强化学习)的启发,利用基于 LM 的反馈通过强化学习增强检索器。

适配器:微调模型可能会带来挑战,例如通过 API 集成功能或解决由于本地计算资源有限而出现的约束。因此,一些方法选择集成外部适配器以帮助对齐。

为了优化 LLM 的多任务能力,UPRISE 训练了一个轻量级提示检索器,可以自动从预构建的提示池中检索适合给定零样本任务输入的提示。AAR(增强适应的检索器)引入了一个通用适配器,旨在适应多个下游任务。而 PRCA 添加了一个可插拔的奖励驱动的上下文适配器,以增强特定任务的性能。BGM 保持检索器和 LLM 固定,并在两者之间训练一个桥接 Seq2Seq 模型。桥接模型旨在将检索到的信息转换为 LLMs 可以有效处理的格式,使其不仅能够重新排序,还能动态选择每个查询的段落,并可能采用更高级的策略,如重复。此外,PKG 引入了一种创新的方法,通过指令微调将知识集成到白盒模型中。在这种方法中,检索器模块被直接替换以根据查询生成相关文档。这种方法有助于解决微调过程中遇到的困难,并提高模型性能。


四、生成

检索后,直接将所有检索到的信息输入 LLM 以回答问题并不是一个好的做法。以下将从两个角度介绍调整:调整检索内容和调整 LLM。

A. 上下文管理

冗余信息可能会干扰 LLM 的最终生成,而过长的上下文也可能导致 LLM 出现“迷失在中间”的问题。像人类一样,LLM 往往只关注长文本的开头和结尾,而忘记中间部分。因此,在 RAG 系统中,我们通常需要进一步处理检索到的内容。

重新排序:重新排序从根本上重新排列文档块,以首先突出最相关的结果,有效减少整体文档池,在信息检索中起到增强器和过滤器的双重作用,为更精确的语言模型处理提供精炼的输入。重新排序可以使用基于规则的方法,这些方法依赖于预定义的指标,如多样性、相关性和 MRR,或基于模型的方法,如来自 BERT 系列的编码器-解码器模型(例如 SpanBERT)、专门的重新排序模型(如 Cohere rerank 或 bge-reranker-large)和通用大语言模型(如 GPT)。

上下文选择/压缩:RAG 过程中的一个常见误解是认为检索尽可能多的相关文档并将它们连接起来形成一个长检索提示是有益的。然而,过多的上下文会引入更多的噪声,削弱 LLM 对关键信息的感知。

(长)LLMLingua 利用小型语言模型(SLMs),如 GPT-2 Small 或 LLaMA-7B,检测并删除不重要的词,将其转换为人类难以理解但 LLMs 易于理解的形式。这种方法提供了一种直接且实用的提示压缩方法,消除了对 LLMs 额外训练的需求,同时平衡了语言完整性和压缩率。PRCA 通过训练信息提取器解决了这个问题。同样,RECOMP 采用了一种类似的方法,通过对比学习训练信息浓缩器。每个训练数据点由一个正样本和五个负样本组成,编码器在整个过程中使用对比损失进行训练。

除了压缩上下文外,减少文档数量也有助于提高模型答案的准确性。Ma 等人提出了“过滤-重新排序”范式,结合了 LLMs 和 SLMs 的优势。在这种范式中,SLMs 作为过滤器,而 LLMs 作为重新排序代理。研究表明,指示 LLMs 重新排列 SLMs 识别的具有挑战性的样本在各种信息抽取(IE)任务中带来了显著的改进。另一种简单而有效的方法是让 LLM 在生成最终答案之前评估检索到的内容。这允许 LLM 通过 LLM 批评过滤掉相关性差的文档。例如,在 Chatlaw 中,LLM 被提示对引用的法律条款进行自我建议以评估其相关性。

B. LLM 微调

基于场景和数据特征对 LLMs 进行有针对性的微调可以产生更好的结果。这也是使用本地 LLMs 的最大优势之一。当 LLMs 缺乏特定领域的数据时,可以通过微调向 LLM 提供额外的知识。Huggingface 的微调数据也可以作为初始步骤。

微调的另一个好处是能够调整模型的输入和输出。例如,它可以使 LLM 适应特定的数据格式,并按照指示生成特定风格的响应。对于与结构化数据交互的检索任务,SANTA 框架实施了三部分训练方案,以有效封装结构和语义的细微差别。初始阶段专注于检索器,其中对比学习用于优化查询和文档嵌入。

通过强化学习将 LLM 输出与人类或检索器偏好对齐是一种潜在的方法。例如,手动注释最终生成的答案,然后通过强化学习提供反馈。除了与人类偏好对齐外,还可以与微调模型和检索器的偏好对齐。当无法访问强大的专有模型或更大参数的开源模型时,一种简单而有效的方法是蒸馏更强大的模型(例如 GPT-4)。LLM 的微调也可以与检索器的微调协调以对齐偏好。一种典型的方法,如 RA-DIT,使用 KL 散度对齐检索器和生成器的评分函数。


五、RAG 中的增强过程

在 RAG 领域,标准实践通常涉及单一(一次)检索步骤,然后生成,这可能导致效率低下,并且通常不足以解决需要多步推理的复杂问题,因为它提供了有限的信息范围。许多研究针对这一问题优化了检索过程,我们已在图 5 中总结了这些研究。

A. 迭代检索

迭代检索是一个过程,其中知识库基于初始查询和迄今为止生成的文本反复搜索,为 LLMs 提供更全面的知识库。这种方法已被证明可以通过多次检索迭代提供额外的上下文参考来增强后续答案生成的鲁棒性。然而,它可能会受到语义不连续性和不相关信息积累的影响。ITERRETGEN 采用了一种协同方法,结合了“检索增强生成”和“生成增强检索”来处理需要再现特定信息的任务。该模型利用解决输入任务所需的内容作为检索相关知识的上下文基础,从而在后续迭代中促进生成更好的响应。

B. 递归检索

递归检索通常用于信息检索和 NLP 中,以提高搜索结果的深度和相关性。该过程涉及基于先前搜索获得的结果迭代优化搜索查询。递归检索旨在通过反馈循环逐渐收敛到最相关信息,从而增强搜索体验。IRCoT 使用思维链(CoT)指导检索过程,并使用获得的检索结果优化 CoT。ToC 创建一个澄清树,系统地优化查询中的模糊部分。它特别适用于用户需求从一开始就不完全清楚或所寻求的信息高度专业化或微妙的复杂搜索场景。该过程的递归性质允许持续学习和适应用户需求,通常导致对搜索结果的满意度提高。

为了应对特定的数据场景,递归检索和多跳检索技术一起使用。递归检索涉及结构化索引以分层方式处理和检索数据,可能包括在基于此摘要执行检索之前总结文档或长 PDF 的部分。随后,文档内的二次检索细化搜索,体现了该过程的递归性质。相比之下,多跳检索旨在深入挖掘图结构数据源,提取相互关联的信息。

C. 自适应检索

自适应检索方法,如 Flare 和 Self-RAG,通过使 LLMs 能够主动确定检索的最佳时机和内容来优化 RAG 框架,从而提高所获取信息的效率和相关性。

这些方法是更广泛趋势的一部分,其中 LLMs 在其操作中采用主动判断,如 AutoGPT、Toolformer 和 Graph-Toolformer 等模型代理所见。例如,Graph-Toolformer 将其检索过程分为不同的步骤,其中 LLMs 主动使用检索器,应用 Self-Ask 技术,并使用少样本提示启动搜索查询。这种主动姿态允许 LLMs 决定何时搜索必要的信息,类似于代理如何使用工具。

WebGPT 集成了一个强化学习框架,用于训练 GPT-3 模型在文本生成过程中自主使用搜索引擎。它使用特殊标记导航此过程,这些标记促进诸如搜索引擎查询、浏览结果和引用参考等操作,从而通过使用外部搜索引擎扩展 GPT-3 的能力。Flare 通过监控生成过程的置信度(由生成术语的概率指示)自动确定检索时机。当概率低于某个阈值时,将激活检索系统以收集相关信息,从而优化检索周期。Self-RAG 引入了“反思标记”,允许模型自省其输出。这些标记有两种类型:“检索”和“批评”。模型自主决定何时激活检索,或者可以触发预定义的阈值。在检索过程中,生成器在多个段落中进行片段级束搜索以得出最连贯的序列。批评分数用于更新细分分数,并可以在推理过程中调整这些权重,定制模型的行为。Self-RAG 的设计消除了对额外分类器或依赖自然语言推理(NLI)模型的需求,从而简化了何时参与检索机制的决策过程,并提高了模型在生成准确响应时的自主判断能力。


六、任务与评估

RAG 在 NLP 领域的快速发展和日益普及推动了 RAG 模型评估成为 LLMs 社区研究的重点。本次评估的主要目标是理解和优化 RAG 模型在各种应用场景中的性能。本章将主要介绍 RAG 的主要下游任务、数据集以及如何评估 RAG 系统。

A. 下游任务

RAG 的核心任务仍然是问答(QA),包括传统的单跳/多跳 QA、多项选择、领域特定的 QA 以及适合 RAG 的长篇场景。除了 QA,RAG 正在不断扩展到多个下游任务,如信息抽取(IE)、对话生成、代码搜索等。RAG 的主要下游任务及其对应数据集总结在表 II 中。

B. 评估目标

历史上,RAG 模型评估集中在特定下游任务的执行上。这些评估采用适合任务的既定指标。例如,问答评估可能依赖 EM 和 F1 分数,而事实核查任务通常以准确性为主要指标。BLEU 和 ROUGE 指标也常用于评估答案质量。像 RALLE 这样的工具,专为 RAG 应用的自动评估而设计,同样基于这些任务特定指标进行评估。尽管如此,专门评估 RAG 模型独特特征的研究仍然匮乏。主要评估目标包括:

检索质量:评估检索质量对于确定检索器组件获取的上下文的有效性至关重要。采用搜索引擎、推荐系统和信息检索系统领域的标准指标来衡量 RAG 检索模块的性能。常用的指标包括命中率、MRR 和 NDCG。

生成质量:生成质量评估集中在生成器从检索到的上下文中合成连贯和相关答案的能力。此评估可以根据内容的目标进行分类:未标记和已标记内容。对于未标记内容,评估包括生成答案的忠实性、相关性和无害性。相比之下,对于已标记内容,重点是模型生成信息的准确性。此外,检索和生成质量评估可以通过手动或自动评估方法进行。

C. 评估方面

当代 RAG 模型评估实践强调三个主要质量分数和四个基本能力,这些共同为 RAG 模型的两个主要目标:检索和生成的评估提供信息。

质量分数:质量分数包括上下文相关性、答案忠实性和答案相关性。这些质量分数从不同角度评估 RAG 模型在信息检索和生成过程中的效率。

  • 上下文相关性:评估检索到的上下文的精确性和特异性,确保相关性并最小化与无关内容相关的处理成本。
  • 答案忠实性:确保生成的答案忠实于检索到的上下文,保持一致性并避免矛盾。
  • 答案相关性:要求生成的答案直接与提出的问题相关,有效解决核心问题。

所需能力:RAG 评估还包括四个能力,表明其适应性和效率:噪声鲁棒性、负面拒绝、信息整合和反事实鲁棒性。这些能力对于模型在各种挑战和复杂场景下的表现至关重要,影响质量分数。

  • 噪声鲁棒性:评估模型管理与问题相关但缺乏实质性信息的噪声文档的能力。
  • 负面拒绝:评估模型在检索到的文档不包含回答问题所需知识时拒绝响应的辨别力。
  • 信息整合:评估模型从多个文档中综合信息以解决复杂问题的熟练程度。
  • 反事实鲁棒性:测试模型识别和忽略文档中已知不准确信息的能力,即使被告知潜在的错误信息。

上下文相关性和噪声鲁棒性对于评估检索质量很重要,而答案忠实性、答案相关性、负面拒绝、信息整合和反事实鲁棒性对于评估生成质量很重要。


七、讨论与未来展望

尽管 RAG 技术取得了显著进展,但仍存在一些挑战需要深入研究。本章将主要介绍 RAG 当前面临的挑战和未来的研究方向。

A. RAG 与长上下文

随着相关研究的深入,LLMs 的上下文不断扩展。目前,LLMs 可以轻松管理超过 200,000 个标记的上下文。这一能力意味着以前依赖 RAG 的长文档问答现在可以将整个文档直接纳入提示中。这也引发了关于当 LLMs 不受上下文限制时 RAG 是否仍然必要的讨论。事实上,RAG 仍然发挥着不可替代的作用。一方面,一次性向 LLMs 提供大量上下文会显著影响其推理速度,而分块检索和按需输入可以显著提高操作效率。另一方面,基于 RAG 的生成可以快速定位原始参考,帮助用户验证生成的答案。整个检索和推理过程是可观察的,而仅依赖长上下文的生成仍然是一个黑箱。相反,上下文的扩展为 RAG 的发展提供了新的机会,使其能够解决更复杂的问题和需要阅读大量材料才能回答的综合或总结性问题。在超长上下文中开发新的 RAG 方法是未来的研究趋势之一。

B. RAG 鲁棒性

检索过程中噪声或矛盾信息的存在可能会对 RAG 的输出质量产生不利影响。这种情况被形象地称为“错误信息比没有信息更糟糕”。提高 RAG 对此类对抗性或反事实输入的抵抗力正在获得研究动力,并已成为关键性能指标。Cuconasu 等人分析了应检索哪种类型的文档,评估了文档与提示的相关性、其位置以及上下文中包含的数量。研究结果表明,包含不相关文档可能会意外地将准确性提高 30% 以上,这与最初的质量下降假设相矛盾。这些结果强调了开发专门策略以将检索与语言生成模型集成的重要性,突出了进一步研究和探索 RAG 鲁棒性的必要性。

C. 混合方法

将 RAG 与微调结合正在成为一种领先策略。确定 RAG 和微调的最佳集成方式——无论是顺序、交替还是通过端到端联合训练——以及如何利用参数化和非参数化的优势,都是值得探索的领域。另一个趋势是将具有特定功能的 SLMs 引入 RAG,并通过 RAG 系统的结果进行微调。例如,CRAG 训练了一个轻量级检索评估器,以评估查询检索到的文档的整体质量,并根据置信度触发不同的知识检索操作。

D. RAG 的扩展规律

基于 RAG 的端到端模型和预训练模型仍然是当前研究人员的焦点之一。这些模型的参数是关键因素之一。虽然 LLMs 的扩展规律已经确立,但它们对 RAG 的适用性仍不确定。像 RETRO++ 这样的初步研究已经开始解决这一问题,但 RAG 模型中的参数数量仍然落后于 LLMs。较小模型优于较大模型的反向扩展规律的可能性特别有趣,值得进一步研究。

E. 生产级 RAG

RAG 的实用性和与工程要求的一致性促进了其采用。然而,提高检索效率、提高大型知识库中的文档召回率以及确保数据安全——例如防止 LLMs 无意中泄露文档来源或元数据——仍然是关键的工程挑战。

RAG 生态系统的发展受到其技术栈进展的极大影响。随着 ChatGPT 的出现,LangChain 和 LLamalndex 等关键工具迅速流行起来,提供了广泛的 RAG 相关 API,并成为 LLMs 领域的重要组成部分。新兴技术栈虽然功能不如 LangChain 和 LLamalndex 丰富,但通过其专业产品脱颖而出。例如,Flowise AI 优先考虑低代码方法,允许用户通过用户友好的拖放界面部署 AI 应用程序,包括 RAG。HayStack、Meltano 和 Cohere Coral 等其他技术也因其在该领域的独特贡献而受到关注。

除了专注于 AI 的供应商外,传统软件和云服务提供商也在扩展其产品以包括 RAG 中心服务。Weaviate 的 Verba 专为个人助理应用程序设计,而 Amazon 的 Kendra 提供智能企业搜索服务,使用户能够使用内置连接器浏览各种内容存储库。在 RAG 技术的发展中,明显存在不同的专业化方向,例如:1)定制——根据特定要求定制 RAG。2)简化——使 RAG 更易于使用,以减少初始学习曲线。3)专业化——优化 RAG 以更好地服务于生产环境。

RAG 模型及其技术栈的相互增长是显而易见的;技术进步不断为现有基础设施建立新标准。反过来,技术栈的增强推动了 RAG 能力的发展。RAG 工具包正在汇聚成一个基础技术栈,为高级企业应用程序奠定基础。然而,一个完全集成的综合平台概念仍在未来,需要进一步的创新和发展。

F. 多模态 RAG

RAG 已经超越了其最初的基于文本的问答范围,拥抱了多种模态数据。这一扩展催生了跨多个领域的创新多模态模型,这些模型集成了 RAG 概念:

图像:RA-CM3 是一个开创性的多模态模型,能够检索和生成文本和图像。BLIP-2 利用冻结的图像编码器和 LLMs 进行高效的视觉语言预训练,实现零样本图像到文本的转换。“在写作前可视化”方法使用图像生成来引导 LM 的文本生成,在开放式文本生成任务中显示出前景。

音频和视频:GSS 方法检索并拼接音频片段,将机器翻译的数据转换为语音翻译的数据。UEOP 通过在端到端自动语音识别中引入外部离线策略,实现了语音到文本的转换。此外,基于 KNN 的注意力融合利用音频嵌入和语义相关的文本嵌入来优化 ASR,从而加速领域适应。Vid2Seq 通过专门的时间标记增强语言模型,促进事件边界和文本描述在统一输出序列中的预测。

代码:RBPS 在小型学习任务中表现出色,通过编码和频率分析检索与开发人员目标一致的代码示例。这种方法在测试断言生成和程序修复等任务中显示出有效性。对于结构化知识,CoK 方法首先从知识图谱中提取与输入查询相关的事实,然后将这些事实作为提示集成到输入中,从而提高知识图谱问答任务的性能。


八、结论

本文的总结如图 6 所示,强调了 RAG 通过将语言模型的参数化知识与外部知识库的非参数化数据相结合,显著增强了 LLMs 的能力。该调查展示了 RAG 技术的发展及其在许多不同任务中的应用。分析概述了 RAG 框架内的三个发展范式:Naive、Advanced 和 Modular RAG,每个范式都代表了对其前身的逐步增强。RAG 与其他 AI 方法(如微调和强化学习)的技术集成进一步扩展了其能力。尽管 RAG 技术取得了进展,但仍有机会改进其鲁棒性和处理扩展上下文的能力。RAG 的应用范围正在扩展到多模态领域,将其原则应用于解释和处理图像、视频和代码等多样化数据形式。这一扩展突显了 RAG 在 AI 部署中的重大实际意义,吸引了学术界和工业界的兴趣。


参考文献

文档中引用了大量相关研究,涵盖了 RAG 技术的各个方面,包括检索、生成、增强、评估等。


以上是原始文档的翻译内容。



检索增强生成(RAG)在大语言模型中的应用插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2025/02/14/ai-rag/