面向大型语言模型的检索增强生成:一篇综述

作者/机构: Yunfan Gaoa, Yun Xiongb, Xinyu Gaob, Kangxiang Jiab, Jinliu Panb, Yuxi Bic, Yi Daia, Jiawei Suna, Meng Wangc, and Haofen Wang a,c
a 上海智能自主系统研究院,同济大学
b 数据科学上海市重点实验室,计算机科学学院,复旦大学
c 设计与创新学院,同济大学


A1 主要贡献

本文对检索增强生成(RAG)领域进行了系统性的回顾和梳理。其主要贡献如下:

  • 全面的方法回顾:本文对最先进的RAG方法进行了全面和系统的回顾,将其演变划分为朴素RAG(Naive RAG)、高级RAG(Advanced RAG)和模块化RAG(Modular RAG)三大范式。这一定位将RAG研究置于大型语言模型(LLM)的宏观背景中。
  • 核心技术剖析:本文识别并讨论了RAG流程中不可或缺的核心技术,特别关注“检索”、“生成”和“增强”三个方面。文章深入探讨了这些组件之间的协同作用,阐明了它们如何紧密协作以构建一个连贯而有效的RAG框架。
  • 评估体系与未来展望:本文总结了当前RAG的评估方法,涵盖了26个任务和近50个数据集,并概述了评估目标、指标以及现有的评估基准和工具。此外,文章还展望了RAG的未来发展方向,强调了应对当前挑战的潜在增强措施。

图1. RAG研究的技术树。RAG涉及的阶段主要包括预训练、微调和推理。随着LLM的出现,RAG的研究最初集中于利用LLM强大的上下文学习能力,主要集中在推理阶段。随后的研究更加深入,逐渐更多地与LLM的微调相结合。研究人员也一直在探索在预训练阶段通过检索增强技术来增强语言模型的方法。
图1. RAG研究的技术树。RAG涉及的阶段主要包括预训练、微调和推理。随着LLM的出现,RAG的研究最初集中于利用LLM强大的上下文学习能力,主要集中在推理阶段。随后的研究更加深入,逐渐更多地与LLM的微调相结合。研究人员也一直在探索在预训练阶段通过检索增强技术来增强语言模型的方法。


A3 RAG概述

RAG的基本应用。在一个典型的RAG应用场景中,如图2所示,当用户向一个预训练的语言模型(如ChatGPT)询问近期新闻时,模型由于知识库的滞后性而无法回答。RAG通过从外部数据库中检索相关信息(如新闻文章)来弥补这一信息鸿沟。它将检索到的信息与原始问题结合,形成一个全面的提示,从而使LLM能够生成一个信息充分的答案。

图2. RAG流程在问答中的一个典型实例。主要包括3个步骤。1) 索引:文档被分割成块,编码成向量,并存储在向量数据库中。2) 检索:根据语义相似度,检索与问题最相关的Top-k个块。3) 生成:将原始问题和检索到的块一起输入到LLM中,生成最终答案。
图2. RAG流程在问答中的一个典型实例。主要包括3个步骤。1) 索引:文档被分割成块,编码成向量,并存储在向量数据库中。2) 检索:根据语义相似度,检索与问题最相关的Top-k个块。3) 生成:将原始问题和检索到的块一起输入到LLM中,生成最终答案。

RAG的研究范式演进。RAG的研究范式在不断发展,可以分为三个阶段:朴素RAG(Naive RAG)、高级RAG(Advanced RAG)和模块化RAG(Modular RAG),如图3所示。尽管RAG方法具有成本效益且性能超越原生LLM,但它也存在一些局限性。高级RAG和模块化RAG的发展正是为了应对朴素RAG中的这些特定缺点。

图3. 三种RAG范式的比较。(左) 朴素RAG主要由索引、检索和生成三部分组成。(中) 高级RAG围绕预检索和后检索提出了多种优化策略,其过程类似于朴素RAG,仍遵循链式结构。(右) 模块化RAG继承并发展了前一范式,整体上展现出更大的灵活性。这体现在引入了多个特定的功能模块和替换现有模块。整个过程不限于顺序检索和生成;它包括了迭代和自适应检索等方法。
图3. 三种RAG范式的比较。(左) 朴素RAG主要由索引、检索和生成三部分组成。(中) 高级RAG围绕预检索和后检索提出了多种优化策略,其过程类似于朴素RAG,仍遵循链式结构。(右) 模块化RAG继承并发展了前一范式,整体上展现出更大的灵活性。这体现在引入了多个特定的功能模块和替换现有模块。整个过程不限于顺序检索和生成;它包括了迭代和自适应检索等方法。

A. 朴素RAG (Naive RAG)

朴素RAG的定义与流程。朴素RAG是RAG最早的研究范式,在ChatGPT广泛应用后迅速普及。它遵循一个传统的流程,包括索引、检索和生成三个阶段,也被称为“检索-阅读”(Retrieve-Read)框架【7, Query rewriting for retrieval-augmented large language models, 2023, arXiv】。
1. 索引 (Indexing):该阶段首先对多种格式(如PDF, HTML, Word)的原始数据进行清洗和提取,并统一转换为纯文本格式。为了适应语言模型的上下文长度限制,文本被分割成更小的块(chunks)。然后,这些块通过嵌入模型被编码成向量表示,并存储在向量数据库中,为后续的检索阶段进行高效的相似性搜索做准备。
2. 检索 (Retrieval):当接收到用户查询时,RAG系统使用与索引阶段相同的编码模型将查询转换为向量。系统计算查询向量与索引库中所有块向量的相似度得分,并检索出最相似的Top-K个块。这些块随后被用作扩展的上下文信息。
3. 生成 (Generation):系统将用户的查询和检索到的文档整合成一个连贯的提示,并交由大型语言模型来生成回答。模型的回答方式可以根据任务的具体要求进行调整,既可以利用其固有的参数化知识,也可以严格限制在所提供文档的信息范围内。对于多轮对话场景,现有的对话历史也可以被整合到提示中,以支持有效的多轮交互。

朴素RAG的局限性。朴素RAG面临着一些显著的缺点:
* 检索挑战:检索阶段常在精确率和召回率方面表现不佳,导致选中的是错误对齐或不相关的文本块,同时遗漏了关键信息。
* 生成困难:在生成回答时,模型可能会出现“幻觉”问题,即产生的内容没有得到检索上下文的支持。此外,生成的内容可能存在不相关、有毒或带有偏见等问题,从而降低了回答的质量和可靠性。
* 增强障碍:将检索到的信息与不同任务整合起来可能具有挑战性,有时会导致输出内容不连贯。当从多个来源检索到相似信息时,还会遇到冗余问题,导致回答重复。此外,确定不同段落的重要性和相关性,以及确保风格和语调的一致性,也增加了复杂性。面对复杂问题,仅基于原始查询进行单次检索可能不足以获取充分的上下文信息。
* 过度依赖问题:存在一种担忧,即生成模型可能过度依赖增强信息,导致输出仅仅是重复检索到的内容,而没有增加有见地的或综合性的信息。

