Bootstrap

LLM之RAG理论(二)| RAG综述论文详解

论文地址:https://arxiv.org/pdf/2312.10997.pdf

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

一、介绍

      大型语言模型(LLMs)在自然语言处理(NLP)领域的表现超越了之前任何模型。GPT系列模型、LLama系列模型、Gemini以及其他大型语言模型在多个评估基准上展现了卓越的语言和知识掌握能力,超越了人类水平。

      然而,大型语言模型也显示出许多缺点。它们常常制造虚假事实,在处理特定领域或高度专业化的查询时缺乏知识。例如,当所需信息超出模型训练数据的范围或需要最新数据时,LLM可能无法提供准确的答案。这一限制在将生成型人工智能部署到现实世界的生产环境中构成挑战,因为盲目使用黑盒LLM可能不够。

       传统上,神经网络通过微调模型以参数化知识来适应特定领域或专有信息。虽然这种技术取得了显著成果,但它需要大量的计算资源,成本高昂,并需要专业知识,使其适应性较差。参数化知识和非参数化知识发挥着不同的作用。参数化知识通过训练LLMs获得,并存储在神经网络权重中,代表了模型对训练数据的理解和概括,构成生成回应的基础。另一方面,非参数化知识存在于外部知识源中,如向量数据库,不直接编码到模型中,而是作为可更新的补充信息。非参数化知识使LLMs能够访问和利用最新或特定领域的信息,提高回应的准确性和相关性。

       纯参数化的语言模型(LLMs)将从大量语料库中获得的世界知识存储在模型的参数中。然而,这类模型存在局限性。首先,难以保留训练语料中的所有知识,尤其是较不常见和更具体的知识。其次,由于模型参数无法动态更新,参数化知识随时间容易过时。最后,参数的扩展导致训练和推理的计算开销增加。为了解决纯参数化模型的限制,语言模型可以采用半参数化方法,通过将非参数化语料库数据库与参数化模型整合。这种方法被称为检索增强生成(RAG)。

       检索增强生成(RAG)这一术语最初由[Lewis et al., 2020]引入。它结合了预训练的检索器和预训练的seq2seq模型(生成器),并进行端到端微调,以更可解释和模块化的方式捕获知识。在大型模型出现之前,RAG主要专注于端到端模型的直接优化。检索方面常见的做法是密集检索,如使用基于向量的密集通道检索(DPR),以及在生成方面训练较小的模型。由于整体参数规模较小,检索器和生成器通常会进行同步的端到端训练或微调。

       自ChatGPT等LLM出现后,生成式语言模型成为主流,在各种语言任务中展现出令人印象深刻的性能。然而,LLMs仍面临幻觉、知识更新和数据相关问题。这影响了LLMs的可靠性,在某些严肃任务场景中,尤其是需要访问大量知识的知识密集型任务中,LLMs表现不佳,如开放领域问答和常识推理。参数内的隐含知识可能不完整且不足。

       后续研究发现,将RAG引入大型模型的上下文学习(ICL)中可以缓解上述问题,具有显著且易于实现的效果。在推理过程中,RAG动态地从外部知识源检索信息,使用检索到的数据作为参考来组织答案。这显著提高了回应的准确性和相关性,有效解决了LLMs中存在的幻觉问题。这种技术在LLM问世后迅速受到关注,已成为改善聊天机器人和使LLM更实用的最热门技术之一。通过将事实知识与LLMs的训练参数分离,RAG巧妙地结合了生成模型的强大能力和检索模块的灵活性,为纯参数化模型固有的知识不完整和不足问题提供了有效的解决方案。

      本文系统地回顾和分析了RAG的当前研究方法和未来发展路径,将其归纳为三个主要范式:Naive RAG、Advanced RAG和Modular RAG。随后,论文提供了三个核心组成部分的综合总结:检索、增强和生成,突出了RAG的改进方向和当前技术特点。在增强方法部分,当前的工作被大致为三个方面:RAG的增强阶段增强数据源增强过程。此外,论文总结了评估系统、适用场景和与RAG相关的其他内容。通过本文,读者将对大型模型和检索增强生成有更全面和系统的了解。他们将熟悉知识检索增强的演变路径和关键技术,能够辨别不同技术的优缺点,识别适用场景,并探索当前实际应用中的典型案例。值得注意的是,在以前的工作中,Feng et al.[2023b]系统回顾了将大型模型与知识结合的方法、应用和未来趋势,主要关注知识编辑和检索增强方法。Zhu et al.[2023]介绍了大型语言模型检索系统增强的最新进展,特别关注检索系统。同时,Asai et al.[2023a]专注于“什么”、“何时”、“如何”的问题,分析并阐释了基于检索的语言模型的关键过程。与之相比,本文旨在系统地概述检索增强生成(RAG)的整个过程,并特别关注通过知识检索增强大型语言模型生成的研究。

      RAG算法和模型的发展在图1中进行了说明。在时间线上,大部分与RAG相关的研究都是在2020年之后出现的,2022年12月ChatGPT发布成为一个重要的转折点。自ChatGPT发布以来,自然语言处理领域的研究进入了大模型时代。Naive RAG技术迅速获得重视,导致相关研究数量的快速增加。在增强策略方面,自RAG概念提出以来,就一直在进行预训练和监督微调阶段的强化研究。然而,在推理阶段的强化研究大多出现在LLMs时代。这主要是由于高性能大模型的高训练成本。研究人员试图通过在推理阶段包含RAG模块,以成本有效的方式将外部知识融入模型生成中。关于增强数据的使用,早期的RAG主要关注于非结构化数据的应用,特别是在开放域问答的背景下。随后,检索的知识来源范围扩展,使用高质量数据作为知识来源有效地解决了大模型中错误知识内化和幻觉等问题。这包括结构化知识,知识图谱是一个代表性的例子。最近,自我检索引起了更多的关注,这涉及到挖掘LLMs本身的知识以增强它们的性能。

        本论文的后续章节结构如下:第二章介绍RAG的背景。第三章介绍RAG的主流范式。第四章分析RAG中的检索器。第五章着重介绍RAG中的生成器。第六章强调介绍RAG中的增强方法。第七章介绍RAG的评估系统。第八章提供了对RAG未来发展趋势的展望。最后,在第九章中,总结了本综述的主要内容。

二、背景

       在本章中,我们将介绍RAG的定义,如以及RAG与诸如微调之类的其他模型优化技术之间的比较。

2.1 定义

       RAG的含义随着技术的发展而扩展。在大语言模型时代,RAG的具体定义是指模型,当回答问题或生成文本,首先从大量文档中检索相关信息。随后,它利用这些检索到的信息来生成响应或文本,从而提高预测的质量。RAG方法允许开发人员避免对为每个特定任务重新训练整个大型模型。相反,他们可以附加一个知识库,提供额外的向模型输入信息并提高准确性其回应。RAG方法特别适合用于知识密集型任务。总之,RAG系统由两个关键阶段组成:

  1. 利用编码模型基于问题检索相关文档,如BM25、DPR、ColBERT和类似方法;

  2. 生成阶段:使用检索到的上下文作为条件,系统生成文本。

2.2 RAG与微调

       在大型语言模型(LLM)的优化中除了RAG,另一种重要的优化技术正在进行微调。

       RAG类似于为模型提供教科书,允许它基于特定查询检索信息。这该方法适用于模型需要回答特定的询问或解决特定的信息检索任务。然而,RAG不适合教模型来理解广泛的领域或学习新的语言,格式或样式。

       微调类似于让学生通过广泛的学习内化知识。这种方法当模型需要复制特定的结构、样式或格式时非常有用。微调可以提高非微调模型的性能,并使交互更加频繁有效率的它特别适合强调基础模型中的现有知识,修改或自定义模型的输出,并向提供复杂的指令模型然而,微调不适合合并模型中的新知识或需要的情况新用例的快速迭代。

       微调类似于让学生通过长期学习内化知识。此方法适用当模型需要复制特定的结构、样式等时,或格式。微调可以实现优于的性能非微调模型和交互更有效。微调特别适合强调现有基本模型中的知识,修改或自定义模型的输出,并用复杂的指令指示模型。但是,微调不适合添加新的为模型或需要快速迭代新用例的场景提供知识。RAG和微调(FT)的比较可参考如下表1。

       RAG和微调并不互斥,但可以相互补充,可以在不同level增强模型。在某些情况下,将这两者结合起来技术可以实现最佳的模型性能。使用RAG进行优化和微调的整个过程可能需要多次迭代才能获得令人满意的结果。现有研究已经证明了检索增强生成(RAG)的显著优势与其他优化大型语言模型的方法相比:

  • RAG通过将答案与外部知识联系起来,减少语言模型中的幻觉问题,并使生成的回答更加准确可靠,从而提高准确性;
  • 使用检索技术可以识别最新信息。与仅依赖于训练数据的传统语言模型相比,RAG保持回复的及时性和准确性;
  • 透明度是RAG的一个优势。通过引用用户可以验证答案的准确性,增加了对模型输出的信任;
  • RAG具有定制功能。通过对相关文本进行索引,可以针对不同领域定制模型语料库,为特定领域提供知识支持;
  • 在安全和隐私管理方面,RAG,中的内置角色和安全控件数据库,可以更好地控制数据的使用。相比之下,微调后的模型可能缺乏对谁可以的明确管理访问哪些数据;
  • RAG更具可扩展性。它可以处理大规模数据集无需更新所有参数并创建训练套件,使其更经济高效;
  • 最后,RAG得出的结果更值得信赖。RAG从最新数据中选择确定性结果,而微调后的模型可能会出现幻觉和处理动态数据时不准确,缺乏透明度和可信度

