前言

原文链接
大型语言模型(LLM)已成为人工智能领域的重大突破,在各种任务中表现出强大的能力。然而,LLM仍面临一些挑战,例如幻觉、知识更新缓慢和答案缺乏透明度。幻觉是LLM生成错误或虚假信息的倾向。这可能发生在LLM没有足够的知识来回答问题时,或在LLM受到噪声或偏见的影响时。
知识更新缓慢是LLM的一个缺点,因为它们需要大量数据来训练。这意味着LLM很难跟上不断变化的世界。检索增强生成(RAG)是一种新兴技术,旨在解决LLM面临的这些挑战。
RAG的工作原理如下:
LLM接收用户查询。
LLM从外部知识库中检索相关信息。
LLM使用检索到的信息和用户查询生成答案。

RAG可以显著提高LLM在知识密集型任务中的准确性。例如,在回答事实性问题时,RAG可以减少模型的幻觉,并生成更准确和更相关的答案。此外,RAG还可以帮助LLM更快地更新知识,并引入特定领域的知识。
本文主要为原文翻译,后续会更新文章阅读笔记。

摘要:

大型语言模型(llm)表现出强大的能力,但在实际应用中仍然面临挑战,如幻觉、知识更新缓慢和答案缺乏透明度。检索增强生成(retrieval - augmented Generation, RAG)是指在使用llm回答问题之前从外部知识库中检索相关信息。可以减少模型的幻觉,显著提高答案的准确性,特别是在知识密集型任务中。通过引用数据源,用户可以验证答案的准确性,增加对模型输出的信任。它还有助于知识更新和特定领域知识的引入。RAG有效地将llm的参数化知识与非参数化外部知识库相结合,是实现大型语言模型的重要方法之一。本文概述了RAG在llm时代的发展范式,总结了三种范式:Naive RAG、Advanced RAG和Modular RAG。然后对RAG的三个主要组成部分:检索器、生成器和增强方法进行了总结和组织,并介绍了每个组成部分的关键技术。讨论了RAG模型有效性的评估方法,介绍了RAG模型的两种评估方法,重点介绍了RAG模型的关键指标和评估能力,并给出了最新的自动化评估框架。最后,从垂直优化、水平扩展、rag1技术栈和生态系统3个方面介绍了未来可能的研究方向。

一、介绍

虽然大模型比之前NLP领域的所有技术都更强,但是也存在很多缺点。
1、 大模型经常捏造事实;
2、 在处理特定领域或高度专业化的问题时,缺乏知识;
3、 LLM是黑盒的,可解释性较低,限制了工业中的落地;

传统上,神经网络通过微调模型来参数化知识,以适应特定的领域或专有信息。虽然这种技术产生了显著的结果,但它需要大量的计算资源,产生高成本,并需要技术经验,这使得它不适应飞速增长的数据信息。并且参数知识和非参数知识的作用不同,传统的微调模型不能利用外部的非参数知识。在大模型中,通过训练可以获取参数化知识并存储在神经网络权值中,形成生成响应的基础。另一方面,非参数知识存在于外部知识源(如向量数据库)中,不直接编码到模型中,而是作为可更新的补充信息,在答案生成阶段,再将参数知识与非参数知识耦合。非参数知识的耦合,可以使llm能够访问和利用最新的或特定领域的信息,提高响应的准确性和相关性。
纯参数化语言模型(llm)将其从大量语料库中获取的世界知识存储在模型的参数中。然而,这些模型也有其局限性。首先,很难保留所有来自训练语料库的知识,特别是对于不太常见和更具体的知识。其次,由于模型参数不能动态更新,参数知识容易随着时间的推移而过时。最后,参数的扩大会导致训练和推理的计算开销增加。为了解决纯参数化模型的局限性,语言模型可以采用半参数化方法,将非参数化语料库与参数化模型相结合。这种方法称为检索增强生成(RAG)。
术语检索增强生成(RAG)首先由[Lewis等人,2020]提出。它将预训练的检索器与预训练的seq2seq模型(生成器)相结合,并进行端到端的微调,以更可解释和模块化的方式捕获知识。在大型模型出现之前,RAG主要关注端到端模型的直接优化。在检索端进行密集检索,例如使用基于向量的密集通道检索(DPR)[Karpukhin等人,2020],以及在生成端训练较小的模型是常见的做法。由于整体参数尺寸较小,检索器和生成器通常都会进行同步的端到端训练或微调[Izacard等人,2022]。
在ChatGPT等LLM出现后,生成语言模型成为主导,在各种语言任务中展示了令人印象深刻的性能[Bai等人,2022,OpenAI, 2023, Touvron等人,2023,谷歌,2023]。然而,llm仍然面临着诸如幻觉[Yao等人,2023,Bang等人,2023]、知识更新和数据相关问题等挑战。这影响了llm的可靠性,使它们在某些严重的任务场景中遇到困难,特别是在需要访问大量知识的知识密集型任务中,如开放域问答[Chen和Yih, 2020, Reddy等人,2019,Kwiatkowski等人,2019]和常识推理[Clark等人,2019,Bisk等人,2020]。参数内的隐含知识可能是不完整和不充分的。
随后的研究发现,将RAG引入到大型模型的上下文学习(ICL)中可以缓解上述问题,且效果显著且易于实现。在推理过程中,RAG动态地从外部知识源检索信息,将检索到的数据作为参考来组织答案。这大大提高了响应的准确性和相关性,有效地解决了llm中存在的幻觉问题。在LLM出现后,该技术迅速获得了关注,并成为改进聊天机器人和使LLM更实用的最热门技术之一。RAG通过将事实知识从llm的训练参数中分离出来,巧妙地将生成模型的强大能力与检索模块的灵活性相结合,有效地解决了纯参数化模型中固有的知识不完整和不足的问题。
系统地回顾和分析了当前RAG的研究方法和未来的发展路径,将其归纳为3种主要的研究范式:Naive RAG、Advanced RAG和Modular RAG。随后,对RAG的三个核心组成部分:检索、增强和生成进行了整合总结,突出了RAG的改进方向和当前的技术特点。在增广方法部分,将现有工作分为3个方面:RAG的增广阶段、增广数据源和增广过程。此外,总结了RAG的评估体系、适用场景以及其他相关内容。通过本文,读者对大型模型和检索增强生成有了更全面和系统的了解。他们熟悉知识检索增强的演化路径和关键技术,能够识别不同技术的优缺点,识别适用场景,并在实践中探索当前的典型应用案例。值得注意的是,在之前的工作中,Feng等人[2023b]系统地综述了将大型模型与知识相结合的方法、应用和未来趋势,主要关注知识编辑和检索增强方法。Zhu等人[2023]介绍了增强大型语言模型检索系统的最新进展,特别关注检索系统。同时,Asai等人[2023a]围绕“什么”、“何时”、“如何”等问题,分析和阐述了基于检索的语言模型的关键过程。与之相比,本文旨在系统地概述检索增强生成(retrieval - augmented Generation, RAG)的整个过程,并重点关注通过知识检索增强大型语言模型生成的相关研究。
RAG算法和模型的发展如图1所示。从时间轴上看,大多数与RAG相关的研究都出现在2020年之后,一个重要的转折点出现在2022年12月ChatGPT发布时。自ChatGPT发布以来,自然语言处理领域的研究进入了大模型时代。朴素RAG技术迅速获得重视,导致相关研究的数量迅速增加。在增强策略方面,自RAG的概念提出以来,在预训练和监督微调阶段的强化研究一直在进行。然而,推理阶段的大多数强化研究是在llm时代出现的。这主要是由于与高性能大型模型相关的高训练成本。研究人员试图通过在推理阶段包含RAG模块,以具有成本效益的方式合并外部知识,来增强模型生成。关于增广数据的使用,早期的RAG主要关注非结构化数据的应用,特别是在开放域问答的背景下。随后,用于检索的知识源范围扩大,使用高质量数据作为知识源,有效解决了错误知识内化和大型模型幻觉等问题。这包括结构化知识,知识图谱就是一个代表性的例子。最近,自检索受到了越来越多的关注,它涉及挖掘llm本身的知识以提高其性能。

在这里插入图片描述

二、背景

本章将介绍RAG的定义,并将其与其他模型优化技术(如微调)进行比较。
在这里插入图片描述
v

2.1