B. 高级RAG (Advanced RAG)

高级RAG的改进策略。高级RAG引入了特定的改进措施,以克服朴素RAG的局限性。它专注于提升检索质量,采用了预检索(pre-retrieval)和后检索(post-retrieval)策略。为了解决索引问题,高级RAG通过滑动窗口、细粒度分割和引入元数据等方法来优化其索引技术。此外,它还整合了多种优化方法来简化检索过程【8, Advanced rag techniques: an illustrated overview, 2023, towardsai.net】。

预检索过程 (Pre-retrieval process)。在此阶段,主要焦点是优化索引结构和原始查询。优化索引旨在提高被索引内容的质量,具体策略包括:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。而查询优化的目标是使用户的原始问题更清晰、更适合检索任务,常用方法包括查询重写、查询转换、查询扩展等技术【7, Query rewriting for retrieval-augmented large language models, 2023, arXiv】【9, Large language model based long-tail query rewriting in taobao search, 2023, arXiv】【10, Take a step back: Evoking reasoning via abstraction in large language models, 2023, arXiv】【11, Precise zero-shot dense retrieval without relevance labels, 2022, arXiv】。

后检索过程 (Post-Retrieval Process)。一旦检索到相关上下文,关键在于如何有效地将其与查询整合。后检索过程中的主要方法包括对文本块进行重排(rerank)和上下文压缩(context compressing)。一个关键策略是对检索到的信息进行重排序,将最相关的内容移动到提示的边缘位置。这个概念已在LlamaIndex、LangChain和HayStack等框架中实现【12, Enhancing rag pipelines in haystack: Introducing diversityranker and lostinthemiddleranker, 2023, towardsdatascience.com】。将所有相关文档直接输入LLM可能导致信息过载,用不相关的内容稀释了对关键细节的关注。为了缓解这个问题,后检索工作集中于选择必要信息,强调关键部分,并缩短待处理的上下文长度。

C. 模块化RAG (Modular RAG)

模块化RAG的架构。模块化RAG架构超越了前两种RAG范式,提供了更强的适应性和多功能性。它整合了多种策略来改进其组件,例如添加用于相似性搜索的搜索模块,以及通过微调来优化检索器。为了应对特定挑战,还引入了重构RAG模块【13, Generate rather than retrieve: Large language models are strong context generators, 2022, arXiv】和重排RAG流水线【14, Enhancing retrieval-augmented large language models with iterative retrieval-generation synergy, 2023, arXiv】等创新。向模块化RAG方法的转变正变得普遍,它支持其组件间的顺序处理和端到端集成训练。尽管模块化RAG有其独特性,但它建立在高级和朴素RAG的基础原则之上,展示了RAG家族内部的演进和提炼。

1) 新模块 (New Modules):模块化RAG框架引入了额外的专用组件以增强检索和处理能力。
* 搜索模块 (Search module):能够适应特定场景,允许直接在搜索引擎、数据库和知识图谱等多种数据源中进行搜索,并利用LLM生成的代码和查询语言【15, Knowledgpt: Enhancing large language models with retrieval and storage access on knowledge bases, 2023, arXiv】。
* RAG-Fusion:通过多查询策略解决传统搜索的局限性,将用户查询扩展为多个不同视角,利用并行向量搜索和智能重排来发现显式和转换性知识【16, Forget rag, the future is rag-fusion, 2023, towardsdatascience.com】。
* 记忆模块 (Memory module):利用LLM的记忆来引导检索,创建一个无边界的记忆池,通过迭代式自我增强使文本与数据分布更紧密地对齐【17, Lift yourself up: Retrieval-augmented text generation with self memory, 2023, arXiv】【18, Training data is more valuable than you think: A simple and effective method by retrieving from training data, 2022, arXiv】。
* 路由模块 (Routing):在RAG系统中,路由模块负责在不同的数据源之间导航,为查询选择最佳路径,无论是涉及摘要、特定数据库搜索还是合并不同信息流【19, From classification to generation: Insights into crosslingual retrieval augmented icl, 2023, arXiv】。
* 预测模块 (Predict module):旨在通过LLM直接生成上下文来减少冗余和噪声,确保相关性和准确性【13, Generate rather than retrieve: Large language models are strong context generators, 2022, arXiv】。
* 任务适配器模块 (Task Adapter module):通过为零样本输入自动检索提示和通过少样本查询生成创建特定任务的检索器,使RAG能够适应各种下游任务【20, Uprise: Universal prompt retrieval for improving zero-shot evaluation, 2023, arXiv】【21, Promptagator: Few-shot dense retrieval from 8 examples, 2022, arXiv】。这种全面的方法不仅简化了检索过程,还显著提高了检索信息的质量和相关性,以更高的精度和灵活性满足了广泛的任务和查询需求。

2) 新模式 (New Patterns):模块化RAG通过允许模块替换或重构来应对特定挑战,展现了卓越的适应性。这超越了朴素和高级RAG的固定结构,后者通常是简单的“检索”和“阅读”机制。此外,模块化RAG通过集成新模块或调整现有模块间的交互流程来扩展这种灵活性,增强了其在不同任务中的适用性。
* 流程创新:诸如Rewrite-Retrieve-Read【7, Query rewriting for retrieval-augmented large language models, 2023, arXiv】模型利用LLM的能力,通过重写模块和LM反馈机制来优化检索查询,从而提升任务性能。类似地,Generate-Read【13, Generate rather than retrieve: Large language models are strong context generators, 2022, arXiv】等方法用LLM生成的内容替代传统检索,而ReciteRead【22, Recitation-augmented language models, 2022, arXiv】则强调从模型权重中检索,增强模型处理知识密集型任务的能力。
* 混合策略:混合检索策略整合了关键词、语义和向量搜索,以满足多样化的查询需求。此外,采用子查询和假设性文档嵌入(HyDE)【11, Precise zero-shot dense retrieval without relevance labels, 2022, arXiv】旨在通过关注生成答案与真实文档之间的嵌入相似性来提高检索相关性。
* 动态交互:模块编排和交互的调整,如Demonstrate-Search-Predict (DSP)框架【23, Demonstrate-search-predict: Composing retrieval and language models for knowledge-intensive nlp, 2022, arXiv】和ITER-RETGEN的迭代式“检索-阅读-检索-阅读”流程【14, Enhancing retrieval-augmented large language models with iterative retrieval-generation synergy, 2023, arXiv】,展示了如何动态利用一个模块的输出来增强另一个模块的功能,体现了对增强模块协同作用的深刻理解。
* 自适应检索:模块化RAG流程的灵活编排通过FLARE【24, Active retrieval augmented generation, 2023, arXiv】和Self-RAG【25, Self-rag: Learning to retrieve, generate, and critique through self-reflection, 2023, arXiv】等技术展示了自适应检索的优势。这种方法超越了固定的RAG检索过程,通过评估不同场景下检索的必要性。
* 技术融合:灵活架构的另一个好处是,RAG系统可以更容易地与其他技术(如微调或强化学习)集成【26, Bridging the preference gap between retrievers and llms, 2024, arXiv】。例如,这可以涉及微调检索器以获得更好的检索结果,微调生成器以获得更个性化的输出,或进行协同微调【27, Ra-dit: Retrieval-augmented dual instruction tuning, 2023, arXiv】。

