RAG Survey

本文翻译自:Retrieval-Augmented Generation for Large Language Models: A Survey
https://arxiv.org/pdf/2312.10997


文章目录

    • 摘要
    • 一、INTRODUCTION
    • 二、RAG概述
      • A. Naive RAG
      • B. Advanced RAG
      • C. Modular RAG
      • D. RAG与微调
    • 三、 检索
      • A. 检索来源
        • 1) 数据结构
          • 2) 检索粒度
      • B. 索引优化
      • C. 查询优化
      • D.嵌入
      • E. Adapter
    • 四、 生成
      • A. 语境控制
      • B. LLM微调
    • 五、RAG 增强过程
      • A. 迭代检索
      • B. 递归检索
      • C. 自适应检索
    • VI、 任务与评估
      • A. 下游任务
      • B. 评估目标
      • C. 评估方面
      • D. 评估基准和工具
    • 七、讨论与未来展望
      • A.RAG与长期背景
      • B.RAG稳健性
      • C.混合方法
      • D.RAG的标度定律
      • E.生产就绪RAG
      • F. 多模态RAG
    • 八、结论


摘要

摘要——大型语言模型(LLM)展示了令人印象深刻的功能,但也遇到了幻觉、过时的知识和不透明、无法追踪的推理过程等挑战。通过整合来自外部数据库的知识,检索增强生成(RAG)已成为一种很有前途的解决方案。这提高了生成的准确性和可信度,特别是对于知识密集型任务,并允许用于持续的知识更新和领域特定信息的集成。RAG将LLM的内在知识与外部数据库的庞大动态存储库协同融合。

这篇全面的综述论文对RAG范式的进展进行了详细的研究,包括Naive RAG、Advanced RAG和Modular RAG。

它仔细审查了RAG框架的三方基础,包括检索、生成和增强技术。本文重点介绍了嵌入这些关键组件中的最先进技术,从而深入了解了RAG系统的进步。此外,本文还介绍了最新的评估框架和基准。最后,本文描述了当前面临的挑战,并指出了未来的研发途径。

索引术语——大型语言模型、检索增强生成、自然语言处理、信息检索


一、INTRODUCTION

大型语言模型(LLM)已经取得了显著的成功,尽管它们仍然面临着显著的局限性,尤其是在特定领域或知识密集型任务[1]中,尤其是当处理超出其训练数据或需要当前信息的查询时,会产生“幻觉”[2]。

为了克服挑战,检索增强生成(RAG)通过语义相似性计算从外部知识库中检索相关文档块来增强LLM。通过参考外部知识,RAG有效地减少了生成事实不正确内容的问题。它与LLM的集成已被广泛采用,使RAG成为推进聊天机器人的关键技术,并增强LLM在现实世界应用中的适用性。

RAG技术近年来发展迅速,总结相关研究的技术树如图1所示。

在这里插入图片描述

图1。RAG研究的技术树。涉及RAG的阶段主要包括预训练、微调和推理。 随着LLM的出现,对RAG的研究最初集中在利用LLM强大的上下文学习能力上,主要集中在推理阶段。 随后的研究更深入,逐渐与LLM的微调相结合。研究人员也一直在探索通过检索增强技术在训练前阶段增强语言模型的方法。


RAG在大模型时代的发展轨迹呈现出几个明显的阶段特征。

最初,RAG的成立恰逢Transformer体系结构的兴起,它专注于通过预训练模型(PTM)引入额外的知识来增强语言模型。

这一早期阶段的特点是旨在完善 预训练技术的基础工作[3]-[5]。

随后ChatGPT[6]的到来标志着一个关键时刻,LLM展示了强大的上下文学习(ICL)能力。

RAG研究转向为LLM提供更好的信息,以在推理阶段回答更复杂和知识密集的任务,从而导致RAG研究的快速发展。随着研究的进展,RAG的增强不再局限于推理阶段,而是开始更多地结合LLM微调技术。

RAG这一新兴领域经历了快速增长,但它还没有得到一个系统的综合来阐明其更广泛的发展轨迹。这项调查试图通过绘制RAG过程并绘制其演变和预期未来路径来填补这一空白,重点是将RAG整合到LLM中。

本文综合考虑了技术范式和研究方法,总结了100多项RAG研究的三个主要研究范式,并分析了“检索”、“生成”和“增强”核心阶段的关键技术。

另一方面,当前的研究往往更多地关注方法,缺乏对如何评估RAG的分析和总结。

本文全面回顾了适用于RAG的下游任务、数据集、基准和评估方法。

总体而言,本文着手对LLM后出现的RAG方法和应用的基本技术概念、历史进展以及光谱进行仔细的汇编和分类。

它旨在让读者和专业人士对大型模型和RAG有一个详细而结构化的理解。

它旨在阐明检索增强技术的演变,评估各种方法在各自背景下的优势和劣势,并推测即将到来的趋势和创新。


我们的贡献如下:

  • 在这项调查中,我们提出了一个全面而系统的回顾最先进的RAG方法,通过包括幼稚RAG、高级RAG和模块化RAG在内的范式来描述其演变。这篇综述将RAG研究的更广泛范围置于LLM的视野中。
  • 我们确定并讨论了RAG过程中不可或缺的核心技术,特别关注“检索”、“生成”和“增强”方面,并深入研究了它们的协同作用,阐明了这些组件如何复杂地协作,形成一个有凝聚力和有效的RAG框架。
  • 我们总结了RAG的当前评估方法,涵盖了26项任务、近50个数据集,概述了评估目标和指标,以及当前的评估基准和工具。此外,我们预计RAG的未来发展方向,强调应对当前挑战的潜在增强功能。

本文展开如下:第二节介绍了RAG的主要概念和当前范式。以下三节分别探讨了核心组件——“检索”、“生成”和“增强”。第三节重点介绍了检索中的优化方法,包括索引、查询和嵌入优化。第四节集中讨论后检索过程和LLM在生成中的微调。第五节分析了三个增广过程。第六节重点介绍RAG的下游任务和评估体系。第七节主要讨论RAG目前面临的挑战及其未来发展方向。最后,论文在第八节中作了总结。


二、RAG概述

RAG的一个典型应用如图2所示。

在这里插入图片描述

图2。应用于问答的RAG过程的一个代表性实例。它主要由三个步骤组成。1) 索引。文档被分割成块,编码成矢量,并存储在矢量数据库中。2) 检索。基于语义相似性检索与问题最相关的前k个块。3) 生成。将原始问题和检索到的块一起输入LLM,以生成最终答案。


在这里,一位用户向ChatGPT提出了一个关于最近一条广受讨论的新闻的问题。考虑到ChatGPT对训练前数据的依赖,它最初缺乏提供最新发展的能力。

RAG通过从外部数据库获取和整合知识来弥补这一信息差距。

在这种情况下,它会收集与用户查询相关的相关新闻文章。这些文章与原始问题相结合,形成了一个全面的提示,使LLM能够生成一个消息灵通的答案。