RAG的含义随着技术的发展而扩展。在大型语言模型时代,RAG的具体定义是指模型在回答问题或生成文本时,首先从大量文档语料库中检索相关信息。然后,利用这些检索到的信息生成响应或文本,从而提高预测的质量。RAG方法允许开发人员不必为每个特定任务重新训练整个大型模型。相反,他们可以附加一个知识库,为模型提供额外的信息输入,并提高其响应的准确性。RAG方法特别适用于知识密集型任务。综上所述,RAG系统由两个关键阶段组成:
1、利用编码模型检索基于问题的相关文档,如BM25、DPR、Col- BERT和类似方法[Robertson等人,2009,Karpukhin等人,2020,Khattab和Zaharia, 2020]。
2.、生成阶段:使用检索到的上下文作为条件,系统生成文本。

2.2 RAG vs Fine-tuning

在大型语言模型(LLMs)的优化中,除了RAG之外,另一种重要的优化技术是微调。RAG类似于为模型提供教科书,允许它根据特定查询检索信息。这种方法适用于模型需要回答特定查询或处理特定信息检索任务的场景。然而,RAG并不适合教模型理解广泛的领域或学习新的语言、格式或风格。
微调类似于通过广泛的学习使学生内化知识。当模型需要复制特定的结构、样式或格式时,这种方法很有用。微调可以增强未微调模型的性能,并使交互更高效。特别适合强调基础模型中已有的知识,修改或自定义模型的输出,以及向模型提供复杂的指令。然而,微调不适合将新知识合并到模型中,或需要快速迭代新用例的情况。
微调类似于让学生通过长期学习来内化知识。当模型需要复制特定的结构、样式或格式时,此方法适用。微调可以实现优于非微调模型的性能,并且交互更有效。微调特别适合强调基础模型中的现有知识,修改或自定义模型的输出,用复杂的指令指示模型。然而,微调不适合向模型中添加新知识,也不适合需要快速迭代新用例的场景。RAG和Fine-tuning (FT)的具体对比见表1。
在这里插入图片描述

RAG和fine-tuning不是互斥的,而是可以相互补充,增强模型在不同层次的能力。在某些情况下,结合这两种技术可以实现最优的模型性能。使用RAG进行优化和微调的整个过程可能需要多次迭代才能获得满意的结果。现有研究表明,与优化大型语言模型的其他方法相比,检索增强生成(RAG)具有显著的优势[Shuster等人,2021,Yasunaga等人,2022,Wang等人,2023c, Borgeaud等人,2022]:
 RAG通过将答案与外部知识相关联,减少语言模型中的幻觉问题,并使生成的回答更准确和可靠,从而提高准确性。
 检索技术的使用可以识别最新的信息。相对于传统的仅依赖训练数据的语言模型,RAG保持了回复的时效性和准确性。
 透明度是抹布的优势。通过引用数据源,用户可以验证答案的准确性,增加对模型输出的信任度。
 RAG具有定制功能。通过对相关文本语料库进行索引,可以针对不同领域定制模型,为特定领域提供知识支持。
 在安全和隐私管理方面,RAG内置了数据库中的角色和安全控制,可以更好地控制数据的使用。相比之下,经过微调的模型可能缺乏对谁可以访问哪些数据的明确管理。
 RAG的可扩展性更强。它可以处理大规模数据集,而不需要更新所有参数和创建训练集,使其更经济高效。
 最后,RAG生成的结果更加可信。RAG从最新数据中选择确定性结果,而微调模型在处理动态数据时可能出现幻觉和不准确性,缺乏透明度和可信性。

三、RAG框架

RAG的研究范式在不断发展。本章主要介绍RAG研究范式的演变。我们将其分为三种类型: Naïve RAG, Advanced RAG, and Modular RAG。虽然早期的RAG性价比高,性能优于原生LLM,但它仍然面临许多缺点。Advanced RAG和Modular RAG的出现是为了解决Naïve RAG的特定缺陷。

3.1 Naive RAG

在ChatGPT被广泛采用后不久,Naive RAG研究范式代表了最早的方法论。Naive RAG涉及传统的过程:索引、检索和生成。Naive RAG也被总结为“检索”-“读取”框架[Ma等人,2023a]。
索引
从源获取数据并为其构建索引的管道通常在脱机状态下进行。具体来说,数据索引的构建包括以下几个步骤:
1.数据索引:这涉及到清理和提取原始数据,将不同的文件格式(如PDF、HTML、Word、Markdown等)转换为纯文本。
2.分块(Chunking):将加载的文本分成更小的块。这是必要的,因为语言模型通常对它们可以处理的上下文数量有限制,因此有必要创建尽可能小的文本块。
3. 嵌入和创建索引:这是通过语言模型将文本编码为向量的过程。得到的向量将用于后续的检索过程中,计算向量与问题向量之间的相似度。嵌入模型要求较高的推理速度。由于用户提问时需要对大量语料库进行编码,并对问题进行实时编码,因此模型的参数规模不宜过大。生成嵌入后,下一步是创建索引,存储原始语料库块并以键值对的形式嵌入,以便将来快速频繁地搜索。
召回
给定用户输入,将使用与第一阶段相同的编码模型将查询转换为向量。计算问题嵌入与语料库中文档块嵌入之间的相似度。根据相似度选择前K个文档块作为当前问题的增强上下文信息。
生成
给定的问题和相关文档组合成一个新的提示。然后,大型语言模型的任务是根据提供的信息回答问题。根据不同任务的需要,可以决定是否允许大型模型使用其知识或仅根据给定的信息进行回答。如果有历史对话信息,也可以合并到多轮对话提示中。
Naive RAG的缺点
Navie RAG在三个方面面临主要挑战:检索质量、生成质量和增强过程。
关于检索质量,问题是多方面的。主要的问题是精度低,检索集中并非所有的块都与查询相关,从而导致潜在的幻觉和空投问题。第二个问题是低召回率,当没有检索到所有相关块时就会出现,从而阻止LLM获得足够的上下文来合成答案。此外,过时的信息带来了另一个挑战,其中数据冗余或过时的数据可能会导致不准确的检索结果。
在生成质量方面,问题同样多样化。幻觉是一个突出的问题,模型会编造一个在上下文中不存在的答案。无关性是模型生成的答案无法解决查询的另一个问题。此外,模型产生有害或攻击性反应的毒性或偏见是另一个问题。
最后,增强过程也面临一些挑战。至关重要的是,将检索到的文章的上下文与当前的生成任务有效地结合起来是至关重要的。如果处理不当,输出可能会显得不连贯或不连贯。冗余和重复是另一个问题,特别是当多个检索到的段落包含相似的信息时,会导致生成步骤中的内容重复。此外,确定多个检索段落对生成任务的重要性或相关性是具有挑战性的,增强过程需要适当平衡每个段落的价值。检索到的内容也可能来自不同的写作风格或语调,增强过程需要协调这些差异,以确保输出的一致性。最后,生成模型可能过度依赖增强的信息,导致输出只是重复检索的内容,而没有提供新的值或合成的信息。

3.2 Advanced RAG

Advanced RAG进行了针对性的改进,克服了Naive RAG的不足。在检索生成质量方面,Advanced RAG结合了预检索和后检索的方法。为了解决Naive RAG遇到的索引问题,Advanced RAG通过滑动窗口、细粒度分段和元数据等方法优化了索引。同时,提出了优化检索过程的各种方法。就具体实现而言,Advanced RAG可以通过管道或端到端方式进行调整。
在这里插入图片描述

Pre-Retrieval过程
优化数据索引
优化数据索引的目的是为了提高索引内容的质量。目前,为此目的采用了五种主要策略:增加索引数据的粒度、优化索引结构、添加元数据、对齐优化和混合检索。
 *提高数据粒度:*索引前优化的目标是提高文本的标准化、一致性,保证事实准确性和上下文丰富性,以保证RAG系统的性能。文本标准化涉及去除无关信息和特殊字符,以提高检索效率。在一致性方面,主要任务是消除实体和术语中的歧义性,同时消除重复或冗余信息以简化检索的焦点。确保事实的准确性至关重要,只要有可能,每条数据的准确性都应该进行验证。上下文保持,以适应现实世界中的系统交互上下文,可以通过添加另一层具有特定领域注释的上下文,再加上通过用户反馈循环的持续更新来实现。时间敏感性是基本的上下文信息,应该设计机制来更新过时的文件。总之,优化索引数据的重点应该是清晰、上下文和正确性,以使系统高效和可靠。下面介绍最佳实践。