D. RAG与微调 (RAG vs Fine-tuning)

方法对比。在LLM的增强方法中,RAG经常与微调(Fine-tuning, FT)和提示工程进行比较。如图4所示,这三种方法各有特点。我们使用一个四象限图,从“外部知识需求”和“模型适应需求”两个维度来展示它们的差异。提示工程以最少的外部知识和模型适应需求来利用模型的固有能力。RAG可以比作给模型提供一本量身定制的教科书以供信息检索,非常适合精确信息检索任务。相比之下,微调类似于学生随着时间的推移内化知识,适用于需要复制特定结构、风格或格式的场景。

图4. RAG与其他模型优化方法在“所需外部知识”和“所需模型适应”方面的比较。提示工程对模型和外部知识的修改要求较低,专注于利用LLM自身的能力。另一方面,微调涉及对模型进行进一步的训练。在RAG的早期阶段(朴素RAG),对模型修改的需求较低。随着研究的进展,模块化RAG与微调技术的结合越来越紧密。
图4. RAG与其他模型优化方法在“所需外部知识”和“所需模型适应”方面的比较。提示工程对模型和外部知识的修改要求较低,专注于利用LLM自身的能力。另一方面,微调涉及对模型进行进一步的训练。在RAG的早期阶段(朴素RAG),对模型修改的需求较低。随着研究的进展,模块化RAG与微调技术的结合越来越紧密。

RAG的优缺点。RAG在动态环境中表现出色,它能提供实时的知识更新,并有效利用外部知识源,具有很高的可解释性。然而,它也带来了更高的延迟和数据检索方面的伦理考量。

微调的优缺点。微调则相对静态,需要重新训练才能更新知识,但它能实现对模型行为和风格的深度定制。微调需要大量的计算资源来准备数据集和进行训练,虽然可以减少幻觉,但在处理不熟悉的数据时可能面临挑战。

性能比较与结合使用。在一项针对不同主题的知识密集型任务的多重评估中【28, Fine-tuning or retrieval? comparing knowledge injection in llms, 2023, arXiv】,研究发现虽然无监督微调显示出一些改进,但RAG在处理训练中遇到的现有知识和全新知识方面,始终优于微调。此外,研究还发现LLM很难通过无监督微调学习新的事实信息。在RAG和微调之间的选择取决于应用场景中对数据动态性、定制化和计算能力的具体需求。RAG和微调并非相互排斥,它们可以相互补充,在不同层面上增强模型的能力。在某些情况下,它们的结合使用可能会带来最佳性能。涉及RAG和微调的优化过程可能需要多次迭代才能达到满意的结果。


A2 方法细节

III. 检索 (RETRIEVAL)

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

A. 检索源 (Retrieval Source)

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

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

  • 非结构化数据 (Unstructured Data):如文本,是使用最广泛的检索来源,主要从语料库中收集。对于开放域问答(ODQA)任务,主要的检索来源是维基百科转储(Wikipedia Dump),当前主要版本包括HotpotQA(2017年10月1日)和DPR(2018年12月20日)。除了百科全书式数据,常见的非结构化数据还包括跨语言文本【19, From classification to generation: Insights into crosslingual retrieval augmented icl, 2023, arXiv】和特定领域数据(如医疗【67, Corrective retrieval augmented generation, 2024, arXiv】和法律领域【29, Copy is all you need, 2022, The Eleventh International Conference on Learning Representations】)。
  • 半结构化数据 (Semi-structured data):通常指包含文本和表格信息组合的数据,如PDF。处理半结构化数据对传统RAG系统构成了挑战,原因有二。首先,文本分割过程可能无意中将表格分开,导致检索过程中数据损坏。其次,将表格纳入数据会使语义相似性搜索复杂化。处理半结构化数据的一种方法是利用LLM的代码能力,在数据库中的表格上执行Text-2-SQL查询,例如TableGPT【85, Tablegpt: Towards unifying tables, nature language and commands into one gpt, 2023, arXiv】。或者,可以将表格转换为文本格式,使用基于文本的方法进行进一步分析【75, Augmented large language models with parametric knowledge guiding, 2023, arXiv】。然而,这两种方法都不是最优解决方案,表明该领域存在大量的研究机会。
  • 结构化数据 (Structured data):如知识图谱(KGs)【86, Iseeq: Information seeking question generation using dynamic meta-information retrieval and knowledge graphs, 2022, Proceedings of the AAAI Conference on Artificial Intelligence】,通常经过验证,可以提供更精确的信息。KnowledGPT【15, Knowledgpt: Enhancing large language models with retrieval and storage access on knowledge bases, 2023, arXiv】生成知识库搜索查询并将知识存储在个性化库中,增强了RAG模型的知识丰富度。针对LLM在理解和回答关于文本图谱问题时的局限性,G-Retriever【84, G-retriever: Retrieval-augmented generation for textual graph understanding and question answering, 2024, arXiv】集成了图神经网络(GNNs)、LLM和RAG,通过对LLM进行软提示增强了图理解和问答能力,并采用带奖惩的斯坦纳树(PCST)优化问题进行有针对性的图检索。然而,构建、验证和维护结构化数据库需要额外的努力。
  • LLM生成的内容 (LLMs-Generated Content):针对RAG中外部辅助信息的局限性,一些研究专注于利用LLM的内部知识。SKR【58, Self-knowledge guided retrieval augmentation for large language models, 2023, arXiv】将问题分类为已知或未知,并选择性地应用检索增强。GenRead【13, Generate rather than retrieve: Large language models are strong context generators, 2022, arXiv】用LLM生成器取代了检索器,发现LLM生成的内容通常包含更准确的答案,因为它们与因果语言建模的预训练目标更一致。Selfmem【17, Lift yourself up: Retrieval-augmented text generation with self memory, 2023, arXiv】通过一个检索增强的生成器迭代地创建一个无边界的记忆池,使用记忆选择器选择那些作为原始问题对偶问题的输出来自我增强生成模型。这些方法论凸显了RAG中创新数据源利用的广度,旨在提高模型性能和任务效率。