RAG研究范式不断发展,我们将其分为三个阶段:Naive RAG、Advanced RAG和Modular RAG,如图3所示。


在这里插入图片描述

图3。RAG三种范式的比较。(左)朴素RAG主要包括索引、检索和生成三个部分。(中)Advanced RAG围绕预检索和后检索提出了多种优化策略,其过程类似于Naive RAG,仍然遵循链式结构。(右)模块化RAG继承和发展了先前的范式,总体上显示出更大的灵活性。这一点在引入多个特定功能模块和更换现有模块方面表现得很明显。整个过程不限于顺序检索和生成;它包括迭代检索和自适应检索等方法。


尽管RAG方法具有成本效益,并且超过了原生LLM的性能,但它们也表现出一些局限性。高级RAG和模块化RAG的开发是对Naive RAG中这些特定缺点的回应。


A. Naive RAG

Naive RAG研究范式代表了最早的方法论,在ChatGPT广泛采用后不久就获得了突出地位。Naive RAG遵循传统流程,包括索引、检索和生成,也被称为“Retrieve-Read”框架[7]。

索引从清理和提取PDF、HTML、Word和Markdown等不同格式的原始数据开始,然后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本被分割成更小的、可消化的块。然后使用嵌入模型将块编码为矢量表示,并存储在矢量数据库中。这一步骤对于在随后的检索阶段实现高效的相似性搜索至关重要。

Retrieval。在接收到用户查询时,RAG系统采用在索引阶段使用的相同编码模型 来将查询转换为矢量表示。然后,它计算查询向量和索引语料库内块的向量之间的相似性得分。系统对与查询具有最大相似性的前K个块进行优先排序并检索。这些块随后被用作prompt中的扩展上下文。

Generation。提出的查询和选择的文档被合成为一个连贯的提示,大型语言模型负责制定响应。模型的回答方法可能因特定任务的标准而异,这使其能够利用其固有的参数知识或限制其对所提供文档中包含的信息的响应。在进行对话的情况下,任何现有的对话历史都可以集成到提示中,使模型能够有效地参与多回合对话交互。


然而,Naive RAG遇到了显著的缺点:

  • 检索挑战。检索阶段经常在准确性和召回率方面遇到困难,导致选择错位或不相关的块,并丢失关键信息。
  • 生成困难。在生成响应时,模型可能会面临幻觉的问题,因为它会产生检索到的上下文不支持的内容。这一阶段也可能受到输出的不相关性、毒性或偏差的影响,从而降低响应的质量和可靠性。
  • 增强跨栏。将检索到的信息与不同的任务集成起来可能很有挑战性,有时会导致输出不连贯或不连贯。当从多个来源检索类似信息时,该过程也可能遇到冗余,导致重复响应。挖掘不同段落的意义和相关性,确保风格和音调的一致性,会增加复杂性。面对复杂的问题,基于原始查询的单一检索可能不足以获取足够的上下文信息。
  • 此外,还有一种担忧是,生成模型可能过度依赖增强信息,导致输出只反映检索到的内容,而不添加深入或合成的信息。

B. Advanced RAG

Advanced RAG引入了特定的改进,以克服Naive RAG的局限性。它专注于提高检索质量,采用了检索前和检索后策略。为了解决索引问题,Advanced RAG通过使用滑动窗口方法、细粒度分割和元数据的结合来改进其索引技术。此外,它还结合了几种优化方法来简化检索过程[8]。

  • 预检索过程。在这个阶段,主要关注的是优化索引结构原始查询。优化索引的目标是提高被索引内容的质量。这涉及到以下策略:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。而查询优化的目标是使用户的原始问题更清晰,更适合检索任务。常见的方法包括查询重写、查询转换、查询扩展等技术[7],[9]-[11]。
  • 后期检索过程。检索到相关上下文后,将其与查询有效集成至关重要。后检索过程中的主要方法包括重新存储块和上下文压缩。对检索到的信息重新排序以将最相关的内容重新定位到提示的边缘是一个关键策略。这一概念已在框架中实现,如LlamaIndex、LangChain和HayStack[12]。
    将所有相关文档直接输入LLM可能会导致信息过载,用不相关的内容淡化对关键细节的关注。为了缓解这种情况,检索后的工作集中于选择基本信息,强调关键部分,并缩短要处理的上下文。

C. Modular RAG

模块化RAG架构超越了前两个RAG范式,提供了增强的适应性和多功能性。它采用了多种策略来改进其组件,例如添加用于相似性搜索的搜索模块,以及通过微调来改进检索器。已经引入了重组的RAG模块[13]和重新排列的RAG管道[14]等创新,以应对特定的挑战。向模块化RAG方法的转变越来越普遍,支持其组件的顺序处理和集成端到端训练。尽管Modular RAG具有独特性,但它建立在Advanced和Naive RAG的基本原则之上,说明了RAG家族的进步和完善。

1) 新模块:模块化RAG框架引入了额外的专业组件,以增强检索和处理能力。

搜索模块适用于特定场景,使用LLM生成的代码和查询语言,实现在搜索引擎、数据库和知识图等各种数据源之间的直接搜索[15]。

RAG-Fusion 通过采用多查询策略来解决传统搜索的局限性,该策略将用户查询扩展到不同的角度,利用并行矢量搜索和智能重新排序来揭示显式和变革性的知识[16]。

内存模块利用LLM的内存来指导检索,创建一个无限内存池,通过迭代自增强[17],[18]将文本与数据分布更紧密地对齐。

RAG系统中的路由(Routing)在不同的数据源中导航,选择查询的最佳路径,无论是涉及摘要、特定的数据库搜索还是合并不同的信息流[19]。

Predict 模块旨在通过LLM直接生成上下文来减少冗余和噪声,确保相关性和准确性[13]。

最后,任务适配器(Task Adapter)模块针对各种下游任务定制RAG,自动检索零样本输入,并通过生成较少的搜索查询创建特定于任务的检索器[20],[21]。

这种综合方法不仅简化了检索过程,而且显著提高了检索信息的质量和相关性,以增强的精度和灵活性满足了广泛的任务和查询。


2) 新模式:模块化RAG 通过允许模块替换或重新配置来解决特定的挑战,提供了非凡的适应能力。这超出了Naive和Advanced RAG的固定结构,其特点是简单的“检索”和“读取”机制。

此外,Modular RAG 通过集成新模块 或 调整现有模块之间的交互流 来扩展这种灵活性,增强了其在不同任务中的适用性。

诸如 Rewrite-Retrieve-Read[7]模型 之类的创新利用LLM的能力,通过重写模块和LM反馈机制来改进检索查询,以更新重写模型,提高任务性能。

类似地,Generate-Read [13]等方法用LLM生成的内容取代传统检索,而 Recite- Read [22]则强调从模型权重进行检索,增强了模型处理知识密集型任务的能力。

混合检索策略集成了关键字、语义和矢量搜索,以满足不同的查询。此外,部署子查询和假设文档嵌入(HyDE)[11]试图通过专注于嵌入生成的答案和真实文档之间的相似性来提高检索相关性。