优化索引结构:这可以通过调整块的大小、更改索引路径和合并图结构信息来实现。调整块(从小到大)的方法涉及收集尽可能多的相关上下文和最小化噪声。在构建RAG系统时,分块大小是一个关键参数。有不同的评估框架来比较单个块的大小。LlamaIndex2使用GPT4来评估保真度和相关性,而LLaMA[Touvron等人,2023]指数具有针对不同分块方法的自动评估功能。跨多个索引路径的查询方法与以往的元数据过滤和分块方法密切相关,可能涉及同时跨不同索引进行查询。标准索引可用于查询特定的查询,或者独立索引可用于基于元数据关键字进行搜索或过滤,例如特定的“日期”索引。引入图结构涉及到将实体转换为节点,将实体之间的关系转换为关系。这可以利用节点之间的关系来提高准确性,特别是对于多跳问题。使用图数据索引可以增加检索的相关性。
添加元数据信息:这里的重点是将引用的元数据嵌入到块中,例如日期和用于过滤的目的。添加章节和参考文献的子章节等元数据也有助于改进检索。当我们将索引分成许多块时,检索效率就成为一个问题。首先对元数据进行过滤可以提高效率和相关性。
 *对齐优化:*该策略主要解决对齐问题和文档之间的差异。对齐概念包括引入假设问题,创建适合在每个文档中回答的问题,并将这些问题嵌入(或替换)到文档中。这有助于解决文档之间的对齐问题和差异。
 *混合检索:*这种策略的优势在于可以利用不同检索技术的优势。智能地结合多种技术,包括基于关键字的搜索、语义搜索和向量搜索,以适应不同的查询类型和信息需求,确保一致地检索到最相关和上下文最丰富的信息。混合检索可以作为检索策略的鲁棒补充,提高RAG流水线的整体性能。
Embedding
*Fine-turning Embedding:*微调嵌入模型直接影响RAG的效果。微调的目的是增强检索内容和查询之间的相关性。微调嵌入的作用类似于在生成语音之前调整耳朵,优化检索内容对生成输出的影响。一般来说,微调嵌入的方法属于调整特定领域上下文的嵌入和优化检索步骤的类别。特别是在处理不断变化或罕见术语的专业领域,这些定制的嵌入方法可以提高检索的相关性。BGE[BAAI, 2023]嵌入模型是一种微调且高性能的嵌入模型,如BAAI 3开发的BGE-large- en。要创建用于微调BGE模型的训练数据,首先使用gpt-3.5-turbo等llm来制定基于文档块的问题,其中问题和答案(文档块)形成微调过程的微调对。
*Dynamic Embedding:*动态嵌入根据单词出现的上下文进行调整,与每个单词使用单个向量的静态嵌入不同。例如,在像BERT这样的transformer模型中,相同的单词可以根据周围的单词具有不同的嵌入。有证据表明,在OpenAI的文本嵌入ada-002 model4中,出现了意想不到的高余弦相似度结果,特别是当文本长度小于5个标记时。理想情况下,嵌入应该包含尽可能多的上下文,以确保“健康”的结果。基于大模型编码可以比小模型更好的捕获上下文。虽然它擅长于语境理解,单它可能不会像最新的全尺寸语言模型(GPT-4)那样对上下文表现出同样的敏感性。
Post-Retrieval Process
在从数据库中检索到有价值的上下文后,将其与输入LLM的查询合并是一个挑战。一次性向LLM提交所有相关文件可能超出上下文窗口限制。将众多文档连接起来形成冗长的检索提示是无效的,引入了噪声并阻碍了LLM对关键信息的关注。为了解决这些问题,需要对检索到的内容进行额外的处理。
*ReRank:*重新排序将最相关的信息定位到提示框的边缘是一个简单的想法。这一概念已在LlamaIndex、LangChain和HayStack等框架中实现[Blagojevi, 2023]。例如,多样性排序器根据文档多样性进行重排序,而LostInTheMiddleRanker则将最佳文档放置在上下文窗口的开始和结束。同时,为了解决解释基于向量的模拟搜索的语义相似性的挑战,cohereAI rerank [Cohere, 2023]、bgererank5或LongLLMLingua [Jiang等人,2023a]等方法重新计算相关文本和查询之间的语义相似性。
*Prompt Compression:*研究表明,检索文档中的噪声会对RAG性能产生不利影响。后处理的重点在于压缩无关的上下文,突出关键段落,减少整体的上下文长度。选择性上下文[Litman等人,2020]和LLMLingua [Anderson等人,2022]等方法利用小型语言模型来计算提示互信息或困惑度,估计元素的重要性。然而,这些方法在RAG或长上下文场景下可能会丢失关键信息。Recomp [Xu等人,2023a]通过在不同粒度上训练压缩器来解决这个问题。长上下文[Xu et al., 2023b]在处理广泛的上下文时,进行分解和压缩,而“行走在记忆迷宫中”[Chen et al., 2023a]设计了一个分层摘要树,以增强LLM的关键信息感知。
RAG Pipeline Optimization
检索过程的优化旨在提高RAG系统的效率和信息质量,目前的研究主要集中在智能结合各种搜索技术、优化检索步骤、引入认知回溯的概念、灵活应用多样化的查询策略以及利用嵌入相似度等方面。这些努力共同努力在RAG检索的效率和上下文信息的丰富性之间取得平衡。
Exploring Hybrid Search:RAG系统通过智能地融合基于关键字的搜索、语义搜索和向量搜索等多种技术,充分发挥每种方法的优势。该方法使RAG系统能够适应不同的查询类型和信息需求,确保一致性地检索到最相关和上下文最丰富的信息。混合搜索作为检索策略的有力补充,提高了RAG流水线的整体性能。
Recursive Retrieval and Query Engine:在RAG系统中优化检索的另一种有效方法涉及实现递归检索和一个复杂的查询引擎。递归检索需要在初始检索阶段获取较小的文档块以捕获关键语义。在这个过程的后期阶段,为语言模型(LM)提供具有更多上下文信息的较大块。这种两步检索方法有助于在效率和丰富的上下文响应之间取得平衡。
StepBack-prompt: step - back -prompt方法[Zheng等人,2023]集成到RAG过程中,鼓励LLM从具体实例中退一步,并参与对基本的一般概念或原则的推理。实验结果表明,引入反向提示后,在各种具有挑战性的推理密集型任务中,性能有了显著提高,展示了其对RAG的自然适应性。检索增强步骤可以应用于反向提示的答案生成和最终的问答过程。
Subqueries: 可以在不同的场景中使用各种查询策略,包括使用LlamaIndex等框架提供的查询引擎、使用树查询、使用向量查询或使用最基本的块顺序查询。
HyDE: 这种方法基于这样的假设:生成的答案可能比直接查询更接近嵌入空间。利用LLM, HyDE生成一个假设的文档(答案)来响应一个查询,嵌入文档,并利用这种嵌入来检索与假设文档相似的真实文档。与基于查询的嵌入相似度计算不同,该方法强调答案之间的嵌入相似度。然而,它可能不会始终产生良好的结果,特别是在语言模型不熟悉所讨论主题的情况下,可能导致容易出错的实例的生成增加。
Modular RAG
模块化的RAG结构摆脱了传统的索引、检索和生成的RAG框架,在整个过程中提供了更大的多样性和灵活性。一方面,它集成了各种方法来扩展功能模块,例如在相似性检索中加入搜索模块,并在检索器中应用微调方法[Lin等人,2023]。此外,特定的问题导致了重组RAG模块的出现[Yu等人,2022]和迭代方法的出现[Shao等人,2023]。模块化的RAG范式正在成为RAG领域的主流,它允许序列化管道或跨多个模块的端到端训练方法。三种RAG范式之间的比较如图3所示。
New Modules
Search Module: 与Naive/Advanced RAG中查询和语料库之间的相似性检索不同,搜索模块针对特定场景,在使用llm生成的代码、查询语言(例如SQL、Cypher)或其他自定义工具的过程中,将对(额外)语料库的直接搜索合并在一起。搜索的数据源可以包括搜索引擎、文本数据、表格数据或知识图谱[Wang et al., 2023c]。
Memory Module: 利用LLM本身的记忆能力来指导检索,其原理涉及找到与当前输入最相似的记忆。Self-mem [Cheng等人,2023b]迭代地使用检索增强生成器来创建一个无限的内存池,结合“原始问题”和“双重问题”。检索增强的生成模型可以使用自己的输出来增强自己,使文本在推理过程中更接近数据分布,使用模型自己的输出而不是训练数据[Wang et al., 2022a]。
Extra Generation Module: 在检索内容中,冗余和噪声是常见的问题。额外的生成模块不是直接从数据源检索,而是利用LLM来生成所需的上下文[Yu等人,2022]。与直接检索相比,LLM生成的内容更可能包含相关信息。
Task Adaptable Module: UPRISE[Cheng等人,2023a]专注于转换RAG以适应各种下游任务,从预构建的数据池中自动检索给定零样本任务输入的提示,增强跨任务和模型的通用性。PROMPTAGATOR[Dai等人,2022]使用LLM作为少样本查询生成器,并根据生成的数据创建特定于任务的检索器。利用LLM的泛化能力,PROMPTAGATOR只需几个示例就可以创建特定任务的端到端检索器。
Alignment Module: 查询与文本的对齐一直是影响RAG效果的关键问题。在RAG模块化时代,研究人员发现,向检索器添加可训练的适配器模块可以有效缓解对齐问题。PRCA[Yang等人,2023b]利用强化学习来训练由LLM奖励驱动的上下文适配器,位于检索器和生成器之间。在标记自回归策略的强化学习阶段,通过最大化奖励来优化检索到的信息。AAR[Yu等人,2023b]提出了一个通用插件,从已知源的llm中学习LM偏好,以辅助未知或非协同微调的llm。RRR[Ma等人,2023a]设计了一个基于强化学习的查询重写模块,以将查询与语料库中的文档对齐。
Validation Module: 在实际场景中,并不能总是保证检索到的信息是可靠的。在LLM中检索不相关数据可能会导致错觉的发生。因此,可以在检索文档之后引入一个额外的验证模块,以评估检索文档和查询之间的相关性。这增强了RAG的鲁棒性[Yu等人,2023a]。
New Pattern
模块化RAG的组织方式是灵活的,允许在RAG过程中根据特定的问题上下文对模块进行替换或重构。对于包含检索和生成两个模块(部分文献称为阅读或合成)的Naive RAG来说,该框架提供了适应性和丰富性。本研究主要探讨两种组织范式,包括模块的增加或替换,以及模块之间的组织流动调整。
Adding or Replacing Modules: 增加或替换模块的策略需要维护检索-读取的结构,同时引入额外的模块来增强特定的功能。RRR[Ma等人,2023a]提出了重写-检索-读取过程,利用LLM性能作为重写模块强化学习的奖励。这允许重写器调整检索查询,提高读取器的下游任务性能。类似地,可以用Generate-Read等方法有选择地替换模块[Yu et al., 2022],其中LLM生成模块取代检索模块。Recite-Read [Sun等人,2022]将外部检索转换为基于模型权重的检索,最初让LLM记忆与任务相关的信息并生成输出以处理知识密集型的自然语言处理任务。
Adjusting the Flow between Modules: 在调整模块之间的流程方面,重点是增强语言模型和检索模型之间的交互。DSP[Khattab等人,2022]引入了演示-搜索-预测框架,将上下文学习系统视为一个显式程序,而不是解决知识密集型任务的终端任务提示。ITER-RETGEN [Shao等人,2023]利用生成的内容来指导检索,在检索-读取-检索-读取流程中迭代地执行“检索-增强生成”和“生成-增强检索”。Self-RAG[Asai等人,2023b]遵循决定-检索-反思-阅读过程,引入了一个主动判断模块。这种自适应和多样化的方法允许在模块化RAG框架内动态组织模块。