三、RAG框架

       RAG的研究范式在不断演变。本章主要介绍了RAG研究范式的演变,我们将其分为三种类型:Naive RAGAdvanced RAGModular RAG。尽管早期RAG具有成本优势,比原生LLM更好;它仍然面临许多不足。Advanced RAGModular RAG的出现旨在解决Naive RAG的具体缺陷。

3.1 Naive RAG

       Naive RAG研究范式代表了最早的方法论在广泛使用后不久就变得突出采用ChatGPT。Naive RAG的经典过程是:索引检索生成。Naive RAG概括为“检索”-“读取”框架。

索引

      从源获取数据并为其建立索引的管道通常是离线处理的。具体来说,数据索引的构建包括以下步骤:

  1. 数据索引:清洗和提取原始数据、转换诸如PDF、HTML、Word、Markdown等不同文件格式转换为纯文本;

  2. 分块:将加载的文本分为较小的块。因为语言模型通常有上下文长度有限制,因此有必要创建尽可能小的文本块(不是越小越好);

  3. 嵌入和创建索引:通过语言模型将文本编码为向量。得到的向量将用于后续的检索过程,以计算向量和问题向量之间的相似性。嵌入模型需要很高的推理速度。由于需要对大量的语料库进行编码,并在用户提问时实时对问题进行编码,因此模型的参数大小不应太大。生成嵌入后,下一步是创建索引,存储原始语料库块,并以键值对的形式进行嵌入,以便在未来快速频繁地搜索。

检索

       给定用户的输入,使用与第一个stage相同的模型把query转换为向量。然后计算query嵌入和语料库中的文档块嵌入的相似度。选择前K个相似度最高的文档块作为增强上下文信息。

生成

      把给定的问题和相关文档合并为新的Prompt提示。然后,大型语言模型基于所提供的信息来回答所述问题。它会判断是基于大型模型知识还是仅基于给定信息进行回答,取决于不同任务的需要。如果有对话历史信息,也可以合并到Prompt中进行多轮对话。

Naive RAG的缺点

       Naive RAG在三个领域面临主要挑战:检索质量响应生成质量增强过程

      关于检索质量,问题是多方面的。主要问题是精度低,检索集中并非所有块都与查询相关,这会导致潜在的幻觉问题。第二个问题是低召回率,当所有相关块没有全部被召回时,LLM就没有获得足够的上下文来合成答案。此外,过时的信息带来了另一个挑战,即数据冗余或过时的数据可能导致不准确的检索结果。

       就生成响应的质量而言,问题同样是多样化的。幻觉是一个突出的问题,模型编造了一个上下文中不存在的答案。另一个问题是召回的信息可能是不相关的,导致模型生成的答案无法解决查询问题。此外,毒性或偏见,即模型产生有害或冒犯性反应,是另一个问题。

       最后,增强过程也面临一些挑战。根据当前生成任务,从相关段落检索文档是至关重要的。如果处理不当,输出可能会显得不连贯或不连贯。冗余和重复是另一个问题,特别是当多个检索到的段落包含相似的信息,导致生成步骤中的内容重复时。此外,确定多个检索到的段落对生成任务的重要性或相关性具有挑战性,并且扩充过程需要平衡每个段落的值适当。检索到的内容也可能来自不同的写作风格或语调,增强过程需要调和这些差异以确保输出的一致性。最后,生成模型可能过度依赖增强信息,导致输出仅重复检索到的内容,而不提供新的价值或合成信息。

3.2 Advanced RAG

       Advanced RAG针对Naive RAG的不足进行了有针对性的改进。在检索生成的质量方面,Advanced RAG结合了检索前和检索后的方法。为了解决Naive RAG遇到的索引问题,Advanced RAG通过滑动窗口、细粒度分割和元数据等方法优化了索引。与此同时,它已经提出了优化检索过程的各种方法。在具体实现方面,Advanced RAG可以通过管道或端到端的方式进行调整。

3.2.1 预检索过程

  • 优化数据索引

       优化数据索引的目的是提高索引内容的质量。目前,有五种主要策略用于此目的:增加索引数据的粒度优化索引结构添加元数据对齐优化混合检索

  1. 增强数据粒度:预索引优化的目标是为了提高文本的标准化、一致性,并确保事实的准确性以及上下文丰富性,以保证RAG系统的性能。文本标准化包括去除不相关的信息和特殊字符,以提高检索器的效率。就一致性而言,主要任务是消除实体和术语中的歧义,同时消除重复或冗余信息,以简化检索者的工作重点。确保事实的准确性至关重要,只要可能,就应核实每一条数据的准确性。上下文保留,以适应系统在现实世界中的交互上下文,可以通过添加另一层具有领域特定注释的上下文,再加上通过用户反馈循环的持续更新来实现。时间敏感性是重要的上下文信息,应设计机制来刷新过时的文档。总之,优化索引数据的重点应该放在清晰度、上下文和正确性上,以使系统高效可靠。以下介绍了最佳实践。

  2. 优化索引结构:可以是通过调整块的大小、改变索引路径和合并图结构信息来实现。调整区块(从小到大)的方法包括收集尽可能多的相关信息上下文尽可能地减少噪声。在构建RAG系统时,块大小是一个关键参数。有不同的评估框架来比较单个块的大小。LlamaIndex使用GPT4来评估保真度和相关性,LlamaIndex对不同的分块方法有自动化评估方法。跨多个索引路径查询的方法与以前的元数据过滤和分块方法密切相关,并且可能涉及同时跨不同索引进行查询。标准索引可用于查询特定查询,或者独立索引可用于基于元数据关键字进行搜索或筛选,例如作为特定的“日期”索引。

           引入图结构将实体转换为图节点,将它们的关系转换为图关系。这可以通过利用节点之间的关系来提高准确性,尤其是对于多跳问题。使用图形数据索引可以增加检索的相关性。

  3. 添加元数据信息:这里的重点是将引用的元数据嵌入到块中,例如用于筛选的日期和目的。添加参考文献的章节和小节等元数据也有利于改进检索。当我们将索引划分为多个块时,检索效率就成了一个问题。首先过滤元数据可以提高效率和相关性。

  4. 对齐优化:这一策略主要是解决对齐问题和之间的差异文件。对齐概念包括引入假设问题,创建适合每个文档回答的问题,并将这些问题嵌入(或替换)为文件。这有助于解决文档之间的对齐问题和差异。

  5. 混合检索:这种策略的优势在于利用了不同检索技术的优势。智能地结合各种技术,包括基于关键字的搜索、语义搜索和矢量搜索可以适应不同的查询类型和信息需求,确保对最相关和上下文丰富的信息的一致检索。混合检索可以作为检索策略的有力补充,增强RAG管道的整体性能。

3.2.2 嵌入

  • 微调嵌入:

       微调嵌入模型直接影响RAG的有效性。微调的目的是增强检索到的内容和查询之间的相关性。微调嵌入的作用类似于在生成语音之前调整耳朵,优化检索内容对生成输出的影响。通常,用于微调嵌入的方法属于在特定领域上下文中调整嵌入和优化检索步骤的类别。特别是在处理进化术语或稀有术语的专业领域,这些定制的嵌入方法可以提高检索相关性。BGE嵌入模型是一种精细调谐和高性能嵌入模型,如BAAI 3开发的BGE-large-EN。为了创建用于微调BGE模型的训练数据,首先使用像gpt-3.5-turbo这样的LLM来基于文档块来制定问题,其中问题和答案(文档块)形成用于微调过程的微调对。

  • 动态嵌入:

       动态嵌入根据单词出现的上下文进行调整,不同于为每个单词使用单个向量的静态嵌入。例如在BERT这样的transformer模型中,根据周围的单词,同一个单词可以具有不同的嵌入。理想情况下,嵌入应该包含尽可能多的背景以确保“健康”的结果。基于GPT等大型语言模型的原理,OpenAI的embeddings-ada-02比静态嵌入模型更复杂,可以捕获一定程度的上下文。虽然它擅长上下文理解,但它对上下文的敏感性可能不如GPT4等最新的全尺寸语言模型。