模块排列和交互的调整,如 Demonstrate-Search-Predict(DSP)[23]框架和ITER-RETGEN[14]的迭代检索-读取-检索-读取流,展示了模块输出的动态使用,以支持另一个模块的功能,说明了对增强模块协同的复杂理解。

模块化RAG流的灵活编排 展示了通过FLARE[24]和Self-RAG[25]等技术进行自适应检索的好处。这种方法通过基于不同场景评估检索的必要性,超越了固定的RAG检索过程。

灵活架构的另一个好处是RAG系统可以更容易地与其他技术集成(如微调或强化学习)[26]。例如,这可能涉及微调检索器以获得更好的检索结果,微调生成器以获得更个性化的输出,或参与协作微调[27]。


D. RAG与微调

LLM的增加由于其日益流行而引起了相当大的关注。在优化LLM的方法中,RAG经常与微调(FT)和即时工程进行比较。如图4所示,每种方法都有不同的特点。

在这里插入图片描述

图4。RAG在“需要外部知识”和“需要模型自适应”方面与其他模型优化方法进行了比较。Prompt Engineering只需要对模型和外部知识进行少量修改,重点是利用LLM本身的能力。另一方面,微调涉及到对模型的进一步训练。在RAG(Naive RAG)的早期阶段,对模型修改的需求很低。随着研究的进展,模块化RAG与微调技术的集成度越来越高。


我们使用象限图来说明三种方法在两个维度上的差异:外部知识需求和模型自适应需求。快速工程利用模型的固有能力,将外部知识和模型自适应的必要性降至最低。RAG可以被比作为信息检索提供一个具有定制教科书的模型,非常适合精确的信息检索任务。相比之下,FT相当于学生随着时间的推移内化知识,适用于需要复制特定结构、风格或格式的场景。

RAG在动态环境中表现出色,它提供了实时的知识更新和高可解释性的外部知识源的有效利用。然而,它在数据检索方面具有更高的延迟和道德考虑。另一方面,FT更为静态,需要对更新进行再培训,但可以对模型的行为和风格进行深度定制。它需要大量的计算资源来进行数据集的准备和训练,虽然它可以减少幻觉,但它可能会面临不熟悉数据的挑战。

在对其在不同主题的各种知识密集型任务中的表现进行多次评估时,[28]发现,虽然无监督微调显示出一些改进,但RAG在训练过程中遇到的现有知识和全新知识方面始终优于它。

此外,还发现LLM很难通过无监督的微调来学习新的事实信息。RAG和FT之间的选择取决于应用程序环境中对数据动态、定制和假定功能的具体需求。RAG和FT并不互斥,可以相互补充,在不同层面上增强模型的能力。

在某些情况下,它们的组合使用可能会带来最佳性能。涉及RAG和FT的优化过程可能需要多次迭代才能获得令人满意的结果。


三、 检索

在RAG的背景下,从数据源有效地检索相关文档是至关重要的。涉及到几个关键问题,如检索源、检索粒度、检索的预处理以及相应嵌入模型的选择。


A. 检索来源

RAG依靠外部知识来增强LLM,而检索源的类型和检索单元的粒度都会影响最终生成的结果。


1) 数据结构

最初,文本是检索的主流来源。随后,检索源扩展到包括半结构化数据(PDF)和结构化数据(知识边缘图,KG)以进行增强。除了从原始外部来源进行检索外,最近的研究也有一个日益增长的趋势,即利用LLM自身生成的内容进行检索和增强。

  • 非结构化数据,如文本,是使用最广泛的检索源,主要来自语料库。对于开放域问答(ODQA)任务,主要的检索来源是维基百科转储,目前的主要版本包括HotpotQA 4(2017年10月1日)和DPR5(2018年12月20日)。除了百科全书式的数据外,常见的非结构化数据还包括跨语言文本[19]和特定领域的数据(如医学[67]和法律领域[29])。
  • 半结构化数据。通常是指包含文本和表格信息的组合的数据,例如PDF。由于两个主要原因,半结构化数据对传统的RAG系统提出了挑战。首先,文本拆分过程可能会无意中分离表,导致检索过程中的数据损坏。其次,将表合并到数据中会使语义相似性搜索复杂化。在处理半结构化数据时,一种方法涉及杠杆化LLM的代码功能,以对数据库中的表(如TableGPT[85])执行Text-2-SQL查询。或者,可以使用基于文本的方法将表格转换为文本格式进行进一步分析[75]。然而,这两种方法都不是最优解,这表明了该领域的重要研究机会。
  • 结构化数据,如知识图[86],通常经过验证,可以提供更精确的信息。KnowledGPT[15] 生成KB搜索查询,并将知识存储在个性化的库中,增强了RAG模型的知识丰富度。针对LLM在理解和回答文本图问题方面的局限性,G-Retriever[84] 集成了图神经网络(GNN)、LLM和RAG,通过LLM的软提示增强了图的理解和问题回答能力,并将Prize Collecting Steiner Tree(PCST)优化问题用于有针对性的图检索。相反,它需要额外的努力来构建、验证和维护结构化数据库。相反,它需要额外的努力来构建、验证和维护结构化数据库。
  • LLM生成的内容。针对RAG中外部辅助信息的局限性,一些研究侧重于利用LLM的内部知识。SKR[58]将问题分类为已知或未知,选择性地应用检索增强。GenRead[13]用LLM生成器替换了检索器,发现LLM生成的上下文通常包含更准确的答案,因为它与因果语言建模的预训练目标更好地一致。Selfmem[17]使用检索增强生成器迭代创建无边界内存池,使用内存选择器选择作为原始问题的对偶问题的输出,从而自增强生成模型。这些方法强调了RAG中创新数据源利用的广度,努力提高模型性能和任务有效性。

2) 检索粒度

除了检索源的数据格式之外,另一个重要因素是检索数据的粒度。

理论上,粗粒度检索单元可以为问题提供更多相关信息,但它们也可能包含冗余内容,这可能会分散检索器和语言模型在下游任务中的注意力[50],[87]。

另一方面,细粒度的检索单元粒度增加了检索的负担,不能保证信息的完整性和满足所需的知识。在推理过程中选择适当的检索粒度是提高密集检索器的检索和下游任务性能的一种简单有效的策略。

在文本中,检索粒度从细到粗不等,包括标记、短语、句子、命题、块、文档。其中,DenseX[30] 提出了将命题作为检索单元的概念。命题被定义为文本中的原子表达式,每个命题都封装了一个独特的事实片段,并以简洁、独立的自然语言格式呈现。这种方法旨在提高检索精度和相关性。在知识图上,检索粒度包括实体、三元组和子图。检索的粒度也可以适用于下游任务,例如检索推荐任务中的项目ID[40]和句子对[38]。详细信息如表一所示。


B. 索引优化

在索引阶段,文档将被处理、分段并转换为嵌入,以存储在矢量数据库中。索引构建的质量决定了能否在检索阶段获得正确的上下文。