四、Retriever

在RAG中,R代表检索,服务于RAG管道,从庞大的知识库中检索top-k相关文档。然而,制作一个高质量的检索器是一项艰巨的任务。本章围绕三个关键问题展开讨论:
1)如何获取准确的语义表示?
2)如何匹配查询和文档的语义空间?
3)如何将检索器的输出与大型语言模型的偏好对齐?
4.1 How to acquire accurate semantic representations?
在RAG中,语义空间是查询与文档映射的多维空间。当我们进行检索时,它是在语义空间内进行测量的。如果语义表达不准确,那么它对RAG的影响是致命的,本节将介绍两种方法来帮助我们构建准确的语义空间。
Chunk optimization
在处理外部文档时,第一步是分块以获取细粒度特征。然后嵌入块。然而,嵌入过大或过小的文本块都可能无法达到良好的效果。因此,为语料库中的文档找到最优的分块大小对于保证检索结果的准确性和相关性至关重要。
在选择分块策略时,重要的考虑因素包括:被索引的内容特征、使用的嵌入模型及其最佳块大小、用户查询的预期长度和复杂性,以及检索结果在特定应用中的使用方式。例如,对于较长的或较短的内容,应该选择不同的分块模型。此外,不同的嵌入模型在不同的块大小下表现不同;例如,sentence-transformer更适合单句,而text-embedding-ada-002更适合包含256或512个token的块。此外,用户输入问题文本的长度和复杂性,以及应用程序(如语义搜索或问答)的特定需求,都将影响分块策略的选择。这可能与您选择的LLM的令牌限制直接相关,并可能需要您调整块大小。事实上,精确的查询结果是通过自适应地应用多种分块策略得到的;没有最好,只有最适合。
当前RAG研究采用多种块优化方法来提高检索效率和准确率。滑动窗口技术等技术通过多次检索聚合全局相关信息来实现分层检索。Small2big技术在搜索过程中利用小的文本块,并为语言模型提供较大的附属文本块进行处理。摘要嵌入技术对文档摘要进行Top K检索,提供完整的文档上下文。元数据过滤技术利用文档元数据进行过滤。图索引技术将实体和关系转换为节点和连接,显著增强了在多跳问题背景下的相关性。这些方法的结合改善了RAG的检索效果,提高了RAG的性能。
Fine-tuning Embedding Models
在获得合适大小的数据块后,需要通过嵌入模型将数据块嵌入到语义空间中进行查询,因此嵌入模型能否有效地表示语料至关重要。目前已经出现了优秀的嵌入模型,如[UAE[AngIE, 2023], Voyage[VoyageAI, 2023], BGE[BAAI, 2023]等,它们已经在大规模语料库上进行了预训练,但应用于特定领域时可能无法准确表示特定领域的语料库信息。此外,嵌入模型的特定任务微调对于确保模型理解与内容相关性相关的用户查询至关重要,而未微调的模型可能无法满足特定任务的需求。因此,微调嵌入模型对下游应用至关重要。嵌入微调方法有两种基本范式
Domain Knowledge Fine-tuning:为了使嵌入模型正确理解特定领域的信息,我们需要构建特定领域的数据集来微调嵌入模型。然而,嵌入模型的微调不同于普通的语言模型,主要是因为使用的数据集不同。在目前主流的微调嵌入模型方法中,使用的数据集由查询、语料库和相关文档三部分组成。嵌入模型根据查询在语料库中查找相关文档,然后将查询的相关文档是否命中作为模型的度量。
在数据集的构建、模型的微调和评估中,这三个部分都可能会出现许多挑战。在LlamaIndex [Liu, 2023]中,专门为嵌入模型的微调过程引入了一系列关键类和函数,显著简化了这一过程。通过准备一个领域知识语料库并利用它提供的方法,我们可以很容易地获得为所需领域量身定做的专业嵌入模型。
Fine-tuning of downstream tasks:使嵌入模型适应下游任务同样重要。当在下游任务中使用RAG时,一些工作通过使用llm的功能对嵌入模型进行了微调。PROMPTAGATOR[Dai等人,2022]利用大型语言模型(LLM)作为少样本查询生成器,并根据生成的数据创建特定任务的检索器,并缓解了监督微调的问题,该问题在一些领域由于数据稀缺而难以实现。LLM- embedder [Zhang等人,2023a]使用大型语言模型为来自多个下游任务的数据输出奖励值,通过对数据集的硬标记和来自LLM的软奖励,用两种不同的监督信号对检索器进行微调。
这通过领域知识注入和下游任务微调在一定程度上改善了语义表示。然而,用这种方法训练的检索器在直观上对大型语言模型没有帮助,因此进行了一些工作,直接通过LLM的反馈信号监督嵌入模型的微调。(本节将在4.4节介绍)
4.2 How to Match the Semantic Space of Queries and Documents ?
在RAG应用程序中,一些检索器使用相同的嵌入模型来编码query和doc,而其他检索器使用两个模型来分别编码query和doc。此外,用户的原始查询可能存在表达不佳和语义信息匮乏的问题。因此,对用户查询和文档的语义空间进行对齐是非常必要的。本节介绍实现这一目标的两项关键技术。
Query Rewrite
最直观的对齐查询和文档语义的方法是重写查询。正如Query2Doc[Wang et al., 2023b]和ITERRETGEN[Shao et al., 2023]中提到的,通过引导大型语言模型的固有能力来生成伪文档,然后将原始查询与该伪文档合并以形成新查询。在HyDE[Gao等人,2022]中,通过使用文本指示器来建立查询向量,使用这些指示器来生成一个相关的“假设”文档,但可能并不真正存在,它只需要捕获相关的模式。RRR[Ma等人,2023a]引入了一个新的框架,它颠倒了检索和读取的顺序,侧重于查询重写。该方法使用大型语言模型生成查询,然后使用web搜索引擎检索上下文,最后使用小型语言模型作为训练重写器来服务于冻结的大型语言模型。step - backprompt [Zheng et al., 2023]方法可以使大型语言模型进行抽象推理,提取高级概念和原理,并以此为基础进行检索。多查询检索方法涉及使用大型语言模型生成多个搜索查询,这些查询可以并行执行,检索结果一起输入,这对于依赖于多个子问题的单问题非常有用
Embedding Transformation
如果存在重写查询这样的粗粒度方法,那么还应该有特定于嵌入操作的细粒度实现。在LlamaIndex[Liu, 2023]中,可以在查询编码器之后连接适配器,并微调适配器以优化查询嵌入的表示,将其映射到更适合特定任务的潜空间。当查询和外部文档的数据结构不同时,例如非结构化查询和结构化外部文档,使查询与文档对齐是非常重要的。SANTA[Li等人,2023d]提出了两种预训练方法,以使检索器对结构化信息具有感知能力。1)利用结构化数据和非结构化数据之间的自然对齐关系进行对比学习,以进行结构化感知预训练。2)掩码实体预测,设计面向实体的掩码策略,要求语言模型对掩码实体进行填充。
4.3 How to Aligning Retriever’s Output and LLM’s Preference
在RAG流水线中,即使我们采用上述技术来提高检索命中率,仍然可能无法提高RAG的最终效果,因为检索到的文档可能不是LLM所需要的。因此,本节介绍两种方法来对齐检索器的输出和LLM的偏好。