3.2.3 后期检索过程

      在从数据库中检索到有价值的上下文后,将其与查询合并以输入LLM会带来挑战。同时向LLM提交所有相关文件可能超过上下文窗口限制。连接众多形成冗长检索提示的文档是无效的,引入噪声并阻碍LLM对关键问题的关注信息检索到的内容的附加处理是解决这些问题所必需的。

  • 重新排序:重新排序将最相关的信息重新定位到提示的边缘是一个简单的想法。这一概念已在LlamaIndex、LangChain和HayStack等框架中实现。例如,Diversity Ranker根据文档多样性优先排序,而LostThereMiddleRanker交替将最佳文档放置在上下文窗口的开头和结尾。同时,应对口译的挑战基于向量的对语义相似性的模拟搜索,像cohereAI rerank,bgererank5这样的方法,或LongLLM语言重新计算相关文本和查询;
  • Prompt压缩:研究表明噪声在检索到的文档中,会对RAG性能产生不利影响。在后处理中,重点在于压缩不相关的上下文,突出关键段落,减少整体上下文长度。选择性语境和LLMLingua等方法利用小语言模型来计算即时相互信息或困惑,估计元素重要性。然而,这些方法可能会在RAG或长上下文场景中丢失关键信息。Recomp通过训练不同粒度的压缩器来解决这一问题。长上下文在处理广泛的上下文时,进行分解和压缩,而“行走在记忆迷宫中”则设计了一个分层摘要树来增强LLM的关键信息感知。

3.2.4 RAG管道优化

       检索过程的优化旨在增强RAG系统的效率和信息质量,Current研究主要集中在智能地将各种搜索技术,优化检索步骤,介绍认知回溯的概念,灵活应用各种查询策略,并利用嵌入相似性。这些努力共同努力在RAG中上下文信息的高效性和丰富性检索

  • 探索混合搜索:通过智能混合各种技术,如基于关键字的搜索、语义搜索和矢量搜索,RAG系统可以利用每种方法的优势。这种方法使RAG系统能够适应不同的查询类型和信息需求,确保一致检索最相关和上下文丰富的信息。混合搜索是对检索策略的有力补充,增强了RAG管道的整体性能;
  • 递归检索和查询引擎:在RAG系统中优化检索的另一种强大方法涉及实现递归检索和复杂的查询引擎。递归检索需要在初始检索过程中获取较小的文档块阶段捕获关键语义。在后面在这个过程的各个阶段,向语言模型提供具有更多上下文信息的较大块(LM)。这种两步检索方法有助于在效率和上下文丰富的响应之间取得平衡;
  • 后退提示:集成到RAG过程中,逐步后退的快速方法[Zheng et al.,2023]鼓励LLM从特定的实例中后退对基本概念或原则进行推理。实验结果表明,通过结合向后提示,展示其自然适应性至RAG。检索增强步骤可以应用于生成向后提示的答案,以及最后的问答过程;
  • 子查询:可以在中使用各种查询策略不同的场景,包括使用LlamaIndex等框架提供的查询引擎,使用树查询,使用矢量查询,或使用最多块的基本顺序查询;
  • HyDE:此方法基于以下假设生成的答案在嵌入空间中可能比直接查询更接近。利用LLM、HyDE生成一个假设文档(答案)作为响应到查询,嵌入文档,并使用这种嵌入来检索类似于假设文档的真实文档。与寻求嵌入相似性相反该方法以查询为基础,强调从答案到答案的嵌入相似性。然而,它可能不总是产生有利的结果,特别是在语言模型不熟悉的实例讨论的主题,可能导致生成易于出错的实例。

3.2.5 模块化RAG

       模块化RAG结构打破了传统索引、检索和生成的Naive RAG框架,在整个过程中提供更大的多样性和灵活性。一方面,它集成了各种方法扩展功能模块,例如合并搜索相似性检索模块,并在检索器中应用微调方法。此外,具体问题导致了重组的出现RAG模块和迭代方法。模块化RAG范式正在成为RAG领域的主流,允许串行管道或端到端训练方法跨多个模块。三种RAG的比较范例如图3所示。

新模块

  • 搜索模块:与Naive/Advanced中查询和语料库之间的相似性检索不同RAG是一个搜索模块,针对特定场景进行定制,包含了对(附加)的直接搜索语料库在使用LLM生成代码的过程中,查询语言(例如SQL、Cypher)或其他自定义工具。用于搜索的数据源可以包括搜索引擎、文本数据、表格数据或知识图表;
  • 内存模块:利用LLM本身的内存能力来指导检索,其原理包括找到与当前输入最相似的内存。Self-mem反复使用用于创建无界的检索增强生成器内存池,结合“原始问题”和“双重问题。”一个检索增强生成模型可以使用自己的输出来增强自己,使文本更接近推理过程中的数据分布,使用模型自己的输出而不是训练数据;
  • 额外生成模块:在检索的内容中,冗余和噪声是常见问题。额外生成模块不直接从数据源检索,而是利用LLM生成所需的上下文。LLM生成的内容是与相比,更可能包含相关信息直接检索;
  • 任务适应性模块:专注于转换RAG以适应各种下游任务,UPRISE自动检索给定零样本任务的提示来自预先构建的数据池的输入,增强了任务和模型之间的通用性。促进剂利用LLM作为少数镜头查询生成器,并基于生成的数据创建特定于任务的检索器。利用LLM、PROMPTAGATOR的泛化能力使得能够创建特定任务的端到端只有几个例子;
  • 对齐模块:查询之间的对齐文本一直是影响RAG有效性的关键问题。模块化时代RAG,研究人员发现,在寻回器中添加可训练的适配器模块可以有效缓解对齐问题。PRCA利用强化学习来训练上下文适配器由LLM奖励驱动,位于寻回器和生成器之间。它通过最大化强化中的奖励来优化检索到的信息标记的自回归策略中的学习阶段。AAR提出了一种通用插件,可以从已知来源学习LM偏好LLM以协助未知或非协同微调的LLM。RRR设计了一个用于重写的模块基于强化学习的查询对齐查询语料库中的文档;
  • 验证模块:在现实世界中,并不总是保证检索到的信息是可靠的。检索不相关的数据可能会导致LLM中出现幻觉。因此,可以在检索文档之后引入额外的验证模块,以评估检索到的文档与查询之间的相关性。这增强了的稳健性RAG。

新模式

       Modular RAG的组织方法是灵活的,允许模块的替换或重新配置在基于特定问题上下文的RAG过程中。对于Naive RAG,它由两个模块组成检索和生成(在中称为读取或合成一些文献),该框架提供了适应性和丰富性。目前的研究主要探讨两个组织涉及模块的添加或替换的范例,以及之间组织流程的调整模块。

  • 添加或更换模块

       添加或替换模块的策略需要维护Retrieval Read的结构,同时引入额外的模块来增强特定的功能。RRR提出了RewriteRetrieve Read过程,利用LLM性能作为重写器模块强化学习的奖励。这允许重写器调整检索查询,从而提高读取器的下游任务性能。类似地,模块可以在生成读取等方法中选择性地替换,其中LLM生成模块取代了检索模块。背诵阅读将外部检索转换为从模型权重的检索,最初让LLM记忆任务相关信息,并生成用于处理知识密集型自然语言处理任务的输出。

  • 调整模块之间的流量

       调整模块之间的流程,重点是增强语言模型和检索模型之间的交互。DSP引入了演示搜索预测框架,将上下文学习系统视为一个明确的程序,而不是一个终端任务提示,以解决知识密集型任务。ITER-RETGEN利用生成的内容来指导检索,在Retrieve ReadRetrieve Read流中迭代执行“检索增强的生成”和“生成增强的检索”。Self-RAG遵循决策-检索-反映-读取过程,引入了一个用于主动判断的模块。这种自适应和多样化的方法允许在模块化RAG框架内动态组织模块。

四、检索器

       在RAG的上下文中,“R”代表检索、服务RAG管道中检索top-k相关信息的作用来自庞大知识库的文档。然而,手工制作一个高质量的寻回器是一项不平凡的任务。在本章中,我们围绕三个关键问题进行讨论:1)如何获得准确的语义表示?2) 如何以匹配查询和文档的语义空间?3)如何将检索器的输出与首选项对齐大型语言模型的?

4.1 如何获得准确的语义陈述?

       在RAG中,语义空间是多维空间,其中查询和文档被映射。当我们进行检索时,它是在语义空间内测量的。如果语义表达不准确,那么它对RAG的影响是致命的,本节将介绍两种方法来帮助我们构建准确的语义空间。