1) 分块策略:最常见的方法是在固定数量的令牌(例如,100、256、512)上将文档分割成块[88]。较大的块可以捕获更多的上下文,但它们也会产生更多的噪声,需要更长的处理时间和更高的成本。虽然较小的块可能无法完全传达必要的上下文,但它们确实具有较少的噪声。然而,组块会导致句子中的截断,促使递归拆分和滑动窗口方法的优化,通过在多个检索过程中合并全局相关信息来实现分层检索[89]。尽管如此,这些方法仍然无法在语义完整性和上下文长度之间取得平衡。因此,已经提出了类似Small2Big的方法,其中使用句子(小)作为检索单元,并将前后句子作为(大)上下文提供给LLM[90]。

2) 元数据附件:可以用元数据信息来丰富区块,如页码、文件名、地址、类别时间戳。随后,可以基于该元数据过滤检索,从而限制检索的范围。在检索过程中为文档时间戳分配不同的权重可以实现时间感知RAG,确保知识的新鲜性,避免过时的信息。

除了从原始文档中提取元数据外,还可以人工构建元数据。例如,添加段落摘要,以及引入假设性问题。这种方法也被称为反向HyDE。具体来说,使用LLM生成文档可以回答的问题,然后在检索过程中计算原始问题和假设问题之间的相似性,以减少问题和答案之间的语义差距。

3) 结构索引:增强信息检索的一种有效方法是为文档建立层次结构。通过构造In结构,RAG系统可以加快相关数据的检索和处理。
分层索引结构。文件按父子关系排列,块链接到它们。数据总和存储在每个节点,有助于数据的快速遍历,并有助于RAG系统确定要提取哪些块。这种方法还可以减轻由块提取问题引起的错觉。
知识图谱索引。利用KG构建文档的层次结构有助于保持一致性。它描绘了不同概念和实体之间的联系,显著减少了产生幻觉的可能性。另一个优点是将信息检索过程转换为LLM可以理解的指令,从而提高知识检索的准确性,并使LLM能够生成上下文一致的响应,从而提高RAG系统的整体效率。为了捕捉文档内容和结构之间的逻辑关系,KGP[91]提出了一种使用KG在多个文档之间建立索引的方法。该KG由节点(表示文档中的段落或结构,如页面和表格)和边(表示文档结构中段落或关系之间的语义/词汇相似性)组成,有效地解决了多文档环境中的知识边缘检索和推理问题。


C. 查询优化

Naive RAG的主要挑战之一是它直接依赖用户的原始查询作为检索的基础。制定一个精确而清晰的问题是困难的,轻率的查询会导致检索效率低下。有时,问题本身很复杂,语言也没有很好的组织。另一个困难在于语言的复杂性和歧义性。语言模型在处理专门词汇或具有多种含义的歧义缩写时往往会遇到困难。例如,他们可能无法辨别“LLM”是指大型语言模型,还是指法律背景下的法律硕士。

1) 查询扩展:将单个查询扩展为多个查询,丰富了查询的内容,提供了进一步的上下文来解决任何缺乏特定细微差别的问题,从而确保生成的答案的最佳相关性。

  • 多查询。通过使用即时工程通过LLM扩展查询,这些查询可以并行执行。查询的扩展不是随机的,而是经过精心设计的。
  • 子查询。子问题规划的过程代表了必要的子问题的生成,以在组合时将原始问题情境化并完全回答。原则上,添加相关上下文的过程类似于查询扩展。具体来说,使用最少到最多提示的方法[92],可以将复杂的问题分解为一系列更简单的子问题。
  • 验证链(CoVe)。扩展后的查询经过LLM验证,以达到减少幻觉的效果。经过验证的扩展查询通常表现出更高的可靠性[93]。

2) 查询转换:核心概念是基于转换后的查询而不是用户的原始查询来检索块。

查询重写。对于LLM检索,原始查询并不总是最优的,尤其是在真实世界的场景中。因此,我们可以提示LLM重写查询。除了使用LLM进行查询重写外,还专门使用较小的语言模型,如RRR(重写-检索-读取)[7]。在淘宝上实施的查询重写方法,即BEQUE[9],显著提高了长尾查询的召回效率,导致了GMV的上升。
另一种查询转换方法是使用提示工程,让LLM在原始查询的基础上生成查询,用于后续检索。HyDE[11]构建假设文档(假设原始查询的答案)。它专注于从答案到答案的嵌入相似性,而不是为问题或查询寻求嵌入相似性。使用后退提示方法[10],对原始查询进行抽象,生成高级概念问题(后退问题)。在RAG系统中,后退问题和原始查询都用于检索,并且这两个结果都被用作生成语言模型答案的基础。


3) 查询路由:基于不同的查询,路由到不同的RAG管道,适用于设计用于适应不同场景的通用RAG系统。
元数据路由器/筛选器。第一步包括从查询中提取关键词(实体),然后根据块中的关键词和元数据进行过滤,以缩小搜索范围。
语义路由器是另一种路由方法,涉及利用查询的语义信息。具体的请参阅语义路由器。当然,混合路由还可以采用这种方法,将基于语义和元数据的方法相结合,以增强查询路由。


D.嵌入

在RAG中,检索是通过计算查询和文档块的嵌入之间的相似性(例如余弦相似性)来实现的,其中嵌入模型的语义表示能力起着关键作用。这主要包括稀疏编码器(BM25)和密集检索器(BERT架构预训练语言模型)。最近的研究引入了突出的嵌入模型,如AngIE、Voyage、BGE等[94]-[96],这些模型受益于多任务指令调整。Hugging Face的MTEB排行榜7评估了8项任务中的嵌入模型,涵盖58个数据测试。有条件地,C-MTEB专注于中国能力,涵盖6项任务和35个数据集。对于“使用哪种嵌入模型”,没有一个一刀切的答案。然而,一些特定的模型更适合特定的用例。

1) 混合/混合检索:稀疏和密集嵌入方法捕获不同的相关性特征,并可以通过利用互补的相关性信息来相互区分。例如,可以使用稀疏检索模型 以提供用于训练密集检索模型的初始搜索结果。此外,预训练语言模型(PLM)可以用于学习术语权重,以增强稀疏检索。具体来说,它还证明了稀疏检索模型可以增强密集检索模型的零样本检索能力,并帮助密集检索器处理包含稀有实体的查询,从而提高鲁棒性。

2) 微调嵌入模型:在上下文明显偏离预训练语料库的情况下,特别是在医疗保健、法律实践和其他充满专有术语的领域等高度专业化的学科中,在您自己的领域数据集上微调嵌入模型对于缓解这种差异至关重要。

除了补充领域知识外,微调的另一个目的是对齐检索器和生成器,例如,使用LLM的结果作为微调的监督信号,称为LSR(LM监督检索器)。PROMPTAGATOR[21]利用LLM作为少量查询生成器来创建特定任务的检索器,解决监督微调中的挑战,特别是在数据稀缺领域。另一种方法,LLM嵌入器[97],利用LLM在多个下游任务中生成奖励信号。检索器使用两种类型的监督信号进行微调:数据集的硬标签和LLM的软奖励。这种双信号方法促进了更有效的微调过程,使嵌入模型适应不同的下游应用。