五、 Generator

RAG的另一个核心组件是生成器,负责将检索到的信息转换为自然流畅的文本。它的设计灵感来自传统的语言模型,但与传统的生成模型相比,RAG的生成器通过利用检索到的信息提高了准确性和相关性。在RAG中,生成器的输入不仅包括传统的上下文信息,还包括通过检索器获得的相关文本片段。这使生成器能够更好地理解问题背后的上下文,并产生更丰富的信息。此外,生成器由检索的文本指导,以确保生成的内容和检索的信息之间的一致性。正是输入数据的多样性导致了在生成阶段进行一系列有针对性的工作,所有这些工作都旨在使大型模型更好地适应来自查询和文档的输入数据。我们将通过检索后处理和微调方面来深入介绍生成器。
5.1 How Can Retrieval Results be Enhanced via Post-retrieval Processing?
在未调优的大型语言模型方面,大多数研究依赖公认的大型语言模型,如GPT-4[OpenAI, 2023],利用其强大的内部知识来全面检索文档知识。然而,这些大型模型的固有问题,如上下文长度限制和对冗余信息的脆弱性,仍然存在。为了缓解这些问题,一些研究在检索后处理方面做了一些努力。检索后处理是指检索器从大型文档数据库中检索到的相关信息进一步处理、过滤或优化的过程。其主要目的是提高检索结果的质量,以更好地满足用户需求或后续任务。它可以理解为在检索阶段对获得的文档进行再处理的过程。检索后处理通常涉及信息压缩和结果重排序等操作。
Information Compression
尽管检索器可以从庞大的知识库中获取相关信息,但仍然面临着如何处理检索文档中大量信息的挑战。现有的一些研究试图通过增加大型语言模型的上下文长度来解决这一问题,但目前的大型语言模型仍然面临上下文限制。因此,在某些情况下,信息凝聚是必要的。总之,信息凝聚的重要性主要体现在以下几个方面:减少噪声、应对上下文长度限制、增强生成效果。
Rerank
重排模型的关键作用在于优化检索器所检索的文档集。当添加额外的上下文时,llm会经历回溯性能的下降,重排序为解决此问题提供了有效的解决方案。其核心思想是重新安排文档记录,将最相关的项目放在最上面,从而将文档的总数减少到一个固定的数量。这不仅解决了检索过程中可能遇到的上下文窗口扩展问题,而且有助于提高检索效率和响应性[Zhuang等人,2023]。
引入上下文压缩作为重排序的一部分,旨在仅根据给定的查询上下文返回相关信息。该方法的双重意义在于通过减少单个文档的内容和过滤整个文档,将最相关的信息集中显示在检索结果中。因此,重排模型在整个信息检索过程中起着优化和精炼的作用,为后续的LLM处理提供更有效和准确的输入。
5.2 How to Optimize a Generator to Adapt Input Data?
在RAG模型中,生成器的优化是整个结构的重要组成部分。生成器的任务是获取检索到的信息并生成相关文本,从而提供模型的最终输出。优化生成器的目标是确保生成的文本既自然又有效地利用了检索到的文档,以更好地满足用户的查询需求。
在典型的大型语言模型(LLM)生成任务中,输入通常是一个查询。RAG的主要区别在于,它的输入不仅包括一个查询,还包括检索器检索到的各种文档(结构化/非结构化)。额外信息的引入可能会对模型的理解产生重大影响,特别是对于较小的模型。在这种情况下,对模型进行微调以适应查询+检索文档的输入变得尤为重要。具体来说,在向微调模型提供输入之前,通常对检索器检索的文档进行检索后处理。有必要注意的是,在RAG中对生成器进行微调的方法本质上类似于llm的一般微调方法。这里,我们将简要介绍一些具有代表性的工作,包括数据(格式化/未格式化)和优化函数。
General Optimization Process
指包含(输入,输出)对的训练数据,旨在训练模型在给定输入x的情况下生成输出y的能力。在Self-mem的工作中[Cheng等人,2023b],采用了一个相对经典的训练过程。给定输入x,检索相关文档z(在论文中选择Top-1),并在积分(x, z)后,模型生成输出y。该论文使用两种常见的范式进行微调,即联合编码器[Arora等人,2023,Wang等人,2022b, Lewis等人,2020]和双编码器[Xia等人,2019,Cai等人,2021,Cheng等人,2022]。
Utilizing Contrastive Learning
在准备训练数据的阶段,通常生成的是输入和输出之间的成对交互。在这种情况下,模型只能访问唯一的真实输出,这可能会导致“暴露偏差”问题[Ranzato et al., 2015]:在训练阶段,模型只暴露一个真实反馈,而不访问任何其他生成的token。这可能会损害模型在应用中的性能,因为它可能过度适应训练数据中的特定反馈,而没有有效地泛化到其他场景。因此,SURGE提出了一种图-文本对比学习方法[Kang等人,2023]。对于输入和输出之间的任意一对交互。

六、Augmentation in RAG

本章主要从增广阶段、增广数据源、增广过程三个维度来阐述RAG开发中的关键技术。RAG核心组件的分类如图4所示。
在这里插入图片描述