区块优化

       在处理外部文档时,第一步是分块以获得细粒度的特征。然后块被嵌入。但是,嵌入过大或过小的文本块可能不会获得好的结果。因此,找到语料库中文档的最佳块大小至关重要以确保搜索结果的准确性和相关性。

       在选择分块策略时,重要的考虑因素包括:被索引内容的特征、使用的嵌入模型及其最佳块大小、用户查询的预期长度和复杂性,以及检索结果在特定应用程序中的使用方式。例如,对于较长或较短的内容,应选择不同的分块模型。此外,不同的嵌入模型在不同的块大小下表现不同;例如句子转换器更适合单句,而text-embedding-ada-002更适合包含256或512个标记的块。此外,用户输入问题文本的长度和复杂性,以及应用程序的特定需求,如语义搜索或问答,都会影响分块策略的选择。这可能与您选择的LLM的代币限制直接相关,并且可能要求您调整块大小。事实上,准确的查询结果是通过自适应地应用几种分块策略来实现的;没有最好的,只有最合适的

       目前对RAG的研究采用了多种块优化方法来提高检索效率和准确性。滑动窗口技术等技术通过多次检索聚合全局相关信息来实现分层检索。Small2big技术在搜索过程中使用小文本块,并提供较大的附属文本块到语言模型以进行处理。摘要嵌入技术对文档摘要执行TopK检索,提供完整的文档上下文。元数据筛选技术利用文档元数据进行筛选。图形索引技术将实体和关系转换为节点和连接,显著增强了多跳问题的相关性。这些方法的融合导致改进的检索结果和增强的性能抹布。

微调嵌入模型

       在获得适当大小的块之后,我们需要通过嵌入模型,因此嵌入能否有效地表示语料库。如今,优秀的嵌入式模型已经出现,如AUAE,Voyage,BGE,他们已经在大规模语料库上进行了预训练,但他们可能不能准确地表示特定领域的语料库信息当应用于特定域时。此外,特定任务嵌入模型的微调对于确保该模型理解与内容相关性相关的用户查询,而未经微调的模型可能不是能够满足特定任务的需要。因此,微调嵌入模型对于下游应用程序是必不可少的。嵌入微调方法有两个基本范式。

领域知识微调

       为了使嵌入模型正确理解特定领域的信息,我们需要构建特定领域的数据集来微调嵌入模型。然而,微调嵌入模型不同于普通语言模型,主要在于所使用的数据集是不同的。在当前微调嵌入模型的主要方法,数据集used由三个部分组成,包括查询、语料库和相关文件。嵌入模型基于查询在语料库中查找相关文档,然后确定查询命中与否的相关文档用作的度量模型。

       在数据集的构建中,对模型进行微调,以及评估,在每一个方面都可能出现许多挑战三个组成部分。在LlamaIndex中,一个系列为嵌入模型的微调过程专门引入了关键类和函数的,大大简化了这一过程。通过准备一个领域知识语料库并利用它提供的方法,我们可以很容易地获得专门针对我们所需领域的嵌入模型。

       下游任务的微调使嵌入模型适应下游任务同样重要。当在下游任务中使用RAG时,一些工作通过使用LLM的功能对嵌入模型进行了微调。PROMPTAGATOR利用大型语言模型(LLM)作为少量查询生成器,并基于生成的数据创建特定任务的检索器,缓解了由于数据稀缺而在某些领域难以实现的监督微调问题。LLM Embedder使用大型语言模型为来自多个下游任务的数据输出奖励值,通过数据集的硬标记用两个不同的监督信号微调检索器,以及来自LLM的软奖励。

       这通过领域知识注入和下游任务微调在一定程度上改进了语义表示。然而,通过这种方法训练的检索器对大型语言模型没有直观的帮助,因此已经做了一些工作来直接通过来自的反馈信号来监督嵌入模型的微调LLM。(本节将在4.4中介绍)

4.2 如何匹配查询的语义空间

       和文档在RAG应用程序中,一些检索器使用相同的嵌入模型对查询和文档进行编码,而另一些检索器则使用两个模型,以便分别对查询和文档进行编码。此外用户的原始查询可能存在表达不佳和缺乏语义信息的问题。因此,对齐用户查询和文档的语义空间是非常必要的。本节介绍了实现这一目标的两项关键技术。

查询重写

      调整查询和文档语义的最直观方法是重写查询。如Query2Doc和ITERRETGEN中所述利用大型语言模型引导生成伪文档,然后将原始查询与该伪文档合并,形成新的查询。在HyDE中,通过使用文本指示符来建立查询向量,使用这些指示符来生成相关的“假设”文档,但可能并不真正存在,它只需要捕获相关的模式。RRR引入了一种新的框架,该框架颠倒了检索和阅读的顺序,重点关注查询重写。该方法使用大型语言模型生成查询,然后使用web搜索引擎检索上下文,最后使用小型语言模型作为训练重写器来为冻结的大型语言模型提供服务。STEP-BACKPROPTING方法可以使大型语言模型进行抽象推理,提取高级概念和原理,并在此基础上进行检索。最后,多查询检索中的方法包括使用大型语言模型生成多个搜索查询,这些查询可以并行执行,检索结果一起输入,这对于依赖于多个子问题的单个问题非常有用

嵌入转换

       如果存在像重写查询这样的粗粒度方法,还应该有一个针对嵌入操作的细粒度实现。在LlamaIndex中,可以在查询编码器之后连接适配器,并微调适配器以优化查询嵌入的表示,将其映射到更适合特定任务的潜在空间。当查询和外部文档的数据结构不同时,例如非结构化查询和结构化外部文档,使查询与文档对齐是非常重要的。SANTA提出了两种预训练方法,以使检索者意识到结构化信息1)利用结构化数据和非结构化数据之间的自然对齐关系进行对比学习,进行结构化意识预训练。2) 屏蔽实体预测,它设计了一个面向实体的掩码策略并要求语言模型填充被屏蔽的实体。

4.3 如何调整检索器的输出和LLM的偏好

      在RAG管道中,即使我们采用上述技术来提高检索命中率,也可能无法提高RAG的最终效果,因为检索到的文档可能不是LLM所需要的。因此,本节介绍了两种方法来调整检索器的输出和LLM的偏好。

LLM监督训练

      许多工作利用各种从大型语言模型到微调嵌入模型的反馈信号。AAR通过编码器-编码器架构LM为预先训练的检索器提供监督信号。通过确定LM的首选文档通过FiD交叉注意力得分,检索器然后使用硬负采样和标准进行微调交叉熵损失。最终,经过微调的寻回器可以直接用于增强看不见的目标LM,从而在目标任务中表现得更好。寻回犬的训练损失作为:

       其中Da+是LLM在中首选的文件检索到的集合和Da−不是优选的。我是标准十字架熵损失。最后,有人建议LLM可能具有更倾向于关注可读性而非信息丰富的文档。

        REPLUG使用检索器和LLM来计算检索到的文档的概率分布,然后通过计算KL散度来执行监督训练。这种简单有效的训练方法通过使用LM作为监督信号来增强检索模型的性能,消除了对特定交叉注意力机制的需要。寻回器的训练损失如下:

      其中,D是一组输入上下文,PR是检索似然性,QLM是每个文档的LM似然性。

      UPRISE也采用冷冻大语言模型来微调Prompt Retriever。但是语言模型和检索器都采用“提示输入”配对作为输入,然后使用大语言模型给出的分数来监督检索器的训练,相当于使用大语言模式来标记数据集。Atlas提出了四种微调监督嵌入模型的方法,其中,注意力蒸馏使用语言模型在输出过程中生成。EMDR2采用期望最大化算法以检索到的文档作为潜在变量进行训练。困惑蒸馏直接使用模型生成的令牌的困惑作为指标进行训练。LOOP基于文档删除对LM预测的影响,引入了一种新的损失函数,为更好地进行LM预测提供了一种有效的训练策略使模型适应特定任务。

插入适配器:然而,由于使用API来实现嵌入功能或本地计算资源不足等因素,微调嵌入模型可能具有挑战性。因此,有些作品选择外部连接适配器以便对齐。PRCA训练适配器通过上下文提取阶段和奖励驱动阶段,并基于基于令牌的自回归策略优化检索器的输出。令牌过滤方法计算交叉注意力得分,选择得分最高的输入令牌来有效过滤令牌。RECOM提出了抽取式和生成式压缩器,通过选择相关句子或合成文档信息来生成摘要,实现多文档查询的焦点摘要。除此之外,一种新的方法PKG通过指令微调将知识注入白盒模型,并直接替换检索器模块,该模块用于基于查询直接输出相关文档。

五、生成器

       RAG的另一个核心部件是生成器,负责将检索到的信息转换为自然流畅的文本信息。受传统的语言模型启发,但与传统的生成模型相比,RAG生成器通过利用检索到的信息提高了准确性和相关性。在RAG中,生成器的输入不仅包括传统的上下文信息,同时也包括通过检索器获得的文本段。这允许生成器更好地理解问题背后的上下文,并产生信息更丰富的回答。此外,生成器通过检索的文本可以引导以检索到的文本和生成的内容之间的一致性。正是输入数据的多样性导致了生成阶段的一系列有针对性的工作,所有这些工作都旨在使大型模型更好地适应查询和文档中的输入数据。我们将从检索后处理和微调等方面来深入研究生成器。

5.1 如何通过检索后处理增强检索结果?

       对不经过微调的大型语言模型而言,大多数研究都依赖于公认的大语言模型(如GPT4)其强大的内部知识来全面检索文档知识。然而,这些大型模型存在固有问题,比如上下文长度限制和对冗余信息的敏感。为了缓解这些问题,一些研究在检索后处理方面做出了努力。检索后处理是指对检索器从大型文档数据库中检索到的相关信息进行进一步处理、过滤或优化的过程。它的主要目的是提高检索结果的质量,更好地满足用户的需求或用于下游任务。可以理解为对在检索阶段获得的文档进行再处理。检索后处理的操作通常包括信息压缩和结果重新存储。