RAG方法总结表
RAG方法总结表

2) 检索粒度。除了检索源的数据格式外,另一个重要因素是检索数据的粒度。理论上,粗粒度的检索单元可以为问题提供更多相关信息,但也可能包含冗余内容,这可能会分散检索器和下游任务中语言模型的注意力【50, Chain-of-note: Enhancing robustness in retrieval-augmented language models, 2023, arXiv】【87, Large language models can be easily distracted by irrelevant context, 2023, International Conference on Machine Learning】。另一方面,细粒度的检索单元增加了检索负担,且不保证语义完整性和满足所需的知识。在推理过程中选择合适的检索粒度可以是一个简单而有效的策略,以提高密集检索器的检索和下游任务性能。

不同数据源的检索粒度。在文本中,检索粒度从细到粗包括:词元(Token)、短语(Phrase)、句子(Sentence)、命题(Proposition)、块(Chunks)、文档(Document)。其中,DenseX【30, Dense x retrieval: What retrieval granularity should we use?, 2023, arXiv】提出了使用命题作为检索单元的概念。命题被定义为文本中的原子表达式,每个命题封装一个独特的事实片段,并以简洁、自包含的自然语言格式呈现。这种方法旨在提高检索的精确度和相关性。在知识图谱(KG)上,检索粒度包括实体(Entity)、三元组(Triplet)和子图(sub-Graph)。检索的粒度也可以根据下游任务进行调整,例如在推荐任务中检索物品ID(Item IDs)【40, Language models as semantic indexers, 2023, arXiv】和句子对(Sentence pairs)【38, Learning to retrieve in-context examples for large language models, 2023, arXiv】。详细信息如表I所示。

B. 索引优化 (Indexing Optimization)

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

1) 分块策略 (Chunking Strategy)。最常见的方法是按固定数量的词元(例如100、256、512)将文档分割成块【88, Evaluating the ideal chunk size for a rag system using llamaindex, 2023, llamaindex.ai】。较大的块可以捕获更多上下文,但也会产生更多噪音,需要更长的处理时间和更高的成本。而较小的块可能无法完全传达必要的上下文,但噪音较少。然而,分块会导致句子内部被截断,这促使了递归分割和滑动窗口方法的优化,通过在多个检索过程中合并全局相关信息来实现分层检索【89, Recursively split by character, 2023, langchain.com】。尽管如此,这些方法仍然无法在语义完整性和上下文长度之间取得平衡。因此,像Small2Big这样的方法被提出,其中句子(小)被用作检索单元,而其前后句子则作为(大)上下文提供给LLM【90, Advanced rag 01: Small-tobig retrieval, 2023, towardsdatascience.com】。

2) 元数据附加 (Metadata Attachments)。可以为数据块(chunks)丰富元数据信息,如页码、文件名、作者、类别和时间戳。随后,可以基于这些元数据进行过滤检索,从而缩小检索范围。在检索过程中为文档时间戳分配不同的权重可以实现时间感知的RAG,确保知识的新鲜度并避免过时信息。

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

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

  • 层次化索引结构:文件以父子关系排列,数据块与之链接。每个节点存储数据摘要,这有助于快速遍历数据并帮助RAG系统确定要提取哪些块。这种方法还可以减轻由块提取问题引起的幻觉。
  • 知识图谱索引:利用知识图谱(KG)构建文档的层次结构有助于保持一致性。它描绘了不同概念和实体之间的联系,显著减少了产生幻觉的可能性。另一个优点是将信息检索过程转换为LLM可以理解的指令,从而提高知识检索的准确性,并使LLM能够生成上下文连贯的响应,进而提高RAG系统的整体效率。为了捕捉文档内容和结构之间的逻辑关系,KGP【91, Knowledge graph prompting for multi-document question answering, 2023, arXiv】提出了一种使用KG在多个文档之间建立索引的方法。该KG由节点(代表文档中的段落或结构,如页面和表格)和边(表示段落之间的语义/词汇相似性或文档结构内的关系)组成,有效解决了多文档环境中的知识检索和推理问题。
C. 查询优化 (Query Optimization)

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

1) 查询扩展 (Query Expansion)。将单个查询扩展为多个查询可以丰富查询内容,提供更多上下文以解决任何特定细微差别的缺失,从而确保生成答案的最佳相关性。
* 多查询 (Multi-Query):通过提示工程利用LLM扩展查询,这些查询可以并行执行。查询的扩展不是随机的,而是经过精心设计的。
* 子查询 (Sub-Query):子问题规划过程是指生成必要的子问题,当这些子问题与原始问题结合时,可以为完全回答原始问题提供上下文。这种添加相关上下文的过程原则上与查询扩展类似。具体来说,可以使用“从少到多”(least-to-most)的提示方法将一个复杂问题分解为一系列更简单的子问题【92, Least-to-most prompting enables complex reasoning in large language models, 2022, arXiv】。
* 验证链 (Chain-of-Verification, CoVe):扩展后的查询会经过LLM的验证,以达到减少幻觉的效果。经过验证的扩展查询通常具有更高的可靠性【93, Chain-of-verification reduces hallucination in large language models, 2023, arXiv】。

2) 查询转换 (Query Transformation)。核心思想是基于转换后的查询进行检索,而不是用户的原始查询。
* 查询重写 (Query Rewrite):原始查询并不总是最适合LLM检索的,尤其是在现实世界场景中。因此,我们可以提示LLM重写查询。除了使用LLM进行查询重写,还可以使用专门的较小语言模型,例如RRR (Rewrite-retrieve-read)【7, Query rewriting for retrieval-augmented large language models, 2023, arXiv】。在淘宝中实现的查询重写方法BEQUE【9, Large language model based long-tail query rewriting in taobao search, 2023, arXiv】显著提升了长尾查询的召回效果,从而增加了GMV。
* 生成式查询转换:另一种查询转换方法是使用提示工程让LLM根据原始查询生成一个用于后续检索的查询。HyDE【11, Precise zero-shot dense retrieval without relevance labels, 2022, arXiv】构建了假设性文档(即对原始查询的假定答案)。它关注于从答案到答案的嵌入相似性,而不是寻求问题或查询的嵌入相似性。使用“退一步”提示方法(Step-back Prompting)【10, Take a step back: Evoking reasoning via abstraction in large language models, 2023, arXiv】,将原始查询抽象化以生成一个更高层次的概念性问题(退一步问题)。在RAG系统中,退一步问题和原始查询都用于检索,并且两者的结果都用作语言模型生成答案的基础。