6.1 RAG in Augmentation Stages
RAG作为一种知识密集型任务,在语言模型训练的预训练、微调和推理阶段采用了不同的技术方法。
Pre-training Stage
自预训练模型出现以来,研究人员一直致力于通过预训练阶段的检索方法来提高预训练语言模型(PTMs)在开放域问答(QA)中的性能。识别和扩展预训练模型中的隐性知识可能具有挑战性。REALM[Arora等人,2023]介绍了一种更模块化和可解释的知识嵌入方法。遵循掩码语言模型(MLM)范式,REALM将预训练和微调作为一个检索然后预测的过程进行建模,其中语言模型通过基于掩码句子x预测掩码标记y进行预训练,建模P(x|y)。
RETRO[Borgeaud等人,2022]利用检索增强来预训练自回归语言模型,通过从大量标记数据集中检索并显著减少模型参数,实现大规模的从头开始预训练。RETRO与GPT模型共享backbone结构,并引入额外的RETRO编码器来编码从外部知识库检索到的邻近实体的特征。此外,RETRO在其解码器transformer结构中融入了分块交叉注意力层,以有效集成来自RETRO编码器的检索信息。RETRO比标准GPT模型的复杂度更低。此外,它通过更新检索数据库,而不需要重新训练语言模型,在更新存储在语言模型中的知识方面提供了灵活性[Petroni等人,2019]。Atla[Izacard等人,2022]采用了类似的方法,在预训练和微调阶段纳入了使用T5架构的检索机制[Raffel等人,2020]。在预训练之前,用预训练的T5初始化编码器-解码器LM骨干,用预训练的构思器初始化密集检索器。在预训练过程中,它每1000步刷新异步索引。
COG [Vaze等人,2021]是一种文本生成模型,它通过从现有的文本集合中逐步复制文本片段(如单词或短语)来形式化其生成过程。与按顺序选择单词的传统文本生成模型不同,COG利用高效的向量搜索工具来计算文本片段的有意义上下文表示并对其进行索引。因此,文本生成任务被分解为一系列的复制和粘贴操作,在每个时间步,从文本集合中寻找相关的文本片段,而不是从独立的词汇表中选择。COG在各个方面都表现出了优于RETRO的性能,包括问答、域适应和扩展短语索引。
另一方面,随着标度律的发现,模型参数迅速增加,使得自回归模型成为主流。研究人员还在探索是否可以使用RAG方法对更大的模型进行预训练。RETRO++[Wang等人,2023a]是RETRO的扩展,增加了模型的参数规模。研究发现,文本生成质量、事实准确性、低毒性和下游任务准确性不断提高,特别是在开放域问答等知识密集型任务中。这些研究发现突出了预训练自回归语言模型与未来基础模型检索相结合的有希望的方向。
总之,增强预训练的优势和局限性是显而易见的。从积极的方面来看,该方法提供了一个更强大的基础模型,在困惑度、文本生成质量和下游任务性能方面优于标准GPT模型。此外,与纯粹的预训练模型相比,它通过使用更少的参数来实现更高的效率。它特别擅长处理知识密集型任务,允许通过在特定领域语料库上的训练来创建特定领域的模型。然而,也有缺点,包括需要大量的预训练数据和更大的训练资源,以及更新速度较慢的问题。特别是随着模型大小的增加,检索增强训练的成本变得相对较高。尽管有这些局限性,但该方法在模型鲁棒性方面表现出显著的特点。一旦训练完成,基于纯预训练的检索增强模型消除了对外部库依赖的需要,提高了生成速度和操作效率。
Fine-tuning Stage
在下游微调阶段,研究人员采用各种方法对检索器和生成器进行微调,以改进信息检索,主要是在开放域问答任务中。关于检索器微调,REPlUG[Shi等人,2023]将语言模型(LM)视为黑盒,并通过可调节的检索模型对其进行增强。通过监督信号获得黑盒语言模型的反馈,REPLUG改进了初始检索模型。另一方面,UPRISE[Cheng等人,2023a]通过对不同的任务集进行微调,创建轻量级和多功能的检索器,对检索器进行微调。该检索器可以自动为零样本任务提供检索提示,展示了其普遍性和跨任务和模型的改进性能。
同时,微调生成器的方法包括Self-Mem[Cheng等人,2023b],通过示例的内存池微调生成器,以及Self-RAG[Asai等人,2023b],通过生成反射标记来满足主动检索需求。RADIT[Lin等人,2023]方法通过在给定检索增强指令的情况下最大化正确答案的概率,对生成器和检索器进行微调。更新生成器和检索器,以最小化文档和查询之间的语义相似度,有效利用相关背景知识。
此外,SUGRE[Kang等人,2023]引入了对比学习的概念。它对检索器和生成器进行端到端的微调,确保高度详细的文本生成和检索子图。使用基于图神经网络(Graph Neural Networks, GNN)的上下文感知子图检索器,SURGE从正在进行的对话对应的知识图谱中提取相关知识。这确保了生成的响应忠实地反映了检索到的知识。SURGE采用了一个不变而高效的图编码器和一个图-文本对比学习目标。
总之,微调阶段的增强方法表现出几个特性。首先,对LLM和检索器进行微调可以更好地适应特定任务,提供了同时微调其中一个或两者的灵活性,如plug [Shi等人,2023]和RA-DIT[Lin等人,2023]等方法中所示。其次,正如UPRISE[Cheng等人,2023a]所证明的,这种微调的好处可以扩展到适应不同的下游任务,使模型更加通用。此外,微调使模型能够更好地适应各种语料库中的不同数据结构,特别是对图结构语料库来说,如SUGRE方法所强调的那样。
然而,这个阶段的微调有局限性,例如需要专门为RAG微调准备的数据集,以及与推理阶段的RAG相比需要大量的计算资源。总之,在微调过程中,研究人员可以灵活地根据特定需求和数据格式定制模型,与预训练阶段相比,减少了资源消耗,同时保留了调整模型输出风格的能力。
Inference Stage
RAG方法与LLM的结合已经成为推理阶段的一个流行研究方向。值得注意的是,Naive RAG的研究范式依赖于在推理阶段融入检索内容。
为了克服Naive RAG的局限性,研究人员在推理阶段在RAG中引入了更丰富的上下文。DSP[Khattab et al., 2022]框架依赖于一个复杂的管道,涉及在冻结的语言模型(LM)和检索模型(RM)之间传递自然语言文本,为模型提供更多信息的上下文以提高生成质量。PKG为llm配备了一个知识指导模块,允许在不改变llm参数的情况下访问相关知识,使模型能够执行更复杂的任务。此外,CREA-ICL[Li等人,2023b]利用跨语言知识的同步检索来帮助获取额外的信息,同时通过从llm中采样一个或多个段落来背诵表单上下文。
在推理阶段,优化RAG的过程可以帮助其适应更具挑战性的任务。例如,ITRG[Feng等人,2023a]通过迭代检索和搜索正确的推理路径,增强了对需要多步推理的任务的适应性。ITERRETGEN[Shao等人,2023]采用迭代方法来合并检索和生成,实现了“检索增强生成”和“生成增强检索”的交替过程。
另一方面,IRCOT[Trivedi et al., 2022]融合了RAG和CoT的概念[Wei et al., 2022],采用交替的CoT引导检索并使用检索结果来改进CoT。该方法显著提高了GPT-3在各种QA任务中的性能,突出了集成检索和生成的潜在优势。
综上所述,推理阶段的增强方法具有重量轻、成本低、不需要额外训练和利用强大的预训练模型的优点。其主要优势在于在微调过程中冻结llm的参数,专注于提供更适合需求的上下文,具有快速和低成本的特点。然而,这种方法也有一些局限性,包括需要额外的数据处理和过程优化,同时受到基础模型能力的限制。典型情况下,该方法往往与逐步推理、迭代推理、自适应检索等流程优化技术相结合,以更好地满足不同任务的需求。
6.3 Augmentation Process
大多数RAG研究通常只执行单一的检索和生成过程。然而,单一检索可能包含冗余信息,导致“中间丢失”现象[Liu等人,2023]。这些冗余信息可能掩盖关键信息或包含与真实答案相反的信息,对生成效果产生负面影响[Yoran等人,2023]。此外,从一次检索中获得的信息在需要多步推理的问题中是有限的。
目前对检索过程进行优化的方法主要包括迭代检索和自适应检索。这些允许模型在检索过程中多次迭代或自适应调整检索过程,以更好地适应不同的任务和场景。
Iterative Retrieval
根据原始查询和生成的文本定期收集文档可以为LLMs提供额外的材料[Borgeaud等人,2022,Arora等人,2023]。在多次迭代检索中提供额外的参考,提高了后续答案生成的鲁棒性。然而,这种方法可能在语义上不连续,并可能导致噪音和无用信息的收集,因为它主要依赖n个词项的序列来分离生成和检索的文档。
递归检索和多跳检索用于特定的数据场景。递归检索可以首先通过结构化索引处理数据,然后逐层检索。当检索层次结构丰富的文档时,可以为整个文档或长PDF中的每个部分制作摘要。然后根据摘要执行检索。确定文档后,对内部块进行二次检索,实现递归检索。多跳检索通常用于进一步挖掘图结构数据源中的信息[Li et al., 2023c]。
有些方法对检索和生成步骤进行迭代。ITER-RETGEN [Shao等人,2023]协同利用“检索增强生成”和“生成增强检索”来完成需要复制信息的任务。即模型使用完成任务所需的内容来响应输入任务,并将这些目标内容作为信息上下文来检索更多相关的知识。这有助于在另一个迭代中产生更好的响应。
IRCoT[Trivedi等人,2022]还探索了每个生成句子的检索文档,在思维链的每个步骤中引入检索。它利用词向量来指导检索,并利用检索结果来改进词向量,保证语义的完备性。
Adaptive Retrieval
事实上,前两节中描述的RAG方法遵循一种被动的方法,即优先检索。这种方法需要查询相关文档并根据上下文输入LLM,可能会导致效率问题。自适应检索方法,如Flare[Jiang et al., 2023b]和Self- RAG[Asai et al., 2023b]引入的方法,优化了RAG检索过程,使LLM能够主动判断检索的时间和内容。这有助于提高检索信息的效率和相关性。
事实上,LLM积极使用工具和做出判断的方式并不是源自RAG,而是被广泛应用于大型模型的代理中[Yang et al., 2023c, Schick et al., 2023, Zhang, 2023]。Graph-Toolformer[Zhang, 2023]的检索步骤大致分为:LLM积极使用检索器,Self-Ask和DSP[Khattab等人,2022]尝试使用少样本提示来触发LLM搜索查询。当llm认为有必要时,他们可以决定搜索一个相关的查询来收集必要的资料,类似于代理的工具调用。
WebGPT[Nakano等人,2021]采用强化学习框架自动训练GPT-3模型,使其使用搜索引擎生成文本。它使用特殊的标记来执行操作,包括搜索引擎查询、滚动排名和引用。这使得GPT-3可以利用搜索引擎来生成文本。
另一方面,Flare[Jiang等人,2023b]可以自动化检索的时间,并根据生成文本的概率解决定期文档检索的成本。在生成过程中,它使用概率作为llm置信度的指标。当一个词项出现的概率低于预定义的阈值时,信息检索系统将检索引用并删除概率较低的词项。这种方法旨在处理llm可能需要额外知识的情况。
Self-RAG[Asai等人,2023b]介绍了一种重要的创新,称为反射标记。生成这些特殊标记是为了查看输出,有两种类型:Retrieve和Critic。该模型可以自主地决定何时检索段落,或使用设定的阈值来触发检索。当需要检索时,生成器同时处理多个段落,进行片段级波束搜索以获得最佳序列。每个细分的分数使用Critic分数进行更新,并且这些权重可以在推理过程中进行调整,以自定义模型的行为。Self-RAG框架还允许LLM自主确定是否需要召回,避免训练额外的分类器或依赖NLI模型。这增强了模型自主判断输入并生成准确答案的能力。