REPLUG[72]利用检索器和LLM来计算检索到的文档的概率分布,然后通过计算KL散度来执行监督训练。这种直接有效的训练方法通过使用LM作为监督信号来增强检索模型的性能,消除了对特定交叉注意力机制的需要。此外,受RLHF(从人类反馈中强化学习)的启发,利用基于LM的反馈通过强化学习来强化检索器。


E. Adapter

微调模型可能会带来挑战,例如通过API集成功能,或解决有限的本地计算资源带来的限制。因此,一些方法选择结合外部适配器来帮助对齐。

为了优化LLM的多任务功能,UP-RISE[20]训练了一个轻量级提示检索器,该检索器可以自动从预先构建的提示池中检索提示,该提示池适用于给定的零样本任务输入。

AAR(Augmentation Adapted Retriver)[47]引入了一种通用适配器,旨在适应多个下游任务。

而PRCA[69]添加了一个可插入的奖励驱动上下文适配器,以提高特定任务的性能。

BGM[26]使检索器和LLM保持固定,并在两者之间训练桥接Seq2Seq模型。桥接模型旨在将检索到的信息转换为LLM可以有效使用的格式,使其不仅可以重新排序,还可以为每个查询动态选择段落,并可能使用更高级的策略,如重复。

此外,PKG 介绍了一种通过指令微调将知识集成到白盒模型中的创新方法[75]。在这种方法中,检索器模块被直接替换为根据查询生成相关文档。这种方法有助于解决微调过程中遇到的困难,并提高模型性能。


四、 生成

检索后,将所有检索到的信息直接输入LLM以回答问题不是一种好的做法。以下将从两个角度介绍调整:调整检索到的内容和调整LLM。


A. 语境控制

冗余信息可能会干扰LLM的最终生成,而过长的上下文也可能导致LLM出现“中间丢失”问题[98]。和人类一样,LLM倾向于只关注长文本的开头和结尾,而忘记中间部分。因此,在RAG系统中,我们通常需要进一步处理检索到的内容。

1) 重新排序:重新排序从根本上重新排序文档块,以首先突出最相关的结果,有效地减少了整个文档库,切断了信息检索的双重目的,同时充当增强器和过滤器,为更精确的语言模型处理提供精细的输入[70]。可以使用基于规则的方法执行重新排序,这些方法依赖于预定义的度量,如多样性、相关性和MRR,或者基于模型的方法,如BERT系列的编码器-解码器模型(例如,SpanBERT),专门的重新排序模型,如相干重新排序或bge-raranker-large,以及通用大型语言模型,如GPT[12],[99]。

2) 上下文选择/压缩:RAG过程中的一个常见误解是认为检索尽可能多的相关文档并将它们连接起来以形成冗长的检索提示是有益的。然而,过多的上下文会引入更多的噪声,削弱LLM对关键信息的感知。

(Long)LLM语言[100],[101]利用小语言模型(SLM),如GPT-2 small或LLaMA-7B,来检测和删除不重要的标记,将其转化为一种对人类来说很难理解但LLM很好理解的形式。这种方法提供了一种直接实用的即时压缩方法,消除了对LLM的额外训练,同时平衡了语言完整性和压缩率。PRCA通过训练信息提取器解决了这个问题[69]。类似地,RECOMP采用了一种可比较的方法,通过使用对比学习训练信息冷凝器[71]。每个训练数据点由一个正样本和五个负样本组成,编码器在整个过程中使用对比损失进行训练[102]。

除了压缩上下文之外,减少文档数量也有助于提高模型答案的准确性。马等人[103]提出了“过滤器重新排序”范式,该范式结合了LLM和SLM的优势。
在这个范例中,SLM充当过滤器,而LLM充当重新排序代理。研究表明,指示LLM重新排列SLM识别的具有挑战性的样本可以显著改进各种信息提取(IE)任务。另一种直接有效的方法是让LLM在生成最终答案之前评估检索到的内容。这允许LLM通过LLM评论过滤出相关性较差的文档。例如,在Chatlaw[104]中,LLM被提示对所引用的法律条款进行自我建议,以评估其相关性。


B. LLM微调

基于LLM的场景和数据特性进行有针对性的微调可以产生更好的结果。这也是使用内部部署LLM的最大优势之一。当LLM缺乏特定领域中的数据时,可以通过微调向LLM提供额外的知识。Huggingface的微调数据也可以作为初始步骤。
微调的另一个好处是能够调整模型的输入和输出。例如,它可以使LLM适应特定的数据格式,并按照指示以特定的风格生成响应[37]。对于涉及结构化数据的检索任务,SANTA框架[76]实现了三方训练方案,以有效地封装结构和语义的细微差别。初始阶段侧重于检索器,利用对比学习来完善查询和文档嵌入。
通过强化学习使LLM输出与人类或检索者的偏好相一致是一种潜在的方法。例如,手动注释最终生成的答案,然后通过强化学习提供反馈。除了与人类偏好保持一致外,还可以与微调模型和检索器的偏好保持一致[79]。当环境阻止访问强大的专有模型或更大参数的开源模型时,一种简单有效的方法是提取更强大的模型(例如GPT-4)。LLM的微调也可以与检索器的微调相协调,以对齐偏好。一种典型的方法,如RA-DIT[27],使用KL散度来调整Retriever和Generator之间的评分函数。


五、RAG 增强过程

在RAG领域,标准实践通常涉及单一的(一次)检索步骤,然后生成,这可能导致效率低下,有时对于需要多步骤推理的复杂问题通常是不够的,因为它提供的信息范围有限[105]。许多研究针对这个问题优化了检索过程,我们在图5中对其进行了总结。

在这里插入图片描述

图5。除了最常见的一次检索外,RAG还包括三种类型的检索增强过程。(左)迭代检索涉及检索和生成之间的交替,允许在每一步从知识库中获得更丰富、更有针对性的上下文。(中)递归检索包括逐步细化用户查询并将问题分解为子问题,然后通过检索和生成不断解决复杂问题。(右)自适应检索侧重于使RAG系统能够自主确定是否需要外部知识检索以及何时停止检索和生成,通常利用LLM生成的特殊令牌进行控制。


A. 迭代检索

迭代检索是一个基于初始查询和迄今为止生成的文本重复搜索知识库的过程,为LLM提供了更全面的知识库。这种方法已经被证明可以通过多次检索迭代提供额外的上下文参考来增强后续答案生成的稳健性。然而,它可能会受到语义不连续性和无关信息积累的影响。ITER-RETGEN[14]采用了一种协同方法,将“检索增强型生成”与“生成增强型检索”结合起来,用于需要复制特定信息的任务。该模型利用处理输入任务所需的内容作为检索相关知识的上下文基础,这反过来又有助于在后续迭代中生成改进的响应。


B. 递归检索

