大模型LLM-微调 RAG
RAG小结
这篇文章是一篇关于大型语言模型(LLMs)增强技术的综述论文,特别聚焦于检索增强生成(Retrieval-Augmented Generation, RAG)这一领域。详细考察了RAG的发展、技术基础、关键技术、评估框架以及未来的研究方向。以下是对文章主要内容的总结:
RAG技术的背景和重要性
-
大型语言模型(LLMs)展现出了令人印象深刻的能力,但在处理特定领域或知识密集型任务时仍面临挑战,例如产生幻觉(hallucinations)、知识过时和推理过程不透明等。
-
RAG通过整合外部数据库的知识,作为解决这些问题的有前途的方案,提高了生成内容的准确性和可信度。
RAG的发展阶段
-
论文将RAG的发展分为三个阶段:Naive RAG、Advanced RAG 和 Modular RAG。
RAG的技术基础
-
RAG框架的三个核心组成部分是检索(Retrieval)、生成(Generation)和增强(Augmentation)。
-
论文深入分析了这些组成部分中的最先进技术,并讨论了它们如何协同工作,形成一个有效和一致的RAG框架。
RAG的评估
-
论文介绍了RAG的最新评估框架和基准,总结了26个任务、近50个数据集,概述了评估目标和指标。
RAG面临的挑战和未来方向
-
论文讨论了RAG目前面临的挑战,包括检索阶段的精确性和召回率问题、生成阶段的幻觉问题、增强阶段的整合问题等。
-
论文指出了未来研究和开发的潜在途径,强调了需要解决的当前挑战,并展望了RAG技术的发展趋势。
0 abstract
大型语言模型(LLMs)展示了令人印象深刻的能力,但同时也遇到了诸如幻觉、知识过时以及不透明、不可追溯的推理过程等挑战。检索增强生成(Retrieval-Augmented Generation, RAG)作为一项有希望的解决方案应运而生,它通过整合外部数据库的知识来应对这些挑战。这不仅增强了生成内容的准确性和可信度,特别是在知识密集型任务中,还允许持续更新知识并整合特定领域的信息。RAG将LLMs的内在知识与外部数据库的广泛、动态知识库协同融合。
这篇全面的综述论文提供了对RAG范式的进展的详细考察,包括朴素RAG(Naive RAG)、高级RAG(Advanced RAG)和模块化RAG(Modular RAG)。它严格审查了RAG框架的三个组成部分——检索、生成和增强技术。本文突出了嵌入这些关键组件中的最先进技术,为理解RAG系统的进步提供了深刻的见解。此外,本文还介绍了最新的评估框架和基准。最后,本文概述了当前面临的挑战,并指出了研究和发展的未来潜在途径。
1 INTRODUCTION
大型语言模型(LLMs)取得了显著的成功,尽管它们仍然面临着重大的局限性,尤其是在特定领域或知识密集型任务中[1],尤其是在处理超出其训练数据范围的查询或需要最新信息时,容易产生“幻觉”[2]。为了克服这些挑战,检索增强生成(Retrieval-Augmented Generation, RAG)通过语义相似性计算从外部知识库检索相关文档片段来增强LLMs。通过引用外部知识,RAG有效地减少了生成事实错误内容的问题。RAG的集成导致了其广泛采用,并确立了其作为推进聊天机器人和提高LLMs适用于现实世界应用的关键技术的地位。
RAG技术近年来迅速发展,相关研究的技术树在图1中展示。在大型模型时代,RAG的发展轨迹展现出几个鲜明的阶段性特征。最初,RAG的产生与Transformer架构的兴起同步,专注于通过预训练模型(Pre-Training Models, PTM)整合额外知识来增强语言模型。这个早期阶段以旨在完善预训练技术的基础工作为特点[3]–[5]。随后ChatGPT[6]的到来标志着一个关键时刻,大型语言模型(LLM)展示了强大的上下文学习(In Context Learning, ICL)能力。RAG研究转向为LLM在推理阶段提供更好的信息,以回答更复杂和知识密集型的任务,导致RAG研究的快速发展。随着研究的深入,RAG的增强不再局限于推理阶段,而是开始更多地融入LLM的微调技术。
RAG这一新兴领域经历了快速增长,但这种增长并没有伴随着一个系统的综合分析来阐明其更广泛的发展方向。本调查努力填补这一空白,通过勾画出RAG过程并规划其演变和预期的未来路径,特别关注RAG在大型语言模型(LLMs)中的整合。本文考虑了技术范式和研究方法,从100多项RAG研究中总结了三个主要的研究范式,并分析了“检索(Retrieval)”、“生成(Generation)”和“增强(Augmentation)”核心阶段的关键技术。
另一方面,当前的研究倾向于更多地关注方法,缺乏对如何评估RAG的分析和总结。本文全面回顾了适用于RAG的下游任务、数据集、基准和评估方法。总体而言,本文旨在精心编制和分类RAG的基础技术概念、历史发展以及在LLMs之后出现的应用范围。它旨在为读者和专业人士提供对大型模型和RAG的详细和结构化的理解。它旨在阐明检索增强技术的发展,评估各种方法在各自情境下的优势和劣势,并预测即将出现的趋势和创新。
我们的贡献如下:
-
在这项调查中,我们提供了对最新RAG方法的全面和系统性回顾,描述了它通过包括朴素RAG、高级RAG和模块化RAG在内的范式的演进。本回顾将RAG研究的更广泛范围置于LLMs的全景中进行了情境化。
-
我们确定并讨论了对RAG过程至关重要的核心技术,特别关注“检索(Retrieval)”、“生成(Generation)”和“增强(Augmentation)”的方面,并深入探讨了它们的协同作用,阐明了这些组件如何复杂地协作形成一个有凝聚力和有效的RAG框架。
-
我们总结了RAG的当前评估方法,涵盖了26个任务、近50个数据集,概述了评估目标和指标,以及当前的评估基准和工具。此外,我们预测了RAG的未来发展方向,强调了解决当前挑战的潜在增强。
-
我们对RAG的未来方向进行了展望,强调了解决现有挑战可能的改进措施。
本文的结构如下:第二节介绍了RAG的主要内容和当前范式。接下来的三个部分分别探讨了核心组件——“检索(Retrieval)”、“生成(Generation)”和“增强(Augmentation)”。第三节专注于检索中的优化方法,包括索引、查询和嵌入优化。第四节集中讨论检索后的流程和在生成中的LLM微调。第五节分析了三种增强过程。第六节重点介绍了RAG的下游任务和评估体系。第七节主要讨论了RAG目前面临的挑战及其未来发展的方向。最后,文章在第八节得出结论。
2 OVERVIEW OF RAG
RAG的一个典型应用在图2中进行了说明。在这里,用户向ChatGPT提出了一个关于最近广泛讨论的新闻的问题。鉴于ChatGPT依赖于预训练数据,它最初缺乏提供有关最新发展的能力。RAG通过从外部数据库获取并整合知识来弥补这一信息差距。在这种情况下,它收集了与用户查询相关的相关新闻文章。这些文章与原始问题结合起来,形成了一个全面的提示,使大型语言模型(LLMs)能够生成一个见多识广的答案。
RAG研究范式在不断演进,我们将其归类为三个阶段:朴素RAG(Naive RAG)、高级RAG(Advanced RAG)和模块化RAG(Modular RAG),如图3所示。尽管RAG方法具有成本效益并能超越原生大型语言模型(LLM)的性能,但它们也表现出一些局限性。高级RAG和模块化RAG的发展是为了应对朴素RAG中存在的这些特定不足。
-
Naive RAG
朴素RAG(Naive RAG)研究范式代表了最早的方法论,它在ChatGPT广泛采用后不久便开始受到关注。朴素RAG遵循一个包括索引、检索和生成的传统流程,这也被特征化为一个“检索-阅读”(Retrieve-Read)框架[7]。
索引的创建始于对原始数据的清洗和提取,这些数据以PDF、HTML、Word和Markdown等多种格式存在,随后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本被分割成更小的、易于处理的块(chunk)。接着,这些块(chunk)使用嵌入模型(embedding model)编码成向量表示,并存储在向量数据库中。这一步骤对于在随后的检索阶段实现高效的相似性搜索至关重要。
检索。在接收到用户查询后,RAG系统采用与索引阶段相同的编码模型将查询转换为向量表示。然后,它计算查询向量与索引语料库中块的向量之间的相似度分数。系统优先并检索与查询最相似的前K个块。这些块随后被用作提示中扩展的上下文。
生成。提出的查询和选定的文档被综合成一个连贯的提示,大型语言模型(LLM)负责据此制定回答。模型的回答方式可能会根据特定任务的标准而有所不同,允许它利用其内在的参数知识,或者将其回答限制在提供的文档所包含的信息之内。在持续对话的情况下,任何现有的对话历史可以被整合到提示中,使模型能够有效地参与多轮对话互动。
然而,朴素RAG(Naive RAG)遇到了一些显著的缺点:
-
Retrieval Challenges。检索阶段常常在精确度和召回率上遇到困难,这导致选择了不匹配或无关的块(chunks),并且遗漏了关键信息。
-
Generation Difficulties。在生成回答时,模型可能会遇到幻觉问题,即它产生了检索到的上下文不支持的内容。这个阶段的输出可能还会受到不相关性、有害性或偏见的影响,这些都损害了回答的质量和可靠性。
-
Augmentation Hurdles。将检索到的信息与不同任务整合可能具有挑战性,有时会导致输出不连贯或不清晰。当从多个来源检索到相似信息时,过程还可能遇到冗余问题,导致回答重复。确定不同段落的重要性和相关性,并确保风格和语调的一致性,增加了额外的复杂性。面对复杂问题时,基于原始查询的单一检索可能不足以获取足够的上下文信息。
此外,存在一个担忧,即生成模型可能过度依赖增强的信息,导致输出仅仅重复检索到的内容,而没有增加有洞察力或综合的信息。
-
Advanced RAG
高级RAG(Advanced RAG)引入了特定的改进,以克服朴素RAG(Naive RAG)的局限性。它专注于提高检索质量,采用了检索前(pre-retrieval)和检索后(post-retrieval)策略。为了解决索引问题,高级RAG通过使用滑动窗口方法、细粒度分割以及整合元数据来完善其索引技术。此外,它还整合了几种优化方法来简化检索过程[8]。
Pre-retrieval process。在这个阶段,主要关注的是优化索引结构和原始查询。优化索引的目标是提高被索引内容的质量。这涉及以下策略:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。而查询优化的目标是使用户的原始问题更清晰,更适合检索任务。常见的方法包括查询重写(query rewriting)、查询转换(query transformation)、查询扩展(query expansion)以及其他技术[7],[9]–[11]。
增强数据粒度(Enhancing Data Granularity):
这种方法关注于提升索引数据的详细程度。在文档检索中,可以通过将文档分割成更小的单元,例如句子或短语,而不是整个段落或页面,来实现。这样可以帮助检索系统更精确地定位到包含相关信息的文本部分,从而提高检索的准确性。
优化索引结构(Optimizing Index Structures):
这涉及到改进索引的组织方式,以便更快地检索信息。优化可能包括调整文档的存储方式、改进索引的算法,或者使用更高效的数据结构来存储索引信息,以便在用户查询时能够迅速定位到相关文档。
添加元数据(Adding Metadata):
元数据是描述数据的数据,可以提供关于文档内容的额外信息,如作者、出版日期、主题标签等。在索引过程中添加元数据可以帮助提高检索的相关性,因为这些信息可以在检索时用于过滤和排序结果。
对齐优化(Alignment Optimization):
这是指优化检索结果与用户查询之间的相关性。通过对用户查询和检索到的文档进行语义分析,可以调整检索算法,确保返回的结果与用户的原始意图更加吻合。
混合检索(Mixed Retrieval):
这种方法结合了不同类型的检索技术,如关键词匹配、语义搜索和基于向量的检索,以提高检索的全面性和准确性。混合检索系统可以根据不同类型的查询和数据源选择最合适的检索策略。
这些方法的共同目标是提高检索系统的效率和准确性,确保用户能够快速地找到他们所需的信息。
Post-Retrieval Process。一旦检索到相关上下文,有效地将其与查询整合至关重要。后检索过程中的主要方法包括重新排列块(rerank chunks)和上下文压缩(context compressing)。将检索到的信息重新排序,将最相关内容重新定位到提示的边缘,是一种关键策略。这一概念已在如LlamaIndex2、LangChain3和HayStack[12]等框架中得到实现。直接将所有相关文档输入到大型语言模型(LLMs)可能会导致信息过载,用不相关内容冲淡对关键细节的关注。为了缓解这个问题,后检索工作集中于选择关键信息,强调重要部分,并缩短要处理的上下文。
将检索到的信息重新排序,将最相关内容重新定位到提示的边缘,意味着在检索到一系列与查询相关的文档片段(或称为"块")之后,系统会根据它们与查询的相关性对这些片段进行再次评估和排序。这一过程称为"重新排名"(reranking)。其目的是确保最直接、最有用的信息被放置在输出提示的最前面,即"边缘"(edges),这样可以帮助语言模型更快地识别和集中于最有价值的数据。
-
Modular RAG
模块化RAG(Modular RAG)架构在前两种RAG范式的基础上进行了进一步的发展,提供了更强的适应性和多功能性。它整合了多种策略来改进其组件,例如增加一个用于相似性搜索的搜索模块,并通过微调来改进检索器。像[13]中提到的重构的RAG模块和[14]中提到的重新排列的RAG流程这样的创新已经被引入,以应对特定的挑战。转向模块化RAG方法的趋势正在变得普遍,它支持其组件的顺序处理和集成的端到端训练。尽管具有其独特性,模块化RAG仍然建立在高级和朴素RAG的基础原则上,展示了RAG家族内的进步和完善。
-
New Modules: 模块化RAG框架引入了额外的专业组件来增强检索和处理能力。搜索模块适应特定场景,允许在搜索引擎、数据库和知识图谱等各种数据源上直接搜索,使用由大型语言模型(LLM)生成的代码和查询语言[15]。RAG-Fusion通过采用多查询策略来解决传统搜索的局限性,将用户查询扩展到不同视角,利用并行向量搜索和智能重新排名来揭示显性和变革性知识[16]。记忆模块利用LLM的存储能力来指导检索,创建一个无界的记忆池,通过迭代自我增强使文本更紧密地与数据分布对齐[17],[18]。RAG系统中的路由功能在不同的数据源中导航,为查询选择最优路径,无论是涉及摘要、特定数据库搜索还是合并不同的信息流[19]。预测模块旨在通过直接通过LLM生成上下文来减少冗余和噪声,确保相关性和准确性[13]。最后,任务适配器模块使RAG适应各种下游任务,自动化零样本输入的提示检索,并通过对少数样本查询生成来创建特定于任务的检索器[20],[21]。这种全面的方法不仅简化了检索过程,而且显著提高了检索信息的质量和相关性,以提高精度和灵活性,满足广泛的任务和查询需求。
搜索模块(Search module):
适应性:能够适应特定的场景和需求。
多数据源搜索:允许在搜索引擎、数据库和知识图谱等不同的数据源上进行直接搜索。
LLM生成的代码和查询语言:利用大型语言模型(LLM)生成的代码和查询语言来执行搜索,提高了搜索的针对性和效率。
RAG-Fusion:
解决传统搜索局限:采用多查询策略,扩展用户查询到不同视角。
并行向量搜索:同时进行多个向量搜索,提高搜索广度。
智能重新排名:根据搜索结果智能调整排名,以便揭示明显的和深层次的知识。
记忆模块(Memory module):
利用LLM的存储能力:使用LLM的内存来指导检索过程。
无界记忆池:创建一个不受限制的记忆池,存储更多的检索信息。
迭代自我增强:通过迭代过程不断优化,使文本与数据分布更加一致。
路由功能(Routing):
导航不同数据源:在多种数据源中为查询选择最优路径。
适用性:无论是摘要生成、特定数据库搜索还是不同信息流的合并,都能适应。
预测模块(Predict module):
减少冗余和噪声:通过直接生成上下文来降低检索结果中的重复和不相关信息。
确保相关性和准确性:生成的上下文与查询高度相关,提高了结果的准确性。
任务适配器模块(Task Adapter module):
适应下游任务:使RAG能够适应各种具体的下游任务。
自动化提示检索:自动化处理零样本输入的提示检索。
创建任务特定检索器:通过对少数样本的查询生成,创建针对特定任务的检索器。
-
New Patterns: 模块化RAG(Modular RAG)通过允许模块替换或重新配置来应对特定挑战,提供了显著的适应性。这超越了朴素RAG(Naive RAG)和高级RAG(Advanced RAG)的固定结构,后者以简单的“检索”和“阅读”机制为特征。此外,模块化RAG通过整合新模块或调整现有模块之间的交互流程,扩展了这种灵活性,增强了其在不同任务中的适用性。
创新如重写-检索-阅读(Rewrite-Retrieve-Read)模型[7],利用大型语言模型(LLM)的能力,通过一个重写模块和一个语言模型反馈机制来优化检索查询,以此更新重写模型,提高任务性能。同样,像生成-阅读(Generate-Read)[13]这样的方法用LLM生成的内容取代了传统检索,而背诵-阅读(Recite-Read)[22]强调从模型权重中检索,增强了模型处理知识密集型任务的能力。混合检索策略整合了关键词、语义和向量搜索,以满足多样化的查询需求。此外,采用子查询和假设文档嵌入(HyDE)[11]通过专注于生成答案与真实文档之间的嵌入相似性,寻求提高检索的相关性。
模块排列和交互的调整,如演示-搜索-预测(Demonstrate-Search-Predict, DSP)框架[23]和迭代检索-阅读-检索-阅读流程(Retrieve-Read-Retrieve-Read)的ITERRETGEN[14],展示了模块输出动态使用的灵活性,以增强另一模块的功能,这体现了提升模块协同作用的深刻理解。模块化RAG流程的灵活编排展示了通过FLARE[24]和Self-RAG[25]等技术实现自适应检索的优势。这种方法通过根据不同情境评估检索的必要性,超越了固定的RAG检索过程。灵活架构的另一个好处是,RAG系统可以更容易地与其他技术(如微调或强化学习)[26]集成。例如,这可能涉及对检索器进行微调以获得更好的检索结果,对生成器进行微调以产生更个性化的输出,或进行协同微调[27]。
-
RAG vs Fine-tuning
对大型语言模型(LLMs)的增强已经因为其日益增长的普遍性而吸引了相当大的关注。在LLMs的优化方法中,RAG常常与微调(Fine-tuning, FT)和提示工程(prompt engineering)进行比较。每种方法都有其独特的特性,如图4所示。我们使用图4来阐释这三种方法在两个维度上的差异:外部知识需求和模型适应需求。提示工程利用模型固有的能力,对外部知识和模型适应的需求最小。RAG可以类比为给模型提供一个定制的教科书,用于信息检索,非常适合精确的信息检索任务。相比之下,FT类似于学生随时间吸收知识,适用于需要复制特定结构、风格或格式的场景。
RAG在动态环境中表现出色,因为它提供了实时知识更新和有效利用外部知识源,具有高可解释性。然而,它伴随着更高的延迟和关于数据检索的伦理考量。另一方面,FT更加静态,需要重新训练以进行更新,但能够深度定制模型的行为和风格。它要求为数据集准备和训练提供大量的计算资源,虽然它可以减少幻觉(hallucinations),但可能在面对不熟悉的数据时面临挑战。
在对各种不同主题的知识密集型任务的多次性能评估中,[28]揭示了尽管无监督微调(unsupervised fine-tuning)显示出一些改进,但RAG始终优于它,无论是对于训练期间遇到现有知识还是完全新的知识。此外,研究发现大型语言模型(LLMs)通过无监督微调学习新的事实信息存在困难。在应用环境中,选择RAG和FT取决于对数据动态性、定制化和计算能力的具体需求。RAG和FT并不是相互排斥的,它们可以相互补充,在不同层面上增强模型的能力。在某些情况下,它们的联合使用可能导致最佳性能。涉及RAG和FT的优化过程可能需要多次迭代才能达到满意的结果。
3 RETRIEVAL
在RAG(检索增强生成)的背景下,从数据源高效检索相关文档至关重要。涉及几个关键问题,如检索源、检索粒度、检索的预处理以及相应嵌入模型的选择。
-
Retrieval Source
RAG(Retrieval-Augmented Generation)依赖于外部知识来增强LLMs(Large Language Models),而检索源的类型以及检索单元的粒度都会影响最终的生成结果。
-
Data Structure: 最初,文本是主流的检索来源。随后,检索源扩展到了包括半结构化数据(如 PDF 文件)和结构化数据(如 Knowledge Graph, KG)来进一步增强模型。除了从原始的外部来源进行检索之外,最近的研究趋势还体现在利用由 LLMs 本身生成的内容来进行检索和增强目的上。
-
Unstructured Data:诸如文本是最广泛使用的检索来源,主要来源于语料库。对于开放域问答(ODQA)任务而言,主要的检索来源是Wikipedia Dump,其中当前的主要版本包括HotpotQA 4(2017年10月1日)、DPR5(2018年12月20日)。除百科全书式的数据外,常见的非结构化数据还包括跨语言文本[19]以及特定领域的数据(例如医学[67]和法律领域[29])。
-
Semi-structured data:通常指包含文本和表格信息组合的数据,例如PDF文件。处理半结构化数据对传统的RAG系统构成了挑战,主要原因有两个。首先,文本分割过程可能会无意中将表格分开,导致在检索过程中数据损坏。其次,将表格纳入数据会使得语义相似性搜索变得复杂。在处理半结构化数据时,一种方法是利用LLMs的代码能力来对数据库中的表格执行Text-2-SQL查询,例如使用TableGPT[85]。另一种方法则是将表格转换成文本格式以便使用基于文本的方法进行进一步分析[75]。然而,这两种方法都不是最优解决方案,这表明在这个领域存在大量的研究机会。
-
Structured data:例如知识图谱(Knowledge Graphs, KGs)[86],它们通常是经过验证的,并能提供更精确的信息。KnowledGPT[15]生成KB(Knowledge Base)搜索查询并将知识存储在一个个性化的知识库中,从而增强了RAG模型的知识丰富度。针对LLMs理解并回答关于文本图的问题的局限性,G-Retriever[84]集成了Graph Neural Networks (GNNs)、LLMs以及RAG,通过软提示(LLM soft prompting)增强了对图的理解和问题回答的能力,并采用了Prize-Collecting Steiner Tree (PCST)优化问题来进行有针对性的图检索。相反,构建、验证和维护结构化数据库需要额外的努力。
-
LLMs-Generated Content:针对RAG中外部辅助信息的局限性,一些研究集中在利用LLMs的内部知识上。SKR[58]将问题分类为已知或未知,并有选择性地增强检索。GenRead[13]用一个LLM生成器替代了检索器,发现由于与因果语言建模的预训练目标更好地对齐,由LLM生成的上下文往往包含更准确的答案。Selfmem[17]通过一个增强检索的生成器迭代创建了一个无界内存池,使用内存选择器来挑选那些作为原始问题的双问题的输出,以此自我增强生成模型。这些方法强调了在RAG中创新数据源利用的广度,力求提高模型性能和任务有效性。
Retrieval Granularity :除了检索源的数据格式之外,另一个重要的因素是检索数据的粒度。理论上,粗粒度的检索单元可以为问题提供更多的相关信息,但它们也可能包含冗余的内容,这可能会干扰下游任务中的检索器和语言模型[50]、[87]。另一方面,细粒度的检索单元增加了检索的负担,并不能保证语义的完整性以及满足所需的知识。在推理过程中选择适当的检索粒度可以是一种简单而有效的策略,用于改进密集型检索器的检索效果及下游任务的表现。
在文本中,检索粒度从细到粗,包括Token、Phrase、Sentence、Proposition、Chunks、Document等。其中,DenseX[30]提出了使用命题作为检索单元的概念。命题被定义为文本中的原子表达,每个命题封装了一个独特的事实片段,并以简洁、自包含的自然语言形式呈现。这种方法旨在提高检索的精确性和相关性。在知识图谱(Knowledge Graph, KG)上,检索粒度包括Entity、Triplet和sub-Graph。检索的粒度也可以根据下游任务进行调整,例如在推荐任务中检索Item IDs[40]和在句子对匹配任务中检索Sentence pairs[38]。详细信息请参见表。
-
Indexing Optimization
在Indexing阶段,文档会被处理、分割,并转换为Embeddings以存储在向量数据库中。索引构建的质量决定了在检索阶段是否能够获取正确的上下文。
-
Chunking Strategy:最常见的方法是按照固定数量的tokens(例如,100、256、512个)将文档分割成chunks[88]。较大的chunks可以捕获更多的上下文信息,但同时也可能引入更多的噪声,需要更长的处理时间和更高的成本。而较小的chunks虽然可能无法完全传达必要的上下文信息,但其噪声较少。然而,chunks会导致句子内的截断,促使人们优化递归分割和滑动窗口方法,通过合并多个检索过程中的全局相关信息实现分层检索[89]。尽管如此,这些方法仍然难以在语义完整性和上下文长度之间找到平衡。因此,像Small2Big这样的方法被提出,其中句子(small)作为检索单元,而前后句子则作为(big)上下文提供给LLMs[90]。
-
Metadata Attachments: Chunks可以被附加诸如页码、文件名、作者、类别、时间戳等元数据信息。随后,可以根据这些元数据过滤检索结果,从而限制检索的范围。在检索过程中为文档的时间戳分配不同的权重可以实现时间感知的RAG,确保知识的新鲜度并避免过时的信息。
除了从原始文档中提取元数据之外,还可以人工构造元数据。例如,添加段落摘要,以及引入假设性问题。这种方法也被称为Reverse HyDE。具体来说,使用LLM生成可以通过文档回答的问题,然后在检索过程中计算原始问题与假设性问题之间的相似性,以减少问题与答案之间的语义差距。
-
Structural Index: 提高信息检索效果的一个有效方法是为文档建立一个层级结构。通过构建这样的结构,RAG(Retrieval-Augmented Generation)系统能够加速相关数据的检索和处理。
-
Hierarchical index structure:文件按照父-子关系排列,chunks与之关联。在每个节点上都存储有数据摘要,有助于快速遍历数据,并帮助RAG系统确定应该提取哪些chunks。这种方法还可以缓解因块提取问题引起的错觉。
-
Knowledge Graph index:利用知识图谱(Knowledge Graph, KG)构建文档的层级结构有助于保持一致性。它描绘了不同概念和实体之间的联系,显著减少了产生错觉的可能性。另一个优势是将信息检索过程转化为LLM可以理解的指令,从而提高了知识检索的准确性,并使LLM能够生成上下文连贯的响应,进而提升了整个RAG系统的整体效率。为了捕捉文档内容和结构之间的逻辑关系,KGP[91]提出了一种使用KG在多文档间建立索引的方法。这个KG由节点(代表文档中的段落或结构,如页面和表格)和边(表示段落间的语义/词汇相似性或文档结构内的关系)组成,有效地解决了多文档环境中的知识检索和推理问题。
-
Query Optimization
朴素RAG(Retrieval-Augmented Generation)面临的一个主要挑战是其直接依赖于用户的原始查询作为检索的基础。提出精确且清晰的问题是困难的,而考虑不周的查询会导致检索效果不佳。有时候,问题本身就很复杂,语言组织也不够清晰。另一个难点在于语言的复杂性和模糊性。语言模型在处理专业术语或具有多种含义的模糊缩写时往往会遇到困难。例如,它们可能无法分辨“LLM”是指大型语言模型还是法律领域的法学硕士。
-
Query Expansion:将单一查询扩展为多个查询可以丰富查询的内容,为解决缺乏特定细节的问题提供更多的上下文,从而确保生成的回答具有最佳的相关性。
Multi-Query。通过运用prompt engineering来利用大型语言模型(LLMs)扩展查询,这些查询随后可以并行执行。查询的扩展不是随机的,而是经过精心设计的。
Sub-Query。子问题规划的过程代表着生成必要的子问题,这些子问题结合在一起可以全面地回答原始问题。这种添加相关上下文的过程原则上类似于查询扩展。具体来说,可以使用最少至最多的提示方法[92]将复杂的问题分解成一系列较简单的子问题。
Chain-of-Verification(CoVe)。经过扩展的查询会通过LLM(Large Language Model)进行验证,以达到减少幻觉效应的目的。经过验证的扩展查询通常展现出更高的可靠性[93]。
-
Query Transformation:核心概念是基于转换后的查询而不是用户的原始查询来检索chunks。
Query Rewrite。原始查询并不总是最适合LLM检索的,尤其是在现实场景中。因此,我们可以提示LLM重写查询。除了使用LLM进行查询重写之外,还可以使用专门的小型语言模型,例如RRR(Rewrite-retrieve-read)[7]。淘宝实施的查询重写方法,即BEQUE[9],已经显著提高了长尾查询的召回率,从而带来了GMV的增长。
另一种查询转换方法是使用prompt engineering让LLM根据原始查询生成一个新的查询用于后续的检索。HyDE[11]构建假设文档(即对原始查询假设的答案)。它侧重于答案到答案的嵌入相似性,而不是寻找问题或查询的嵌入相似性。使用Step-back Prompting方法[10],原始查询被抽象化以生成一个高层次的概念性问题(step-back question)。在RAG系统中,step-back question和原始查询都被用于检索,两者的检索结果都被用作语言模型生成答案的基础。
-
Query Routing:基于不同的查询,可以将其路由到不同的RAG pipeline,这适用于一个多功能的RAG系统设计,旨在适应各种场景。
Metadata Router/ Filter。第一步涉及从查询中提取关键词(实体),随后根据chunks中的关键词和元数据进行过滤,以缩小搜索范围。
Semantic Router 。Semantic Router是另一种路由方法,涉及利用查询的语义信息。具体的方法可见Semantic Router 6。当然,也可以采用混合路由方法,结合语义和基于元数据的方法来增强查询路由。
-
embedding
在RAG中,检索是通过计算问题与文档chunks的embeddings之间的相似性(例如余弦相似性)来实现的,其中embedding模型的语义表示能力起着关键作用。这主要包括稀疏编码器(如BM25)和密集型检索器(如基于BERT架构的预训练语言模型)。近期的研究引入了一些突出的embedding模型,如AngIE、Voyage、BGE等[94]–[96],这些模型得益于多任务指令微调。Hugging Face的MTEB排行榜评估了跨越8项任务的embedding模型,涵盖了58个数据集。此外,C-MTEB专注于中文能力,覆盖了6项任务和35个数据集。对于“使用哪种embedding模型”的问题并没有一劳永逸的答案。然而,某些特定的模型更适合特定的应用场景。
-
Mix/hybrid Retrieva:稀疏和密集型embedding方法捕获了不同的相关性特征,并且可以通过利用互补的相关性信息相互受益。例如,稀疏检索模型可以用来为密集型检索模型的训练提供初始搜索结果。此外,预训练语言模型(PLMs)可以用来学习词项权重以增强稀疏检索。具体来说,这也证明了稀疏检索模型可以增强密集型检索模型的零样本检索能力,并帮助密集型检索器处理包含罕见实体的查询,从而提高了鲁棒性。
-
Fine-tuning Embedding Model:在上下文显著偏离预训练语料库的情况下,特别是在医疗保健、法律实践等高度专业化的领域以及其他充斥着专有术语的行业中,对自己的领域数据集进行embedding模型的微调变得至关重要,以减轻这类差异。
除了补充领域知识之外,微调的另一个目的是对齐检索器和生成器,例如,使用LLM的结果作为微调的监督信号,这种方法被称为LSR(LM-supervised Retriever)。PROMPTAGATOR[21]利用LLM作为少量示例查询生成器来创建特定于任务的检索器,以应对监督微调中的挑战,尤其是在数据稀缺的领域。另一种方法,LLM-Embedder[97],利用LLMs在多个下游任务中生成奖励信号。检索器通过两种类型的监督信号进行微调:数据集的硬标签和来自LLMs的软奖励。这种双信号方法促进了更有效的微调过程,使embedding模型适应各种下游应用。REPLUG[72]利用一个检索器和一个LLM来计算检索文档的概率分布,然后通过计算KL散度来进行监督训练。这种简单而有效的训练方法通过使用LM作为监督信号来提升检索模型的性能,无需特定的交叉注意力机制。此外,受到RLHF(Reinforcement Learning from Human Feedback)的启发,利用基于LM的反馈通过强化学习来加强检索器。
-
Adapter
微调模型可能会遇到一些挑战,比如通过API集成功能或是解决因本地计算资源有限而产生的约束。因此,有些方法选择引入一个外部adapter来辅助实现对齐。
为了优化LLM的多任务能力,UP-RISE[20]训练了一个轻量级的prompt检索器,它可以自动从预先构建的prompt池中检索适合特定零样本任务输入的prompt。AAR(Augmentation-Adapted Retriver)[47]引入了一个通用的adapter,旨在适应多个下游任务。而PRCA[69]增加了一个可插拔的奖励驱动的上下文adapter,以提升特定任务上的表现。BGM[26]保持检索器和LLM固定不变,而在两者之间训练一个桥接式的Seq2Seq模型。该桥接模型旨在将检索到的信息转换成LLMs可以有效处理的格式,使其不仅能重新排序,还能动态地为每个查询选择段落,并可能采用更高级的策略,如重复使用信息。此外,PKG引入了一种通过指令微调将知识整合到白盒模型中的创新方法[75]。在这种方法中,检索器模块被直接替换,根据查询生成相关的文档。这种方法有助于解决微调过程中的难题,并提升模型的表现。
4 GENERATION
在检索之后,直接将所有检索到的信息输入给LLM来回答问题并不是一个好的做法。接下来将从两个角度介绍调整措施:调整检索到的内容和调整LLM本身。
-
Context Curation
冗余信息可能会干扰LLM的最终生成结果,而过长的上下文也可能导致LLM出现“Lost in the middle”问题[98]。就像人类一样,LLM倾向于只关注长文本的开头和结尾部分,而忽视中间的部分。因此,在RAG系统中,我们通常需要进一步处理检索到的内容。
-
Reranking:重新排序从根本上对文档片段进行重排,突出最相关的结果,有效地减少了整体文档池的规模,在信息检索中发挥双重作用——既是增强器也是过滤器,为更精确的语言模型处理提供了精炼的输入[70]。重新排序可以使用基于规则的方法来执行,这些方法依赖于预先定义的指标如多样性(Diversity)、相关性(Relevance)和平均倒数排名(Mean Reciprocal Rank, MRR),也可以采用基于模型的方法,例如来自BERT系列的编码器-解码器模型(比如SpanBERT)、专门的重新排序模型如Cohere rerank或bge-raranker-large,以及通用的大规模语言模型如GPT[12]、[99]。
-
Context Selection/Compression: 在RAG过程中一个常见的误解是认为检索尽可能多的相关文档并将它们拼接成长篇的检索提示是有益的。然而,过多的上下文会引入更多的噪声,削弱LLM对关键信息的感知。
(Long) LLMLingua[100]、[101]利用小型语言模型(SLMs),如GPT-2 Small或LLaMA-7B,来检测并移除不重要的tokens,将其转换成人类难以理解但LLMs能够很好理解的形式。这种方法提供了一种直接而实用的提示压缩方法,无需对LLMs进行额外训练,同时平衡了语言的完整性与压缩比例。PRCA通过训练一个信息提取器来解决这个问题[69]。类似地,RECOMP采用了一种类似的方法,通过对比学习训练一个信息浓缩器[71]。每个训练数据点包含一个正样本和五个负样本,而编码器在整个过程中通过对比损失进行训练[102]。
除了压缩上下文外,减少文档的数量也有助于提高模型回答的准确性。Ma等人[103]提出了“Filter-Reranker”范式,这一范式结合了LLMs和SLMs的优势。在这个范式中,SLMs充当过滤器的角色,而LLMs则作为重新排序的代理。研究表明,指导LLMs重新排序由SLMs识别出的具有挑战性的样本可以显著提高各种信息抽取(Information Extraction, IE)任务的表现。另一种简单而有效的方法是在生成最终答案之前让LLM评估检索到的内容。这使得LLM能够通过自身的批判来过滤掉相关性较差的文档。例如,在Chatlaw[104]中,LLM被提示自我建议引用的法律条款以评估其相关性。
-
LLM Fine-tuning
基于场景和数据特性的针对性微调可以在LLMs上产生更好的效果。这也是使用本地部署的LLMs的最大优势之一。当LLMs在特定领域缺乏数据时,可以通过微调向LLMs提供额外的知识。Huggingface的微调数据也可以作为一个初步步骤来使用。
微调的另一个好处是能够调整模型的输入和输出。例如,它可以使LLM适应特定的数据格式,并按指示生成特定风格的响应[37]。对于涉及结构化数据的检索任务,SANTA框架[76]实施了三阶段的训练方案,以有效地捕捉结构和语义的细微差别。初始阶段集中在检索器上,其中使用对比学习来细化查询和文档的嵌入。
通过强化学习使LLM的输出与人类或检索器的偏好保持一致是一种潜在的方法。例如,可以手动标注最终生成的答案,并通过强化学习提供反馈。除了与人类偏好对齐之外,也可以与经过微调的模型及检索器的偏好对齐[79]。当无法访问强大的专有模型或更大的开源模型参数时,一个简单而有效的方法是对更强大的模型(如GPT-4)进行知识蒸馏。LLM的微调还可以与检索器的微调协调以实现偏好对齐。一种典型的做法,比如RA-DIT[27],利用KL散度在Retriever和Generator之间对评分函数进行对齐。
5 AUGMENTATION PROCESS IN RAG
在RAG领域中,标准做法通常包括一次检索步骤后跟着生成,这可能会导致效率低下,并且对于需要多步推理的复杂问题来说通常是不够的,因为它提供的信息范围有限[105]。针对这一问题,许多研究已经优化了检索过程,我们在图5中总结了这些研究。
-
A. Iterative Retrieval
迭代检索是一种过程,其中基于初始查询和迄今为止生成的文本对知识库进行反复搜索,从而为LLMs提供更加全面的知识基础。这种方法已被证明能够通过多次检索迭代提供额外的相关参考来增强后续答案生成的稳健性。然而,它可能会受到语义不连续性和无关信息累积的影响。ITER-RETGEN [14] 采用了一种协同方法,结合了“retrieval-enhanced generation”(增强检索生成)与“generation-enhanced retrieval”(生成增强检索),用于需要复现特定信息的任务。该模型利用解决输入任务所需的内容作为检索相关知识的上下文基础,进而促进后续迭代中产生更优质的响应。
-
B. Recursive Retrieval
递归检索通常用于信息检索和自然语言处理(NLP)中,以提高搜索结果的深度和相关性。这个过程包括基于之前搜索得到的结果不断细化搜索查询。递归检索旨在通过反馈循环逐步汇聚到最相关的信息,从而增强搜索体验。IRCoT[61]使用思维链(chain-of-thought)指导检索过程,并用获得的检索结果优化思维链。ToC[57]创建了一个澄清树,系统地优化查询中模糊的部分。在复杂的搜索场景中,当用户的需求从一开始就不完全清楚,或者所寻求的信息非常专业化或微妙时,这可能特别有用。过程的递归性质允许持续学习和适应用户的需求,通常导致对搜索结果的满意度提高。
-
C. Adaptive Retrieval
自适应检索方法,如Flare[24]和Self-RAG[25],通过使大型语言模型(LLMs)能够主动确定检索的最佳时机和内容,从而优化了RAG框架,增强了检索信息的效率和相关性。
这些方法属于更广泛趋势的一部分,在这一趋势中,大型语言模型(LLMs)在操作中运用主动判断,正如在AutoGPT、Toolformer和Graph-Toolformer等模型代理中所看到的[107]–[109]。例如,Graph-Toolformer将其检索过程划分为不同的步骤,其中LLMs主动使用检索器,应用自我提问技术(Self-Ask techniques),并使用少量样本提示(few-shot prompts)来启动搜索查询。这种主动的姿态允许LLMs决定何时搜索必要的信息,类似于代理如何使用工具。
WebGPT[110]集成了一个强化学习框架,用于训练GPT-3模型,在文本生成期间自主地使用搜索引擎。它使用特殊的标记来引导这一过程,这些标记有助于执行如搜索引擎查询、浏览结果和引用参考等操作,从而通过使用外部搜索引擎扩展了GPT-3的能力。Flare通过监控生成过程的置信度来自动化定时检索,生成术语的概率表明了这一点[24]。当概率低于某个阈值时,将激活检索系统以收集相关信息,从而优化检索周期。Self-RAG[25]引入了“反思标记”,允许模型内省其输出。这些标记有两种类型:“检索”和“批评”。模型自主决定何时激活检索,或者相反,预设的阈值可能会触发该过程。在检索期间,生成器在多个段落中进行片段级的束搜索,以得出最连贯的序列。批评分数用于更新子段分数,在推理期间具有调整这些权重的灵活性,以定制模型的行为。Self-RAG的设计消除了对额外分类器或依赖自然语言推理(NLI)模型的需求,从而简化了何时启动检索机制的决策过程,并提高了模型在生成准确响应时的自主判断能力。
6 TASK AND EVALUATION
RAG在自然语言处理(NLP)领域的快速发展和日益增长的应用推动了LLMs社区对RAG模型评估的研究。这一评估的主要目标是理解和优化RAG模型在不同应用场景中的表现。本章将主要介绍RAG的主要下游任务、数据集以及如何评估RAG系统。
-
A. Downstream Task
RAG的核心任务仍然是问答(Question Answering, QA),包括传统的单跳/多跳QA、多项选择、特定领域的QA以及适合RAG的长形式场景。除了QA,RAG还在不断地扩展到多个下游任务中,如信息提取(Information Extraction, IE)、对话生成、代码搜索等。RAG的主要下游任务及其对应的数据集在表II中进行了总结。
-
B. Evaluation Target
历史上,对RAG模型的评估主要集中在它们在特定下游任务中的执行情况。这些评估采用了适合手头任务的既定指标。例如,问答评估可能依赖于精确度(Exact Match, EM)和F1分数[7],[45],[59],[72],而事实核查任务通常以准确度(Accuracy)作为主要指标[4],[14],[42]。BLEU和ROUGE指标也常用于评估答案质量[26],[32],[52],[78]。像RALLE这样为RAG应用自动评估而设计的工具,同样基于这些特定于任务的指标进行评估[160]。尽管如此,专门评估RAG模型独特特征的研究却相当缺乏。主要的评估目标包括:
Retrieval Quality.评估检索质量对于确定检索组件所获取上下文的有效性至关重要。搜索引擎、推荐系统和信息检索系统领域的标准指标被用来衡量RAG检索模块的性能。诸如命中率(Hit Rate)、平均准确率(Mean Reciprocal Rank, MRR)和归一化折扣累积增益(Normalized Discounted Cumulative Gain, NDCG)等指标通常用于此目的[161],[162]。
Generation Quality。生成质量的评估集中在生成器从检索到的上下文中合成连贯且相关答案的能力上。这种评估可以根据内容的目标分为两类:未标记内容和标记内容。对于未标记内容,评估包括生成答案的忠实度、相关性和无害性。相比之下,对于标记内容,重点是模型产生的信息的准确性[161]。此外,检索和生成质量的评估可以通过手动或自动评估方法进行[29],[161],[163]。
-
C. Evaluation Aspects
当前的RAG模型评估实践强调三个主要的质量得分和四种基本能力,这些综合起来为评估RAG模型的两个主要目标——检索和生成——提供了信息。
-
Quality Scores:质量得分包括上下文相关性、答案忠实度和答案相关性。这些质量得分从不同的角度评估RAG模型在信息检索和生成过程中的效率[164]–[166]。
Context Relevance 上下文相关性(Context Relevance)评估检索到的上下文的精确度和特定性,确保其相关性,并最小化与无关内容相关的处理成本。
Answer Faithfulness 答案忠实度(Answer Faithfulness)确保生成的答案与检索到的上下文保持一致,维持一致性并避免矛盾。
Answer Relevance 答案相关性(Answer Relevance)要求生成的答案与提出的问题直接相关,有效地解决核心问题。
-
Required Abilities:RAG评估还包括四种能力,这些能力表明了其适应性和效率:抗噪声性(noise robustness)、负向拒绝(negative rejection)、信息整合(information integration)和反事实鲁棒性(counterfactual robustness)[167],[168]。这些能力对于模型在各种挑战和复杂情景下的表现至关重要,它们影响着质量得分。
Noise Robustness 抗噪声性(Noise Robustness)评估模型管理那些与问题相关但缺乏实质信息的噪声文档的能力。
Negative Rejection 负向拒绝(Negative Rejection)评估模型在检索到的文档不包含回答某个问题所需的知识时,抑制回答的能力。
Information Integration 信息整合(Information Integration)评估模型在从多个文档中综合信息以解决复杂问题方面的熟练程度。
Counterfactual Robustness 反事实鲁棒性(Counterfactual Robustness)测试模型识别和忽略文档中已知不准确性的能力,即使在被告知可能存在的错误信息时也是如此。
上下文相关性和抗噪声能力对于评估检索的质量至关重要;而答案忠实度、答案相关性、否定拒绝、信息整合以及反事实鲁棒性对于评估生成的质量同样重要。
每个评估方面的具体指标总结在表III中。必须认识到,这些指标来源于相关的工作,属于传统的衡量方法,目前并不代表一种成熟或标准化的方式来量化RAG(增强检索的生成)模型的评估方面。虽然此处未包括,但在一些评估研究中已经开发出了针对RAG模型细微差别的定制指标。
-
D. Evaluation Benchmarks and Tools
已提出了一系列基准测试和工具来促进RAG(增强检索的生成)模型的评估。这些工具提供了定量指标,不仅能够衡量RAG模型的表现,还能加深对模型在不同评估方面的能力的理解。诸如RGB、RECALL和CRUD等突出的基准测试[167]-[169]专注于评估RAG模型的基本能力。同时,像RAGAS[164]、ARES[165]和TruLens8这样的前沿自动化工具利用大型语言模型来评判质量评分。这些工具和基准测试共同构成了一个强大的框架,用于系统地评估RAG模型,如表IV所总结。
7 DISCUSSION AND FUTURE PROSPECTS
尽管在RAG技术上取得了显著进展,但仍存在一些需要深入研究的挑战。本章将主要介绍RAG当前面临的挑战及未来的研究方向。
-
A. RAG vs Long Context
随着相关研究的不断深入,大型语言模型(LLMs)的应用场景正在持续扩展[170]-[172]。目前,LLMs可以轻松处理超过20万个标记的上下文[9]。这种能力意味着原本依赖于RAG的长文档问答现在可以直接将整个文档纳入提示中。这也引发了关于当LLMs不再受上下文限制时RAG是否仍然必要的讨论。实际上,RAG仍然发挥着不可替代的作用。一方面,一次性向LLMs提供大量上下文会显著影响其推理速度,而分块检索和按需输入可以显著提高运行效率。另一方面,基于RAG的生成可以快速定位原始参考材料,帮助用户验证生成的答案。整个检索和推理过程是可观察的,而仅仅依赖长上下文的生成仍然是一个黑箱。相反,上下文的扩展为RAG的发展提供了新的机遇,使其能够解决更加复杂的问题,以及那些需要阅读大量资料才能回答的整合或摘要类问题[49]。在超长上下文中开发新的RAG方法是未来的研究趋势之一。
-
B. RAG Robustness
检索过程中出现的噪声或矛盾信息会对RAG的输出质量造成不利影响。这种情况形象地被称为“错误的信息比没有信息更糟糕”。提升RAG对这类对抗性或反事实输入的抵抗力正成为研究热点,并已成为一个关键性能指标[48]、[50]、[82]。Cuconasu等人[54]分析了应该检索哪些类型的文档,评估了这些文档与提示的相关性、它们的位置以及包含在上下文中的数量。研究发现,包含不相关的文档意外地提高了超过30%的准确性,这与最初认为会降低质量的假设相矛盾。这些结果强调了发展专门策略来整合检索与语言生成模型的重要性,并突显出对RAG鲁棒性的进一步研究和探索的需求。
-
C. Hybrid Approaches
将RAG与微调相结合正在成为一种领先的策略。确定RAG与微调之间最优的结合方式——无论是顺序的、交替的还是通过端到端的联合训练——以及如何利用参数化和非参数化的优点,这些都是值得深入探索的领域[27]。另一个趋势是在RAG中引入具有特定功能的SLMs(Sequence Language Models,序列语言模型),并通过RAG系统的输出来进行微调。例如,CRAG[67]训练了一个轻量级的检索评估器来评估针对某个查询所检索到的文档的整体质量,并根据置信度水平触发不同的知识检索行为。
-
D. Scaling laws of RAG
端到端的RAG模型和基于RAG的预训练模型仍然是当前研究人员关注的重点之一[173]。这些模型的参数是其中一个关键因素。虽然对于大型语言模型(LLMs)已经建立了缩放定律[174],但这些定律在RAG上的适用性仍然不确定。初步的研究如RETRO++[44]已经开始探讨这个问题,但RAG模型的参数数量仍然落后于LLMs。逆缩放定律的可能性尤其引人注目,其中较小的模型可能胜过较大的模型,这一点特别值得进一步探究。
-
E. Production-Ready RAG
RAG的实用性及其与工程需求的一致性促进了它的应用。然而,提高检索效率、改善大型知识库中的文档召回率,以及确保数据安全——例如防止大型语言模型(LLMs)无意中泄露文档来源或元数据——仍然是亟待解决的关键工程挑战[175]。
RAG生态系统的进步受到其技术栈进展的极大影响。诸如LangChain和LLamaIndex等关键工具随着ChatGPT的兴起迅速获得了广泛的认可,提供了丰富的RAG相关的API,并在大型语言模型领域变得不可或缺。虽然新兴的技术栈在功能丰富度上不如LangChain和LLamaIndex,但通过其专业化的产物脱颖而出。例如,Flowise AI优先考虑低代码的方式,允许用户通过友好的拖放界面部署AI应用,包括RAG。其他技术如HayStack、Meltano和Cohere Coral也因其对该领域的独特贡献而受到关注。
除了专注于AI的供应商之外,传统的软件和云服务提供商也在扩展他们的服务,以包括以RAG为中心的服务。Weaviate的Verba[11]专为个人助理应用程序设计,而Amazon的Kendra[12]提供智能的企业搜索服务,使用户能够使用内置连接器浏览各种内容存储库。在RAG技术的发展中,有一个明显的趋势是朝着不同的专业化方向发展,例如:
-
定制化 — 根据特定需求调整RAG。
-
简易化 — 让RAG更易于使用,以减少初始学习曲线。
-
专业化 — 优化RAG以更好地服务于生产环境。
RAG模型与其技术栈的相互成长是显而易见的;技术进步不断地为现有基础设施设立新的标准。反过来,技术栈的改进推动了RAG能力的发展。RAG工具包正在汇聚成一个基础技术栈,为高级企业应用奠定基础。然而,一个完全集成、全面的平台概念仍然处于未来,需要进一步的创新和发展。
-
F. Multi-modal RAG
RAG已经超越了其最初的文本问答局限,开始拥抱多样化的模态数据。这一扩展催生了创新的多模态模型,这些模型在各个领域中融合了RAG的概念:
Image。图像。RA-CM3[176]作为一项开创性的多模态模型,既能检索也能生成文本和图像。BLIP-2[177]利用冻结的图像编码器与大型语言模型(LLMs)配合进行高效的视觉语言预训练,实现了零样本的图像到文本转换。"先可视化再写作"方法[178]采用图像生成来引导语言模型的文本生成,显示出了在开放式文本生成任务中的潜力。
Audio and Video。GSS 方法检索并拼接音频片段,将机器翻译的数据转换成语音翻译的数据 [179]。UEOP 标志着端到端自动语音识别的一个重大进步,通过整合外部离线策略来改进语音到文本的转换 [180]。此外,基于 K 近邻 (KNN) 的注意力融合利用了音频嵌入和语义相关的文本嵌入来优化自动语音识别 (ASR),从而加速了领域适应。Vid2Seq 通过加入专门的时间标记增强了语言模型,这有助于在一个统一的输出序列中预测事件边界和文本描述 [181]。
code。RBPS[182]在小规模学习任务中表现出色,通过编码和频率分析检索与开发者目标相匹配的代码示例。这种方法已经在诸如测试断言生成和程序修复等任务中证明了其有效性。对于结构化知识,CoK方法[106]首先从知识图谱中提取与输入查询相关的事实,然后将这些事实作为提示整合到输入中,从而在知识图谱问答任务中提升了性能。
8 CONCLUSION
如图6所示,本文总结强调了RAG在集成语言模型中的参数化知识与来自外部知识库的大规模非参数化数据方面所取得的重大进展,这显著增强了大型语言模型的能力。本综述展示了RAG技术的发展及其在多种不同任务上的应用。分析概述了RAG框架内的三个发展阶段:朴素RAG、高级RAG以及模块化RAG,每个阶段都代表了对前一阶段的进步。RAG与其它人工智能方法的技术融合,如微调和强化学习,进一步扩展了其能力。尽管RAG技术取得了进步,但仍存在研究机会来提高其鲁棒性及处理扩展上下文的能力。
RAG的应用范围正在向多模态领域扩展,将其原则应用于解释和处理诸如图像、视频和代码等多样化数据形式。这一扩展凸显了RAG在人工智能部署方面的重大实际意义,并吸引了学术界和工业界的兴趣。RAG生态系统的增长体现在基于RAG的人工智能应用的增加和支持性工具的持续开发上。随着RAG应用领域的扩大,有必要改进评估方法以跟上其发展的步伐。确保准确且具有代表性的性能评估对于充分反映RAG对人工智能研究与开发社区的贡献至关重要。