七、RAG Evaluation

在探索RAG的开发和优化过程中,如何有效地评价RAG的性能已成为一个核心问题。本章主要讨论RAG的评价方法、关键指标、应具备的能力以及一些主流的评价框架。
7.1 Evaluation Methods
目前主要有两种评估RAG有效性的方法:独立评估和端到端评估[Liu, 2023]。
Independent Evaluation
独立评估包括对检索模块和生成(读取/合成)模块的评估
1. Retrieval Module
一套衡量系统(如搜索引擎、推荐系统或信息检索系统)根据查询或任务对项目进行排序的有效性的指标通常用于评估RAG检索模块的性能。示例包括命中率、MRR、NDCG、精度等。
2. Generation Module
这里的生成模块指的是通过将检索到的文档补充到查询中而形成的增强或合成输入,这与最终的答案/响应生成不同,后者通常是端到端评估的。生成模块的评价指标主要关注上下文相关性,衡量检索文档与查询问题的相关性。
End-to-End Evaluation
端到端评估评估RAG模型为给定输入生成的最终响应,涉及模型生成的答案与输入查询的相关性和对齐。从内容生成目标的角度来看,评价可分为无标签内容和有标签内容。无标签内容评估指标包括答案保真度、答案相关性、无害性等,有标签内容评估指标包括准确率、EM等。此外,从评估方法的角度,端到端评估可以分为人工评估和使用llm的自动评估。以上总结了RAG端到端评估的一般情况。此外,基于RAG在特定领域的应用,采用了特定的评估指标,如问答任务的EM [Borgeaud等人,2022,Izacard等人,2022],摘要任务的UniEval和E-F1 [Jiang等人,2023b],机器翻译的BLEU [Zhong等人,2022]。这些指标有助于理解RAG在不同应用场景下的性能。
7.2 Key Metrics and Abilities
现有的研究往往缺乏对检索增强生成对不同llm的影响的严格评估。在大多数情况下,RAG在各种下游任务中的应用评估和不同的寻回器可能会产生不同的结果。然而,一些学术和工程实践侧重于RAG的通用评价指标和有效使用所需的能力。本节主要介绍评估RAG效能的关键指标和评估其性能的基本能力。
Key Metrics
最近的OpenAI报告[Jarvis and Allard, 2023]提到了各种优化大型语言模型(llm)的技术,包括RAG及其评估指标。此外,最新的评估框架如RAGAS[Es et al., 2023]和ARES[Saad-Falcon et al., 2023]也涉及RAG评估指标。总结这些工作,三个核心指标主要关注:答案的忠实度、答案的相关性和上下文相关性。
1. Faithfulness
该指标强调模型生成的答案必须保持对给定上下文的真实,确保答案与上下文信息一致,不会偏离或抵触它。这方面的评估对于解决大型模型中的错觉至关重要。
2. Answer Relevance
这个指标强调生成的答案需要与提出的问题直接相关。
3. Context Relevance
这个指标要求检索到的上下文信息尽可能准确和有针对性,避免不相关的内容。毕竟,对llm来说,处理长文本的成本很高,太多的无关信息会降低llm利用上下文的效率。OpenAI报告还提到了“上下文回忆”作为补充指标,衡量模型检索回答问题所需的所有相关信息的能力。该指标反映了RAG检索模块的搜索优化水平。低召回率表明有对搜索功能优化的潜在需求,如引入重排序机制或微调嵌入,以确保更相关的内容检索。
Key abilities
RGB的工作[Chen等人,2023b]从RAG所需的四种基本能力方面分析了不同大型语言模型的性能,包括噪声鲁棒性、负面拒绝、信息集成和反事实鲁棒性,为检索增强生成建立了一个基准。RGB侧重于以下四种能力:
1. Noise Robustness
这种能力衡量了模型处理噪声文档的效率,噪声文档是指与问题相关但不包含有用信息的文档。
2. Negative Rejection
当模型检索到的文档缺乏回答问题所需的知识时,模型应该正确地拒绝响应。在否定拒绝的测试设置中,外部文档只包含噪声。理想情况下,LLM应该发出“缺乏信息”或类似的拒绝信号。
3. Information Integration
这种能力可以评估模型是否可以集成来自多个文档的信息来回答更复杂的问题。
4. Counterfactual Robustness
该测试旨在评估模型在接收到关于检索信息潜在风险的指示时,是否能够识别和处理文档中已知的错误信息。反事实鲁棒性测试包括LLM可以直接回答的问题,但相关的外部文档包含事实性错误。
7.3 Evaluation Frameworks
最近,LLM社区一直在探索使用“LLM作为判断器”进行自动评估,许多人使用强大的LLM(如GPT-4)来评估他们自己的LLM应用程序输出。Databricks使用GPT-3.5和GPT-4作为LLM评委来评估他们的聊天机器人应用程序的实践表明,使用LLM作为自动评估工具是有效的[Leng等人,2023]。他们认为这种方法也可以高效和经济地评估基于rag的应用程序。
在RAG评价框架领域,RAGAS和ARES是比较新的评价框架。这些评估的核心焦点是三个主要指标:答案的忠实度、答案的相关性和上下文相关性。此外,业界提出的truens开源库也提供了类似的评估模式。这些框架都使用llm作为评估的评委。由于truens类似于RAGAS,本章将专门介绍RAGAS和ARES。
RAGAS
这个框架考虑了检索系统识别相关和关键上下文段落的能力,法学硕士忠实地使用这些段落的能力,以及生成本身的质量。RAGAS是一个基于简单手写提示的评估框架,使用这些提示以完全自动化的方式衡量质量的三个方面——答案忠实度、答案相关性和上下文相关性。在该框架的实现和实验中,使用gpt-3.5-turbo-16k模型对所有提示进行了评估,该模型可通过OpenAI API提供[Es等人,2023]。
Algorithm Principles
评估答案的忠实度:使用LLM将答案分解为单个陈述,并验证每个陈述是否与上下文一致。最后,通过比较受支持语句的数量与语句总数来计算“忠实度得分”。
评估答案相关性:使用LLM生成潜在的问题,并计算这些问题与原始问题之间的相似度。通过计算生成的所有问题与原始问题的平均相似度得到答案相关性得分。
评估上下文相关性:使用LLM提取与问题直接相关的句子,并使用这些句子与上下文中句子总数的比率作为上下文相关性得分。
ARES
ARES旨在从3个方面对RAG系统的性能进行自动评估:上下文相关性、答案忠实度和答案相关性。这些评估指标与RAGAS中的类似。然而,RAGAS作为一种较新的基于简单手写提示的RAG评估框架,对新的RAG评估设置的适应性有限,这也是ARES工作的重要意义之一。此外,评估表明,ARES的性能明显低于RAGAS。
ARES通过使用少量人工标注的数据和合成数据降低了评估成本,并利用预测驱动推理(prediction - driven Reasoning, PDR)提供统计置信区间,提高了评估的准确性[Saad-Falcon et al., 2023]。
Algorithm Principles
1、生成合成数据集:ARES最初使用语言模型从目标语料库中的文档中生成合成问题和答案,以创建正样本和负样本。
2、准备LLM评委:接下来,ARES使用合成数据集对轻量级语言模型进行微调,以训练它们评估上下文相关性、答案忠实度和答案相关性。
3、使用置信区间对RAG系统进行排名:最后,ARES应用这些评判模型对RAG系统进行评分,并将其与人工标注的验证集结合起来,使用PPI方法生成置信区间,从而可靠地估计RAG系统的性能。