信息压缩

       即使检索器可以从在庞大的知识库中获取相关知识,我们仍然面临着处理检索文档的大量信息。现有的一些研究尝试通过增加大型语言模型的上下文长度来解决,但当前的大模型仍然面临上下文长度的局限性。因此,在某些情况下,信息浓缩是必要的。简而言之,信息的重要性浓缩主要体现在以下几个方面:减少噪音,应对上下文长度限制,以及增强生成效果。

       PRCA通过训练信息提取器来解决这个问题。在上下文提取阶段,给定一个输入文本S_{input}   ,它可以生成一个输出序列C_{extracted}  (它表示来自输入文档)。训练的目标是尽量减少C_{extracted}  和真实文本C_{truth}  差异。损失函数如下:

       其中 f_. 是信息提取器,θ是提取器的参数。RECOM采用对比学习的方法训练信息冷凝器。对于每个训练数据点,存在一个正样本以及五个阴性样本。在此过程中,编码器使用对比损失进行训练。这个具体优化目标如下:

      其中  x_i是训练数据, p_i是正样本,  n_j是负样本,sim(x,y)用于计算x和y之间的相似性。另一项研究选择进一步精简文档数量,旨在通过减少检索次数来提高模型答案的准确性。[Ma等人,2023b]提出了“Filter-Ranker”范式,它整合了大型语言的优势模型(LLM)和小型语言模型(SLM)的优势。在这个范式中,SLM充当过滤器,而LLM充当重新排序代理。通过促使LLM重新排列SLM识别的困难样本的部分,研究结果表明,在各种信息提取(IE)任务中都有显著改进。

重新排序

       重新排序模型的关键作用在于优化从检索器检索到的一组文档。当添加额外的上下文时,LLM的性能会随着回溯性能而下降,而重新排序提供了解决此问题的有效解决方案。核心理念是重新排列文档,将最相关的文档放在前面,从而减少文件到固定数量。这不仅解决了检索时上下文扩展的问题也有助于提高检索效率。

       引入上下文压缩作为重新排序的一部分旨在仅基于给定的返回相关信息查询上下文。这种方法的双重意义在于通过减少单个文档的内容和过滤整个文档来提高检索结果。因此,重新排序模型在整个信息检索过程,提供更有效和用于后续LLM处理的准确输入。

5.2 如何优化生成器以适应输入数据?

       在RAG模型中,生成器的优化是架构中非常关键的组成部分。生成器的任务是以获取检索到的信息并生成相关文本,从而提供模型的最终输出。生成器的优化目标是为了确保生成的文本既自然又有效地利用检索到的文档,以更好地满足用户的查询需求。

       在典型的大型语言模型(LLM)生成任务中,输入通常是一个查询。在RAG中,主要区别在于输入不仅包括查询,还包括检索器检索的各种文档(结构化/非结构化)。额外信息的引入可能会对模型的理解产生重大影响,尤其是对于较小的模型。在这种情况下,对模型进行微调以适应查询+检索到的文档的输入变得尤为重要。具体来说,在向微调模型提供输入之前,通常会对检索器检索到的文档进行检索后处理。需要注意的是,RAG中微调生成器的方法基本上类似于LLM的一般微调方法。在这里,我们将简要介绍一些具有代表性的工作,包括数据(格式化/未格式化)和优化功能。

一般优化过程

       训练数据通常是(input, output)对,模型根据给定的输入x生成输出y。在Self-mem的工作中采用了相对经典的训练过程,给定输入x,检索相关文档z(选择在本文中Top-1),在集成(x,z)后,模型生成输出y。本文使用了两种常见的范式用于微调,即Joint-EncoderDual-Encoder。对于Joint-Encoder,通常会采用一种encoder-decoder的标准模型,其中encoder对输入进行编码,decoder通过注意力机制以自回归的方式生成token:

       对于Dual-Encoder,需要两个独立的encoder,一个encoder负责对输入(查询,上下文)进行编码,另一个encoder负责对文档进行编码。然后输出依次由decoder进行双向交叉关注处理。作者选择使用Transformer作为两种架构的构建块,并优化G_{\xi } 负对数似然(NLL)损失。

利用对比学习

      在准备训练数据的阶段,通常生成是输入和输出之间的成对交互。在这种情况下,模型只能访问一个唯一的可能引发“暴露偏差”问题的实际输出:在训练阶段模型只暴露于单个真实反馈,而不访问任何其他生成的令牌。这可能会损害模型在应用程序中的性能可能过高适合于训练数据中的特定反馈,而不会有效地推广到其他场景。因此,SURGE提出了图文对比学习方法。对于输入和输出之间的任何一对给定的交互,这种对比的目的学习方法可以定义如下:

       其中ζ、ξ是可学习的线性投影层。z是来自编码器的图的平均表示,h是平均值解码器表示的。z',h'表示相应的分别为阴性样本。在给定的文本中,“h”和“z”表示负样本。通过引入对比学习目标,模型可以学习生成多样化的合理的回答更好,而不仅仅是在训练数据。这有助于降低过度拟合的风险并提高了模型在现实世界中的泛化能力场景。

      在处理结构化数据的检索任务时,SANTA采用三阶段训练过程来充分理解结构和语义信息。具体来说,在检索器的训练阶段采用对比学习来优化查询和文档的嵌入表示。具体的优化目标如下所示:

      其中q和d是由编码器。 d^- ,  d^+分别表示负样本和正样本。在生成器的初始训练阶段,我们利用对比学习来对齐结构化数据以及相应的非结构化文档描述数据。优化目标如上所述。

       此外,在生成器的后期训练阶段,受参考文献的启发[Sciavolino等人,2021,张等人,2019],我们认识到实体语义在学习文本数据方面的显著有效性检索中的表示。因此,我们首先执行实体结构化数据中的标识,随后应用生成器的输入部分中实体的掩码训练数据,使生成器能够预测这些掩码。此后的优化目标是:

      其中 y_j 表示序列 Y_d 中的第j个token。  Yd = < mask >1, ent1, ..., < mask >n, entn表示包含掩码实体的ground truth序列。在整个训练过程中,通过从上下文信息来恢复mask实体,去理解文本数据的结构语义,并对齐结构化数据中的相关实体。我们优化语言模型去填充隐藏的span,从而更好地理解实体的语义。

六、RAG的增强

       本节从以下三个维度:增强阶段增强数据源增强过程,来详细阐述了RAG开发中的关键技术。RAG核心分类组件如图4所示。

6.1 增强阶段的RAG

       作为一项知识密集型任务,RAG在语言模型的预训练、微调和推理阶段采用了不同的技术方法。

6.1.1 预训练阶段

       自从预训练模型出现以来,研究人员深入研究了提高预训练语言模型(PTM)在开放域问答中的性能(QA)通过预训练阶段的检索方法。在预训练中认识和扩展隐性知识模型可能具有挑战性。REALM引入了一种更模块化和可解释的知识嵌入方法。遵循掩蔽语言模型(MLM)范式,REALM模型包括预训练和作为检索后预测的过程进行微调,其中语言模型通过预测基于y的掩蔽标记进行预训练在掩蔽句x上建模P(x|y)。

       RETRO利用检索增强对自回归语言模型进行预训练,通过从大量标记数据中检索并显著减少模型参数,实现从头开始的大规模预训练。RETRO与GPT模型共享主干结构,并引入了一个额外的RETRO编码器来对检索到的相邻实体的特征进行编码来自外部知识库。此外,RETRO在其解码器转换器结构中结合了逐块交叉注意层,以有效地集成来自RETRO编码器的检索信息。RETRO实现了比标准GPT模型更低的困惑。此外,它还提供了更新语言中存储的知识的灵活性无需更新检索数据库即可建立模型用于重新训练语言模型。

       Atla采用了类似的方法,在预训练和微调阶段都采用了使用T5架构的检索机制。在预训练之前,它用预训练的T5初始化编码器-解码器LM主干,并用预训练过的Contriever初始化密集检索器。在预训练过程中,它每1000步刷新一次异步索引。

       COG是一种文本生成模型,通过从现有的文本集合中逐步复制文本片段(如单词或短语)来形式化其生成过程。与按顺序选择单词的传统文本生成模型不同,COG利用高效的矢量搜索工具来计算文本片段的有意义的上下文表示并对其进行索引。因此,文本生成任务被分解为一系列复制和粘贴操作,其中在每个时间步长,从文本集合中寻找相关的文本片段,而不是从独立的词汇中进行选择。COG在各个方面都表现出优于RETRO的性能,包括问题回答、领域自适应和扩展短语索引。

       另一方面,随着 scaling law定律的发现,模型参数迅速增加,使自回归模型成为主流。研究人员还在探索是否可以使用RAG方法对更大的模型进行预训练。RETRO++是RETRO的扩展,增加了模型的参数规模。研究发现,在文本生成质量、事实准确性、低毒性和下游方面都有持续的改进任务准确性,尤其是在知识密集型任务中作为开放域问答。这些研究发现强调预训练自回归语言模型与未来检索相结合的有前景的方向基础模型。

      总之,强化预训练的优势和局限性是显而易见的。从积极的方面来看,这种方法提供了一个更强大的基础模型,在困惑、文本生成质量和下游任务性能方面优于标准GPT模型。此外,与纯预训练模型。它特别擅长处理知识密集型任务,允许通过对特定领域语料库的训练来创建特定领域的模型。然而,也存在缺点,包括需要大量的预训练数据和更大的训练资源,以及更新速度较慢的问题。特别是随着模型大小的增加,检索增强训练的成本变得相对较高。尽管存在这些限制,这种方法在以下方面表现出显著的特点模型稳健性。经过训练后,检索增强型模型基于纯预训练消除了对外部库依赖性的需求,提高了生成速度和操作效率。