3) 查询路由 (Query Routing)。根据不同的查询,路由到不同的RAG流水线,这适用于为适应多种场景而设计的多功能RAG系统。
* 元数据路由/过滤 (Metadata Router/Filter):第一步是从查询中提取关键词(实体),然后根据关键词和数据块中的元数据进行过滤,以缩小搜索范围。
* 语义路由 (Semantic Router):是另一种利用查询语义信息进行路由的方法。具体方法可参见Semantic Router。当然,也可以采用混合路由方法,结合语义和元数据方法来增强查询路由。

D. 嵌入 (Embedding)

嵌入模型的重要性。在RAG中,检索是通过计算问题和文档块的嵌入之间的相似度(例如余弦相似度)来实现的,其中嵌入模型的语义表示能力起着关键作用。这主要包括稀疏编码器(如BM25)和密集检索器(如基于BERT架构的预训练语言模型)。最近的研究引入了AngIE、Voyage、BGE等杰出的嵌入模型【94, Angle-optimized text embeddings, 2023, arXiv】【95, Voyage’s embedding models, 2023, voyageai.com】【96, Flagembedding, 2023, github.com】,这些模型得益于多任务指令调优。Hugging Face的MTEB排行榜在8个任务上评估嵌入模型,涵盖了58个数据集。此外,C-MTEB专注于中文能力,涵盖6个任务和35个数据集。关于“使用哪个嵌入模型”没有一刀切的答案。然而,某些特定模型更适合特定的用例。

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

2) 微调嵌入模型 (Fine-tuning Embedding Model)。当上下文与预训练语料库显著偏离时,特别是在医疗、法律实践等充满专有术语的高度专业化领域,微调您自己领域数据集上的嵌入模型变得至关重要,以减轻这种差异。

微调的目的和方法。除了补充领域知识,微调的另一个目的是对齐检索器和生成器,例如,使用LLM的结果作为微调的监督信号,这被称为LSR(LM-supervised Retriever)。PROMPTAGATOR【21, Promptagator: Few-shot dense retrieval from 8 examples, 2022, arXiv】利用LLM作为少样本查询生成器来创建特定于任务的检索器,解决了监督微调中的挑战,特别是在数据稀缺的领域。另一种方法,LLM-Embedder【97, Retrieve anything to augment large language models, 2023, arXiv】,利用LLM在多个下游任务中生成奖励信号。检索器通过两种类型的监督信号进行微调:数据集的硬标签和来自LLM的软奖励。这种双信号方法促进了更有效的微调过程,使嵌入模型能够适应多样化的下游应用。REPLUG【72, Replug: Retrieval-augmented black-box language models, 2023, arXiv】利用检索器和LLM计算检索文档的概率分布,然后通过计算KL散度进行监督训练。这种直接有效的训练方法通过使用LM作为监督信号来提升检索模型的性能,无需特定的交叉注意力机制。此外,受RLHF(从人类反馈中进行强化学习)的启发,利用基于LM的反馈通过强化学习来加强检索器。

E. 适配器 (Adapter)

使用适配器的原因。微调模型可能会带来挑战,例如通过API集成功能或解决由有限的本地计算资源引起的限制。因此,一些方法选择集成一个外部适配器来帮助对齐。

适配器的具体实现。为了优化LLM的多任务能力,UPRISE【20, Uprise: Universal prompt retrieval for improving zero-shot evaluation, 2023, arXiv】训练了一个轻量级的提示检索器,可以从预构建的提示池中自动检索适合给定零样本任务输入的提示。AAR(Augmentation-Adapted Retriever)【47, Augmentation-adapted retriever improves generalization of language models as generic plug-in, 2023, arXiv】引入了一个通用适配器,旨在适应多个下游任务。而PRCA【69, Prca: Fitting black-box large language models for retrieval question answering via pluggable reward-driven contextual adapter, 2023, arXiv】添加了一个可插拔的奖励驱动的上下文适配器,以增强在特定任务上的性能。BGM【26, Bridging the preference gap between retrievers and llms, 2024, arXiv】保持检索器和LLM固定,并在两者之间训练一个桥接的Seq2Seq模型。该桥接模型旨在将检索到的信息转换为LLM可以有效处理的格式,使其不仅可以重排,还可以为每个查询动态选择段落,并可能采用更高级的策略,如重复。此外,PKG【75, Augmented large language models with parametric knowledge guiding, 2023, arXiv】引入了一种通过指令微调将知识集成到白盒模型中的创新方法。在这种方法中,检索器模块被直接替换,以根据查询生成相关文档。这种方法有助于解决在微调过程中遇到的困难并提升模型性能。

IV. 生成 (GENERATION)

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

A. 上下文管理 (Context Curation)

长上下文的问题。冗余信息会干扰LLM的最终生成,过长的上下文也可能导致LLM出现“中间遗忘”(Lost in the middle)问题【98, Lost in the middle: How language models use long contexts, 2023, arXiv】。像人类一样,LLM倾向于只关注长文本的开头和结尾,而忘记中间部分。因此,在RAG系统中,我们通常需要进一步处理检索到的内容。

1) 重排 (Reranking)。重排从根本上重新排序文档块,以首先突出最相关的结果,从而有效减少整个文档池。它在信息检索中起着双重作用,既是增强器也是过滤器,为更精确的语言模型处理提供精炼的输入【70, Open-source large language models are strong zero-shot query likelihood models for document ranking, 2023, arXiv】。重排可以使用基于规则的方法,这些方法依赖于预定义的指标,如多样性(Diversity)、相关性(Relevance)和MRR;也可以使用基于模型的方法,如来自BERT系列的编码器-解码器模型(例如SpanBERT),专门的重排模型如Cohere rerank或bge-raranker-large,以及通用的LLM如GPT【12, Enhancing rag pipelines in haystack: Introducing diversityranker and lostinthemiddleranker, 2023, towardsdatascience.com】【99, Chatrec: Towards interactive and explainable llms-augmented recommender system, 2023, arXiv】。

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