递归检索经常用于信息检索和NLP,以提高搜索结果的深度和相关性。该过程包括基于从先前搜索中获得的结果迭代地细化搜索查询。递归检索旨在通过反馈循环逐步聚合到最相关的信息,从而增强搜索体验。IRCoT[61]使用思想链来指导检索过程,并根据所获得的检索结果对CoT进行细化。ToC[57]创建了一个澄清树,系统地优化查询中不明确的部分。它在复杂的搜索场景中尤其有用,在这些场景中,用户的需求从一开始就不完全清楚,或者所寻求的信息非常专业或微妙。该过程的递归性质允许不断学习和适应用户的需求,通常会提高对搜索结果的满意度。

为了解决特定的数据场景,递归检索和多跳检索技术被结合使用。递归检索涉及以分层方式处理和检索数据的结构化索引,其中可能包括在基于该摘要执行检索之前对文档或冗长的PDF的各部分进行汇总。随后,文档中的二次检索细化了搜索,体现了过程的递归性质。相比之下,多跳检索旨在深入研究图结构数据源,提取互连信息[106]。


C. 自适应检索

以Flare[24]和Self-RAG[25]为例的自适应检索方法通过使LLM能够主动确定检索的最佳时刻和内容来完善RAG框架,从而提高信息来源的效率和相关性。

这些方法是LLM在其操作中使用主动判断的更广泛趋势的一部分,如AutoGPT、Toolformer和Graph-Toolformer[107]-[109]等模型代理所示。例如,Graph Toolformer将其检索过程分为不同的步骤,在这些步骤中,LLM主动使用检索器,应用自询问技术,并使用少量提示来启动搜索查询。这种主动的立场允许LLM决定何时搜索必要的信息,类似于代理如何使用工具。

WebGPT[110]集成了强化学习框架,以在文本生成过程中自主使用搜索引擎来训练GPT-3模型。它使用特殊的令牌来导航这一过程,这些令牌有助于搜索引擎查询、浏览结果和引用引用等操作,从而通过使用外部搜索引擎扩展GPT-3的功能。Flare通过监测生成过程的置信度来自动进行定时检索,如生成项的概率所示[24]。当概率降至某个阈值以下时,将激活检索系统来收集相关信息,从而优化检索周期。Self-RAG[25]引入了“反射令牌”,允许模型内省其输出。这些标记有两种:“检索”和“评论家”。该模型自主地决定何时激活检索,或者,预定义的阈值可以触发该过程。在检索过程中,生成器在多个段落上进行碎片级波束搜索,以导出最相干的序列。Critic分数用于更新细分分数,并可在推理过程中灵活调整这些权重,从而调整模型的行为。Self-RAG的设计消除了对额外分类器的需求或对自然语言推理(NLI)模型的依赖,从而简化了何时使用检索机制的决策过程,并提高了模型在生成准确响应时的自主判断能力。


VI、 任务与评估

RAG在NLP领域的快速发展和越来越多的采用将RAG模型的评估推向了LLM社区研究的前沿。该评估的主要目标是理解和优化RAG模型在不同应用场景中的性能。本章将主要介绍RAG的主要下游任务、数据集以及如何评估RAG系统。


A. 下游任务

RAG的核心任务仍然是问答(QA),包括传统的单跳/多跳QA、多选、特定领域的QA以及适合RAG的长格式场景。除了QA,RAG正在不断扩展到多个下游任务,如信息提取(IE)、对话生成、代码搜索等。RAG的主要下游任务及其相应的数据集总结在表II中。


B. 评估目标

从历史上看,RAG模型的评估集中在特定下游任务中的执行。这些评估采用了适用于手头任务的既定指标。例如,问答评估可能依赖于EM和F1分数[7]、[45]、[59]、[72],而事实核查任务通常取决于准确性作为主要指标[4]、[14]、[42]。BLEU和ROUGE度量也通常用于评估答案质量[26]、[32]、[52]、[78]。像RALLE这样的工具,设计用于RAG应用程序的自动评估,类似地,它们的评估基于这些特定任务的指标[160]。尽管如此,专门用于评估RAG模型的独特特征的研究却明显不足。主要评估目标包括:

  • 检索质量。评估检索质量对于确定检索器组件来源的上下文的有效性至关重要。域的标准度量的搜索引擎、推荐系统和信息检索系统被用来测量RAG检索模块的性能。命中率、MRR和NDCG等指标通常用于此目的[161]、[162]。
  • 生成质量。发电质量的评估集中在发电商从检索到的上下文中综合连贯和相关答案的能力上。这种评估可以根据内容的目标进行分类:未标记和标记的内容。对于未标记的内容,评估包括生成答案的忠实性、相关性和非危害性。相反,对于标记内容,重点是模型产生的信息的准确性[161]。此外,检索和生成质量评估都可以通过手动或自动评估方法[29]、[161]、[163]进行。

C. 评估方面

RAG模型的现代评估实践强调了三个主要质量分数和四个基本能力,它们共同为RAG模型两个主要目标的评估提供了信息:检索和生成。

1) 质量分数: 质量分数包括上下文相关性、答案忠实性和答案相关性。这些质量分数从不同的角度评估了RAG模型在信息检索和生成过程中的效率[164]-[166]。

  • Context Relevance 上下文相关性评估检索到的上下文的准确性和特异性,确保相关性并最大限度地降低与无关内容相关的处理成本。
  • Answer Faithfulness 答案忠实确保生成的答案与检索到的上下文保持一致,保持一致性并避免矛盾。
  • Answer Relevance 答案相关性要求生成的答案与提出的问题直接相关,有效地解决核心问题。

2) 所需能力:RAG评估还包括四种表明其适应性和效率的能力:噪声鲁棒性、负抑制、信息集成和反事实鲁棒性[167],[168]。这些能力对于模型在各种挑战和复杂场景下的性能至关重要,会影响质量分数。

  • Noise Robustness 噪声鲁棒性 评估模型对与问题相关但缺乏即时信息的人工噪声文档的能力。
  • Negative Rejection 评估当检索到的文档不包含回答问题所需的知识时,模型在避免响应方面的辨别力。
  • Information Integration 信息集成评估模型在综合来自多个文档的信息以解决复杂问题方面的熟练程度。
  • Counterfactual Robustness 反事实稳健性*测试模型识别和忽略文档中已知不准确之处的能力,即使在收到关于潜在错误信息的指示时也是如此。

上下文相关性和噪声稳健性对于评估检索质量很重要,而答案忠实性、答案相关性、否定拒绝、信息整合和反事实稳健性对于评估生成质量很重要。

表III对每个评估方面的具体指标进行了汇总。必须认识到,这些指标来源于相关工作,是传统的衡量标准,尚未代表量化RAG评估方面的成熟或标准化方法。为RAG模型的细微差别量身定制的自定义指标,尽管此处未包括在内,但也已在一些评估研究中开发。


D. 评估基准和工具

已经提出了一系列基准测试和工具来促进RAG的评估。这些工具提供了定量指标,不仅可以衡量RAG模型的性能,还可以增强对模型在各个评估方面的能力的理解。
RGB、RECALL和CRUD[167]-[169]等著名基准侧重于评估RAG模型的基本能力。
众所周知,最先进的自动化工具,如RAGAS[164]、ARES[165]和TruLens8,都采用LLM来判定质量分数。这些工具和基准共同构成了RAG模型系统评估的稳健框架,如表IV所示。