6.1.2 微调阶段

       在下游微调阶段,研究人员采用了各种方法来微调检索器和生成器,以改进信息检索,主要是在开放域问答任务中。关于检索器微调,REPlUG将语言模型(LM)视为黑匣子,并通过可调整的检索模型对其进行增强。REPLUG通过监督信号从黑匣子语言模型中获得反馈,改进了初始检索模型。另一方面,UPRISE通过对不同任务集进行微调,创建一个轻量级和通用的检索器,从而对检索器进行微调。该检索器可以自动为零样本任务提供检索提示,展示其在任务和模型中的通用性和改进的性能。

      同时,微调生成器的方法包括Self-Mem,其通过示例的存储池来微调生成器,以及Self-RAG,其通过生成反射令牌来满足主动检索需求。RADIT方法通过在给定检索增强指令的情况下最大化正确答案的概率来微调生成器和检索器。它更新生成器和检索器,以最大限度地减少文档和查询之间的语义相似性,有效地利用相关的背景知识。

      此外,SUGRE引入了对比学习的概念。它对检索器和生成器进行端到端的微调,确保高度详细的文本生成和检索的子图。SURGE使用基于图神经网络(GNN)的上下文感知子图检索器,从与正在进行的对话相对应的知识图中提取相关知识。这样可以确保生成的响应忠实地反映检索到的知识。为此,SURGE采用了一种不变但高效的图编码器和图-文本对比学习目标。

       总之,在微调阶段的增强方法表现出几个特点。首先,微调LLM和检索器可以更好地适应特定任务,提供同时微调其中一个或两个的灵活性,如以下方法所示RePlug和RA-DIT。其次,这种微调的好处扩展到适应不同的下游任务,如UPRISE所示,使模型更加通用。此外,微调使模型能够更好地适应各种语料库中的不同数据结构,特别有利于图结构语料库,如SUGRE方法所强调的那样。

       然而,这一阶段的微调也有局限性,例如需要专门为RAG微调准备的数据集,以及与推理阶段的RAG相比需要大量的计算资源。总的来说,在微调过程中,研究人员可以根据特定的要求和数据格式灵活地定制模型,与之相比减少了资源消耗进入训练前阶段,同时保持调整能力模型的输出样式。

6.1.3 推理阶段

       将RAG方法与LLM相结合已成为推理阶段的一个流行研究方向。值得注意的是,Naive RAG的研究范式依赖于在推理阶段结合检索内容。

       为了克服Naive RAG的局限性,研究人员在推理阶段在RAG中引入了更丰富的上下文。DSP框架依赖于一个复杂的管道,该管道涉及在冻结的语言模型(LM)和检索模型(RM)之间传递自然语言文本,为模型提供更多信息上下文以提高生成质量。PKG为LLM配备了一个知识引导模块,该模块允许在不改变LLM参数的情况下访问相关知识,使模型能够执行更复杂的任务。此外,CREA-ICL利用跨语言知识的同步检索来帮助获取额外信息,而RECITE通过从LLM中采样一个或多个段落来形成上下文。

      在推理阶段,优化RAG过程有利于适应更具挑战性的任务。例如,ITRG通过迭代检索和搜索正确的推理路径,增强了对需要多步推理的任务的适应性。ITERRETGEN采用迭代方法将检索和生成结合起来,实现了“检索增强生成”和“生成增强检索”的交替过程

      另一方面,IRCOT融合了RAG和CoT的概念,采用了交替的CoT引导检索,并使用检索结果来改进CoT。这种方法显著提高了GPT-3在各种QA任务中的性能,突出了集成检索和生成的潜在优势。

       总之,推理阶段增强方法具有重量轻、成本效益高、不需要额外训练以及利用强大的预训练模型的优点。主要优势在于在微调过程中冻结LLM的参数,专注于提供更适合需求的上下文,具有快速和低成本的特点。然而,这种方法也有一些局限性,包括需要额外的数据处理和流程优化,同时受到基础模型能力的限制。通常,这种方法通常与过程优化技术相结合,如逐步推理、迭代推理和自适应检索,以更好地满足不同任务的要求。

6.2 增强数据源

       数据来源是RAG有效性的关键因素。各种数据源提供了不同的知识粒度和维度,需要不同的处理方法。它们主要分为三类:非结构化数据结构化数据LLM生成的内容

用非结构化数据扩充

       非结构化数据主要包括文本数据,通常源自纯文本语料库。此外,其他文本数据可以作为检索源,例如用于大型模型微调的提示数据和跨语言数据。

       就文本粒度而言,除了常见的组块(包括句子)之外,检索单元可以是标记(例如,kNN-LM)、短语(例如,NPM、COG)和文档段落。细粒度的检索单元通常可以更好地处理罕见模式和域外场景,但会增加检索成本

       在单词级别,FLARE采用主动检索策略,仅当LM生成低概率单词时才进行检索。该方法包括生成一个临时的下一句,用于检索相关文档,然后在检索到的文档的条件下重新生成下一个句子以预测随后的句子。

       在组块级别,RETRO使用前一个组块来检索最近的相邻组块,并将此信息与前一组块的上下文信息集成以指导下一块的生成。RETRO实现这是通过检索最近的相邻块  N(C_{i-1})从检索数据库中,然后融合前面的块 (C_1,...,C_{i-1}) 和通过交叉注意检索 N(C_{i-1}) 的信息引导生成下一个块C_{i}  为了保持因果关系,第i个块  的自回归生成只能使用前一个块N(C_{i-1})  的最近邻居,并且而不是 N(C_{i}) 。

用结构化数据增强

       像知识图谱(KG)这样的结构化数据源逐渐被整合到RAG的范式中。经过验证的KGs可以提供更高质量的上下文,降低模型幻觉的可能性。

        RET-LLM通过从过去的对话中提取关系三元组来构建个性化的知识图记忆,以供将来使用。SUGRE使用图神经网络(GNN)嵌入从知识图中检索的相关子图,以防止模型生成与上下文无关的回复。SUGRE采用了一种图编码方法,该方法将图结构反映到PTM的表示空间中,并利用图文本模式之间的多模式对比学习目标来确保检索到的事实和生成的文本之间的一致性。KnowledgeGPT以代码格式生成知识库(KB)的搜索查询,并包括预定义的KB操作函数。除了检索,KnowledgeGPT还提供了将知识存储在个性化知识库中以满足个人用户需求的功能。这些结构化数据源为RAG提供了更丰富的知识和上下文,有助于提高模型性能。

LLM生成的内容RAG

       观察到RAG回忆的辅助信息并不总是有效的,甚至可能产生负面影响,一些研究通过深入研究LLM的内部知识来扩展RAG的范式。这种方法利用LLM本身生成的内容进行检索,旨在提高下游任务的性能。以下概述了这一类别中值得注意的研究:

       SKR采用了一个标记的训练集,将模型可以直接回答的问题归类为已知问题,将需要增强检索功能的问题分类为未知问题。该模型被训练来辨别一个问题是否已知,只对被识别为未知的输入应用检索增强,同时直接回答其余的输入。

      GenRead用LLM生成器代替检索器。实验结果表明,生成的上下文文档包含正确答案的情况比Naive RAG检索到的情况更普遍。生成的答案也显示出卓越的质量。作者将此归因于生成文档级上下文的任务与培训前目标之间的一致性因果语言建模,允许更好地利用存储在模型参数中的世界知识。

      Selfmem迭代使用检索增强生成器来创建无边界内存池。内存选择器用于选择一个输出作为下一代的内存。此输出充当原始问题的双重问题。通过将原始问题和双重问题相结合,检索增强生成模型可以利用其自身的输出来增强自身。

      这些不同的方法展示了RAG检索增强的创新策略,旨在提高模型的性能和有效性。