压缩方法。(Long)LLMLingua【100, Lingua: Addressing scenarios for live interpretation and automatic dubbing, 2022, Association for Machine Translation in the Americas】【101, Longllmlingua: Accelerating and enhancing llms in long context scenarios via prompt compression, 2023, arXiv】利用小型语言模型(SLMs),如GPT-2 Small或LLaMA-7B,来检测并移除不重要的词元,将其转换为一种人类难以理解但LLM能很好理解的形式。这种方法为提示压缩提供了一种直接且实用的方法,无需对LLM进行额外训练,同时平衡了语言完整性和压缩率。PRCA通过训练一个信息提取器来解决这个问题【69, Prca: Fitting black-box large language models for retrieval question answering via pluggable reward-driven contextual adapter, 2023, arXiv】。同样,RECOMP采用类似的方法,通过对比学习训练一个信息压缩器【71, Recomp: Improving retrieval-augmented lms with compression and selective augmentation, 2023, arXiv】。每个训练数据点包含一个正样本和五个负样本,编码器在此过程中使用对比损失进行训练【102, Dense passage retrieval for open-domain question answering, 2020, arXiv】。

文档过滤方法。除了压缩上下文,减少文档数量也有助于提高模型回答的准确性。Ma等人【103, Large language model is not a good few-shot information extractor, but a good reranker for hard samples!, 2023, ArXiv】提出了“过滤-重排”(Filter-Reranker)范式,结合了LLM和SLM的优势。在该范式中,SLM作为过滤器,而LLM作为重排器。研究表明,指示LLM重新排列由SLM识别出的困难样本,可以在各种信息提取(IE)任务中带来显著改进。另一种直接有效的方法是在生成最终答案之前,让LLM评估检索到的内容。这使得LLM能够通过LLM的批判性评估来过滤掉相关性差的文档。例如,在Chatlaw【104, Chatlaw: Open-source legal large language model with integrated external knowledge bases, 2023, arXiv】中,提示LLM对引用的法律条款进行自我建议,以评估其相关性。

B. LLM微调 (LLM Fine-tuning)

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

微调调整输入输出。微调的另一个好处是能够调整模型的输入和输出。例如,它可以使LLM适应特定的数据格式,并按照指示生成特定风格的响应【37, Retrieval-augmented generative question answering for event argument extraction, 2022, arXiv】。对于与结构化数据交互的检索任务,SANTA框架【76, Structureaware language model pretraining improves dense retrieval on structured data, 2023, arXiv】实施了一个三方训练方案,以有效封装结构和语义的细微差别。初始阶段侧重于检索器,其中利用对比学习来优化查询和文档嵌入。

与人类或检索器对齐。通过强化学习使LLM的输出与人类或检索器的偏好对齐是一种潜在的方法。例如,可以手动标注最终生成的答案,然后通过强化学习提供反馈。除了与人类偏好对齐,还可以与微调模型和检索器的偏好对齐【79, Dual-feedback knowledge retrieval for task-oriented dialogue systems, 2023, arXiv】。当情况不允许访问强大的专有模型或更大参数的开源模型时,一个简单有效的方法是蒸馏更强大的模型(例如GPT-4)。LLM的微调也可以与检索器的微调相协调,以对齐偏好。一个典型的方法,如RA-DIT【27, Ra-dit: Retrieval-augmented dual instruction tuning, 2023, arXiv】,使用KL散度来对齐检索器和生成器之间的评分函数。

V. RAG中的增强过程 (AUGMENTATION PROCESS IN RAG)

单一检索的局限性。在RAG领域,标准做法通常涉及一次检索后进行生成,这可能导致效率低下,并且对于需要多步推理的复杂问题通常是不够的,因为它提供的信息范围有限【105, Making retrieval-augmented language models robust to irrelevant context, 2023, arXiv】。许多研究针对此问题优化了检索过程,我们将其总结在图5中。

图5. 除了最常见的一次性检索外,RAG还包括三种类型的检索增强过程。(左) 迭代检索涉及检索和生成交替进行,允许在每一步从知识库中获取更丰富、更有针对性的上下文。(中) 递归检索涉及逐步细化用户查询并将问题分解为子问题,然后通过检索和生成持续解决复杂问题。(右) 自适应检索专注于使RAG系统能够自主确定是否需要外部知识检索以及何时停止检索和生成,通常利用LLM生成的特殊令牌进行控制。
图5. 除了最常见的一次性检索外,RAG还包括三种类型的检索增强过程。(左) 迭代检索涉及检索和生成交替进行,允许在每一步从知识库中获取更丰富、更有针对性的上下文。(中) 递归检索涉及逐步细化用户查询并将问题分解为子问题,然后通过检索和生成持续解决复杂问题。(右) 自适应检索专注于使RAG系统能够自主确定是否需要外部知识检索以及何时停止检索和生成,通常利用LLM生成的特殊令牌进行控制。

A. 迭代检索 (Iterative Retrieval)

迭代检索的定义与作用。迭代检索是一个过程,其中根据初始查询和迄今为止生成的文本,反复搜索知识库,为LLM提供一个更全面的知识基础。这种方法通过多次检索迭代提供额外的上下文参考,已被证明可以增强后续答案生成的鲁棒性。然而,它可能会受到语义不连续和不相关信息累积的影响。ITER-RETGEN【14, Enhancing retrieval-augmented large language models with iterative retrieval-generation synergy, 2023, arXiv】采用了一种协同方法,将“检索增强的生成”与“生成增强的检索”相结合,用于需要再现特定信息的任务。该模型利用解决输入任务所需的内容作为检索相关知识的上下文基础,这反过来又有助于在后续迭代中生成更好的响应。

B. 递归检索 (Recursive Retrieval)

递归检索的定义与应用。递归检索常用于信息检索和自然语言处理中,以提高搜索结果的深度和相关性。该过程涉及根据先前搜索获得的结果迭代地优化搜索查询。递归检索旨在通过一个反馈循环逐渐收敛到最相关的信息,从而增强搜索体验。IRCoT【61, Interleaving retrieval with chain-of-thought reasoning for knowledge-intensive multi-step questions, 2022, arXiv】使用思维链(chain-of-thought)来指导检索过程,并用获得的检索结果来优化思维链。ToC【57, Tree of clarifications: Answering ambiguous questions with retrieval-augmented large language models, 2023, arXiv】创建一个澄清树,系统地优化查询中的模糊部分。这在用户需求从一开始就不完全清楚或所寻求的信息高度专业化或细致入微的复杂搜索场景中尤其有用。该过程的递归性质允许持续学习和适应用户的需求,通常会提高对搜索结果的满意度。

结合多跳检索。为了应对特定的数据场景,递归检索和多跳检索技术被结合使用。递归检索利用结构化索引以分层方式处理和检索数据,这可能包括在基于摘要进行检索之前总结文档或长PDF的部分内容。随后,在文档内进行二次检索以优化搜索,体现了该过程的递归性质。相比之下,多跳检索旨在更深入地挖掘图结构化数据源,提取相互关联的信息【106, Chain of knowledge: A framework for grounding large language models with structured knowledge bases, 2023, arXiv】。