八、Future Prospects

在本章中,我们深入探讨了三个未来的前景RAG,即RAG的纵向优化、横向扩展和生态系统。
8.1 Vertical Optimization of RAG
尽管在过去的一年中,RAG技术取得了快速的进步,但在其垂直领域仍有几个领域需要进一步研究。
首先,在RAG中,长上下文问题是一个重大挑战。如文献[Xu et al., 2023c]所述,
RAG的生成阶段受到llm上下文窗口的约束。如果窗口太短,可能没有包含足够的相关信息;如果太长,可能会导致信息丢失。当前,扩大法学硕士的语境窗口,甚至达到无限语境的程度,是法学硕士发展的一个重要方向。然而,一旦上下文窗口约束被删除,RAG应该如何适应仍然是一个值得注意的问题。
其次,RAG的鲁棒性是另一个重要的研究热点。如果在检索过程中出现不相关的噪声,或者检索的内容与事实相矛盾,会显著影响RAG的有效性。这种情况被形象地称为“打开一本书看毒蘑菇”。因此,提高RAG的鲁棒性越来越受到研究人员的关注,如[Yu等人,2023a, Glass等人,2021,Baek等人,2023]。
第三,RAG和Fine-tuning的协同作用问题也是一个主要的研究点。Hybrid已经逐渐成为RAG中的主流方法之一,RADIT就是一个例子[Lin et al., 2023]。如何协调两者之间的关系以同时获得参数化和非参数化的优势是一个需要解决的问题。
最后,RAG的工程实践是一个值得关注的领域。RAG的兴起得益于其易于实现和符合企业工程需求的特点。然而,在工程实践中,如何提高大规模知识库场景下的检索效率和文档召回率,以及如何确保企业数据安全,如防止llm被诱导泄露文档的来源、元数据或其他信息,都是需要解决的关键问题[Alon et al., 2022]。
Horizontal expansion of RAG
RAG的研究在水平领域迅速扩展。从最初的文本问答领域开始,RAG的思想逐渐被应用到更多的模态数据,如图像、代码、结构化知识、音频和视频等。这方面的工作已经有很多了。
在图像领域,使用冻结图像编码器和大规模语言模型进行视觉语言预训练的BLIP- 2[Li et al., 2023a]的提出降低了模型训练成本。此外,该模型可以从零样本中生成图像到文本的转换。在文本生成领域,使用VBR[Zhu et al., 2022]方法生成图像来指导语言模型的文本生成,在开放文本生成任务中具有显著效果。
在代码领域,RBPS[Nashid等人,2023]用于与代码相关的小规模学习。通过编码或频率分析,可以自动检索与开发人员任务相似的代码示例。该技术已在测试断言生成和程序修复任务中得到验证。在结构化知识领域,像CoK[Li et al., 2023c] hints这样的方法首先从知识图谱中检索与输入问题相关的事实,然后以提示的形式将这些事实添加到输入中。该方法在知识图谱问答任务中取得了较好的效果。
对于音频和视频领域,GSS[Zhao et al., 2022]方法从口语词汇库中检索并连接音频片段,立即将MT数据转换为ST数据。UEOP[Chan等人,2023]通过引入语音到文本映射的外部离线策略,在端到端自动语音识别中引入了新的突破。文本到语音方法生成的音频嵌入和语义文本嵌入通过基于knn的注意力融合可以使ASR产生偏差,有效缩短域适应时间。Vid2Seq[Yang等人,2023a]架构通过引入特殊的时间标记来增强语言模型,使其能够在相同的输出序列中无缝预测事件边界和文本描述。
8.2 Ecosystem of RAG
Downstream Tasks and Evaluation
RAG通过集成来自广泛知识库的相关信息,在增强语言模型处理复杂查询和生成信息丰富响应的能力方面显示出巨大潜力。大量研究表明RAG在各种下游任务中表现良好,如开放式问答和事实验证。RAG模型不仅提高了下游应用中信息的准确性和相关性,而且增加了响应的多样性和深度。
鉴于RAG的成功,探索模型在多领域应用中的适应性和通用性将是未来工作的一部分。这包括它在专业领域知识问答中的应用,如医学、法律和教育。在专业领域知识问答等下游任务的应用中,RAG可能比fine-tuning提供更低的训练成本和更好的性能收益。
同时,完善RAG的评价体系,对其在不同下游任务中的应用进行评估和优化,对模型在特定任务中的效率和效益至关重要。这包括为不同的下游任务开发更准确的评估指标和框架,如上下文相关性、内容创造力和无害性等。
此外,通过RAG增强模型的可解释性,让用户更好地理解模型如何以及为什么做出特定的响应,也是一项有意义的任务。
Technical Stack
在RAG生态系统中,相关技术栈的开发起到了推动作用。例如,随着ChatGPT的流行,LangChain和LLamaIndex迅速广为人知。它们都提供了一套丰富的与rag相关的api,逐渐成为大模型时代不可或缺的技术之一。与此同时,新型技术栈也在不断发展。虽然它们没有提供像LangChain和LLamaIndex那样多的功能,但它们更专注于自己独特的特性。例如,Flowise AI6强调低代码,允许用户实现以RAG为代表的各种AI应用,而不需要编写代码,只需要拖放。
除了ai原生框架,传统软件或云服务提供商也扩展了他们的服务范围。例如,矢量数据库公司Weaviate提供的Verba7专注于个人助理。亚马逊为其用户提供了基于RAG思维的智能企业搜索服务工具Kendra。用户可以通过内置连接器在不同的内容存储库中进行搜索。
技术栈和RAG的发展是相辅相成的。新技术对现有技术栈提出了更高的要求,而技术栈功能的优化又进一步推动了RAG技术的发展。总体而言,RAG工具链的技术栈已经初步形成,很多企业级应用也逐渐出现,但一体化平台还有待完善。

总结

本文深入探讨了检索增强生成(RAG),一种使用外部知识库来补充大型语言模型(LLMs)上下文并生成响应的技术。RAG将LLMs中的参数化知识和非参数化外部知识相结合,缓解了幻觉问题,通过检索技术及时识别信息,并提高了响应精度。此外,RAG通过引用数据源,增加了模型输出的透明度和用户信任度。RAG也可以通过索引相关的文本语料库来实现基于特定领域的定制。将RAG的发展和特点归纳为三种范式:Naive RAG、Advanced RAG和Modular RAG,并分析各自的模式、方法和不足。朴素的RAG主要涉及“检索-阅读”过程。高级RAG使用更精细的数据处理,优化知识库索引,并引入多次或迭代检索。随着探索的深入,RAG集成了微调等其他技术,出现了模块化的RAG范式,它用新的模块丰富了RAG过程,并提供了更多的灵活性。
在后续章节中,我们将进一步详细分析RAG的三个关键部分。第4章介绍RAG的检索器,如何处理语料库以获得更好的语义表示,如何缩小查询与文档之间的语义鸿沟,以及如何调整检索器以适应生成器。第5章解释了生成器如何通过对检索文档进行后处理来获得更好的生成结果,避免“中间丢失”问题,以及调整生成器以适应检索器的方法。随后,在第6章中,我们从检索阶段、检索数据源和检索过程三个方面对当前的检索增强方法进行了综述。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