七、讨论与未来展望

尽管RAG技术取得了相当大的进步,但仍存在一些挑战,需要深入研究。本章主要介绍RAG目前面临的挑战和未来的研究方向。


A.RAG与长期背景

随着相关研究的深入,LLMs的范围不断扩大[170]-[172]。目前,LLM可以轻松管理超过200000个令牌的上下文。这意味着以前依赖RAG的长文档问答现在可以将整个文档直接合并到提示中。这也引发了关于当LLM不受上下文约束时,RAG是否仍然必要的讨论。

事实上,RAG仍然发挥着不可替代的作用。一方面,一次为LLM提供大量上下文将显著影响其推理速度,而分块检索和按需输入可以显著提高操作效率。另一方面,基于RAG的生成可以快速定位LLM的原始引用,以帮助用户验证生成的查询。整个检索和推理过程是可观察的,而仅依赖长上下文的生成仍然是一个黑匣子。

相反,语境的扩展为RAG的发展提供了新的机会,使其能够解决更复杂的问题以及需要阅读大量材料才能回答的综合或总结问题[49]。在超长语境下开发新的RAG方法是未来的研究趋势之一。


B.RAG稳健性

在检索过程中噪声或矛盾信息的存在会对RAG的输出质量产生不利影响。这种情况被形象地称为“虚假信息可能比完全没有信息更糟糕”。提高RAG对这种对抗性或反事实输入的抵抗力正在增加研究势头,并已成为一个关键的性能指标[48],[50],[82]。Cuconasu等人[54]分析应检索哪种类型的文档,评估文档与提示的相关性、它们的位置以及上下文中包含的数量。

研究结果表明,包括不相关的文档可以出乎意料地将准确性提高30%以上,这与最初关于质量降低的假设相矛盾。这些结果强调了开发专门策略以将检索与语言生成模型相结合的重要性,强调了对RAG的稳健性进行进一步研究和探索的必要性。


C.混合方法

将RAG与微调相结合正在成为一种领先的战略。确定RAG的最佳集成和微调,无论是顺序的、交替的还是通过端到端的联合训练,以及如何利用参数化和非参数化的优势,都是成熟的探索领域[27]。

另一个趋势是将具有特定功能的SLM引入RAG,并根据RAG系统的结果进行微调。

例如,CRAG[67]训练轻量级检索评估器来评估检索到的查询文档的总体质量,并根据置信水平触发不同的知识检索操作。


D.RAG的标度定律

端到端RAG模型和基于RAG的预训练模型仍然是当前研究者的焦点之一[173]。这些模型的参数是关键因素之一。虽然为LLM建立了缩放定律[174],但其对RAG的适用性仍不确定。

像RETRO++[44]这样的初步研究已经开始解决这一问题,但RAG模型中的参数计数仍然落后于LLM。逆比例定律10的可能性特别有趣,值得进一步研究,其中较小的模型优于较大的模型。


E.生产就绪RAG

RAG的实用性和与工程要求的一致性促进了它的采用。然而,提高检索效率、提高大型知识库中的文档召回率以及确保数据安全——例如防止LLM无意中披露文档源或元数据——是仍有待解决的关键工程挑战[175]。

RAG生态系统的发展在很大程度上受到其技术堆栈的发展的影响。随着ChatGPT的出现,LangChain和LLamaIndex等关键工具迅速流行起来,提供了广泛的RAG相关API,并在LLM领域变得至关重要。新兴技术堆栈的功能虽然不如LangChain和LLamaIndex丰富,但通过其专业产品脱颖而出。

例如,Flowise AI优先考虑低代码方法,允许用户通过用户友好的拖放界面部署AI应用程序,包括RAG。HayStack、Meltano和Cohere Coral等其他技术也因其对该领域的独特贡献而备受关注。

除了专注于人工智能的供应商外,传统软件和云服务提供商正在扩大其产品范围,以包括以RAG为中心的服务。Weaviate的Verba 11是为个人助理应用程序设计的,而亚马逊的Kendra 12提供智能企业搜索服务,使用户能够使用内置连接器浏览各种内容存储库。

在RAG技术的发展过程中,有一个明显的趋势,即朝着不同的专业化方向发展,例如:
1)定制-定制RAG以满足特定的要求。
2) 简化-使RAG更易于使用,以减少初始学习曲线。
3) 专业化-优化RAG以更好地服务于生产环境。

RAG模型及其技术堆栈的相互增长是显而易见的;技术进步不断为现有基础设施建立新的标准。反过来,技术堆栈的增强推动了RAG功能的发展。RAG工具包正在汇聚成一个基础技术堆栈,为高级企业应用程序奠定基础。然而,一个完全集成、全面的平台概念仍在未来,需要进一步创新和发展。


F. 多模态RAG

RAG已经超越了最初基于文本的问答限制,包含了一系列不同的模态数据。这一扩展催生了创新的多模式模型,将RAG概念整合到各个领域:
形象RA-CM3[176]是检索和生成文本和图像的开创性多模式模型。BLIP-2[177]利用冻结图像编码器和LLM进行有效的视觉语言预训练,实现零拍摄图像到文本的转换。“写之前可视化”方法[178]采用图像生成来指导LM的文本生成,在开放式文本生成任务中显示出希望。
音频和视频。GSS方法检索音频片段并将其缝合在一起,以将机器翻译的数据转换为语音翻译的数据[179]。UEOP通过结合语音到文本转换的外部离线策略,标志着端到端自动语音识别的重大进步[180]。此外,基于KNN的注意力融合利用音频嵌入和语义相关的文本嵌入来细化ASR,从而加速领域自适应。
Vid2Seq使用专门的时间标记增强了语言模型,有助于在统一的输出序列中预测事件边界和文本描述[181]。

密码RBPS[182]通过编码和频率分析检索与开发人员目标一致的代码示例,在小规模学习任务中表现出色。这种方法在测试断言生成和程序修复等任务中已经证明了有效性。对于结构化知识,CoK方法[106]首先从知识图中提取与输入查询相关的事实,然后将这些事实作为提示集成到输入中,从而提高知识图问答任务的性能。


八、结论

如图6所示,本文的总结强调了RAG通过将语言模型中的参数化知识与外部知识库中的大量非参数化数据相结合,在增强LLM能力方面取得的重大进展。

该调查展示了RAG技术的发展及其在许多不同任务中的应用。该分析概述了RAG框架内的三种发展范式:Naive、Advanced和Modu-lar RAG,每一种都代表着对其前身的逐步增强。

RAG与其他人工智能方法的技术集成,如微调和强化学习,进一步扩展了其能力。尽管RAG技术取得了进步,但仍有研究机会提高其稳健性和处理扩展上下文的能力。

RAG的应用范围正在扩展到多模式操作,调整其原理来解释和处理各种数据形式,如图像、视频和代码。这一扩展突显了RAG对人工智能部署的重大实际意义,吸引了学术界和工业界的兴趣。