C. 自适应检索 (Adaptive Retrieval)

自适应检索的核心思想。以Flare【24, Active retrieval augmented generation, 2023, arXiv】和Self-RAG【25, Self-rag: Learning to retrieve, generate, and critique through self-reflection, 2023, arXiv】为例的自适应检索方法,通过使LLM能够主动确定检索的最佳时机和内容来优化RAG框架,从而提高所获取信息的效率和相关性。

主动判断的趋势。这些方法是LLM在其操作中采用主动判断的更广泛趋势的一部分,正如在AutoGPT、Toolformer和Graph-Toolformer等模型代理中看到的那样【107, Auto-gpt for online decision making: Benchmarks and additional opinions, 2023, arXiv】【108, Toolformer: Language models can teach themselves to use tools, 2023, arXiv】【109, Graph-toolformer: To empower llms with graph reasoning ability via prompt augmented by chatgpt, 2023, arXiv】。例如,Graph-Toolformer将其检索过程分为不同的步骤,其中LLM主动使用检索器,应用Self-Ask技术,并采用少样本提示来启动搜索查询。这种主动姿态允许LLM决定何时搜索必要信息,类似于代理如何利用工具。

具体实现方法。WebGPT【110, Webgpt: Browserassisted question-answering with human feedback, 2021, arXiv】集成了一个强化学习框架,以训练GPT-3模型在文本生成过程中自主使用搜索引擎。它使用特殊令牌来导航此过程,这些令牌促进了诸如搜索引擎查询、浏览结果和引用参考文献等操作,从而通过使用外部搜索引擎扩展了GPT-3的能力。Flare通过监视生成过程的置信度(由生成词元的概率表示)来自动化检索时机【24, Active retrieval augmented generation, 2023, arXiv】。当概率低于某个阈值时,会激活检索系统以收集相关信息,从而优化检索周期。Self-RAG【25, Self-rag: Learning to retrieve, generate, and critique through self-reflection, 2023, arXiv】引入了“反思令牌”,允许模型反思其输出。这些令牌分为两种:“检索”(retrieve)和“批判”(critic)。模型自主决定何时激活检索,或者,一个预定义的阈值可能会触发该过程。在检索期间,生成器在多个段落上进行片段级束搜索,以推导出最连贯的序列。批判分数用于更新子分段分数,并具有在推理期间调整这些权重的灵活性,从而定制模型的行为。Self-RAG的设计避免了对额外分类器或自然语言推理(NLI)模型的依赖,从而简化了何时启动检索机制的决策过程,并提高了模型在生成准确响应方面的自主判断能力。


A4 任务与评估

随着RAG在自然语言处理领域的快速发展和日益广泛的应用,对RAG模型的评估已成为LLM社区研究的前沿。评估的主要目标是理解和优化RAG模型在各种应用场景下的性能。本章将主要介绍RAG的主要下游任务、数据集以及如何评估RAG系统。

下游任务

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

表II RAG的下游任务和数据集
表II RAG的下游任务和数据集

评估目标

历史上,RAG模型的评估集中于其在特定下游任务中的执行情况。这些评估采用适合手头任务的既定指标。例如,问答评估可能依赖于EM和F1分数【7, Query rewriting for retrieval-augmented large language models, 2023, arXiv】【45, Instructretro: Instruction tuning post retrieval-augmented pretraining, 2023, arXiv】【59, Retrievalgeneration synergy augmented large language models, 2023, arXiv】【72, Replug: Retrieval-augmented black-box language models, 2023, arXiv】,而事实验证任务通常以准确率作为主要指标【4, Retrieval-augmented generation for knowledge-intensive nlp tasks, 2020, Advances in Neural Information Processing Systems】【14, Enhancing retrieval-augmented large language models with iterative retrieval-generation synergy, 2023, arXiv】【42, Few-shot learning with retrieval augmented language models, 2022, arXiv】。BLEU和ROUGE指标也常用于评估答案质量【26, Bridging the preference gap between retrievers and llms, 2024, arXiv】【32, Diversify question generation with retrieval-augmented style transfer, 2023, arXiv】【52, Optimizing retrieval-augmented reader models via token elimination, 2023, arXiv】【78, Retrievalgeneration alignment for end-to-end task-oriented dialogue system, 2023, arXiv】。像RALLE这样的工具,专为RAG应用的自动评估而设计,同样基于这些任务特定指标进行评估【160, Ralle: A framework for developing and evaluating retrieval-augmented large language models, 2023, arXiv】。尽管如此,专门评估RAG模型独特特性的研究仍然明显不足。主要的评估目标包括:
* 检索质量 (Retrieval Quality):评估检索质量对于确定检索器组件获取的上下文的有效性至关重要。采用搜索引擎、推荐系统和信息检索系统领域的标准指标来衡量RAG检索模块的性能,如命中率(Hit Rate)、平均倒数排名(MRR)和归一化折扣累积增益(NDCG)等【161, Building production-ready rag applications, 2023, ai.engineer】【162, Evaluating rag part i: How to evaluate document retrieval, 2023, deepset.ai】。
* 生成质量 (Generation Quality):生成质量的评估侧重于生成器从检索到的上下文中合成连贯且相关答案的能力。这种评估可以根据内容的目标分为无标签内容和有标签内容。对于无标签内容,评估包括生成答案的忠实性、相关性和无害性。相反,对于有标签内容,重点是模型产生信息的准确性【161, Building production-ready rag applications, 2023, ai.engineer】。此外,检索和生成质量的评估都可以通过手动或自动评估方法进行【29, Copy is all you need, 2022, The Eleventh International Conference on Learning Representations】【161, Building production-ready rag applications, 2023, ai.engineer】【163, Best practices for llm evaluation of rag applications, 2023, databricks.com】。

评估维度

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

1) 质量分数 (Quality Scores):质量分数包括上下文相关性(context relevance)、答案忠实性(answer faithfulness)和答案相关性(answer relevance)。这些质量分数从不同角度评估RAG模型在信息检索和生成过程中的效率【164, Ragas: Automated evaluation of retrieval augmented generation, 2023, arXiv】【165, Ares: An automated evaluation framework for retrieval-augmented generation systems, 2023, arXiv】【166, A survey of techniques for maximizing llm performance, 2023, openai.com】。
* 上下文相关性:评估检索到的上下文的精确性和特异性,确保相关性并最小化与无关内容相关的处理成本。
* 答案忠实性:确保生成的答案忠实于检索到的上下文,保持一致性并避免矛盾。
* 答案相关性:要求生成的答案与提出的问题直接相关,有效解决核心询问。