6.3 增强过程

      大多数RAG研究通常只执行单个检索和生成过程。然而,单次检索可能包含冗余信息,导致“中间丢失”现象。这种冗余信息可能会模糊关键信息或包含与真实答案相反的信息,对生成效果产生负面影响。此外,从单个检索中获得的信息在需要多步骤推理。

       目前主要优化检索过程的方法包括迭代检索和自适应检索。这些允许在检索过程中多次迭代的模型或者自适应地调整检索过程以更好地适应不同的任务和场景。

迭代检索

      基于原始查询和生成的文本定期收集文档可以为LLM提供额外的材料。在多次迭代检索中提供额外的参考提高了后续答案生成的稳健性。然而,这种方法可能在语义上不连续,并可能导致收集有噪声和无用的信息,因为它主要依赖于n个令牌的序列将生成的文档和检索到的文档分开。

       递归检索和多跳检索用于特定的数据场景。递归检索可以首先通过结构化索引处理数据,然后逐级检索。当检索层次丰富的文档时,可以为整个文档或长PDF中的每个部分进行摘要。然后基于该摘要执行检索。在确定文档后,对内部块进行第二次检索,从而实现递归检索。多跳检索通常用于进一步挖掘图结构数据源中的信息。

       有些方法会迭代检索和生成的步骤。ITER-RETGEN协作利用“检索增强型生成”和“生成增强型检索”来完成需要复制信息的任务。也就是说,该模型使用完成任务所需的内容来响应输入任务,并且这些目标内容充当检索更相关的信息上下文知识这有助于在另一个中产生更好的响应迭代。

       IRCoT还探索了为每个生成的句子检索文档,在思想链的每一步引入检索。它使用CoT来指导检索,并使用检索结果来改进CoT,确保语义的完整性。

自适应检索

       事实上,前两节中描述的RAG方法遵循被动方法,其中检索是优先的。这种方法涉及查询相关文档并根据上下文输入LLM,可能会导致效率问题。自适应检索方法,如正如Flare和Self-RAG所介绍的那样,优化了RAG检索过程,使LLM能够主动判断检索的时间和内容。这有助于提高检索信息的效率和相关性。

       事实上,LLM积极使用工具和做出判断的方式并不是源于RAG,而是已广泛应用于大型模型的代理中。Graph Toolformer的检索步骤大致如下进入:LLM积极使用检索器、Self Ask和DSP尝试使用少量提示来触发LLM搜索查询。当LLM认为有必要时,他们可以决定搜索相关查询以收集必要的材料,类似于代理的工具调用。

       WebGPT采用强化学习框架来自动训练GPT-3模型,以使用搜索引擎生成文本。它使用特殊的令牌来执行操作,包括在搜索引擎上查询、滚动排名和引用引用。这允许GPT-3利用搜索引擎生成文本

       另一方面,Flare自动化了检索的时间安排,并根据生成文本的概率解决了定期文档检索的成本问题。它使用概率作为LLM在生成过程中的置信度指标。当一个术语的概率低于预定义的阈值时,信息检索系统将检索参考文献并删除具有较低概率的术语概率。这种方法旨在处理LLM可能需要额外知识的情况。

       Self-RAG引入了一种名为反射代币的重要创新。生成这些特殊标记是为了查看输出,有两种类型:Retrieve和Critic。该模型可以自主决定何时检索段落或使用设置的阈值来触发检索。当需要检索时,生成器处理同时对多个段落进行分段级波束搜索,得到最佳序列。每个细分的分数都使用Critic分数进行更新,并且可以在推理过程中调整这些权重,以自定义模型的行为。Self-RAG框架还允许LLM自主确定是否需要召回,避免训练额外的分类器或依赖NLI模型。这增强了模型自主判断输入并生成准确答案的能力。

七、RAG评估

       在探索RAG的开发和优化过程中,有效评估其性能已成为一个核心问题本章主要讨论了评估方法、RAG的关键指标、它应该具备的能力,以及一些主流评价框架。

7.1 评价方法

评估RAG有效性主要有两种方法:独立评估端到端评估

独立评估

独立评估包括评估检索模块和生成(读取/合成)模块。

1.检索模块

       一套衡量系统(如搜索引擎、推荐系统或信息检索系统)根据查询或任务对项目进行排名的有效性的指标通常用于评估RAG检索模块的性能。示例包括命中率、MRR、NDCG、精度等。

2.生成模块

       这里的生成模块是指通过将检索到的文档补充到查询中而形成的增强或合成输入,与通常评估的最终答案/响应生成不同端到端。生成模块的评估指标主要集中在上下文相关性上,测量检索到的文档与查询问题的相关性。

端到端评估

       端到端评估评估RAG模型对给定输入生成的最终响应,包括模型生成的答案与输入查询的相关性和一致性。从内容生成目标的角度来看,评估可以分为未标记的以及标记的内容。未标记内容评估指标包括答案保真度、答案相关性、无害性等,而标记内容评估标准包括准确性和EM。此外,从评估方法的角度来看,端到端评估可以分为手动评估和使用LLM的自动评估。以上总结了RAG端到端评估的一般情况。此外,基于RAG在特定领域的应用,采用了特定的评估指标,例如用于问答任务的EM,UniEval和用于摘要任务的E-F1,以及用于机器翻译的BLEU。这些指标有助于理解RAG在各种特定应用场景中的性能。

7.2 关键指标和能力

       现有的研究往往缺乏对检索增强生成对不同LLM的影响的严格评估。在大多数情况下,评估RAG在各种下游任务和不同检索器中的应用可能会产生不同的结果。然而,一些学术和工程实践侧重于RAG的一般评估指标及其有效使用所需的能力。本节主要介绍了评估RAG有效性的关键指标和评估其性能的基本能力。

主要绩效指标

       最近的OpenAI报告提到了优化大型语言模型(LLM)的各种技术,包括RAG及其评估指标。此外,最新的评估框架,如RAGAS和ARES也涉及RAG评估指标。总结这些工作,主要关注三个核心指标:答案的真实性、答案相关性和上下文相关性。

1.诚信

       该指标强调,模型生成的答案必须与给定的上下文保持一致,确保答案与上下文信息一致,不会偏离或矛盾。评估的这一方面对于解决大型模型中的幻觉至关重要。

2.答案相关性

这个指标强调生成的答案需要与提出的问题直接相关。

3.语境相关性

      该度量要求检索到的上下文信息尽可能准确和有针对性,避免不相关的内容。毕竟,处理长文本对LLM来说代价高昂,过多的无关信息会降低LLM利用上下文的效率。OpenAI报告还提到“上下文回忆”作为一个补充指标,衡量模型检索回答问题所需的所有相关信息的能力。该度量反映了RAG检索模块的搜索优化水平。低召回率表明潜在地需要优化搜索功能,例如引入重新排序机制或微调嵌入,以确保更相关的内容检索。

关键能力

       RGB的工作从RAG所需的四个基本能力方面分析了不同大型语言模型的性能,包括噪声鲁棒性、负抑制、信息集成和反事实鲁棒性,为检索增强生成建立了基准。RGB主要关注以下四个方面能力:

1.噪声鲁棒性

       这种能力衡量模型处理有噪声文档的效率,这些文档与问题有关,但不包含有用的信息。

2.否定拒绝

      当模型检索到的文档缺乏回答问题所需的知识时,模型应该正确地拒绝响应。在阴性拒绝的测试设置中,外部文件仅包含噪音。理想情况下,LLM应该发出“缺乏信息”或类似的拒绝信号。

3.信息集成

      这种能力评估模型是否可以集成来自多个文档的信息来回答更复杂的问题。

4.反事实稳健性

       该测试旨在评估当收到关于检索信息中潜在风险的指令时,模型是否能够识别和处理文档中的已知错误信息。反事实稳健性测试包括LLM可以直接回答的问题,但相关的外部文件包含事实错误。

7.3 评估框架

      最近,LLM社区一直在探索使用“LLM作为判断”进行自动评估,许多LLM使用强大的LLM(如GPT-4)来评估自己的LLM应用程序输出。Databricks使用GPT-3.5和GPT-4作为LLM法官来评估其聊天机器人应用程序的实践表明,使用LLM作为自动评估工具是有效的。他们相信这种方法还可以高效且经济高效地评估基于RAG的应用程序。

       在RAG评估框架领域,RAGAS和ARES是相对较新的。这些评估的核心重点是三个主要指标:答案的真实性、答案相关性和上下文相关性。此外,业界提出的开源库TruLens也提供了类似的评估模式。这些框架都使用LLM作为评委进行评估。由于TruLens类似于RAGAS,因此第章将具体介绍RAGAS和ARES。

RAGAS

       该框架考虑了检索系统识别相关和关键上下文段落的能力、LLM忠实使用这些段落的能力以及生成本身的质量。RAGAS是一个基于简单手写提示的评估框架,使用这些提示以完全自动化的方式衡量质量的三个方面——答案忠实性、答案相关性和上下文相关性。在实施和实验中在这个框架中,所有提示都使用gpt3.5-turbo-16k模型进行评估,该模型可通过OpenAI获得API。

算法原理