以RAG为中心的人工智能应用程序的兴起和支持工具的不断开发证明了RAG生态系统的不断发展。

随着RAG应用领域的拓宽,有必要完善评估方法以跟上其发展步伐。确保准确和具有代表性的绩效评估对于充分捕捉RAG对人工智能研发社区的贡献至关重要。

在这里插入图片描述

Fig. 6. Summary of RAG ecosystem


2024-04-28(日)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/582772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt客服端开发的组件库

Qt 是一个功能丰富的跨平台 C 应用程序框架,它包含了许多用于不同目的的组件库。以下是一些主要的 Qt 组件库,这些库为开发者提供了广泛的工具和功能,以便构建复杂的应用程序。北京木奇移动技术有限公司,专业的软件外包开发公司&a…

短信接口如何快速对接

短信大家都不陌生,基本上我们每天都会收到各种各样的短信,内容有些是营销类的,有些是数字验证码,有些是快递取件码类似的通知短信,这些短信内容都是通过短信接口触发来进行发送的,那么你知道短信接口如何快…

绘制签章 乱码问题 (踩坑日记)

签章汉字乱码问题 原因:我们在docker上因为没有汉字字体需要我们手动把文件打进去 注意点:如果开启了打包过滤加上字体不过滤 绘制签章转载

数海启航:数学与人工智能的深度交织

在人类文明的长河中,数学始终扮演着探秘未知、构建理论框架的基石角色。随着科技的飞速发展,尤其是人工智能(AI)的兴起,数学与这一前沿领域的结合愈发紧密,成为推动AI进步的最强引擎。 一、数学&#xff1a…

【操作系统复习资料】(持续更新中)

目录 第一章:操作系统引论 第二章:进程的描述与控制 未完待续。。。。。接 第三章:处理机调度与死锁 第四章:存储器管理 第五章:虚拟存储器 第六章:第八节 磁盘存储器的性能和调度 第一章&#xff1a…

Docker深入探索:网络与资源控制、数据管理与容器互联以及镜像生成

目录 一、 Docker网络 (一)Docker网络实现原理 (二)Docker网络模式 1. Bridge网络(默认) 2. Host网络 3. None网络 4. Container网络 5. 自定义网络 二、资源控制 (一)cgr…

windows下pysqlite3安装

pysqlite3 下载地址:SQLite Download Page windows下安装 首先在官网中下载以下文件 sqlite-amalgamation-3450300.zip #源码文件 sqlite-dll-win-x64-3450300.zip # 根据系统选择32或者64,可通过查看我的电脑属性中查看 sqlite-tools-win-x64-345…

万兆以太网MAC设计(9)数据流仲裁模块

文章目录 一、模块接口二、模块功能描述2.1、实现思路 三、仿真3.1、仿真设计3.2、仿真波形 总结: 一、模块接口 c0和c1表示输入的俩个数据通道,c0优先级高,P_ARBITER_LAYER 表示当前是在IP层进行仲裁还是MAC层,可复用于俩个模块…

每日算法之对称二叉树

题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 提示: …

c# 构造函数 静态构造函数 内联字段(即静态字段和实例字段) 父类构造函数 父类静态构造函数 父类内联字段 执行顺序

顺序如下: 1.子类的内联字段 2.子类的静态构造函数 3.父类的内联字段 4.父类的静态构造函数 5.父类的构造函数 6.子类的构造函数 7.子类的方法 public class A{public static string a1"A0";static A(){Console.WriteLine("父类内联字段:…

内网安全【1】——域信息收集/应用网络凭证/CS插件/Android/BloodHound

内容大纲: 概念名词: 局域网 (自己家) 工作组 (网吧) 内网域 (公司) 比如一家公司有1000台机器 运维人员去管理1000 不可能每台上去都进行软件的安装 环境的部署 密码的设置…

VSCODE通过SFTP链接VM进行开发

在vscode插件里面搜索sftp,安装。 安装之后,按ctrlshiftp,找到sftp的config 然后填写刚刚的IP,然后是你的用户名密码 如果是通过密钥链接的话就是这样配置 然后切换到这个sftp的tab里面 然后在你的项目右键,然后选择op…

Linux实现简单进度条(附原理解释和动图效果)

1&#xff0c;行缓冲区 先看下面的代码和运行结果&#xff0c; #include<stdio.h> #include<unistd.h> int main() {printf("你好\n");sleep(3);return 0; }只是一个简单的打印“你好”然后休眠三秒&#xff0c;最后程序结束 再看下面的代码和运行结果…

将阿里云中数据传输到其他超算服务器

目录 方法一&#xff1a;在阿里云中连接超算&#xff0c;然后使用rsync&#xff08;速度慢&#xff09; 方法2&#xff1a;rclone(速度很快&#xff0c;100G只花了大约20min) 方法一&#xff1a;在阿里云中连接超算&#xff0c;然后使用rsync/scp&#xff08;速度慢&#xff0…

JMeter 请求头信息配置详解

在进行 Web 测试和 API 测试时&#xff0c;正确配置 HTTP 请求头是关键步骤之一&#xff0c;尤其当使用诸如 JMeter 这样的强大工具时。在本文中&#xff0c;我将详细介绍如何在 JMeter 中有效地配置和管理HTTP请求头。 在 JMeter 中添加和配置 HTTP 请求头 步骤 1: 打开 HTT…

【MATLAB源码-第195期】基于matlab的OFDM,UFMC,FBMC三种通信系统误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OFDM&#xff08;正交频分复用&#xff09;、UFMC&#xff08;通用频率分割复用&#xff09;、FBMC&#xff08;滤波器组多载波&#xff09;是目前无线通信领域中使用较广的几种多载波调制技术。随着无线通信技术的飞速发展&…

伦敦金的交易时间段都适合投资吗?

是所有的交易时间段都适合投资。首先&#xff0c;让我们了解伦敦金的交易时间。伦敦金市场的交易时间分为两个主要时段&#xff1a;亚洲盘和欧美盘。亚洲盘通常在北京时间早晨6点至下午5点半左右&#xff0c;而欧美盘则从北京时间晚上8点半开始&#xff0c;一直到次日早晨4点半…

cocos-lua资源管理

本文介绍cocos-lua项目的资源管理和工作流&#xff0c;适用人群包括初学者和有经验开发者&#xff0c;故读者可根据自己的需要有选择性的查阅自己需要的内容&#xff0c;下文以ccs代指Cocos Studio 一.简单案例解析 下文通过介绍一个简单demo&#xff0c;介绍合图和资源目录结…

回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测 B…

2024 java使用Graceful Response,告别自己去封装响应,可以接收数据异常,快看我这一篇,足够你用!

参考官网手册地址&#xff1a;快速入门 | Docs 一、导入依赖&#xff08;根据springboot查看对应依赖版本&#xff09; <!-- Graceful --><dependency><groupId>com.feiniaojin</groupId><artifactId>graceful-response</artifactId&g…