2) 所需能力 (Required Abilities):RAG评估还包括四个表明其适应性和效率的能力:噪声鲁棒性(noise robustness)、负面拒绝(negative rejection)、信息整合(information integration)和反事实鲁棒性(counterfactual robustness)【167, Benchmarking large language models in retrieval-augmented generation, 2023, arXiv】【168, Recall: A benchmark for llms robustness against external counterfactual knowledge, 2023, arXiv】。这些能力对于模型在各种挑战和复杂场景下的性能至关重要,并影响质量分数。
* 噪声鲁棒性:评估模型处理与问题相关但缺乏实质性信息的噪声文档的能力。
* 负面拒绝:评估模型在检索到的文档不包含回答问题所需知识时,能够明智地避免回答的能力。
* 信息整合:评估模型从多个文档中综合信息以解决复杂问题的熟练程度。
* 反事实鲁棒性:测试模型识别和忽略文档中已知不准确信息的能力,即使在被告知可能存在错误信息的情况下也是如此。
上下文相关性和噪声鲁棒性对于评估检索质量很重要,而答案忠实性、答案相关性、负面拒绝、信息整合和反事实鲁棒性对于评估生成质量很重要。

表III RAG评估维度适用指标总结
表III RAG评估维度适用指标总结

每个评估维度的具体指标总结在表III中。必须认识到,这些源自相关工作的指标是传统度量,尚未构成一个成熟或标准化的方法来量化RAG评估维度。一些评估研究中也开发了针对RAG模型细微差别的定制指标,但未包含在此处。

评估基准和工具

为促进RAG的评估,已提出一系列基准测试和工具。这些工具提供量化指标,不仅衡量RAG模型的性能,还增强了对模型在各个评估维度上能力的理解。著名的基准如RGB、RECALL和CRUD【167, Benchmarking large language models in retrieval-augmented generation, 2023, arXiv】【168, Recall: A benchmark for llms robustness against external counterfactual knowledge, 2023, arXiv】【169, Crud-rag: A comprehensive chinese benchmark for retrieval-augmented generation of large language models, 2024, arXiv】专注于评估RAG模型的基本能力。同时,最先进的自动化工具如RAGAS【164, Ragas: Automated evaluation of retrieval augmented generation, 2023, arXiv】、ARES【165, Ares: An automated evaluation framework for retrieval-augmented generation systems, 2023, arXiv】和TruLens利用LLM来评判质量分数。这些工具和基准共同构成了一个用于系统评估RAG模型的坚实框架,如表IV所示。

表IV 评估框架总结。† 代表基准,‡ 代表工具。* 表示定制的量化指标,这些指标偏离传统指标。鼓励读者根据需要查阅相关文献以获取这些指标的具体量化公式。
表IV 评估框架总结。† 代表基准,‡ 代表工具。* 表示定制的量化指标,这些指标偏离传统指标。鼓励读者根据需要查阅相关文献以获取这些指标的具体量化公式。


A5 结论

讨论与未来展望

尽管RAG技术取得了相当大的进展,但仍有几个挑战需要深入研究。
* RAG与长上下文:随着LLM的上下文窗口不断扩展(例如超过20万个token),长文档问答可以直接将整个文档放入提示中,这引发了对RAG必要性的讨论。然而,RAG仍然具有不可替代的作用:首先,它通过分块检索和按需输入提高了推理效率;其次,它提供了可追溯的引用来源,增强了答案的可验证性。长上下文也为RAG处理更复杂、需要整合大量材料的摘要性问题提供了新机遇。
* RAG鲁棒性:检索过程中存在的噪声或矛盾信息会严重影响RAG的输出质量。提高RAG对对抗性或反事实输入的抵抗力是当前研究的热点。有趣的是,有研究发现【54, The power of noise: Redefining retrieval for rag systems, 2024, arXiv】,包含不相关的文档有时反而能意外地提高准确性,这凸显了开发专门策略以整合检索与语言生成模型的必要性。
* 混合方法:将RAG与微调相结合正成为一种主流策略。探索如何最优地整合这两种技术(顺序、交替或端到端联合训练)以及如何利用参数化和非参数化知识的优势是未来研究的关键领域。此外,将具有特定功能的小型语言模型(SLM)引入RAG系统也是一个趋势。
* RAG的规模法则:虽然LLM的规模法则已经建立,但它们是否适用于RAG仍不确定。RETRO++等初步研究【44, Shall we pretrain autoregressive language models with retrieval? a comprehensive study, 2023, arXiv】已开始探讨这个问题,但RAG模型的参数数量仍落后于LLM。逆规模法则(Inverse Scaling Law)的可能性,即较小的模型表现优于较大的模型,尤其值得进一步研究。
* 生产就绪的RAG:RAG的实用性使其易于在工程中采用。然而,提高检索效率、大型知识库中的文档召回率以及确保数据安全(如防止LLM无意中泄露文档来源或元数据)是亟待解决的关键工程挑战。
* RAG生态系统:RAG的生态系统正在迅速发展,以LangChain和LLamaIndex等工具为核心,并涌现出如Flowise AI(低代码)、HayStack等专注于特定方向的新兴技术栈。传统云服务提供商也在提供以RAG为中心的服务。RAG技术正朝着定制化、简化和专业化方向发展。
* 多模态RAG:RAG已超越纯文本领域,向多模态数据扩展。例如,RA-CM3【176, Retrieval-augmented multimodal language modeling, 2022, arXiv】是检索和生成文本与图像的开创性模型。在音频、视频和代码等领域,也出现了将RAG思想与各自模态数据结合的创新应用,显示出RAG的广泛适用性。

总结

本文的总结如图6所示,强调了RAG通过将语言模型的参数化知识与来自外部知识库的广泛非参数化数据相结合,在增强LLM能力方面取得了显著进展。本综述展示了RAG技术的演变及其在许多不同任务上的应用。分析概述了RAG框架内的三种发展范式:朴素、高级和模块化RAG,每种范式都代表了对其前身的逐步增强。RAG与其他AI方法(如微调和强化学习)的技术整合进一步扩展了其能力。尽管RAG技术取得了进展,但在提高其鲁棒性和处理扩展上下文的能力方面仍存在研究机会。RAG的应用范围正在扩展到多模态领域,调整其原则以解释和处理图像、视频和代码等多种数据形式。这种扩展凸显了RAG对AI部署的重大实际意义,吸引了学术界和工业界的兴趣。

RAG生态系统的不断壮大体现在以RAG为中心的AI应用的增多和支持工具的持续开发。随着RAG应用领域的拓宽,有必要改进评估方法以跟上其发展的步伐。确保准确和具有代表性的性能评估对于充分捕捉RAG对AI研究和开发社区的贡献至关重要。

图6. RAG生态系统总结
图6. RAG生态系统总结