本文原作为论文“Retrieval-Augmented Generation for Large Language Models: A Survey”,作者为Yunfan Gao、Yun Xiong、Xinyu Gao 、Kangxiang Jia、Jinliu Pan、Yuxi Bi、Yi
Dai、Jiawei Sun、Qianyu Guo、Meng Wang、Haofen Wang。该论文全面审视了大型语言模型中的RAG(检索增强生成,Retrieval-Augmented Generation)技术,提出了RAG的新视角和发展方向。论文深入探讨了RAG的三大组成部分:检索、生成和增强,以及RAG的不同范式,包括初级RAG、高级RAG和模块化RAG,是理解和掌握RAG技术的重要资源,相关研究人员和从业者都值得一读哦~
本文篇幅较长,框架如下:
LLM(大型语言模型,Large Language Model)展现出了其强大的能力,但也面临着幻觉、知识过时以及推理过程不透明、无法追踪等诸多挑战。为了应对这些挑战,RAG(检索增强生成,Retrieval-Augmented Generation)应运而生。RAG可以将LLM内在的知识与外部数据库庞大、动态的资源库协同融合,不仅提高了模型的准确性和可信度,还支持持续更新知识和整合特定领域的信息,这在知识密集型任务中尤其有效。这篇综合性的评论文章详细考察了RAG范式的发展,包括初级RAG、高级RAG和模块化RAG,仔细研究了RAG框架的三大基础组成部分,包括检索、生成和增强技术,突出了嵌入在这些关键组成部分中的最先进技术,提供了对RAG系统进步的深入理解。此外,本文还介绍了RAG模型的评估指标和基准,以及最新的评估框架。最后,文章概述了未来研究的可能方向,包括挑战识别、多模态性扩展,以及RAG基础设施及其生态系统的发展。
简介
LLM(大型语言模型,Large Language Model),例如GPT系列、LLama系列、以及Gemini等,在自然语言处理领域取得了巨大的成功,在SuperGLUE、MMLU和BIG-bench等各种基准测试中都展示出了卓越的性能。尽管成就斐然,LLM在处理领域特定或高度专业化查询方面表现出明显的局限性。一个常见的问题是生成错误信息,也就是所谓的“幻觉”。这类问题在查询的内容超出模型训练数据的范围或需要最新信息的场景中,尤其突出。这些缺点突显了在实际生产环境中部署LLM作为黑盒解决方案的不切实际性,需要额外的安全措施做保障,而RAG(检索增强生成,Retrieval Augmented Generation)刚好提供了应对之法:通过检索外部数据并将其整合到生成过程中,从而增强了模型回复的准确性和相关性。
RAG作为LLM领域内一个范式,由Lewis等人在2020年中期引入,用于增强生成式任务(Generative Task)。RAG涉及一个初始检索步骤。在这个步骤中,LLM会先查询外部数据源来获取相关信息,然后再继续回答问题或生成文本。这个过程不仅为后续的生成阶段提供了信息,而且确保了响应有据可循,从而显著提高了输出的准确性和相关性。在推理阶段,RAG会从知识库中动态检索信息,从而解决了“幻觉”问题。RAG在LLM领域的融合使用,得到了广泛认可,并在业界得到快速采用,并已成为聊天机器人能力改善和LLM生产应用领域的关键技术。
RAG的演化可分为四个阶段,如图1所示。
第一阶段,在其2017年的初始阶段,与Transformer架构的出现一致,主要推力在于通过预训练模型(PTM)吸收额外知识以增强语言模型。在这个时期,RAG的基础工作主要集中在优化预训练方法。
图1:RAG研究发展的技术树,包含各阶段、各分支的代表性作品
第二阶段:在此之后,RAG的研究发展进入了一个相对沉寂期,直至ChatGPT的出现。ChatGPT的出现将LLM推向了前沿。
第三阶段:LLM迎来了发展的关键时刻,社区将焦点转向了如何利用LLM的能力来实现更好的可控性并应对不断演变的需求。相应地,RAG的研究大部分集中在推理上,涉及少量过程微调。
第四阶段:随着LLM能力的不断提升,特别是在GPT-4引入之后,RAG技术的格局发生了显著变化。
RAG演变为一种混合方法,结合了RAG和微调的优势,同时仍然保持了一小部分专注于优化预训练的研究。
RAG研究发展十分迅速,但是该领域却缺乏系统性的整合和抽象,这对于理解RAG进展的全面格局构成了挑战。本调查旨在通过提供一个关于LLM中检索增强的深入考察,对RAG的整个过程、RAG研究的现状和未来进行一个全面综述。
因此,本文旨在对RAG的技术原理、发展历史、内容,特别是LLM出现后的相关方法和应用,以及评估方法和应用场景进行全面的总结和体系化梳理,力求为现有RAG技术提供一个全面的概述和分析,并为未来发展方法提供结论和展望。本文意在为读者和实践者提供对大型模型和RAG的全面和系统的理解,阐明检索增强的发展和关键技术,澄清各种技术的优点和局限性及其适用环境,并预测潜在的未来发展。
我们的成果主要包含:
我们提供了一份全面而系统的最新RAG研究综述,描绘了包括初级RAG、高级RAG和模块化RAG等范式的演变。这一综述将RAG研究的更广泛范围置于LLM的背景下进行了讨论。
我们识别并讨论了RAG过程中的核心技术,特别是关注了“检索”、“生成器”和“增强”的方面,并深入探讨了它们之间的协同作用,阐明了这些组件如何精密协作以形成一个连贯有效的RAG框架。
我们构建了一个全面的RAG评估框架,概述了评估目标和指标。我们的比较分析阐明了从多个角度比较,RAG相对于微调的优势和劣势。此外,我们预测了RAG的未来发展方向,强调潜在的增强措施来应对当前挑战、扩展到多模态设置以及其生态系统的发展。
本文的结构如下:第2章和第3章定义RAG并详细描述其发展过程。第4章至第6章探讨核心组成部分——“检索”、“生成”和“增强”——强调其中嵌入的多样技术。第7章专注于RAG的评估系统。第8章比较RAG与其他LLM优化方法,并提出其发展的潜在方向。第9章为全文总结。
02.
RAG的定义可以从其工作流程中总结出来。图2展示了一个典型的RAG应用工作流程。在这个场景中,用户向ChatGPT询问一个最近的高关注度事件(即OpenAI CEO的突然解职和复职),这引发了大量公众讨论。作为最知名、使用最广的LLM,ChatGPT受到其预训练数据的限制,并不了解最近发生的新闻事件。而RAG通过从外部知识库检索最新的文档摘要来弥补了这一缺陷。在本例中,RAG获取了与查询相关的一系列新闻文章。这些文章与问题被合并成一个丰富的提示,使ChatGPT能够生成的回复有根有据。下图描绘了这一工作流程,展示了RAG通过实时信息检索增强了模型响应的能力的过程。
图2:应用于问答的RAG过程的一个例子
RAG在技术层面上通过各种创新方法得到了丰富,这些方法解决了诸如“检索什么”、“何时检索”以及“如何使用检索到的信息”等关键问题。对于“检索什么”的研究已从简单的标记(Token)和实体(Entity)检索发展到更复杂的结构,如块(Chunk)和知识图谱(Knowledge Graph),研究重点在于检索的粒度和数据结构化的水平。粒度越粗,则信息越多但准确度越低。结构化文本检索也能提供丰富的信息,但是牺牲了效率。关于“何时检索”的问题,已经发展出从单次到自适应和多次检索的策略。检索的频次越高,信息越多但是相应的效率也就越低。至于“如何使用”检索到的数据,已在模型架构的不同层面(包括输入、中间和输出层)开发了集成技术。尽管“中间层”和“输出层”效果更好,但存在需要培训和效率低下的问题。
RAG是一种通过整合外部知识库来增强LLM的范式,通过将信息检索机制和上下文学习(In-Context Learning,ICL)结合起来,从而实现了LLM性能的提升。在这个框架中,用户发起的查询提示通过搜索算法检索相关信息。然后,这些信息被编织到LLM的提示中,为生成过程提供额外的上下文支持。RAG的主要优势在于,在开发针对特定任务的应用时,开发者可以直接附加一个外部知识库来丰富输入,从而提高模型输出的精确度,无需对LLM进行针对性的二次训练。RAG已成为LLM系统中最受欢迎的架构之一,由于其高实用性和低使用门槛,许多对话型产品几乎完全基于RAG构建。
RAG工作流包括三个关键步骤:
语料库被划分为离散的块,然后使用编码器模型构建向量索引。
RAG根据查询与索引块(Indexed Chunk)的向量相似度识别并对块进行检索。
模型根据检索块(Retrieved Chunk)中获取的上下文信息生成回复。
这些步骤构成了RAG过程的基本框架,支持其信息检索和上下文感知生成能力。接下来,我们将介绍RAG研究框架。
RAG框架
RAG研究范式正在不断演进中。本节主要阐述其进展。在本文中,我们将RAG分为三种类型:初级RAG(Naive RAG)、高级RAG(Advanced RAG)和模块化RAG(Modular RAG)。虽然RAG性价比很高并且超越了原生LLM的性能,但在过去的使用中也暴露了一些局限性。而高级RAG和模块化RAG的出现和发展弥补了初级RAG的这些短板。
3.1 初级RAG
初级RAG研究范式代表了最早的方法论,在ChatGPT广泛采用后不久就取得了重要地位。初级RAG遵循传统的流程,包括索引创建(Indexing)、检索(Retrieval)和生成(Generation),常常被描绘成一个“检索—读取”框架。
索引创建是数据准备的关键初始步骤,在离线状态下进行,并涉及几个阶段。从为数据生成索引开始,原始数据被清洗和提取,各种格式的文件,比如PDF、HTML、Word和Markdown,都会被转换为标准化的纯文本。为了适应语言模型的上下文限制,这些文本随后被切分成更小、更易管理的块,这个过程被称为分块(Chunking)。这些块随后通过嵌入模型(Embedding Model)转换为向量表示。嵌入模型的选择需要在推理效率和模型大小之间进行平衡。这有助于在检索阶段进行相似性比较。最后,会创建一个索引来存储这些文本块,使用这些文本块的向量嵌入作为键值对,从而保证了高效且可扩展的搜索能力。
在接收到用户查询后,系统使用在索引阶段期间使用的相同编码模型,将输入转换为向量表示。然后,它计算查询向量与索引语料库中的向量化块(Verctorized Chunk)之间的相似性并打分。系统优先检索与查询最相似的前K个块。这些块随后被用作扩展后的上下文,来应对用户的请求。
查询和选定的文档会被合成为一个清晰、有条理的提示,发送给LLM进行处理并生成回复。LLM回答问题的方法可能会根据特定任务的标准而变化,可以依赖其固有的参数化知识,也可以将其回答限制在所提供的文档内容范围内。对于仍然在进行中的会话,所有的对话历史都可以被整合到提示中,从而使LLM能够有效地参与多轮对话交互。
初级RAG在三个关键领域面临着显著挑战:“检索”、“生成”和“增强”。
初级RAG的检索质量存在许多问题,例如低精度和低召回率等。低精度会导致检索到的块无法对齐,以及幻觉等潜在问题。低召回率会导致无法检索到所有的相关块,从而导致LLM的回复不够全面。此外,使用老旧的信息进一步加剧了问题,可能导致不准确的检索结果。
回复生成质量面临着幻觉挑战,即LLM生成的答案并没有基于所提供的上下文,和上下文不相关,或者生成的回复存在着包含有害或歧视内容的潜在风险。
而在增强过程中,初级RAG在如何有效地将检索到的段落的上下文与当前生成任务进行整合方面也面临着不小的挑战。低效的整合可能导致输出不连贯或破碎化。冗余和重复也是一个棘手的问题,特别是当多个检索到的段落包含相似信息时,生成的回复中可能会出现重复的内容。
当检索到多个相关段落时,如何辨别这些段落对生成任务的重要性和相关性是另一个挑战,需要适当平衡每个段落的价值。此外,协调不同写作风格和语气的差异以确保输出的一致性也至关重要。
最后,生成模型过度依赖增强信息也是一个风险项,可能导致输出仅仅是对检索到的内容的重复,而没有提供新的价值点或综合信息。
为了解决初级RAG的不足,高级RAG诞生了,并有针对性地进行了功能增强。在检索质量方面,高级RAG采用了预检索(Pre-retrieval)和后检索(Post-retrieval)策略。为了解决初级RAG在索引方面遇到的挑战,高级RAG使用了滑动窗口(Sliding Window)、细粒度分段(Fine-Grained Segmentation)和元数据(Metadata)等技术,优化了其索引方法。此外,高级RAG还引入了多种方法来优化检索过程。
优化数据索引。优化数据索引的目标是提高被索引内容的质量。共涉及五个主要策略:提高数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。
提高数据粒度旨在提升文本的标准化、一致性、事实准确性和上下文丰富度,来改善RAG系统的性能。这包括移除不相关信息、消除实体和术语中的歧义、确认事实准确性、保持上下文、以及更新过时的文档。
优化索引结构涉及调整块的大小以捕获相关上下文,跨索引路径查询,并结合图结构(Graph Structure)中的信息,利用图数据索引中节点之间的关系来捕获相关上下文。
添加元数据信息涉及将引用的元数据(如日期和目的)整合到块中用于过滤,以提高检索效率。
对齐优化解决了文档之间的对齐问题和差异,通过将“假设性问题”引入文档来纠正对齐问题和差异。
在检索阶段,关注的重点是通过计算查询和块之间的相似性来识别出恰当的上下文。嵌入模型是这一过程的核心。在高级RAG中,有可能对嵌入模型进行优化。
微调嵌入(Fine-Tuning Embedding)。微调嵌入模型显著影响RAG系统中检索内容的相关性。这个过程涉及自定义嵌入模型,以提高特定领域上下文中的检索相关性,特别是对于处理不断发展或罕见术语的专业领域。BAAI开发的BGE嵌入模型,比如BGE-large-EN,就是一个可以通过微调来优化检索相关性的高性能嵌入模型。用于微调的训练数据可以使用像GPT-3.5-turbo这样的语言模型生成,基于文档块制定问题,然后将其用作微调对。
动态嵌入(Dynamic Embedding)可以适应词汇使用的上下文,不像静态嵌入使用每个词汇的单一向量。例如,在像BERT这样的Transformer模型中,同一个词可能因为周边词汇不同而拥有不同的嵌入。OpenAI的embeddings-ada-02模型,基于像GPT这样的LLM原理构建,是一个复杂的动态嵌入模型,能够捕捉基于上下文的理解。不过其对上下文的敏感性可能不如最新的全尺寸语言模型(例如GPT-4)。
从数据库中检索到有价值的上下文后,如何将其与查询作为输入融合到LLM中至关重要。与此同时,还需要解决上下文窗口限制带来的挑战。一次性向LLM展示所有的相关文档可能会超出上下文窗口限制,引入噪音(Noise),并影响对关键信息的关注。解决这些问题要求对检索到的内容进行额外处理。
重新排序(Reranking)。重新排序作为一个关键策略,把检索到的信息中的最相关的内容重新定位到提示的边缘。这一概念已在诸如LlamaIndex4、LangChain5和HayStack等框架中实现。例如,Diversity Ranker根据文档多样性优先排序,而LostInTheMiddleRanker则是将最佳文档交替放在上下文窗口的开始和结束处。此外,像cohereAI rerank、bge-rerank和LongLLMLingua等方法通过重新计算相关文本与查询之间的语义相似性,解决了阐释基于向量的模拟搜索语义相似性的挑战。
提示压缩(Prompt Compression)。研究表明,检索文档中的噪音会影响RAG的性能。后处理的重点在于压缩不相关的上下文,突出关键段落,并减少整体上下文长度。例如,Selective Context和LLMLingua等方法利用小型语言模型通过计算互信息(Mutual Information)或困惑度来估计元素的重要性。Recomp通过训练针对不同粒度的压缩器来解决这个问题,而Long Context则设计了总结技术,来增强在存在大量上下文的场景下,LLM对关键信息感知能力。
不同于初级RAG框架,模块化RAG结构提供了更丰富的多样性和更强大的灵活性。其通过整合各种方法来增强功能模块,例如加入搜索模块以实现相似性检索,并在检索器中应用微调方法。重新构建的RAG模块和迭代方法也已经完成了开发,用于解决特定问题。模块化RAG范式越来越成为RAG领域的常态,支持采用串行管道或跨多个模块的端到端训练方法。图3对三种RAG范式进行对比。但是,模块化RAG并不是独立的。三种RAG范式之间的关系可以理解为:高级RAG是模块化RAG的一种专门形式,初级RAG本身就是高级RAG的一个特例,三种范式之间是继承和发展的关系。
图3:三种RAG范式的对比
搜索(Search)模块。与初级/高级RAG中的相似性检索相比,搜索模块针对场景定制,并结合了对额外语料库的直接搜索。这种整合的实现使用了LLM生成的代码(如SQL或Cypher等查询语言),以及其他自定义工具。搜索的数据源可以包括搜索引擎、文本数据、表格数据和知识图谱。
记忆(Memory)模块。该模块利用LLM的记忆能力来指导检索。这种方法涉及识别与当前输入最相似的记忆。Selfmem使用增强检索的生成器,通过不停地迭代来创建一个无界的记忆池(Memory Pool),将“原始问题(Original Question)”和“双重问题(Dual Question)”。通过使用自己的输出来改进自身的增强检索生成模型,文本在推理过程中愈发与数据分布一致。
融合(Fusion)模块。RAG-Fusion通过采用多查询方法,使用LLM将用户查询扩展为多个不同的视角,来增强传统搜索系统并解决其局限性。这种方法不仅能够捕捉用户需要的显式信息,还能发现更深层次、变革性的知识。融合过程涉及原始查询和扩展查询的并行向量搜索,智能重新排序以优化结果,并将最佳结果与新查询配对。这种先进的方法确保搜索结果与用户的显式和隐含意图紧密对齐,从而发现更具洞察力和相关性的信息。
路由(Routing)模块。RAG系统的检索过程可以根据情况交替或合并使用来自不同领域、语言和格式的数据源(Source)。查询路由决定对用户查询的后续操作,包括概括、搜索特定数据库、将不同路径合并为一次响应。查询路由器还会为查询选择合适的数据存储(Data Store),可能涵盖各种数据源,例如向量存储、图数据库、关系数据库,或索引体系——例如,用于多文档存储的概要索引和文档块向量索引。查询路由器的决策过程是预定义的,并通过LLM调用执行,将查询定向到指定索引上。
预测(Predict)模块。预测解决了检索内容中常见的冗余和噪音问题。这个模块并不直接检索数据源,而是利用LLM生成所需的上下文。LLM生成的内容比直接检索获得的内容更有可能包含相关信息。
任务适配器(Task Adapter)。该模块专注于将RAG对多种下游任务进行适配。UPRISE实现了自动从预构建的数据池中检索零样本(Zero-Shut)任务输入的提示,从而增强任务和模型的通用性。同时,PROMPTAGATOR使用LLM作为少样本(Few-Shot)查询生成器,并基于生成的数据创建特定任务的检索器。任务适配器利用LLM的泛化能力,能够用最少的样例来完成针对特定任务的端到端检索器的开发。
模块化RAG的组织结构具有高度适应性,允许在RAG过程中对模块进行替换和重排,以适应不同问题的上下文。
初级RAG和高级RAG都可以被视为由一些固定模块组成的模块化RAG。如图3所示,初级RAG主要由“检索”和“读取”模块组成。高级RAG的典型模式是在初级RAG的基础上增加“重写(Rewrite)”和“重新排序(Rerank)”模块。但是,总体而言,模块化RAG还是具备更强大的多样性和灵活性。
当下的研究主要探索两种组织范式,第一种涉及增加或替换模块,而第二种则专注于调整模块之间的组织流程。这种灵活性使得RAG过程可以有效地适应广泛的任务。
增加或替换模块。在保持检索—读取核心结构的基础上,引入或替换模块的策略通过整合额外模块来增强特定功能。RRR模型引入了“重写—检索—读取”过程,利用了LLM性能作为重写模块的强化学习激励。这使得重写器能够对检索查询进行微调,从而提高阅读器(Reader)的下游任务性能。
同样地,像“生成—读取”这样的方法中,可以对模块进行选择性替换,其中LLM的生成模块取代了检索模块。“背诵—读取”方法将外部检索转变为从模型权重中进行检索,要求LLM最初记忆特定任务的信息,随后产生能够处理知识密集型自然语言处理任务的输出。
调整模块之间的流程。在模块流程调整领域,重点是增强语言模型和检索模型之间的互动。DSP引入了“说明—搜索—预测(Demonstrate-Search-Predict)”框架,将上下文学习系统视为一个明确的程序而不是最终任务提示,从而更有效地处理知识密集型任务。ITER-RETGEN方法利用生成的内容指导检索,在“检索—读取—检索—读取”流程中迭代实施“增强检索生成”和“生成增强检索”。这种方法展示了一种创新的方式,使用一个模块的输出来改善另一个模块的功能。
检索过程的优化旨在提高RAG系统中信息的效率和质量。当前研究的重点是整合多种搜索技术、完善检索步骤、结合认知回溯(Cognitive Backtracking)、实施多功能查询策略以及利用嵌入相似性。这些努力共同追求在RAG系统中实现检索效率和上下文信息深度之间实现平衡。
混合搜索探索(Hybrid Search Exploration)。RAG系统通过智能化地整合各种技术来优化其性能,包括基于关键字的搜索、语义搜索和向量搜索。这种方法将每种搜索方式的独特优势利用起来,来适应不同的查询类型和信息需求,确保能够持续检索到高度相关且丰富的信息。混合搜索的使用作为检索策略的强大补充,增强了RAG管道的总体效能。
递归检索和查询引擎(Recursive Retrieval and Query Engine)。递归检索涉及在初始检索阶段获取较小的块,以捕获关键的语义含义。随后,在后期阶段向LLM提供包含更多上下文信息的较大块。这种两步检索方法有助于在效率和提供丰富的上下文的回复之间取得平衡。
StepBack-prompt 方法鼓励LLM从特定实例中抽离出来,围绕更广泛的概念和原则进行推理。实验结果显示,在使用后向提示的各种具有挑战性的推理任务中,性能显著提升,凸显了它们对RAG过程的自然适应性。这些增强检索的步骤可以在生成对后向提示的回应以及最终的问答过程中应用。
子查询(Subquery)。根据情况,可以采用不同的查询策略,例如使用LlamaIndex等框架提供的查询引擎,利用树形查询、向量查询,或执行简单的顺序查询块。
假设性文档嵌入(Hypothetical Document Embeddings)。HyDE的操作理念是生成的答案可能在嵌入空间中比直接查询更接近。使用LLM,HyDE根据查询创建一个假设性的文档(答案),嵌入这个文档,并使用产生的嵌入来检索与假设文档相似的真实文档。这种方法不是基于查询寻求嵌入相似性,而是专注于从一个答案到另一个答案的嵌入相似性。然而,它可能不会始终产生理想的结果,特别是当语言模型不熟悉相关主题时,可能导致更多错误实例的出现。
04.
在RAG的背景下,高效地从数据源检索相关文档至关重要。然而,创建一个熟练的检索器面临着重大挑战。本节将深入探讨三个基本问题:
(1)我们如何实现准确的语义表示?
(2)哪些方法可以对齐查询和文档的语义空间?
(3)检索器的输出如何与大型语言模型的偏好保持一致?
在RAG中,语义空间至关重要,因为它涉及将查询和文档进行多维映射。在这个语义空间中的检索准确性显著影响RAG的结果。本节将介绍两种构建准确语义空间的方法。
在处理外部文档时,首要步骤是将它们分解成较小的块,以提取细粒度特征,然后嵌入以表示其语义。然而,嵌入过大或过小的文本块可能会导致次优结果。因此,确定语料库中文档的最佳块大小对于确保检索结果的准确性和相关性至关重要。
选择合适的分块策略需要仔细考虑几个关键因素,例如索引内容的性质、嵌入模型及其最佳块大小、用户查询的预期长度和复杂性,以及特定应用对检索结果的利用。例如,块分割模型的选择应基于内容的长度——是较长还是较短。此外,不同的嵌入模型在不同块大小下表现出不同的性能特点。例如,句子变换器在单句上表现更好,而text-embedding-ada-002在包含256或512个标记的块上表现更佳。
此外,用户输入问题的长度和复杂性,以及应用的特定需求(例如,语义搜索或问答)等因素,也会影响分块策略的选择。这种选择可以直接受到所选LLM的标记限制的影响,需要对块大小进行调整。实际上,获得准确的查询结果涉及灵活应用不同的分块策略。没有一种适合所有情况的“最佳”策略,只有最适合特定情境的策略。
当前在RAG的研究中探索了各种块优化技术,旨在提高检索效率和准确性。其中一种方法涉及使用滑动窗口技术,通过在多个检索过程中合并全局相关信息,实现分层检索。另一种策略,称为“small2big”方法,在初始搜索阶段使用小文本块,随后为语言模型提供更大的相关文本块进行处理。
抽象嵌入技术根据文档摘要(或概要)确定前K项检索,提供对整个文档上下文的全面理解。此外,元数据过滤技术利用文档元数据来增强过滤过程。一种创新的方法,图索引技术,将实体和关系转化为节点和连接,特别是在多跳问题的背景下显著提高了相关性。
这些多样化方法的结合导致了显著的进步,从而提高了检索结果和RAG的性能。
一旦确定了块的大小,下一个关键步骤就是使用嵌入模型将这些块和查询嵌入到语义空间中。嵌入的有效性至关重要,因为它影响模型表示语料库的能力。近期研究引入了一些著名的嵌入模型,如AngIE、Voyage、BGE等。这些模型已在广泛的语料库上进行了预训练。然而,当应用于专门领域时,它们准确捕捉领域特定信息的能力可能受到限制。
此外,为确保模型在内容相关性方面理解用户查询,针对特定任务对嵌入模型进行微调至关重要。未经微调的模型可能无法充分满足特定任务的要求。因此,对嵌入模型进行微调对于下游应用很关键。嵌入微调方法有两个主要范式。
领域知识微调(Domain Knowledge Fine-Tuning)。为确保嵌入模型准确捕获领域特定信息,利用领域特定数据集进行微调至关重要。这一过程与标准语言模型微调的主要区别在于所涉及的数据集的性质。
通常,嵌入模型微调的数据集包括三个主要元素:查询、语料库和相关文档。模型使用这些查询来识别语料库中的相关文档。然后根据模型检索这些相关文档以响应查询的能力来衡量其有效性。数据集构建、模型微调和评估阶段各自呈现不同的挑战。
LlamaIndex引入了一套关键类和函数,旨在增强嵌入模型微调工作流程,从而简化这些复杂的过程。通过对特定领域知识语料库的内容进行组织,并利用所提供的方法论,可以熟练地微调嵌入模型,使其能够与目标领域的特定要求强对齐。
针对下游任务的微调(Fine-Tuning for Downstream Tasks)。为下游任务微调嵌入模型是提高模型性能的关键步骤。在利用RAG进行这些任务的领域中,出现了利用LLM能力微调嵌入模型的创新方法。
例如,PROMPTAGATOR使用LLM作为少样本查询生成器,创建针对特定任务的检索器,解决了在数据稀缺领域中尤其明显的监督微调(Supervised Fine-Tuning)挑战。LLM-Embedder使用了另外一种方式,通过利用LLM生成多个下游任务数据的奖励信号,从而检索器可以通过两种类型的监督信号进行微调:数据集的硬标签和LLM的软奖励。这种双重信号方式提高了微调过程的有效性,使嵌入模型能够适应多样化的下游应用。
虽然这些方法通过结合领域知识和特定任务的微调来改善语义表示,但检索器可能与某些LLM的兼容性并非最佳状态。为解决这个问题,一些研究人员探索了使用LLM反馈直接对微调过程进行监督。这种直接监督旨在使检索器与LLM更紧密对齐,从而实现下游任务的性能提升。相关内容会在4.3节中详细讨论。
在RAG应用的背景下,检索器可能使用单一嵌入模型对查询和文档进行编码,或者为查询和文档使用不同的模型。此外,用户的原始查询可能因表达不准确和缺乏语义信息而导致结果不够准确。因此,将用户查询的语义空间与文档的语义空间对齐至关重要。本节介绍了两种实现这种对齐的基本技术。
查询重写是用于对齐查询和文档语义的基本方法。如Query2Doc和ITER-RETGEN等方法通过将原始查询与额外引导信息相结合,利用LLM创建伪文档(Pseudo Document)。HyDE使用文本线索构建查询向量,生成捕获关键模式的“假设(Hypothetical)”文档。RRR引入了一个专注于查询重写的框架,对传统的检索和阅读顺序进行了颠倒。STEP-BACKPROMPTING使LLM能够基于高级概念进行抽象推理和检索。此外,多查询检索方法通过LLM来同时生成和执行多个搜索查询,非常适合用于解决具有多个子问题的复杂问题。
除了查询重写外,还存在更精细的嵌入转换(Embedding Transformation)技术。例如,LlamaIndex引入了一个适配器模块,可以集成于查询编码器之后。这个适配器有助于提升微调效果,从而优化查询嵌入的表示,将其映射到与预期任务更紧密对齐的潜在空间中。
SANTA解决了将查询与结构化外部文档对齐的挑战,特别是在结构化和非结构化数据之间存在不一致的场景中。该方法通过两种预训练策略提高检索器对结构化信息的敏感性:首先,利用结构化和非结构化数据之间的固有对齐指导在结构感知的预训练方案中的对比学习;其次,采用掩蔽实体预测。后者使用以实体为中心的掩蔽策略(Masking Strategy),促使语言模型预测并填补掩蔽的实体,从而促进对结构化数据的更深入理解。
在RAG管道中,通过各种技术增强检索命中率并非一定能改善最终结果,因为检索到的文档可能与LLM的特定要求不一致。因此,本节介绍了两种旨在将检索器输出与LLM偏好对齐的方法。
一些研究利用LLM的反馈信号来优化检索模型。例如,AAR使用“编码器—解码器”架构为预训练的检索器引入监督信号。这是通过识别LLM偏好的文档,使用FiD交叉关注分数来实现的。随后,检索器通过硬负采样和标准交叉熵损失进行微调。最终,优化后的检索器可以直接应用于增强未见目标LLM,从而在目标任务中提高性能。此外,还提出LLM可能更倾向于关注可读性而非信息丰富的文档。
REPLUG利用检索器和LLM计算检索到的文档的概率分布,然后通过计算KL散度进行监督训练。这种直接且有效的训练方法通过使用LLM作为监督信号来增强检索模型的性能,无需特定的交叉关注机制。
UPRISE使用冻结的LLM来对提示检索器进行微调。LLM和检索器都将“提示—输入”对作为输入,并根据LLM的打分来监督检索器的训练,将LLM作为了数据集标签器进行了有效应用。此外,Atlas提出了四种监督微调嵌入模型的方法:
注意力蒸馏(Attention Distillation):这种方法利用LLM在输出期间生成的交叉关注分数来对模型的知识进行蒸馏。
EMDR2:该方法通过使用期望最大化算法进行模型训练,将检索到的文档作为潜在变量。
困惑度蒸馏(Perplexity Distillation):该方法直接使用生成标记的困惑度作为指标来训练模型。
LOOP:这种方法提出了一种基于文档删除对LLM预测影响的新型损失函数,提供了一种高效的训练策略,从而让模型能够更好的适应特定任务。
这些方法旨在改善检索器和LLM之间的协同能力,从而提高检索性能并对用户查询做出更为准确的响应。
微调模型可能存在挑战,如通过API集成功能或应对有限的本地计算资源带来的约束。因此,一些方法选择加入一个外部适配器以帮助对齐。
PRCA通过上下文提取阶段和奖励驱动阶段训练适配器。然后使用基于标记的自回归策略优化检索器的输出。标记过滤方法使用交叉关注分数高效过滤标记,仅选择得分最高的输入标记。RECOMP引入了提取式和生成式压缩器用于摘要生成。这些压缩器要么选择相关句子,要么综合文档信息,创建针对多文档查询的定制摘要。
此外,PKG引入了一种通过指令微调将知识整合到白盒模型中的创新方法。在这种方法中,检索器模块直接替换为根据查询生成相关文档。这种方法有助于解决微调过程中遇到的困难,并提高模型性能。
生成
RAG的一个关键组成部分是其生成器,负责将检索到的信息转换为连贯流畅的文本。与传统语言模型不同,RAG的生成器通过整合检索到的数据来提高准确性和相关性。在RAG中,生成器的输入不仅包括典型的上下文信息,还包括通过检索器获得的相关文本段落。这种全面的输入使生成器能够深入理解问题的上下文,从而产生更具信息性和与上下文相关的响应。
此外,生成器由检索到的文本引导,以确保生成的内容与获得的信息之间的连贯性。多样化的输入数据让生成器在生成阶段可以有针对性地进行优化,从而提高了大型模型对来自查询和文档的输入数据的适应性。在本章内容中,我们将从后检索处理(Post-Retrieval Processing)和微调(Fine-Tuning)的各个方面来了解生成器的作用。
在不可微调LLM的领域中,许多研究依赖于像GPT-4这样的成熟模型,通过利用这些成熟模型全面的内部知识系统,综合来自各种文档的检索信息。
然而,这些大型模型本身依然面临很多挑战,包括上下文长度的限制和对冗余信息的敏感性。为了解决这些问题,一些研究将重点转向后检索处理。
后检索处理涉及处理、过滤或优化检索器从大型文档数据库检索到的相关信息。其主要目标是提高检索结果的质量,使其更符合用户需求或更满足后续任务需要。它可以被视为对检索阶段获得的文档的再处理。后检索处理中的常见操作通常包括信息压缩和结果重新排序。
检索器擅长于从庞大的知识库中检索相关信息,但是如何对检索文档中的大量信息进行高效管理是一个挑战点。当下的研究旨在扩展大型语言模型的上下文长度来解决这个问题。然而,就当前现状来看,大型模型仍然受到上下文限制的困扰。因此,在部分场景下,对信息进行压缩十分必要。信息压缩对于减少噪音、解决上下文长度限制和增强生成效果具有非常重要的意义。
PRCA训练了一个信息提取器来解决这个问题。在上下文提取阶段,当提供输入文本Sinput时,它能够产生代表从输入文档中压缩的上下文的输出序列Cextracted。训练过程旨在最小化Cextracted和实际上下文Ctruth之间的差异。
类似地,RECOMP采用了类似的方法,通过对比学习训练信息压缩器。每个训练数据点包括一个正样本和五个负样本,编码器在整个过程中使用对比损失进行训练。
另一项研究采取了不同的方法,旨在通过减少文档数量来提高模型答案的准确性。在这项研究中,他们提出了“过滤—重新排序”范式,结合了LLM和SLM(小型语言模型,Small Language Model)的优势。在这一范式中,SLM充当过滤器,而LLM则充当重新排序的代理。该项研究表明,指导LLM对SLM识别出的具有挑战性的样本进行重新排序可以显著提高各种信息提取任务处理性能。
重新排序模型在优化检索器检索到的文档集合中起着关键作用。当引入额外上下文时,语言模型通常面临性能下降的问题,重新排序有效地解决了这个问题。这种处理方式的核心概念是对文档记录进行重新排序,优先考虑最相关的项目,从而限制文档的总数量。这不仅解决了检索过程中上下文窗口扩展的挑战,而且提高了检索效率和响应能力。
重新排序模型在整个信息检索过程中既是Optimizer也是Refiner,为后续语言模型处理提供了更有效、更准确的输入。
上下文压缩被纳入重新排序过程中,以提供更精确的检索信息。这种方法涉及减少个别文档的内容和过滤整个文档,最终目标是在搜索结果中呈现最相关的信息,从而更集中、更准确地展示相关内容。
优化RAG模型中的生成器是其架构的关键方面。生成器的作用是接收检索到的信息并生成相关文本,形成模型的最终输出。对生成器进行优化的目的是确保生成的文本表达自然的同时有效地利用了检索到的文档,从而能够更好地满足用户的查询需求。
在标准LLM生成任务中,输入通常包括一个查询。RAG的特点在于不仅有一个查询,还囊括了检索器检索到的各种文档(结构化/非结构化)作为输入。这些额外信息可以显著影响模型的理解,特别是对于小型模型而言。在这种情况下,对模型进行微调来适应查询和检索文档的输入变得至关重要。在将输入提交给微调模型之前,通常会对检索器检索到的文档进行后检索处理。需要注意的是,RAG中生成器的微调方法与LLM的一般微调方法一致。接下来,我们将简要描述一些涉及数据(格式化/非格式化)和优化函数的代表性工作。
作为一般优化过程的一部分,训练数据通常包括“输入—输出”对,旨在训练模型根据输入x产生输出y。在Self-Mem的工作中,采用了传统的训练过程,给定输入x,检索相关文档z(在相关论文中选择Top-1),并在整合(x, z)后,模型生成输出y。相关论文采用了两种常见的微调范式,即联合编码器(Joint Encoder)和双编码器(Dual-Encoder)。
在联合编码器范式中,使用基于“编码器—解码器”的标准模型。这里,编码器首先对输入进行编码,解码器通过注意力机制组合编码结果以自回归方式生成标记。另一方面,在双编码器范式中,系统设置了两个独立的编码器,分别对输入(即查询和上下文)和文档进行编码。结果输出由解码器依次进行双向交叉关注处理。两种架构都使用Transformer作为基础块,并使用负对数似然损失(Negative Log-Likelihood Loss)进行优化。
在为语言模型准备训练数据的阶段,通常会创建输入和输出的交互对。这种传统方法可能导致“暴露偏差”,即模型仅在个别正确的输出示例上进行训练,从而限制了其接触一系列可能输出的机会。这种限制可能会通过使模型过度拟合训练集中的特定示例,从而降低其在不同上下文中泛化的能力,影响模型的现实世界性能。
为了缓解暴露偏差,SURGE提出使用图文对比学习。这种方法包括一个对比学习目标,促使模型生成一系列合理且连贯的响应,超越训练数据中遇到的样例。这种方法在减少过拟合和加强模型的泛化能力方面至关重要。
对于涉及结构化数据的检索任务,SANTA框架实施了三部分训练方案,有效地封装了结构和语义的微妙差别。初始阶段侧重于检索器,使用对比学习来优化查询和文档嵌入。
随后,生成器的初始训练阶段采用对比学习将结构化数据与非结构化文档描述进行对齐。在生成器训练的下一阶段,模型认识到实体语义在文本数据检索的表示学习(Representation Learning)中的关键作用。这个过程从识别结构化数据中的实体开始,然后在生成器的输入数据中对这些实体施加掩蔽,为模型预测这些被掩蔽的元素做准备。
训练方案随着模型学习利用上下文信息重构被掩蔽的实体不断发展。这个练习培养了模型对文本数据的结构语义的理解,并进一步对齐了结构化数据中相关实体。优化的首要目标是训练语言模型准确地恢复被遮蔽的部分,从而丰富其对实体语义的理解。
06.
本节围绕三个关键方面展开:增强阶段、增强数据来源和增强过程。这三个方面阐明了RAG发展的关键技术。图4展示了RAG核心组件的分类。
图4:RAG核心组件的分类
作为一项知识密集型工作,RAG在语言模型训练的预训练、微调和推理阶段均融合了各种技术方法。
在预训练阶段,研究人员探讨了通过基于检索的策略来加强PTM(预训练模型,Pre-Training Model)以进行开放领域问答的方法。REALM模型采用了结构化、可解释的知识嵌入方法,将预训练和微调构架为MLM(遮蔽语言模型,Masking Language Model)框架内的“Retrieve-Then-Predict”工作流。
RETRO利用检索增强技术进行大规模从零开始的预训练,实现了在模型参数上的减少,同时在困惑度方面超越了标准GPT模型。RETRO的独特之处在于在GPT模型的基础结构之上增加了一个额外的编码器,用于处理从外部知识库检索到的实体特征。
Atlas也将检索机制纳入T5架构的预训练和微调阶段。它使用预训练的T5来初始化“Encoder-Decoder”语言模型,并使用预训练的Contriever作为密集检索器,提高了复杂语言建模任务的效率。
此外,COG引入了一种全新的文本生成方法,模仿从现有集合中复制文本片段。COG利用高效的向量搜索工具,计算并索引文本片段的上下文意义表示,与RETRO相比,在诸如问答和领域适应等领域展现了卓越的性能。
模型参数的增长规律推动了自回归模型成为主流。研究人员正在将RAG方法扩展到预训练的更大模型上,RETRO++就是这一趋势的典型例子,通过扩大模型参数,同时保持或提高性能。
实证证据强调在文本生成质量、事实准确性、减少有害内容和下游任务能力方面的显著改进,特别是在像开放领域问答这样的知识密集型应用中。这些结果暗示将检索机制整合到自回归语言模型的预训练中是一条有前景的途径,将复杂的检索技术与广泛的语言模型结合起来,产生更精确和高效的语言生成。
增强预训练的好处包括一个强大的基础模型,在使用更少的参数的前提下,在困惑度、文本生成质量和特定任务性能方面超越标准GPT模型。这种方法特别擅长处理知识密集型任务,并通过在专业语料库上训练,促进特定领域模型的发展。
尽管如此,这种方法面临着挑战,例如需要大量的预训练数据集和资源,以及随着模型大小的增加,更新频率会降低。但是瑕不掩瑜,这种方法在模型弹性方面提供了强大的优势。一旦训练完成,检索增强型模型可以独立于外部库运行,提高生成速度和操作效率。确定的潜在收益使这种方法成为人工智能和机器学习领域中持续研究和创新的热门主题。
RAG和微调是增强LLM的强大工具,结合两者可以满足更具体场景的需求。一方面,微调允许检索具有独特风格的文档,实现更好的语义表达,并对齐查询和文档之间的差异。这确保了检索器的输出更符合当前场景。另一方面,微调可以满足进行风格化和有针对性调整的生成需求。此外,微调还可以用于对齐检索器和生成器,以提高模型的协同性。
微调检索器的主要目标是提高语义表示的质量,通过直接使用语料库微调嵌入模型来实现。通过反馈信号将检索器的能力与LLM的偏好对齐,两者可以更好地协调。针对特定下游任务微调检索器可以提高适应性。任务不可知微调的引入旨在提高检索器在多任务场景中的通用性。
微调生成器可以产生更具风格化和定制化的输出。一方面,它允许针对不同输入数据格式进行适应。例如,微调LLM以适应知识图谱的结构、文本对的结构以及其他特定结构。另一方面,通过构建指令性数据集,可以要求LLM生成特定格式的内容。例如,在自适应或迭代检索场景中,LLM被微调用于生成帮助确定下一步行动时机的内容。
通过对检索器和生成器进行协同微调,我们可以提高模型的泛化能力,避免分别训练可能导致的过拟合。然而,联合微调也导致了资源消耗的增加。RA-DIT提出了一个轻量级的双指令调整框架,可以有效地为任何LLM增加检索能力。检索增强的指令性微调更新了LLM,指导它更有效地使用检索到的信息并忽略分散注意力的内容。
尽管微调有其优势,但也存在限制,包括需要专门的RAG微调数据集和大量计算资源的需求。然而,这一阶段允许根据特定需求和数据格式定制模型,与预训练阶段相比可能减少资源使用,同时仍能微调模型的输出风格。
总之,微调对于调整RAG模型以适应特定任务至关重要,使得检索器和生成器变得更加精炼。尽管资源和数据集要求带来了挑战,但这一阶段增强了模型在各种任务中的通用性和适应性。因此,RAG模型的战略性微调是开发高效检索增强系统的关键组成部分。
RAG模型中的推理阶段至关重要,因为它涉及与LLM的广泛集成。传统的RAG方法,也称为初级RAG,涉及在此阶段整合检索内容以指导生成过程。
为了克服初级RAG的限制,高级RAG在推理中引入了更丰富的上下文。DSP框架利用冻结LM和RM(检索模型,Retrieval Model)之间自然语言文本的复杂交换,丰富了上下文,从而提高了生成结果的质量。PKG方法为LLM配备了知识引导模块,允许在不修改LM参数的情况下检索相关信息,实现更复杂的任务执行。CREAICL采用同步检索跨语言知识来增强上下文,而RECITE通过直接从LLM采样段落来生成上下文。
在推理阶段进一步精炼RAG过程的方法包括针对需要多步推理的任务。ITRG以迭代的方式检索信息来确定正确的推理路径,从而提高了任务适应性。ITERRETGEN采用迭代策略,将“检索增强型生成(Retrieval-Enhanced Generation)”和“生成增强型检索(Generation-Enhanced Retrieval)”在循环过程中交替进行。对于非知识密集型任务,PGRA提出了一个两阶段框架,从一个任务不可知的检索器开始,然后是提示引导的重新排序器来选择证据并指定优先级。相反,IRCOT将RAG与CoT(思维链,Chain of Thought)方法相结合,交替进行CoT引导的检索和检索提供信息的CoT(Retrieval-Informed CoT)过程,显著提高了GPT-3在各种问答任务中的性能。
本质上,这些推理阶段的增强提供了轻量级、成本效益高的替代方案,利用预训练模型的能力,避免了进一步训练。这种方法的主要优势在于,在保持静态LLM参数的同时,提供与上下文相关的信息以满足特定任务需求。然而,这种方法也有其局限性,需要精细的数据处理和优化,并且受限于基础模型的固有能力。为了有效应对多样化的任务需求,这种方法通常与程序化优化技术(如逐步推理、迭代检索和自适应检索策略)结合使用。
RAG模型的有效性在很大程度上受到增强数据源(Augmentation Source)选择的影响。不同层次的知识和维度需要不同的处理技术。它们被归类为非结构化数据、结构化数据和由LLM生成的内容。不同增强方面的代表性RAG研究的技术树在图5中展示。树叶用三种不同的颜色表示,代表使用不同类型数据的增强:非结构化数据、结构化数据和由LLM生成的内容。该图表清楚地显示,最初,增强主要通过非结构化数据实现,如纯文本。这种方法后来扩展到使用结构化数据(例如知识图谱)以进一步改进。最近,研究趋势是利用LLM自身生成的内容进行检索和增强。
图5:RAG研究技术树——代表性增强技术
非结构化文本来自语料库,包括用于大型模型微调的提示数据和跨语言数据。检索单元从标记(例如,kNN-LM)到短语(例如NPM和COG)以及文档段落,更细的粒度提供了精确性,但增加了检索复杂性。
FLARE引入了一种主动检索方法,由LM生成低概率词触发。它创建一个临时句子用于文档检索,然后用检索到的上下文重新生成句子,以预测后续句子。RETRO使用前一个块来检索最近的块,结合前一个块的上下文,指导下一个块的生成。为了保持因果关系,下一个块Ci的生成只利用前一个块N(Ci−1)的最近块,而不是N(Ci)。
结构化数据,如KG(知识图谱,Knowledge Graph),提供了高质量的上下文,并减轻了模型幻觉。RET-LLM从过去的对话中构建知识图谱记忆,用于未来参考。SUGRE使用图神经网络(GNN)对相关KG子图进行编码,通过多模态对比学习确保检索到的事实和生成的文本之间的一致性。Knowl-edGPT生成KB搜索查询,并将知识存储在个性化基础上,增强了RAG模型的知识丰富性和上下文性。
针对RAG中外部辅助信息的局限性,一些研究专注于利用LLM的内部知识。SKR将问题分类为已知或未知,选择性地应用检索增强。GenRead用LLM生成器替换检索器,发现通过更好地与因果语言建模的预训练目标对齐,LLM生成的上下文通常能够包含更准确的答案。Selfmem以迭代的方式使用检索增强型生成器创建一个无界的记忆池,使用记忆选择器来选择作为原始问题的双重问题的输出,从而实现生成模型的自我增强。
这些方法论强调了在RAG中创新型数据源利用广度,致力于提高模型性能和任务有效性。
RAG领域的标准实践通常包括一个单一的检索步骤,随后是生成。这种流程可能导致效率低下。一个显著的问题是“中间迷失”现象,当单次检索产生冗余内容时,可能会稀释关键信息或产生矛盾的关键信息,从而降低生成质量。此外,由于提供的信息范围有限,这种单一检索通常不足以应对需要多步推理的复杂问题。
如图5所示,为了规避这些挑战,近期的研究提出了改进检索过程的方法:迭代检索(Iterative Retrieval)、递归检索(Recursive Retrieval)和自适应检索(Adaptive Retrieval)。迭代检索允许模型进行多次检索,增强获得信息的深度和相关性。递归检索过程是指一次检索的结果被用作后续检索的输入,有助于深入挖掘相关信息,特别是在处理复杂或多步查询的时候。递归检索通常用于需要逐步方法以收敛于最终答案的场景,如学术研究、法律案例分析或某些类型的数据挖掘任务。另一方面,自适应检索提供了一种动态调整机制,根据不同任务和上下文的特定需求定制检索过程。
RAG模型中的迭代检索是一个基于初始查询以及截至目前生成的文本反复收集文档的过程,为LLM提供更全面的知识库。这种方法已被证明可以通过多次检索迭代提供额外的上下文参考,增强后续答案生成的健壮性。然而,它可能遭受语义不连贯和无关信息累积的问题,因为它通常依赖于n个标记的序列来标记生成文本和检索文档之间的边界。
为了能够适应特定数据场景,可以采用递归检索和多跳(Multi-Hop)检索技术。递归检索涉及使用结构化索引以分层方式处理和检索数据,这可能包括在基于这一摘要进行检索之前对文档或冗长的PDF文件的部分内容进行摘要。随后,在文档内的二次检索细化了搜索,体现了这一过程的递归性质。相比之下,多跳检索旨在更深入地挖掘图结构化数据源,提取相互关联的信息。
此外,一些方法将检索和生成的步骤整合起来。ITER-RETGEN采用了一种协同方法,结合了“检索增强型生成”和“生成增强型检索”,用于需要复制特定信息的任务。该模型利用输入任务所需的内容作为相关知识检索的上下文基础,进而提高后续迭代中生成的响应质量。
递归检索通常用于信息检索和自然语言处理,以提高搜索结果的深度和相关性。
该过程涉及基于前次搜索结果迭代地优化搜索查询。递归检索旨在通过反馈循环逐渐聚焦到最相关的信息上,以增强搜索体验。IRCoT使用思维链来指导检索过程,并利用获得的检索结果优化CoT。ToC创建了一棵澄清树,对查询中的模糊部分进行了系统的优化。它在用户需求一开始不完全明确或所寻求的信息高度专业化或微妙的复杂搜索场景中特别有用。这一过程的递归性质允许持续学习和适应用户的需求,通常会提供用户对搜索结果的满意度。
自适应检索方法,例如Flare和SelfRAG所展示的那样,通过使LLM能够主动确定检索的最佳时刻和内容,从而优化RAG框架,提高检索信息的效率和相关性。
这些方法是一个更广泛的趋势的组成部分,其中LLM在其操作中运用主动判断,代表性模型代理包括AutoGPT、Toolformer和Graph-Toolformer。以Graph-Toolformer为例,其将检索过程分为不同步骤,其中LLM会自发地使用检索器,应用Self-Ask技术,并使用少量提示来启动搜索查询。这种主动性允许LLM决定何时搜索必要信息,类似于代理使用工具的方式。
WebGPT集成了一个强化学习框架来训练GPT-3模型,使其在文本生成期间能够自主使用搜索引擎。WebGPT使用特殊标记来指导这个过程,以便执行诸如搜索引擎查询、浏览结果和引用参考资料等操作,从而通过使用外部搜索引擎来扩展GPT-3的能力。
Flare通过监控生成过程的置信度来自动化定时检索,置信度通过生成词汇的概率表示。当概率低于某个阈值时,会激活检索系统来收集相关信息,从而达到优化检索周期的目的。
Self-RAG引入了允许模型反思其输出的“反思标记(Reflection Token)”。反思标记有两种类型:“检索(Retrieve)”和“批评(Critic)”。模型自主决定何时激活检索,也支持通过预定义阈值来触发检索。在检索期间,生成器在多个段落中进行片段级束搜索(Fragment-Level Beam Search),以得出最连贯的序列。批评分数用于更新子划分分数(Subdivision Score),在推理期间支持调整这些权重的灵活性自主判断能力。
LLM优化的日益普及引发了广泛的关注。提示工程、微调(FT)和RAG等技术各有不同特点,如图6中所示。虽然提示工程利用了模型的固有能力,但优化LLM通常需要同时应用RAG和FT方法。RAG和FT之间的选择应基于场景的具体需求和每种方法的固有属性。表1对RAG和FT进行了详细比较。
图6:RAG与其他模型优化方法的对比
特性 |
RAG |
微调 |
知识更新 |
直接更新检索知识库确保信息实时性,无需频繁重新训练,非常适合动态数据环境。 |
存储静态数据,需要重新训练来更新知识和数据。 |
外部知识 |
擅长利用外部资源,特别适合访问文档或其他结构化/非结构化数据库。 |
可用于将预训练中获得的外部知识与大型语言模型对齐,但对于频繁变化的数据源可能不太实用。 |
数据处理 |
涉及最少的数据处理。 |
依赖于高质量数据集的创建,有限的数据集带来的性能提升可能非常微小。 |
模型定制 |
专注于信息检索和整合外部知识,但可能无法完全定制模型行为或写作风格。 |
允许根据特定语调或术语调整LLM行为、写作风格或特定领域知识。 |
可解释性 |
响应可以追溯到特定数据来源,提供更高的可解释性和可追溯性。 |
类似于黑盒,模型以某种方式响应的原因并非总是清楚可知的,导致可解释性相对较低。 |
计算资源 |
依赖于支持检索策略和数据库相关技术的计算资源。此外,需要维护外部数据源集成和更新。 |
准备和策划高质量训练数据集、定义微调目标以及提供相应的计算资源是必要的。 |
延迟要求 |
涉及数据检索,延迟可能较高。 |
微调后的LLM可以在无需检索的情况下做出响应,延迟较低。 |
减少幻觉 |
由于每个答案都基于检索到的证据,因此本质上不太容易产生幻觉。 |
通过基于特定领域数据训练模型来帮助减少幻觉,但面对不熟悉的输入时仍有出现幻觉的可能。 |
伦理和隐私问题 |
从外部数据库存储和检索文本时,可能会出现伦理和隐私问题。 |
如果训练数据中涉及敏感内容,可能会出现伦理和隐私问题。 |
表1:RAG与微调的对比
RAG就像给模型一本教材,用于定制信息检索,非常适合处理特定查询。另一方面,微调(FT)就像学生随时间内化知识,更适合复制特定结构、风格或格式。微调可以通过加强基础模型知识、调整输出和教授复杂指令来提高模型性能和效率。然而,它在整合新知识或快速迭代新用例方面不如RAG好。
RAG和FT这两种方法并非总是互斥的,二者可以互补,在不同层面提升模型的能力。在某些情况下,二者的结合使用可能产生卓越的性能。不过,涉及RAG和FT的优化过程可能需要多次迭代才能达到令人满意的结果。
RAG评估
RAG在自然语言处理(NLP)领域的迅速发展和日益普及,将RAG模型评估推到了LLM社区研究的前沿。这种评估的主要目标是理解和优化RAG模型在不同应用场景中的性能。
RAG模型的评估在过去主要集中在特定下游任务的执行上。这些评估使用适合手头任务的既定指标。例如,问答评估可能依赖于EM和F1分数,而事实核查(Fact-Checking)任务通常以准确性作为主要指标。像RALLE这样为RAG应用自动评估而设计的工具,同样基于这些特定任务的指标。尽管如此,关于RAG模型独特特性评估的研究明显不足。
下一节将基于RAG模型的独特属性,提供关于RAG评估的文献综述,涵盖了RAG评估的目标、评估方面,以及用于此类评估的基准和工具。
RAG模型的评估主要围绕两个关键组件:检索和生成模块。这种划分确保了对提供的上下文质量和生成质量的全面评估。
评估检索质量对于确定检索器组件所提供的上下文有效性至关重要。标准指标来自搜索引擎、推荐系统和信息检索系统领域,用于衡量RAG检索模块的性能。常用的指标包括命中率(Hit Rate)、平均倒数排名(MRR)和归一化折扣累积增益(NDCG)等。
生成质量的评估聚焦于生成器从检索上下文中综合并产出连贯且相关答案的能力。这种评估可以根据内容的目标分类为无标签和有标签内容。对于无标签内容,评估包括生成答案的忠实性、相关性和无害性。相比之下,对于有标签内容,评估重点是模型产生的信息的准确性。此外,检索和生成质量评估都可以通过手动或自动的方式进行。
当前RAG模型的评估实践强调三个主要质量分数和四个基本能力,这些共同构成了对RAG模型两个主要目标(检索和生成)的评估。
质量分数包括上下文相关性、答案忠实性和答案相关性。这些质量分数从不同角度评估了RAG模型在信息检索和生成过程中的效率。
上下文相关性评估检索到的上下文的精确性和特异性,确保相关性并最小化无关内容处理成本。
答案忠实性确保生成的答案保持对检索上下文的忠实,维持一致性并避免矛盾。
答案相关性要求生成的答案直接针对提出的问题,有效地解决核心查询。
RAG评估还包括四种能力,表明其适应性和效率:噪声健壮性、负拒绝、信息整合和反事实健壮性。这些能力对于模型在各种挑战和复杂场景下的性能至关重要,是影响质量分数的关键指标。
噪声健壮性(Noise Robustness)评估模型处理与问题相关但缺乏实质性信息的噪声文档的能力。
负拒绝(Negative Rejection)评估模型在检索到的文档不包含回答问题所需知识时避免回应的辨别力。
信息整合(Information Integration)评估模型综合多个文档信息以解决复杂问题的熟练程度。
反事实健壮性(Counterfactual Robustness)测试模型识别和忽略文档中已知不准确信息的能力,即使在指导有潜在错误信息时也是如此。
上下文相关性和噪声健壮性对评估检索质量很重要,而答案忠实性、答案相关性、负拒绝、信息整合和反事实健壮性对评估生成质量很重要。
表2对每个评估方面的具体指标进行了总结。需要认识到,这些指标来源于相关工作,是传统的度量标准,尚未代表量化RAG评估方面的成熟或标准化方法。针对RAG模型的特性的自定义指标,虽未包括在此表格中,但在一些评估研究中得到了应用。
表2:RAG评估指标
本节阐述了RAG模型的评估框架,包括基准测试和自动化评估工具。这些工具提供量化指标,不仅可以衡量RAG模型的性能,还增强了对模型在各种评估方面能力的理解。主要基准如RGB和RECALL专注于评估RAG模型的基本能力。同时,最新的自动工具如RAGAS、ARES和TruLens8利用LLM来判定质量分数。这些工具和基准共同构成了一个健全的框架,用于对RAG模型进行系统的评估,如表3所示。
表3:RAG模型评估框架
08.
本章涵盖对RAG未来展望的三个方面:未来挑战、模态扩展和RAG生态系统。
尽管RAG技术取得了显著进展,但仍存在几个挑战需要深入研究:
上下文长度(Context Length):RAG的有效性受限于LLM的上下文窗口大小。如何平衡过短窗口可能导致信息不足和过长窗口可能导致信息稀释的权衡至关重要。随着持续努力将LLM上下文窗口扩展到几乎无限大小,RAG对这些变化的适应提出了重要的研究问题。
健壮性(Robustness)。检索过程中的噪声或矛盾信息可能会对RAG的输出质量产生不利影响。改善RAG对这种敌对或反事实输入的抵抗力正在成为研究的热点,并已成为关键性能指标。
混合方法(Hybrid Approaches)RAG+FT。结合RAG和微调正成为主要策略。确定RAG和微调的最佳整合方式——无论是顺序的、交替的还是通过端到端联合训练——以及如何利用参数化和非参数化优势是值得探索的领域。
LLM角色扩展(Expanding LLM Roles)。除了生成最终答案外,LLM还被用于RAG框架中的检索和评估。确定进一步释放LLM在RAG系统中潜力的方法是一个日益增长的研究方向。
规模化定律(Scaling Laws)。尽管规模化定律已为LLM建立,但其适用性对于RAG而言仍不确定。初步研究已经开始解决这一问题,但RAG模型的参数数量仍落后于LLM。特别有趣的是,较小的模型可能优于较大模型的“逆规模定律”值得进一步研究。
生产就绪的RAG(Production-Ready RAG)。RAG的实用性和与工程要求的一致性促进了其采用。然而,提高检索效率、改善大型知识库中的文档召回率,以及确保数据安全——例如防止LLM意外泄露文档来源或元数据——仍是需要解决的关键工程挑战。
RAG已超越其最初的基于文本的问答限制,拥抱多种模态数据。这种扩展催生了创新的多模态模型,将RAG概念整合到了各个领域:
图像(Image):RA-CM3是既检索又生成文本和图像的多模态模型领域的先驱。BLIP-2利用冻结的图像编码器与LLM进行高效的视觉语言预训练,实现零样本图像到文本转换。“在写之前先可视化(Visualize Before You Write)”方法使用图像生成引导LM的文本生成,显示了在开放式文本生成任务中的潜力。
音频和视频(Audio and Video):GSS方法检索和拼接音频片段,将机器翻译数据转换为语音翻译数据。UEOP在端到端自动语音识别中取得了重大进展,通过结合外部、离线策略进行语音到文本转换。此外,基于KNN的注意力融合利用音频嵌入和语义相关的文本嵌入来精炼ASR,从而加速领域适应。Vid2Seq通过专门的时间标记增强语言模型,促进事件边界和文本描述的预测,并在统一的输出序列中实现。
代码(Code):RBPS通过编码和频率分析检索与开发者目标一致的代码示例,在小规模学习任务中表现出色。这种方法在测试断言生成和程序修复等任务中显示了有效性。对于结构化知识,CoK方法首先从知识图谱中提取与输入查询相关的事实,然后将这些事实作为提示整合到输入中,提高了知识图谱问答任务的性能。
这些创新的RAG应用展示了RAG在处理特定类型的数据和任务时的灵活性和有效性。对于编程和结构化知识处理,RAG通过结合特定的检索策略和数据集成方法,能够有效地支持更复杂和更为专业化的任务。这些进展不仅加强了RAG模型在特定领域的应用潜力,也为未来RAG技术的发展和扩展提供了新的方向。
RAG在丰富语言模型的能力方面表现出巨大的潜力,能够处理复杂查询并通过利用广泛的知识库产生详细的响应。实证证据表明,RAG在多种下游任务中表现出色,包括开放式问题回答和事实核查。RAG的整合不仅增强了响应的精确性和相关性,还增强了它们的多样性和深度。
RAG在多个领域的可扩展性和多功能性值得进一步研究,特别是在医学、法律和教育等专业领域。在这些领域,RAG可能降低训练成本,并与传统微调方法相比,在专业领域知识问答中提高性能。
同时,完善RAG的评估框架对于最大化其在不同任务中的有效性和实用性至关重要。这需要开发能够衡量上下文相关性、内容创造力和非恶性等方面的细致指标和评估工具。
此外,提高RAG驱动模型的可解释性仍然是一个关键目标。这样做将使用户能够理解模型生成响应背后的推理过程,从而促进对RAG应用的信任和透明度。
RAG生态系统的发展受其技术栈进展的极大影响。像LangChain和LLamaIndex这样的关键工具随着ChatGPT的出现迅速受到欢迎,提供了广泛的RAG相关的API,并在LLM领域成为必不可少的部分。
新兴的技术栈虽然功能不如LangChain和LLamaIndex丰富,但它们以专业化的服务引起了业界的注意。例如,Flowise AI10强调低代码方法,使用户能够通过用户友好的拖放界面部署包括RAG在内的AI应用。其他技术如HayStack、Meltano和Cohere Coral也因其对该领域的独特贡献而受到关注。
除了专注于AI的提供商之外,传统软件和云服务提供商也在扩展其服务范围,包括以RAG为中心的服务。Weaviate的Verba旨在用于个人助理应用,而亚马逊的Kendra提供的智能企业搜索服务,允许用户使用内置连接器浏览各种内容存储库。在RAG技术的演变过程中,明显出现了专业化分化,例如:1) 定制化。根据特定需求定制RAG。2) 简化。使RAG更易于使用,从而降低初始学习曲线。3) 专业化。改进RAG从而更有效地服务于生产环境。
RAG模型及其技术栈之间互相促进,共同成长。技术进步不断为现有基础设施建立新的标准。反过来,技术栈的进步推动了RAG能力的发展。RAG工具箱正汇聚成一个基础技术栈,为高级企业应用奠定基础。然而,一个完全集成、全面的平台的概念仍然处于孕育阶段,等待进一步的创新和发展。
图7:RAG生态总结
结论
本文的总结如图7所示,突显了RAG在增强LLM能力方面的重大进步,这是通过将语言模型中的参数化知识与外部知识库中广泛的非参数化数据整合实现的。我们的调查展示了RAG技术的演变及其对知识密集型任务的影响。我们的分析勾勒出RAG框架内的三种发展范式:初级RAG、高级RAG、模块化RAG,每一种都比上一种有所进步。高级RAG范式通过纳入复杂的架构元素,如查询重写、块重新排序和提示摘要,超越了初级RAG。这些创新带来了更为细致和模块化的架构,增强了LLM的性能和可解释性。RAG与其他AI方法(如微调和强化学习)的技术整合进一步扩展了其功能。在内容检索方面,一种利用结构化和非结构化数据源的混合方法正在成为趋势,提供了更丰富的检索过程。关于RAG框架的前沿研究正在探索来自LLM的自我检索和信息检索的动态时机等新概念。
尽管RAG技术取得了进步,但在提高其健壮性和管理扩展上下文方面仍有待更为深入的研究。RAG的应用范围也扩大到了多模态领域,适应相关原则来提供解释和处理图像、视频和代码等不同形式的数据的能力。这一扩展强化了RAG对AI部署的重大实际意义,引起了学术界和工业界的关注。RAG生态系统的不断增长表现在以RAG为中心的AI应用的增加和支持工具的持续开发上。然而,随着RAG应用领域的扩展,RAG迫切需要完善评估方法来跟上相关技术发展的步伐,确保性能评估的准确性和代表性。这对于全面捕捉RAG对AI研究和开发社区的贡献至关重要。
来源: 深度数据云