1.评估答案的可信度:使用LLM将答案分解为各个陈述,并验证每个陈述是否与上下文一致。最终,通过将支持的陈述数量与总数进行比较来计算“可信度分数”语句数。

2.评估答案相关性:使用LLM生成潜在问题,并计算这些问题与原始问题之间的相似性。答案相关性得分是通过计算所有生成问题与原始问题的平均相似性得出的。

3.评估上下文相关性:使用LLM提取与问题直接相关的句子,并使用这些句子与上下文中句子总数的比率作为上下文相关性得分。

ARES

        ARES旨在从三个方面自动评估RAG系统的性能:上下文相关性、答案可信度和答案相关性。这些评估指标与RAGAS中的指标相似。然而,RAGAS作为一种基于简单手写提示的较新评估框架,对新的RAG评估设置的适应性有限,这也是ARES工作的意义之一。此外,如其评估所示,ARES的表现明显低于RAGAS。

       ARES通过使用少量手动注释数据和合成数据降低了评估成本,并利用预测驱动推理(PDR)提供统计置信区间,提高了评估的准确性。

算法原理

1.生成合成数据集:ARES最初使用语言模型从目标语料库中的文档中生成合成问答,以创建正样本和负样本。

2.准备LLM评委:接下来,ARES使用合成数据集对轻量级语言模型进行微调,以训练它们评估上下文相关性、答案可信度和答案相关性。

3.使用置信区间对RAG系统进行排名:最后,ARES将这些判断模型应用于RAG系统评分,并使用PPI方法将其与手动注释的验证集相结合,以生成置信区间,从而可靠地估计RAG系统。

八、未来前景

       在本章中,我们深入探讨了RAG的三个未来前景,即RAG的纵向优化、横向扩展和生态系统。

8.1 RAG的垂直优化

       尽管RAG技术在过去一年中取得了快速进步,但其垂直领域仍有几个领域需要进一步研究。

      首先,RAG中的长上下文问题是一个重大挑战。如文献[Xu et al.,2023c]所述,RAG的生成阶段受到LLM的上下文窗口的约束。如果窗口太短,则可能无法包含足够的相关信息;如果时间过长,可能会导致信息丢失。目前,扩展LLM的上下文窗口,甚至到无限上下文的程度,是LLM发展的一个关键方向。然而,一旦上下文窗口约束被移除,RAG应该如何适应仍然是一个值得注意的问题。

       其次,RAG的鲁棒性是另一个重要的研究热点。如果在检索过程中出现不相关的噪声,或者检索到的内容与事实相矛盾,则会显著影响RAG的有效性。这种情况被比喻为“向毒蘑菇开书”。因此,增强RAG的稳健性越来越受到研究人员的关注,如[Yu等人,2023a,Glass等人,2021,Baek等人,2023]等研究所示。

       第三,RAG和微调的协同问题也是一个主要的研究点。混合已逐渐成为RAG的主流方法之一,以RADIT为例。如何协调两者之间的关系,同时获得参数化和非参数化的优势,是一个需要解决的问题。

       最后,RAG的工程实践是一个值得关注的重要领域。易于实施和符合公司工程需求是RAG崛起的原因之一。然而,在工程实践中,如何在大规模知识库场景中提高检索效率和文档召回率,以及如何确保企业数据安全,例如防止LLM被诱导披露文档的来源、元数据或其他信息,这些问题都是需要解决的关键问题。

RAG的水平扩展

      关于RAG的研究在水平领域迅速扩展。从最初的文本问答领域开始,RAG的思想逐渐应用于更多的模态数据,如图像、代码、结构化知识、音频和视频等。这方面的工作已经很多了。

       在图像领域,BLIP2的提出,使用冻结图像编码器和大规模语言模型进行视觉语言预训练,降低了模型训练的成本。此外,该模型可以生成图像到文本的转换来自零个样本。在文本生成领域,VBR方法用于生成图像,以指导语言模型的文本生成,在开放文本生成任务中具有显著效果。

       在代码领域,RBPS用于与代码相关的小规模学习。通过编码或频率分析,可以自动检索到与开发人员任务类似的代码示例。该技术已在测试断言生成和程序修复任务中证明了其有效性。在结构化知识领域,方法包括CoK提示首先从知识图中检索与输入问题相关的事实,然后以提示的形式将这些事实添加到输入中。该方法在知识图问答任务中表现良好。

       对于音频和视频领域,GSS方法从口语词汇库中检索并连接音频片段,立即将MT数据转换为ST数据。UEOP在端到端自动化方面取得新突破通过引入用于语音到文本映射的外部离线策略进行语音识别。通过基于KNN的注意力融合,文本到语音方法生成的音频嵌入和语义文本嵌入可以使ASR产生偏差,有效缩短领域自适应时间。这个Vid2Seq架构通过引入特殊的时间标记来增强语言模型,使其能够无缝预测同一输出序列中的事件边界和文本描述。

8.2 RAG的生态系统

下游任务和评估

       通过整合广泛知识库中的相关信息,RAG在增强语言模型处理复杂查询和生成信息丰富的响应的能力方面表现出了巨大的潜力。大量研究表明,RAG在各种下游任务中表现良好,如开放式问答和事实验证。RAG模型不仅提高了下游应用中信息的准确性和相关性,还增加了响应的多样性和深度。

       鉴于RAG的成功,探索该模型在多领域应用中的适应性和通用性将是未来工作的一部分。这包括它在专业领域知识问答中的应用,如医学、法律和教育。在专业领域知识问答等下游任务的应用中,RAG可以提供更低的培训成本和更好的性能好处比微调。

       同时,改进RAG的评估系统,以评估和优化其在不同下游任务中的应用,对于该模型在特定任务中的效率和效益至关重要。这包括为不同的下游任务开发更准确的评估指标和框架,如上下文相关性、内容创造力和无害性等。

       此外,通过RAG增强模型的可解释性,让用户更好地了解模型如何以及为什么做出特定响应,也是一项有意义的任务。

技术堆栈

       在RAG的生态系统中,相关技术堆栈的开发起到了推动作用。例如,随着ChatGPT的普及,LangChain和LLamaIndex迅速广为人知。它们都提供了一套丰富的RAG相关API,逐渐成为大模型时代不可或缺的技术。与此同时,新型技术堆栈正在不断开发。尽管它们提供的功能不如LangChain和LLamaIndex那么多,但它们更多地关注自己的独特特性。例如,Flowise AI6强调低代码,允许用户实现以RAG为代表的各种AI应用程序,而无需编写代码,只需拖放即可。其他新兴技术包括HayStack、Meltno和Cohere Coral。

       除了AI原生框架,传统软件或云服务提供商也扩大了服务范围。例如,Verb7,由矢量数据库公司Weaviate提供,专注于个人助理。亚马逊为用户提供了基于RAG思想的智能企业搜索服务工具Kendra。用户可以通过内置连接器在不同的内容存储库中进行搜索。

       技术堆栈和RAG的发展是相辅相成的。新技术对现有技术栈提出了更高的要求,而技术栈功能的优化进一步推动了RAG技术的发展。总体而言,RAG工具链的技术堆栈已初步形成,许多企业级应用程序已逐渐出现,但一体化平台仍需完善。

九、结论

       本文深入探讨了检索增强生成(RAG),这是一种使用外部知识库来补充大型语言模型(LLM)的上下文并生成响应的技术。值得注意的是,RAG结合了LLM的参数化知识和非参数化外部知识,缓解了幻觉问题,通过检索技术及时识别信息,并提高了响应的准确性。此外,通过引用来源,RAG提高了模型输出的透明度和用户信任度。RAG还可以通过索引相关文本语料库来基于特定领域进行定制。RAG的发展和特点概括为三种范式:Naive RAG、Advanced RAG和Modular RAG,每种范式都有其模型、方法和缺点。Naive RAG主要涉及“检索-阅读”过程。高级RAG使用更多细化数据处理,优化知识库索引,并引入多次或迭代检索。随着探索的深入,RAG集成了微调等其他技术,导致了模块化RAG范式的出现,它用新的模块丰富了RAG过程,并提供了更多的灵活性。

       在接下来的章节中,我们将进一步详细分析RAG的三个关键部分。第4章介绍了RAG的检索器,如何处理语料库以获得更好的语义表示,如何缩小查询和文档之间的语义差距,以及如何调整检索器以适应生成器。第5章解释了生成器如何通过对检索到的文档进行后处理来获得更好的生成结果,避免“中间丢失”问题,以及调整生成器以适应检索器的方法。随后,在第六章中,我们从检索阶段、检索数据来源和检索过程等方面回顾了当前的检索增强方法。

       第7章解释了如何评估当前的RAG方法,包括评估、关键指标和当前的评估框架。最后,我们对RAG未来的潜在研究方向进行了展望。RAG作为一种将检索和生成相结合的方法,在未来的研究中有许多潜在的发展方向。通过不断改进技术并扩大其应用,RAG的性能和实用性可以进一步提高。

参考文献:

[1] https://arxiv.org/pdf/2312.10997.pdf

;