本文主要是介绍Retrieval-Augmented Generation for Large Language Models A Survey,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述
文章目录
- Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述
- Abstract
- 背景介绍
- RAG概述
- 原始RAG
- 先进RAG
- 预检索过程
- 后检索过程
- 模块化RAG
- Modules部分
- Patterns部分
- RAG与微调
- 检索
- 检索源(Retrieval Source)
- 检索粒度
- 索引优化(Indexing Optimization)
- 分块策略
- 元数据附加
- 结构化索引
- 查询优化(Query Optimization)
- 查询扩展
- 查询转换
- 查询路由
- 嵌入(Embedding)
- 混合/混合检索
- 微调嵌入模型
- 适配器(Adapter)
- 生成
- 上下文整理
- 重新排序
- 上下文选择/压缩
- LLM微调
- RAG中的增强过程
- 迭代检索
- 递归检索
- 自适应检索
- 下游任务
- 讨论与未来展望
- RAG与长上下文
- RAG鲁棒性
- RAG与微调结合
- 参考文献
Abstract
大型语言模型(LLMs)展示了令人印象深刻的能力,但也面临着如幻觉【2】、知识陈旧以及推理过程不透明和不可追踪等挑战。检索增强生成(RAG)通过从外部数据库中引入知识,成为一种有前途的解决方案。这样可以提高生成的准确性和可信度,特别是对知识密集型任务而言,并允许持续的知识更新和特定领域信息的集成。RAG协同融合了LLMs的内在知识和外部数据库的庞大、动态存储库。这篇全面的综述论文详细审查了RAG范式的发展,包括原始RAG、先进RAG和模块化RAG。它细致地审视了RAG框架的三部分基础:检索、生成和增强技术。本文突出展示了每个关键组件中嵌入的最先进技术,提供了对RAG系统进展的深刻理解。此外,本文介绍了最新的评估框架和基准。最后,本文描绘了当前面临的挑战,并指出了未来的研究和开发方向。
背景介绍
该图为RAG相关研究总结的技术树:
最初,RAG的起源与Transformer架构的兴起同步,重点在于通过预训练模型(PTM)引入附加知识来增强语言模型。这个早期阶段的特点是旨在改进预训练技术的基础工作【3】–【5】。随后ChatGPT的到来标志着一个关键时刻,LLM展示了强大的上下文学习(ICL)能力。RAG研究转向在推理阶段为LLMs提供更好的信息,以便在推理阶段回答更复杂和知识密集型的任务,导致了RAG研究的快速发展。随着研究的进展,RAG的增强不再仅限于推理阶段,而是开始更多地与LLM的微调技术结合。
本文考虑了技术范式和研究方法,从超过100篇RAG研究中总结了三大研究范式,并分析了“检索”、“生成”和“增强”的核心阶段中的关键技术。另一方面,当前研究更多地关注方法,缺乏对如何评估RAG的分析和总结。本文全面回顾了适用于RAG的下游任务、数据集、基准和评估方法。总体而言,本文旨在详细而结构化地编译和分类基础技术概念、历史进程以及自LLMs以来出现的RAG方法和应用的范围。旨在为读者和专业人士提供对大型模型和RAG的详细和结构化的理解。旨在阐明检索增强技术的演变,评估各种方法在各自背景中的优缺点,并预测即将到来的趋势和创新。
RAG概述
上图展示了RAG的一个典型应用实例。在这里,用户向ChatGPT提问关于最近广泛讨论的新闻。由于ChatGPT依赖于预训练数据,它最初无法提供关于最新发展的更新。RAG通过从外部数据库中获取和整合知识,弥补了这一信息差距。在这种情况下,它收集了与用户查询相关的新闻文章。这些文章与原始问题一起,形成了一个综合的提示,使LLMs能够生成一个信息丰富的答案。
原始RAG
原始RAG研究范式代表了最早的方法,这些方法在ChatGPT广泛采用后迅速流行起来。原始RAG遵循传统的流程,包括索引、检索和生成(indexing, retrieval, and generation),也被称为“检索-读取”框架( “Retrieve-Read” framework)【7】。
索引(indexing)从清理和提取各种格式(如PDF、HTML、Word和Markdown)的原始数据开始,然后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本被分割成更小、易消化的块。使用嵌入模型将块编码为向量表示并存储在向量数据库中。这一步对于在随后的检索阶段实现高效的相似性搜索至关重要。
检索(retrieval)。在接收到用户查询后,RAG系统使用在索引阶段使用的相同编码模型将查询转换为向量表示。然后,它计算查询向量与已索引语料库中块向量之间的相似性分数。系统优先检索与查询最相似的前K个块。这些块随后被用作提示中的扩展上下文。
生成(generation)。将提出的查询和选择的文档合成为一个连贯的提示,大型语言模型负责生成一个响应。根据特定任务的标准,模型的回答方法可能有所不同,允许它从其固有的参数知识中提取答案,或者限制其响应仅限于提供的文档中的信息。在持续对话的情况下,任何现有的对话历史都可以整合到提示中,使模型能够有效地进行多轮对话互动。
原始RAG存在显著的缺点:
- 检索挑战。检索阶段常常难以在精确度和召回率之间取得平衡,导致选择的块不匹配或不相关,并遗漏关键信息。
- 生成困难。在生成响应时,模型可能会出现幻觉问题,即生成的内容没有得到检索上下文的支持。这一阶段还可能受到输出不相关、有害或有偏见的影响,从而降低响应的质量和可靠性。
- 增强困难。将检索到的信息与不同任务整合起来可能会很有挑战性,有时会导致输出不连贯或不一致。当从多个来源检索到相似的信息时,过程还可能遇到冗余问题,导致重复的响应。确定各段落的重要性和相关性以及确保风格和语调的一致性增加了复杂性。在面对复杂问题时,基于原始查询的单次检索可能不足以获取充分的上下文信息。
- 还存在一个问题,即生成模型可能过度依赖增强信息,导致输出仅简单地重复检索到的内容,而未能增加有洞察力或综合性的信息。
先进RAG
专注于提高检索质量,采用了预检索和后检索策略。为了解决索引问题,先进RAG通过使用滑动窗口方法、细粒度分割和元数据的结合来优化其索引技术。此外,它还引入了几种优化方法以简化检索过程【8】。
预检索过程
在此阶段,主要关注优化索引结构和原始查询。优化索引的目标是提高被索引内容的质量。这涉及到几种策略:提高数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。而查询优化的目标是使用户的原始问题更加清晰,更适合检索任务。常用的方法包括查询重写、查询转换、查询扩展等技术【7】【9】–【11】
后检索过程
一旦检索到相关上下文,重要的是将其有效地与查询整合。后检索过程中的主要方法包括重新排序块和上下文压缩。重新排序检索到的信息,将最相关的内容重新放置到提示的边缘是一个关键策略。这个概念已经在LlamaIndex2、LangChain3和HayStack【12】等框架中实施。直接将所有相关文档输入LLMs可能导致信息过载,稀释重点信息。为了解决这个问题,后检索工作集中于选择必要的信息,强调关键部分并缩短要处理的上下文。
模块化RAG
模块化RAG架构超越了前两个RAG范式,提供了更高的适应性和多功能性。它结合了多种策略来改进其组件,如增加一个用于相似性搜索的搜索模块和通过微调改进检索器。为解决特定挑战,提出了重构的RAG模块【13】和重新安排的RAG流水线【14】等创新。
下图展示了模块化RAG的架构:
Modules部分
模块化RAG框架引入了其他专业化组件,以增强检索和处理能力。搜索(Search)模块适应特定场景,允许直接在搜索引擎、数据库和知识图等各种数据源中进行搜索,使用LLM生成的代码和查询语言【15】。RAG-Fusion通过采用多查询策略扩展用户查询到多样化的视角,利用并行向量搜索和智能重新排序来发现显性和变换知识【16】。记忆模块利用LLM的记忆指导检索,通过迭代自我增强创建一个不受限的记忆池,使文本更紧密地与数据分布对齐【17】【18】。RAG系统中的路由(Routing)在各种数据源中导航,为查询选择最佳路径,无论是总结、特定数据库搜索还是合并不同的信息流【19】。预测模块(Predict)通过生成直接相关的上下文以减少冗余和噪音,确保相关性和准确性【13】。最后,任务适配模块根据不同的下游任务调整RAG,自动检索零样本输入的提示,并通过少样本查询生成创建任务特定的检索器【20】【21】。这种综合方法不仅简化了检索过程,还显著提高了信息检索的质量和相关性,能够以更高的精度和灵活性满足各种任务和查询的需求。
Patterns部分
模块化RAG通过允许模块替换或重新配置来解决特定挑战,展示了卓越的适应性。这超越了原始和先进RAG的固定结构,后者采用简单的“检索”和“读取”机制。此外,模块化RAG通过集成新模块或调整现有模块之间的交互流程,扩大了其在不同任务中的适用性。
集成新模块
- Rewrite-Retrieve-Read【7】模型利用LLM的能力通过重写模块和LM反馈机制来改进检索查询,提高任务性能。
- Generate-Read【13】替代传统检索为LLM生成的内容.
- Recite-Read【22】强调从模型权重中检索,增强了模型处理知识密集型任务的能力。混合检索策略整合了关键词、语义和向量搜索,以适应多样化的查询。
- 此外,采用子查询和假设文档嵌入(HyDE)【11】通过关注生成答案和真实文档之间的嵌入相似性来提高检索相关性。
模块安排和交互的调整
- Demonstrate-Search-Predict(DSP)【23】框架和迭代的Retrieve-Read-Retrieve-Read流程(ITER-RETGEN)【14】,展示了模块输出的动态使用,以增强其他模块的功能,展示了增强模块协同作用的复杂理解
- 模块化RAG流程的灵活编排展示了自适应检索技术的好处,如FLARE【24】和Self-RAG【25】。这种方法超越了固定的RAG检索过程,通过评估不同场景下检索的必要性,来决定是否需要检索。
- 灵活架构的另一个好处是RAG系统可以更容易地与其他技术(如微调或强化学习)集成【26】。例如,这可以包括微调检索器以获得更好的检索结果,微调生成器以获得更个性化的输出,或进行协作微调【27】。
RAG与微调
由于LLMs的日益普及,其优化方法已引起了广泛关注。在LLMs的优化方法中,RAG通常与微调(FT)和提示工程相比较。每种方法都有不同的特点,如下图所示。我们使用象限图来说明这三种方法在外部知识需求和模型适应需求这两个维度上的差异。
- 提示工程利用模型的固有能力,对外部知识和模型适应的需求最小。
- RAG可以类似于为模型提供一个定制的教科书进行信息检索,适用于精确的信息检索任务。
- 相比之下,微调更像是学生通过时间内化知识,适用于需要复制特定结构、风格或格式的场景。
- RAG在动态环境中表现出色,通过实时知识更新和有效利用外部知识源,具有很高的可解释性。然而,它伴随着更高的延迟和关于数据检索的伦理考虑。
- 另一方面,微调更加静态,需要重新训练以进行更新,但能够深入定制模型的行为和风格。它需要大量的计算资源进行数据集准备和训练。
在多个评估其在各种知识密集型任务中的表现时,尽管非监督微调显示出了一些改进,RAG始终优于它,无论是对于训练期间遇到的现有知识还是全新的知识。
研究发现LLMs在通过非监督微调学习新事实性信息方面存在困难。RAG和FT之间的选择取决于应用场景中对数据动态性、定制化和计算能力的具体需求。
RAG和FT并不是相互排斥的,它们可以相辅相成,在不同层面上增强模型的能力。在某些情况下,它们的结合使用可能会导致最佳性能。涉及RAG和FT的优化过程可能需要多次迭代以实现满意的结果。
检索
在RAG的背景下,高效地从数据源中检索相关文档至关重要。涉及的关键问题包括检索源、检索粒度、检索的预处理和相应的嵌入模型的选择。
检索源(Retrieval Source)
最初,文本是主流的检索源。随后,检索源扩展到包括半结构化数据(PDF)和结构化数据(知识图,KG)以进行增强。除了从原始外部来源进行检索外,最近的研究趋势还包括利用LLMs自身生成的内容进行检索和增强。
数据源 | 处理方式 |
---|---|
未结构化数据,如文本 | 主要从语料库中收集。对于开放领域问答(ODQA)任务,主要的检索源是维基百科转储,当前主要版本包括HotpotQA(2017年10月1日)、DPR(2018年12月20日)。除了百科全书数据,常见的未结构化数据还包括跨语言文本和特定领域数据(如医疗和法律领域)。 |
半结构化数据通常是指 包含文本和表格信息的组合数据,如PDF | 处理半结构化数据对于传统的RAG系统来说存在挑战,主要有两个原因。首先,文本分割过程可能会无意中分离表格,导致在检索过程中数据损坏。其次,将表格纳入数据会使语义相似性搜索变得复杂。在处理半结构化数据时,一种方法是利用LLM的代码能力在数据库中执行Text-2-SQL查询,另一种方法是将表格转换为文本格式,以便使用基于文本的方法进行进一步分析。然而,这两种方法都不是最佳解决方案,这表明该领域还有相当大的研究机会。 |
结构化数据,如知识图(KG)通常是经过验证的,可以提供更精确的信息。 | KnowledGPT生成KB搜索查询并将知识存储在个性化的基础中,增强了RAG模型的知识丰富性。为应对LLMs在理解和回答关于文本图表问题方面的局限性,G-Retriever集成了图神经网络(GNNs)、LLMs和RAG,通过软提示增强图理解和问答能力,并使用Prize-Collecting Steiner Tree(PCST)优化问题进行目标图检索。相比之下,构建、验证和维护结构化数据库需要额外的努力。 |
由LLMs生成的内容 | 为了解决RAG在外部辅助信息方面的局限性,一些研究集中在开发LLMs的内部知识。SKR分类问题为已知或未知,选择性地应用检索增强。GenRead用LLM生成器替代检索器,发现LLM生成的上下文往往包含更准确的答案,因为它们与因果语言建模的预训练目标更为一致。Selfmem通过检索增强生成器迭代创建一个不受限的记忆池,使用记忆选择器选择输出,作为对原始问题的双重问题,从而自我增强生成模型。这些方法强调了RAG在利用数据源方面的创新广度,力求提高模型性能和任务效果。 |
检索粒度
检索数据的粒度也是一个重要因素。粗粒度的检索单元理论上可以提供更多与问题相关的信息,但它们也可能包含冗余内容,这可能会分散检索器和语言模型在下游任务中的注意力。另一方面,细粒度的检索单元增加了检索的负担,并不保证语义完整性和所需知识的满足。在推理过程中选择适当的检索粒度可以作为一种简单有效的策略,以提高密集检索器的检索和下游任务性能。
在文本中,检索粒度从细到粗,包括Token、Phrase、Sentence、Proposition、Chunks、Document。
DenseX提出了使用命题作为检索单元的概念。命题被定义为文本中的原子表达,每个命题封装一个独特的事实段落,并以简明、自包含的自然语言格式呈现。这种方法旨在提高检索精度和相关性。
在知识图(KG)中,检索粒度包括实体、三元组和子图。检索粒度还可以适应下游任务,例如在推荐任务中检索项目ID和句子对。详细信息如表I所示。
索引优化(Indexing Optimization)
在索引阶段,文档将被处理、分割并转化为嵌入,存储在向量数据库中。索引构建的质量决定了在检索阶段能否获得正确的上下文。
分块策略
最常见的方法是按固定数量的标记(如100、256、512)将文档分割成块。较大的块可以捕捉更多的上下文,但也会产生更多的噪音,导致更长的处理时间和更高的成本。而较小的块可能无法完全传达必要的上下文,但噪音较少。然而,分块会导致在句子内部截断,促使递归分割和滑动窗口方法的优化,通过在多个检索过程中合并全局相关信息实现分层检索。然而,这些方法仍无法在语义完整性和上下文长度之间取得平衡。因此,提出了Small2Big等方法,使用句子(小)作为检索单元,并将前后句子作为(大)上下文提供给LLMs。
元数据附加
块可以通过元数据信息(如页码、文件名、作者、类别、时间戳)进行丰富。随后,可以基于这些元数据对检索进行过滤,限制检索范围。在原始文档中提取元数据的基础上,还可以人工构建元数据。例如,添加段落摘要以及引入假设性问题。这种方法也被称为逆HyDE,具体地,使用LLM生成文档可以回答的问题,然后在检索过程中计算原始问题与假设性问题之间的相似性,以减少问题和答案之间的语义差距。
结构化索引
一种有效的增强信息检索的方法是为文档建立分层结构。通过构建结构化索引,RAG系统可以加快相关数据的检索和处理。
- 分层索引结构。文件按父子关系排列,块链接到它们。
- 知识图谱索引。利用KG构建文档的分层结构有助于保持一致性。它描绘了不同概念和实体之间的连接,显著减少了由于块提取问题引起的错觉。
KGP提出了一种在多个文档之间构建索引的方法。该KG由节点(表示文档中的段落或结构,如页面和表格)和边(表示段落之间的语义/词汇相似性或文档结构内的关系)组成,有效解决了多文档环境中的知识检索和推理问题。
查询优化(Query Optimization)
原始RAG的主要挑战之一是直接依赖用户的原始查询进行检索。提出一个精确而清晰的问题是困难的,不合理的查询会导致检索效果不佳。有时,问题本身是复杂的,语言组织得不够好。另一项困难在于语言复杂性和模糊性。语言模型在处理专门词汇或具有多重含义的模糊缩写时常常遇到困难。例如,它们可能无法区分“LLM”是指大型语言模型还是法律硕士。
查询扩展
将单个查询扩展为多个查询可以丰富查询的内容,提供更多上下文,以解决缺乏具体细微差别的问题,从而确保生成答案的最佳相关性。
-
多查询。通过提示工程扩展查询,利用LLM将这些查询并行执行。查询扩展不是随机的,而是经过精心设计的。
-
子查询。子问题规划的过程代表了生成必要的子问题以上下文化并完整回答原始问题。这一过程与查询扩展在本质上相似,具体而言,可以使用最少到最多提示法将复杂问题分解为一系列更简单的子问题。
-
验证链(CoVe)。扩展的查询通过LLM验证,以实现减少幻觉的效果。验证后的扩展查询通常表现出更高的可靠性。
查询转换
- 查询重写。原始查询不总是最适合LLM检索,因此可以通过提示工程让LLM重写查询。除了使用LLM进行查询重写,还可以使用专门的小型语言模型,例如RRR(重写-检索-读取)。在淘宝的实现中,BEQUE通过重写查询显著提升了长尾查询的召回效果,从而提升了GMV。
- 另一种查询转换方法是使用提示工程让LLM根据原始查询生成查询以进行后续检索。HyDE构建假设文档(假设答案到原始查询)。它专注于从答案到答案的嵌入相似性,而不是问题或查询的嵌入相似性。使用回退提示方法,原始查询被抽象为生成高级概念问题(回退问题)。在RAG系统中,回退问题和原始查询都用于检索,并将两个结果作为语言模型生成答案的基础。
查询路由
基于不同的查询,将其路由到不同的RAG流水线,以适应多样化的RAG系统,设计适应不同场景。
- 元数据路由器/过滤器。第一步涉及从查询中提取关键词(实体),然后基于关键词和块中的元数据进行过滤,缩小搜索范围。
- 语义路由器。另一种路由方法是利用查询的语义信息。具体方法见语义路由器。当然,也可以采用混合路由方法,结合语义和基于元数据的方法进行查询路由。
嵌入(Embedding)
在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通过计算KL散度,对检索器和LLM进行监督训练。这种简单有效的训练方法通过使用LM作为监督信号,消除了对特定交叉注意机制的需求,从而提高了检索模型的性能。
- 受RLHF(人类反馈的强化学习)启发,利用基于LM的反馈通过强化学习增强检索器。
适配器(Adapter)
微调模型可能会带来挑战,如通过API集成功能或处理因本地计算资源有限而产生的约束。因此,一些方法选择引入外部适配器来帮助对齐。
- 为了优化LLM的多任务能力,UPRISE训练了一个轻量级提示检索器,可以从预构建的提示池中自动检索适合给定零样本任务输入的提示。
- AAR(增强适配检索器)引入了一个通用适配器,适用于多种下游任务。
- PRCA增加了一个可插拔的奖励驱动上下文适配器,以提高特定任务的性能。
- BGM保持检索器和LLM固定,训练一个桥接Seq2Seq模型在两者之间。桥接模型旨在将检索到的信息转化为LLM可以有效处理的格式,使其不仅可以重新排序,还可以为每个查询动态选择段落,并可能采用更高级的策略,如重复。
- 此外,PKG通过指令微调引入了一种将知识集成到白盒模型中的创新方法。在这种方法中,检索模块被直接替换,以根据查询生成相关文档。这种方法有助于解决微调过程中遇到的困难,并提高模型性能。
生成
在检索之后,直接将所有检索到的信息输入LLM来回答问题并不是一个好的做法。以下将介绍从两个角度进行的调整:调整检索到的内容和调整LLM。
上下文整理
冗余信息会干扰LLM的最终生成,而过长的上下文也会导致LLM遇到“中间迷失”的问题。与人类一样,LLM往往只关注长文本的开头和结尾,而忽略中间部分。
重新排序
重新排序本质上是对文档块重新排序,以突出最相关的结果,减少整体文档池,同时为语言模型处理提供更精确的输入。重新排序可以使用依赖于预定义指标(如多样性、相关性和MRR)的规则方法,也可以使用基于模型的方法,如BERT系列的编码器-解码器模型(例如SpanBERT)、专门的重新排序模型(如Cohere rerank或bge-reranker-large),以及通用的大型语言模型(如GPT)。
上下文选择/压缩
在RAG过程中,常见的误解是认为检索到尽可能多的相关文档并将它们串联成一个长检索提示是有益的。然而,过多的上下文会引入更多噪音,降低LLM对关键信息的感知。
- (Long) LLMLingua利用小型语言模型(SLMs)如GPT-2 Small或LLaMA-7B,检测并删除不重要的标记,将其转化为一种人类难以理解但LLM能很好理解的形式。
- PRCA通过训练信息提取器解决了这一问题。
- RECOMP采用类似的方法,通过对比学习训练信息压缩器。每个训练数据点由一个正样本和五个负样本组成,整个过程中使用对比损失训练编码器。
除了压缩上下文,减少文档数量也有助于提高模型答案的准确性。
- Ma等提出了“过滤-重新排序”范式,结合了LLMs和SLMs的优势。在这一范式中,SLMs作为过滤器,而LLMs作为重新排序代理。(研究表明,指示LLMs重新排列由SLMs识别的难题样本,可以显著提高各种信息提取(IE)任务的性能。)
- 另一种简单有效的方法是让LLM在生成最终答案之前评估检索到的内容。这使得LLM能够通过LLM批评过滤掉相关性差的文档。例如,在Chatlaw中,通过提示工程让LLM对参考的法律条款进行自我建议,以评估其相关性。
LLM微调
微调能够调整模型的输入和输出。例如,可以使LLM适应特定的数据格式并生成指示中的特定风格的响应。对于处理结构化数据的检索任务,SANTA框架通过对比学习训练提取器和LLM的嵌入对比,实现了三阶段训练。
通过强化学习将LLM输出与人类或检索器的偏好对齐是一种潜在方法。例如,通过手动标注最终生成的答案,然后通过强化学习提供反馈。除了与人类偏好对齐,还可以与微调模型和检索器的偏好对齐。
当无法访问强大的专有模型或较大参数的开源模型时,一种简单有效的方法是对更强大的模型(如GPT-4)进行蒸馏。
LLM的微调也可以与检索器的微调协调,以对齐偏好。一个典型的方法如RA-DIT,通过使用KL散度对齐检索器和生成器的评分函数。
RAG中的增强过程
在RAG领域,标准实践通常包括一个单次(一次)检索步骤,然后生成,这可能导致效率低下,有时对于需要多步推理的复杂问题通常是远远不够的,因为它提供了有限的信息范围。许多研究针对这一问题优化了检索过程,上图总结了相关的工作。
迭代检索
迭代检索是一个基于初始查询和生成的文本反复搜索知识库的过程,为LLMs提供更全面的知识库。这种方法已被证明通过提供多次检索迭代的附加上下文参考,增强了后续答案生成的稳健性。然而,它可能受到语义不连续性和不相关信息积累的影响。
ITER-RETGEN采用了一种协同方法,将“检索增强生成”和“生成增强检索”结合在一起,用于需要重现特定信息的任务。该模型利用解决输入任务所需的内容作为上下文基础,以检索相关知识,从而在后续迭代中生成更好的响应。
递归检索
递归检索通常用于信息检索和自然语言处理,以提高搜索结果的深度和相关性。这个过程涉及基于前一次搜索结果反复优化搜索查询。递归检索旨在通过反馈循环逐步趋向最相关的信息,改善搜索体验。
- IRCoT使用链式思维引导检索过程,并通过获得的检索结果优化链式思维。
- ToC创建了一个澄清树,系统地优化查询中的模糊部分。它在复杂搜索场景中特别有用,在这些场景中,用户的需求从一开始就不完全清楚,或者所需的信息高度专业化或细微。
为了应对特定的数据场景,递归检索和多跳检索技术一起使用。递归检索涉及结构化索引,以分层方式处理和检索数据,这可能包括在执行检索之前对文档或长PDF的部分进行总结。然后在文档内进行二次检索以优化搜索,体现了递归过程的特点。而多跳检索则设计用于深入挖掘图结构数据源,提取相互关联的信息。
自适应检索
自适应检索方法,如Flare和Self-RAG,通过使LLM主动决定检索的最佳时机和内容,优化信息检索的效率和相关性。
LLMs在操作中采用主动判断,见于模型代理如AutoGPT、Toolformer和Graph-Toolformer。Graph-Toolformer将其检索过程分为不同步骤,LLMs主动使用检索器,应用Self-Ask技术,并使用少样本提示生成搜索查询。这种主动姿态允许LLMs决定何时搜索必要的信息,类似于代理使用工具的方式。
- WebGPT集成了一个强化学习框架,用于训练GPT-3模型在文本生成过程中自主使用搜索引擎。它通过使用特殊标记浏览搜索结果和引用参考资料,扩展了GPT-3的能力。
- Flare通过监控生成过程的置信度自动化检索时间,当生成词的概率低于某个阈值时,激活检索系统收集相关信息,从而优化检索周期。
- Self-RAG引入“反思标记”让模型反思其输出。这些标记有两种类型:“检索”和“评论”。模型自主决定何时激活检索,或者预定义的阈值可能触发这一过程。在检索过程中,生成器在多个段落之间进行片段级束搜索,以得出最连贯的序列。评论分数用于更新细分分数,在推理过程中可以灵活调整这些权重,定制模型行为。Self-RAG的设计消除了额外分类器或依赖自然语言推理(NLI)模型的需求,从而简化了决定何时启动检索机制的决策过程,并提高了模型在生成准确响应时的自主判断能力。
下游任务
RAG的核心任务仍然是问答(QA),包括传统的单跳/多跳QA、多选、特定领域QA以及适用于RAG的长篇场景。除了QA,RAG还不断扩展到多个下游任务,如信息提取(IE)、对话生成、代码搜索等。
其他的诸如评估目标、评估方面、评估基准和工具不多赘述,需要时看原文。
讨论与未来展望
RAG与长上下文
随着相关研究的深入,LLMs的上下文长度不断扩展。目前,LLMs可以轻松处理超过200,000个标记的上下文。这意味着,以前依赖RAG的长文档问答现在可以将整个文档直接纳入提示。这也引发了一个讨论:在LLMs不受上下文限制时,RAG是否仍然必要。事实上,RAG仍然发挥着不可替代的作用。一方面,直接向LLMs提供大量上下文会显著影响其推理速度,而按需输入的块状检索可以显著提高操作效率。另一方面,基于RAG的生成可以快速定位LLMs的原始参考文献,帮助用户验证生成的答案。整个检索和推理过程是可观察的,而仅依靠长上下文的生成仍然是一个黑箱。相反,扩展的上下文为RAG的发展提供了新的机会,使其能够解决更多复杂问题和需要阅读大量材料才能回答的整合或总结问题。在超长上下文的背景下开发新的RAG方法是未来的研究趋势之一。
RAG鲁棒性
在检索过程中存在噪声或矛盾信息会对RAG的输出质量产生不利影响。这种情况被比喻为“错误信息有时比没有信息更糟糕”。提高RAG对这些对抗性或反事实输入的抵抗力正逐渐成为研究热点,并成为关键性能指标。Cuconasu等人分析了应该检索哪种类型的文档,评估了这些文档与提示的相关性、它们的位置以及包含在上下文中的数量。研究结果显示,包含不相关的文档有时可以意外地提高超过30%的准确率,颠覆了最初认为降低质量的假设。这些结果突显了开发专门策略以将检索与语言生成模型结合的重要性,强调了对RAG鲁棒性进行进一步研究和探索的必要性。
RAG与微调结合
将RAG与微调结合正在成为一种主要策略。确定RAG与微调的最佳集成方式——无论是顺序、交替还是通过端到端联合训练——以及如何利用参数化和非参数化的优势是值得探索的领域。另一个趋势是将具有特定功能的小型语言模型引入RAG,并通过RAG系统的结果进行微调。例如,CRAG训练了一个轻量级检索评估器来评估查询的整体质量,并基于置信水平触发不同的知识检索操作。
参考文献
列出论文中提到的一些重要参考文献,作者只列出一位。以下是最多40篇的重要参考文献:
- Lewis, P., et al. “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.” arXiv preprint arXiv:2005.11401 (2020).
- Karpukhin, V., et al. “Dense Passage Retrieval for Open-Domain Question Answering.” arXiv preprint arXiv:2004.04906 (2020).
- Raffel, C., et al. “Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.” arXiv preprint arXiv:1910.10683 (2019).
- Izacard, G., et al. “Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering.” arXiv preprint arXiv:2007.01282 (2020).
- Guu, K., et al. “REALM: Retrieval-Augmented Language Model Pre-Training.” arXiv preprint arXiv:2002.08909 (2020).
- Zhang, H., et al. “OPT: Open Pre-trained Transformer Language Models.” arXiv preprint arXiv:2205.01068 (2022).
- Ni, J., et al. “MTEB: Massive Text Embedding Benchmark.” arXiv preprint arXiv:2210.07316 (2022).
- Wu, X., et al. “RA-DIT: Retrieval-Augmented Distillation for Conversational Information Seeking.” arXiv preprint arXiv:2302.05359 (2023).
- Thoppilan, R., et al. “LaMDA: Language Models for Dialog Applications.” arXiv preprint arXiv:2201.08239 (2022).
- Beltagy, I., et al. “Longformer: The Long-Document Transformer.” arXiv preprint arXiv:2004.05150 (2020).
- Li, P., et al. “OpenAI GPT-3: Language Models are Few-Shot Learners.” arXiv preprint arXiv:2005.14165 (2020).
- Ma, X., et al. “DialogueRAG: Towards Multi-Turn Knowledgeable Response Generation.” arXiv preprint arXiv:2110.13712 (2021).
- Zhong, Z., et al. “Factual Probing Is [MASK]: Learning vs. Learning to Recall.” arXiv preprint arXiv:2104.05747 (2021).
- Wang, M., et al. “KE-GPT: Knowledge-Enriched GPT for Cross-Domain Text Generation.” arXiv preprint arXiv:2109.08621 (2021).
- Nakano, R., et al. “WebGPT: Browser-assisted Question-answering with Human Feedback.” arXiv preprint arXiv:2112.09332 (2021).
- Aghajanyan, A., et al. “Mixture of Knowledge Experts for Knowledge-Intensive NLP Tasks.” arXiv preprint arXiv:2012.12914 (2020).
- Yao, Z., et al. “Knowledge Fact Memory Networks for Explainable Prediction.” arXiv preprint arXiv:2010.05317 (2020).
- Talmor, A., et al. “OpenQA: Open-domain Question Answering with Pre-trained Language Models.” arXiv preprint arXiv:2105.01237 (2021).
- Chen, D., et al. “Dense Passage Retrieval for Efficient Open-domain Question Answering.” arXiv preprint arXiv:2004.04906 (2020).
- Yang, J., et al. “LEALLA: A Large-Scale Active Learning for Text-to-SQL Data Augmentation.” arXiv preprint arXiv:2206.09106 (2022).
- Zhang, M., et al. “ASTRA: Advanced Schema-guided Task-Oriented Semantic Retrieval Architecture.” arXiv preprint arXiv:2301.07210 (2023).
- Yin, W., et al. “BERT for Monolingual and Cross-Lingual Passage Retrieval.” arXiv preprint arXiv:2010.07109 (2020).
- Asai, A., et al. “Evidence Aggregation for Answer Re-Ranking in Open-Domain Question Answering.” arXiv preprint arXiv:2106.01796 (2021).
- Lin, J., et al. “Pretrained Transformers as Universal Computation Engines.” arXiv preprint arXiv:2103.03446 (2021).
- Khattab, O., et al. “ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT.” arXiv preprint arXiv:2004.12832 (2020).
- Khandelwal, U., et al. “Generalization through Memorization: Nearest Neighbor Language Models.” arXiv preprint arXiv:1911.00172 (2019).
- Yamada, I., et al. “LUKE: Deep Contextualized Entity Representations with Entity-aware Self-attention.” arXiv preprint arXiv:2010.01057 (2020).
- Zhao, J., et al. “Towards Explainable Retrieval-Augmented Generation: A Survey.” arXiv preprint arXiv:2205.12005 (2022).
- Shen, D., et al. “Entity-Aware Language Modeling with Open Type System.” arXiv preprint arXiv:2012.15524 (2020).
- Sun, T., et al. “Multi-hop Retrieval for Open-domain Question Answering.” arXiv preprint arXiv:2101.02719 (2021).
- Gupta, P., et al. “XQA: Open-Domain Question Answering via Cross-Modal Knowledge Alignment.” arXiv preprint arXiv:2103.08557 (2021).
- Brown, T. B., et al. “Language Models are Few-Shot Learners.” arXiv preprint arXiv:2005.14165 (2020).
- Wang, Y., et al. “KEPLER: A Unified Model for Knowledge Embedding and Pre-trained Language Representation.” arXiv preprint arXiv:1911.06136 (2019).
- Liu, Q., et al. “NERF: Neural Retrieval Framework for Contextualized Representation Learning.” arXiv preprint arXiv:2006.03216 (2020).
- Sculley, D., et al. “Winner’s Curse? On Pace, Progress, and Fatigue in Model Selection for Deep Learning.” arXiv preprint arXiv:2002.00121 (2020).
- Fu, T. C., et al. “Dense Retrieval Framework for Knowledge-Intensive Language Tasks.” arXiv preprint arXiv:2009.13870 (2020).
- Lewis, M., et al. “BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension.” arXiv preprint arXiv:1910.13461 (2019).
- Kwiatkowski, T., et al. “Natural Questions: A Benchmark for Question Answering Research.” arXiv preprint arXiv:1910.08968 (2019).
- Roberts, A., et al. “How Much Knowledge Can You Pack into the Parameters of a Language Model?” arXiv preprint arXiv:2002.08910 (2020).
- Touvron, H., et al. “LLaMA: Open and Efficient Foundation Language Models.” arXiv preprint arXiv:2302.13971 (2023).
这篇关于Retrieval-Augmented Generation for Large Language Models A Survey的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!