【检索增强】Retrieval-Augmented Generation for Large Language Models:A Survey
本文简介
1、对最先进水平RAG进行了全面和系统的回顾,通过包括朴素RAG、高级RAG和模块化RAG在内的范式描述了它的演变。这篇综述的背景下,更广泛的范围内的法学硕士研究RAG的景观。
2、确定并讨论了RAG过程中不可或缺的核心技术,特别关注“检索”、“生成”和“增强”方面,并深入研究了它们的协同作用,阐明了这些组件如何复杂地协作以形成一个有凝聚力和有效的RAG框架。
3、构建了一个全面的RAG评估框架,概述了评估目标和指标。对比分析从不同的角度阐明了RAG与微调相比的优缺点。此外,预测了RAG的未来方向,强调潜在的增强以应对当前的挑战,扩展到多模式设置,以及其生态系统的发展。
R A G 核心组件的分类 RAG核心组件的分类 RAG核心组件的分类
1、RAG框架
(1)简述
本文将RAG搜索范式分成了三类:朴素RAG、高级RAG和模块化RAG
从模块化RAG来看,朴素RAG是只有读取和检索模块,高级RAG除了朴素RAG中的读取和检索模块外,还具有重写和重排模块。
从某种程度上来说,朴素RAG是高级RAG的一个特例,而高级RAG又是模块化RAG的一个特例。三种范式之间是一种继承与发展的关系。
(2)朴素RAG
朴素RAG是传统的RAG过程,包括:索引、检索和生成。
索引:索引过程是离线数据准备的关键,涉及三个阶段。
(1)数据预处理
:数据清洗、提取、格式转换为标准纯文本、切割分块等。
(2)嵌入表示
:将分块后的数据用嵌入模型将其用向量表示。
(3)创建索引
:创建索引以键值对的形式存储这些文本块及其向量嵌入,从而实现高效且可扩展的搜索功能。
检索:受到用户查询后,将会去索引库中匹配向量。
(1)用户查询向量化
:系统使用索引阶段使用的相同编码模型将输入转码为向量表示。
(2)计算相似度分数
:计算查询向量和索引语料库中向量的相似度分数。
(3)优先级排序并检索
:系统对与查询最相关的前K个块进行优先级排序,检索出来对应的文本块,这些文本块将作为结果会返回给用户。
生成:查询与选择出的文档将会被拼接在一起,作为一个连贯的prompt输入给LLM。
传统RAG的缺陷:
低精度、检索快不对齐、幻觉、低回忆率
(3)高级RAG
高级RAG有针对性地解决朴素RAG的潜在问题,实现了检索前策略和检索后策略。还是用了滑动窗口技术、细粒度分割和元数据等技术改进索引方法,引入了各种方法来优化检索过程。
检索前过程:优化数据索引。优化数据索引的目标是提高被检索内容的质量。这涉及五种主要策略:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。
(1)增强数据粒度
:旨在提高文本的标准化、一致性、事实准确性和丰富的上下文,从而提高RAG系统的性能。这包括删除不相关的信息,消除实体和术语中的歧义,确认事实的准确性,维护上下文和更新过时的文件。
(2)优化索引结构
:调整块的大小以捕获相关上下文、跨多个索引路径进行查询,以及通过利用图数据索引中的节点之间的关系来合并图结构中的信息以捕获相关上下文。
(3)添加元数据
:将引用的元数据(日期和用途等)集成到块中进行过滤,以及将引用的章节和小节等元数据集成到块中以提高检索效率。
(4)对齐优化
:通过在文档中引入“假设问题”来纠正对齐问题和差异,从而解决文档之间的对齐问题和差异。
检索:通过计算查询和块之间的相似性识别合适的上下文,Embedding模型是这个过程的核心。
(1)微调Embedding模型
:微调Embedding模型会显著影响RAG系统中检索内容的相关性。该过程包括:自定义Embedding模型、增强特定领域上下文中的检索相关性。可以适应ChatGPT等语言模型来生成用于微调的预训练数据,以制定基于文档块的数据。
(2)动态Embedding
:适应单词使用的上下文,不像静态嵌入,它为每个单词使用单个向量。例如,在向BERT这样的Transformer模型中,相同的单词可以根据周围的单词具有不同的嵌入。OpenAI的embeddings-ada-02模型建立在LLM的原理之上,是一个复杂的动态嵌入模型,可以捕获上下文理解。然而,它可能不会像最新的大规模语言模型(如GPT-4)那样对上席文同样表现出敏感性。
检索后过程:在从数据库中检索有价值的上下文之后,必须将其与查询合并,作为llm的输入,同时解决上下文窗口限制带来的挑战。简单地将所有相关文件一次性呈现给法学硕士可能会超出上下文窗口限制,引入噪音,并阻碍对关键信息的关注。为了解决这些问题,需要对检索到的内容进行额外处理。
(1)重排
:对检索到的信息重新排序,将最相关的内容重新定位到提示的边缘(开头或结尾)是一个关键策略。
(2)prompt压缩
:检索文档中的噪声会对RAG性能产生不利影响。在后处理中,重点在于压缩不相关的上下文,突出关键段落,减少整体上下文长度。包括:利用小语言模型来计算提示互信息或困惑,估计元素的重要性;在不同粒度上训练压缩器来解决这个问题;计了总结技术来增强LLM的关键信息感知,特别是在处理广泛的上下文时。
(4)模块化RAG
模块化RAG提供了一个更为灵活和通用的框架,集成了多种增强功能模块的方法,例如在检索器中加入相似检索的搜索模块和应用微调方法。模块化RAG允许序列化的管道和跨多个模块端到端的方法。
1)模块化RAG的结构
1、搜索模块·:从多源异构数据来源中获取数据。
针对特定场景进行了定制,并结合了对其他语料库的直接搜索。这种集成是使用LLM生成的代码、查询语言(如SQL或Cypher)以及其他自定义工具来实现的。这些搜索的数据源可以包括搜索引擎、文本数据、表格数据和知识图谱。
2、记忆模块:通过利用LLM的记忆信息来指导检索。
包括:识别与当前输入最相似的记忆;利用检索增强生成器迭代创建无界内存池,将“原始问题”和“双重问题”结合起来。通过使用检索增强的生成模型,使用自己的输出来改进自己,文本在推理过程中与数据分布更加一致。利用模型本身的输出来代替训练数据。
3、融合模块:使用LLM将查询扩展到多个不同的角度,多个不同的方法来查询。
这种方法不仅捕获了用户所寻求的明确信息,而且还揭示了更深层次的、具有变革性的知识。融合过程包括对原始查询和扩展查询进行并行向量搜索,智能重新排序以优化结果,并将最佳结果与新查询配对。这种复杂的方法确保搜索结果与用户的显性和隐性意图紧密结合,从而导致更有洞察力和相关的信息发现。
4、路由模块:查询路由决定用户查询的后续操作。
RAG系统的检索过程利用了多种来源,这些来源在领域、语言和格式上都有所不同,可以根据情况进行交替或合并。查询路由决定用户查询的后续操作,包括:汇总、搜索特定数据库或将不同的路径合并到单个响应中。查询路由器还为查询选择适当的数据存储,其中可能包括各种来源,如矢量存储、图形数据库或关系数据库,或者索引层次结构——例如,用于多文档存储的摘要索引和文档块向量索引。查询路由器的决策是预定义的,并通过llm调用执行,llm调用将查询定向到所选的索引。
5、预测模块:解决检索内容中冗余和噪声等常见问题,该模块不是直接从数据源中检索,而是利用LLM生成必要的上下文。
与通过直接检索获得的内容相比,LLM产生的内容更有可能包含相关信息。
6、任务适配:侧重于使RAG适配各种下游任务。
包括:自动从预构建的数据池中检索零shot任务输入的提示,从而增强了任务和模型之间的通用性;利用LLM作为少量查询生成器,并基于生成的数据创建特定于任务的检索器。通过利用LLM的泛化能力,它可以用最少的示例开发特定于任务的端到端检索器。
2)模块化RAG的模式
模块化RAG的组织结构具有高度的适应性,允许在RAG过程中替换或重新排列模块以适应特定的问题上下文。目前研究主要探讨两种组织范式。一种是涉及添加模块替换模块,一种是侧重于调整模块之间的组织流程。这种灵活性使RAG过程能够有效地处理各种任务。
1、添加或替换模块:引入或替换模块的策略包括维护检索-读取过程的核心结构,同时集成其他模块以增强特定功能。
- RRR模型[Ma et al., 2023a]引入了 rewrite-retrieve-read 过程,利用LLM性能作为重写模块的强化学习激励。这使重写器能够微调检索查询,从而提高读取器的下游任务性能。
- 在 Generate-Read [Yu et al., 2022] 等方法中,模块可以选择性地交换,其中LLM的生成模块取代了检索模块。The Recite-Read方法[Sun et al., 2022]将外部检索转换为从模型权重中检索,要求LLM首先记住特定于任务的信息,然后产生能够处理知识密集型自然语言处理任务的输出。
2、调整模块间的流程:在模块流调整领域,重点是加强语言模型和检索模型之间的交互。
- DSP [Khattab et al., 2022]引入了 Demonstratre-Search-Predict 框架,将上下文学习系统视为一个明确的程序,而不是最终的任务提示,从而更有效地处理知识密集型任务。
- ITER-RETGEN [Shao等人,2023]方法利用生成的内容来指导检索,在检索-读取-检索-读取流程中迭代地实现“检索增强生成”和“生成增强检索”。这种方法展示了一种使用一个模块的输出来改进另一个模块的功能的创新方法。
3)优化RAG管道
优化检索过程的目的是提高检索效率和检索质量。目前的研究主要集中在整合多种搜索技术、精炼检索步骤、结合认知回溯、实现通用查询策略以及利用嵌入相似度等方面。这些努力共同努力实现检索效率和上下文信息深度在RAG系统之间的平衡。
1、混合搜索探索:RAG系统通过智能集成各种技术来优化其性能。
包括:基于关键字的搜索、语义搜索和向量搜索。这种方法利用每种方法的独特优势来适应不同的查询类型和信息需求,确保对高度相关和上下文丰富的信息进行一致的检索。使用混合搜索作为检索策略的强大补充,从而提高了RAG管道的整体效率。
2、递归检索和查询引擎:采用两步检索方式,在效率和提供上下文丰富的响应之间取得平衡。
第一步,在初始检索阶段获取较小的块以捕获关键语义。第二步,在流程的后期阶段,将向LLM提供包含更多上下文信息的大块。
3、回退提示:鼓励LLM从具体实例中转移出来,围绕更广泛的概念和原则进行推理。
相当于是把你的问题抽象一下再给大模型。实验结果表明,当使用回退提示时,在各种具有挑战性的、基于推理的任务中,性能显著提高,突出了它们对RAG过程的自然适应性。这些增强检索的步骤既可以应用于生成对回退提示的响应,也可以应用于最终的问答过程。
比如:一个物体从 100 米的高处落下到地上的速度是多少,SBP(step backward prompt) 就是在提示词里加上这样一句话“这个问题遵循什么物理规则”。
4、子查询方法:根据场景的不同,可以采用各种查询策略。
例如使用LlamaIndex等框架提供的查询引擎、利用树查询、利用向量查询或执行简单的块顺序查询。
5、假设的文档嵌入:假设文档嵌入基于生成的答案在嵌入空间中可能比直接查询更接近这一假设,通过LLM为响应查询创建一个假设文档(答案),将该文档嵌入化,并使用生成的嵌入来检索与假设文档相似的真实文档。该方法不是基于查询寻找嵌入相似度,而是关注从一个答案到另一个答案的嵌入相似度。然而,它可能不会始终产生理想的结果,特别是当语言模型不熟悉主题时,可能会导致更多带有错误的实例。
2、检索
从数据源中有效地检索相关文档是至关重要的。然而,如何精确的找到我们需要的文档面临着巨大的挑战。这部分分为三个基本问题:
1、我们如何实现准确的语义表示?
2、什么方法可以对齐查询和文档的语义空间?
3、如何使检索器的输出与大语言模型的偏好保持一致?
(1)增强语义表示
在RAG中,语义空间是必不可少的,因为它涉及查询和文档的多维映射。语义空间的检索精度显著影响RAG结果。本节将介绍构建准确语义空间的两种方法。
1)块优化
在管理外部文档时,最初的步骤包括将它们分解为更小的块,以提取细粒度的特征,然后嵌入这些特征以表示它们的语义。然而,嵌入过大或过小的文本块可能会导致次优结果。因此,确定语料库中文档的最佳块大小对于确保检索结果的准确性和相关性至关重要。
选择适当的分块策略需要仔细考虑几个重要因素,例如索引内容的性质、嵌入模型及其最佳块大小、用户查询的预期长度和复杂性,以及特定应用程序对检索结果的利用。不同的嵌入模型,在不同块大小下表现出不同的性能特征。例如,在处理单个句子时,sentence-transformer模型表现更好。而text-embedding-ada-002在处理包含256或512个token时表现更出色。
用户输入问题的长度和复杂性以及应用程序的特定需求(例如,语义搜索或问题回答)等因素也会影响分块策略的选择。这种选择可能直接受到所选LLM的令牌限制的影响,需要调整块大小。在现实中,获得精确的查询结果需要灵活地应用不同的分块策略。没有放之四海而皆准的“最佳”策略,只有最适合特定环境的策略。
目前RAG的研究探索了各种旨在提高检索效率和准确性的块优化技术。
包括:使用滑动窗口技术,通过跨多个检索过程合并全局相关信息来实现分层检索;
“small2big”方法,在初始搜索阶段利用小文本块,随后向语言模型提供更大的相关文本块进行处理。
2)微调嵌入模型
一旦确定了适当的块大小,下一个关键步骤是使用嵌入模型将这些块和查询嵌入到语义空间中。嵌入的有效性至关重要,因为它影响模型表示语料库的能力。当将通用嵌入模型应用于特定领域时,它们准确捕获特定领域信息的能力可能会受到限制。
嵌入模型在特定任务下微调,对于确保模型从内容相关性方面理解用户查询至关重要。没有调优的模型可能无法充分满足特定任务的需求。因此,对嵌入模型进行微调对于下游应用程序至关重要。在嵌入微调方法中有两种主要的范式。
1、领域知识微调
:为了确保嵌入模型准确地捕获特定于领域的信息,必须利用特定于领域的数据集进行调优。这个过程与标准语言模型微调不同,主要在于所涉及的数据集的性质。
通常,用于嵌入模型微调的数据集包含三个主要元素:查询、语料库和相关文档。该模型使用这些查询来识别语料库中的相关文档。然后,根据响应查询检索这些相关文档的能力来衡量模型的有效性。数据集构建、模型微调和评估阶段各有不同的挑战。
2、针对下游任务微调
:在利用RAG完成这些任务的领域中,通过利用llm的功能来微调嵌入模型的创新方法已经出现。
- PROMPTAGATOR [Dai等人,2022]利用LLM作为少量查询生成器来创建特定于任务的检索器,解决了监督微调中的挑战,特别是在数据稀缺领域。
- LLM-Embedder [Zhang等,2023a],利用llm为跨多个下游任务的数据生成奖励信号。检索器使用两种类型的监督信号进行微调:数据集的硬标签和来自llm的软奖励。这种双信号方法促进了更有效的微调过程,使嵌入模型适应不同的下游应用。
(2)查询与文档对齐
在RAG应用程序的上下文中,检索器可以使用单个嵌入模型对查询和文档进行编码,或者为每个模型使用单独的模型。此外,用户的原始查询可能会受到措辞不精确和缺乏语义信息的影响。因此,将用户查询的语义空间与文档的语义空间保持一致是至关重要的。本节将介绍两种旨在实现这种对齐的基本技术。
1)查询重写
查询重写是对齐查询和文档语义的基本方法。
- Query2Doc和ITER-RETGEN等方法利用llm通过将原始查询与附加指导相结合来创建伪文档[Wang et al., 2023c, Shao et al., 2023]。
- HyDE使用文本线索构建查询向量,生成捕获基本模式的“假设”文档[Gao等,2022]。
- RRR引入了一个框架,该框架颠倒了传统的检索和读取顺序,重点是查询重写[Ma et al., 2023a]。
- step - backprompts使llm能够基于高级概念执行抽象推理和检索[Zheng等,2023]。
- 此外,多查询检索方法利用llm同时生成和执行多个搜索查询,有利于解决包含多个子问题的复杂问题。
2)嵌入转换
除了诸如查询重写之类的广泛策略之外,还有专门为嵌入转换设计的更细粒度的技术。
- LlamaIndex [Liu, 2023]通过引入一个可以集成在查询编码器之后的适配器模块来举例说明这一点。这个适配器有助于调优,从而优化查询嵌入的表示,将它们映射到与预期任务更紧密结合的潜在空间。
- 将查询与结构化外部文档对齐的挑战,特别是在处理结构化和非结构化数据之间的不一致性时,SANTA解决了这个问题[Li等人,2023]。它通过两种预训练策略来提高检索器对结构化信息的敏感性:第一,利用结构化和非结构化数据之间的内在一致性,在结构感知预训练方案中通知对比学习;第二,通过实现掩码实体预测。后者利用以实体为中心的掩码策略,鼓励语言模型预测和填充被掩码的实体,从而促进对结构化数据的更深入理解。
(3)检索器和LLM对齐
在RAG管道中,通过各种技术提高检索命中率不一定会改善最终结果,因为检索的文档可能与llm的特定需求不一致。因此,本节将介绍两种方法,旨在使检索器输出与llm的首选项保持一致。
1)微调检索器
一些研究利用llm的反馈信号来完善检索模型。
- AAR [Yu等人,2023b] 使用编码器-解码器架构为预训练的检索器引入了监视信号。这是通过FiD交叉注意分数来识别LM的首选文档来实现的。随后,通过硬负采样和标准交叉熵损失对检索器进行微调。最终,改进后的检索器可以直接用于增强未见目标LMs,从而提高目标任务的性能。此外,有人认为LLM可能更倾向于关注可读性而不是信息丰富的文档。
- REPLUG [Shi et al., 2023] 利用检索器和LLM计算检索文档的概率分布,然后通过计算KL散度进行监督训练。这种简单有效的训练方法通过使用LM作为监督信号来提高检索模型的性能,从而消除了对特定交叉注意机制的需要。
- UPRISE [Cheng et al., 2023a]也使用冻结llm对提示检索器进行微调。LLM和检索器都将提示输入对作为输入,并利用LLM提供的分数来监督检索器的训练,有效地将LLM视为数据集标注器。
- Atlas [Izacard et al., 2022]提出了四种监督微调嵌入模型的方法:
(1)注意力蒸馏。该方法利用LLM在输出过程中生成的交叉注意分数来提取模型的知识。
(2)EMDR2。该方法采用期望最大化算法,以检索到的文档作为潜在变量对模型进行训练。
(3)困惑度蒸馏。直接使用生成的token的Perplexity作为指标来训练模型。
(4)循环。该方法提出了一种新的基于文档删除对LLM预测影响的损失函数,提供了一种有效的训练策略,使模型更好地适应特定的任务。
这些方法旨在提高检索器和LLM之间的协同作用,从而提高检索性能并更准确地响应用户查询。
(4)适配器
微调模型可能会带来挑战,例如通过API集成功能或解决本地计算资源有限问题。因此,一些方法选择合并一个外部适配器来帮助校准。
- PRCA通过上下文提取阶段和奖励驱动阶段训练适配器。然后,使用基于token的自回归策略**对检索器的输出进行优化[**Yang等人,2023b]。
- token过滤方法采用交叉注意分数来有效地过滤token,只选择得分最高的输入token[Berchansky等人,2023]。
- RECOMP引入了提取压缩器和生成压缩器来生成摘要。这些压缩器要么选择相关句子,要么合成文档信息,创建适合多文档查询的摘要[Xu等,2023a]。
- PKG引入了一种通过指令微调将知识集成到白盒模型中的创新方法[Luo等人,2023]。在这种方法中,直接替换检索模块,根据查询生成相关文档。该方法有助于解决在微调过程中遇到的困难,并增强模型性能。
3、生成
RAG的一个关键组件是它的生成器,它负责将检索到的信息转换成连贯流畅的文本。与传统的语言模型不同,RAG的生成器通过整合检索数据来提高准确性和相关性,从而使自己与众不同。在RAG中,生成器的输入不仅包含典型的上下文信息,还包含通过检索器获得的相关文本片段。这种全面的输入使生成器能够深入了解问题的上下文,从而产生更多信息和上下文相关的响应。
此外,检索的文本来指导生成器,以确保生成的内容与获得的信息之间的一致性。不同的输入数据导致在生成阶段进行有针对性的工作,所有这些工作都旨在改进大型模型对来自查询和文档的输入数据的适应。在接下来的小节中,我们将通过深入研究检索后处理和微调的各个方面来探讨生成器的介绍。
(1)冻结LLM进行后处理
在不可微调的LLM领域中,许多研究依赖于GPT-4 等成熟的模型来利用其全面的内部知识,系统地综合从各种文档中检索到的信息。然而,这些大型模型仍然存在挑战,包括上下文长度的限制和对冗余信息的敏感性。为了解决这些问题,一些研究努力将重点转向检索后处理。
检索后处理包括处理、过滤或优化检索器从大型文档数据库检索到的相关信息。它的主要目标是提高检索结果的质量,使它们更贴近用户需求或后续任务。 它可以看作是对检索阶段获得的文档的再处理。检索后处理中的常见操作通常包括信息压缩和结果重新排序。
1)信息压缩
检索器擅长从庞大的知识库中检索相关信息,但是管理检索文档中的大量信息是一个挑战。正在进行的研究旨在扩展大型语言模型的上下文长度来解决这个问题。然而,当前的大型模型仍然与上下文限制作斗争。因此,在某些情况下,压缩信息是必要的。信息压缩对于降低噪声、解决上下文长度限制和增强生成效果具有重要意义。
- PRCA通过训练一个信息提取器来解决这个问题[Yang等,2023b]。训练过程的目的是尽量减少提取和实际上下文之间的差异。
- RECOMP采用了一种类似的方法,使用对比学习训练一个信息收集器[Xu et al., 2023a]。每个训练数据点由一个正样本和五个负样本组成,编码器在整个过程中使用对比损失进行训练[Karpukhin et al., 2020]。
- 在[Ma et al., 2023b]的研究中采取了不同的方法,旨在减少文件的数量,以提高模型答案的准确性。他们提出了**“Filter-Reranker”范式**,该范式结合了LLM和小语言模型(Small Language Models, slm)的优势。在这个范例中,SLM充当过滤器,而LLM充当重新排序代理。研究表明,指导LLM重新排列由SLM识别的具有挑战性的样本可以显著改善各种信息提取(IE)任务。
2)重排
重新排序模型是优化从检索器检索到的文档集的关键。当引入额外的上下文时,语言模型经常面临性能下降的问题,重新排序可以有效地解决这个问题。核心概念包括重新排列文档记录,将最相关的项放在最上面,从而限制文档的总数。 这既解决了检索过程中上下文窗口展开的难题,又提高了检索效率和响应速度。
重新排序模型在整个信息检索过程中扮演双重角色,既充当优化器,又充当精炼器。它为后续的语言模型处理提供了更有效和准确的输入[Zhuang等,2023]。
上下文压缩被整合到重新排序过程中,以提供更精确的检索信息。这种方法需要减少单个文档的内容并过滤整个文档,其最终目标是在搜索结果中显示最相关的信息,以便更集中、更准确地显示相关内容。
(2)微调LLM进行RAG
在RAG模型中优化生成器是其体系结构的一个关键方面。生成器的作用是获取检索到的信息并生成相关文本,形成模型的最终输出。生成器的优化旨在确保生成的文本既自然又有效地利用检索到的文档来更好地满足用户的查询需求。
在标准llm生成任务中,输入通常由查询组成。RAG的突出之处在于,它不仅将查询,还将检索器检索到的各种文档(结构化/非结构化)合并到输入中。这些附加信息可以显著地影响模型的理解,特别是对于较小的模型的影响。在这种情况下,对模型进行微调以适应查询和检索文档的输入变得至关重要。在将输入呈现给微调模型之前,通常会对检索器检索到的文档进行检索后处理。必须注意的是,RAG中生成器的微调方法与llm的一般微调方法是一致的。下面,我们将简要介绍一些涉及数据(格式化/未格式化)和优化函数的代表性工作。
1)通用优化过程
作为一般优化过程的一部分,训练数据通常由输入-输出对组成,目的是训练模型在给定输入x的情况下产生输出y。
- Self-Mem [Cheng et al., 2023b]的工作中,采用传统的训练过程,其中给定输入x,检索相关文献z(在文中选择Top-1),对(x, z)进行整合后,模型生成输出y。本文采用了两种常用的微调范式,即Joint-Encoder和two - encoder [Arora等,2023,Wang等,2022b, Lewis等,2020,Xia等,2019,Cai等,2021,Cheng等,2022]。
- 在Joint-Encoder中,使用了基于编码器-解码器的标准模型。在这里,编码器最初对输入进行编码,而解码器通过注意机制将编码结果结合起来,以自回归的方式生成令牌。
- 在DualEncoder中,系统设置两个独立的编码器,每个编码器分别对输入(查询、上下文)和文档进行编码。由此产生的输出由解码器按顺序进行双向交叉注意力处理。
这两种架构都使用Transformer [Vaswani等人,2017]作为基础块,并使用负对数似然损失进行优化。
2)运用对比学习
在为语言模型准备训练数据的阶段,通常会创建输入和输出的交互对。这种传统方法可能导致“暴露偏差”,即模型只在单个正确的输出示例上进行训练,从而限制了其暴露于一系列可能的输出序列。这种限制可能会导致模型过度拟合训练集中的特定示例,从而降低其在各种上下文中泛化的能力,从而阻碍模型的实际性能。
- 为了减轻暴露偏差,SURGE [Kang等人,2023]提出使用图文对比学习。这种方法包括一个对比学习目标,促使模型产生一系列合理和连贯的反应,扩展到训练数据中遇到的实例之外。这种方法对于减少过拟合和增强模型的泛化能力至关重要。
- 对于涉及结构化数据的检索任务,SANTA框架[Li et al., 2023]实现了一个三方训练方案,以有效地封装结构和语义的细微差别。
(1)初始阶段使用检索器,利用对比学习来细化查询和文档嵌入。
(2)随后,生成器的初步训练阶段采用对比学习将结构化数据与其非结构化文档描述对齐。在生成器训练的进一步阶段,该模型承认实体语义在文本数据的表示学习中起着关键作用,如[Sciavolino等人,2021,Zhang等人,2019]所强调的那样。这个过程从识别结构化数据中的实体开始,然后在生成器的输入数据中对这些实体应用掩码,从而为模型预测和预测这些掩码元素奠定基础。
(3)训练方案随着模型学习的进展,利用上下文信息重构被掩盖的实体。这个过程培养了模型对文本数据的结构语义的理解,并促进了结构化数据中相关实体的对齐。 总体优化目标是训练语言模型准确地恢复模糊的跨度,从而丰富其对实体语义的理解[Ye et al., 2020]。
4、RAG增强方法
本节围绕三个关键方面展开:增强阶段、增强数据的来源和增强过程。这些方面阐明了对RAG的发展至关重要的关键技术。
(1)增强阶段
RAG是一项知识密集型的工作,在语言模型训练的预训练、微调和推理阶段整合了各种技术方法。
1)预训练阶段
在预训练阶段,研究人员研究了通过基于检索的策略来支持开放域QA的ptm的方法。
- REALM模型采用结构化、可解释的方法进行知识嵌入、框架预训练和微调,作为掩模语言模型(MLM)框架内的检索-预测工作流[Arora等人,2023]。
- RETRO [Borgeaud等人,2022]利用检索增强技术从头开始进行大规模预训练,实现了模型参数的减少,同时在困惑度方面超过了标准的GPT模型。RETRO的独特之处在于,它有一个建立在GPT模型的基础结构之上额外的编码器,用于处理从外部知识库检索到的实体的特征。
- Atlas[Izacard等人,2022]还在预训练和微调阶段将检索机制纳入T5架构[rafael等人,2020]。它使用预训练的T5来初始化编码器-解码器语言模型,使用预训练的Contriever来初始化密集检索器,提高了复杂语言建模任务的效率。
- COG [Lan等人,2022]引入了一种新的文本生成方法,该方法模拟从预先存在的集合中复制文本片段。利用高效的向量搜索工具,COG计算和索引文本片段的上下文有意义的表示,与RETRO相比,在问答和领域适应等领域表现出优越的性能。
- 标度定律的出现促进了模型参数的增长,推动自回归模型成为主流。研究人员正在将RAG方法扩展到预训练更大的模型,RETRO++通过在保持或增强性能的同时扩大模型参数来体现这一趋势[Wang等人,2023b]。
经验证据强调了文本生成质量、事实准确性、降低毒性和下游任务熟练程度的显著改进,特别是在像开放领域QA这样的知识密集型应用中。这些结果表明,将检索机制集成到自回归语言模型的预训练中是一条有前途的途径,将复杂的检索技术与广泛的语言模型相结合,以产生更精确和有效的语言生成。
增强预训练的好处包括一个健壮的基础模型,该模型在困惑度、文本生成质量和特定任务性能方面优于标准GPT模型,同时使用更少的参数。这种方法特别擅长处理知识密集型任务,并通过对专门语料库的训练促进特定领域模型的开发。
尽管如此,这种方法面临着挑战,例如需要广泛的预训练数据集和资源,以及随着模型大小的增加而减少的更新频率。尽管存在这些障碍,但该方法在模型弹性方面提供了显著的优势。经过训练后,检索增强模型可以独立于外部库进行操作,从而提高生成速度和操作效率。所确定的潜在收益使该方法成为人工智能和机器学习领域正在进行的研究和创新的引人注目的主题。
2)微调阶段
RAG和Fine-tuning是增强llm的强大工具,将两者结合起来可以满足更具体场景的需求。一方面,微调允许检索具有独特样式的文档,实现更好的语义表达,并调整查询和文档之间的差异。这确保了检索器的输出更适合手头的场景。另一方面,微调可以满足进行风格化和针对性调整的生成需求。此外,微调还可以用于对齐检索器和生成器,以改进模型协同。
微调检索器的主要目标是通过使用语料库直接微调嵌入模型来提高语义表示的质量[Liu, 2023]。通过反馈信号将检索器的能力与llm的偏好对齐,可以更好地协调两者[Yu et al., 2023b, Izacard et al., 2022, Yang et al., 2023b, Shi et al., 2023]。为特定的下游任务微调检索器可以提高适应性。引入任务不可知微调旨在增强检索器在多任务场景中的多功能性[Cheng et al., 2023a]。
微调生成器可以产生更加风格化和定制的输出。一方面,它允许专门适应不同的输入数据格式。例如,微调llm以适应知识图谱的结构[Kang等人,2023]、文本对的结构[Kang等人,2023,Cheng等人,2023b]和其他特定结构[Li等人,2023d]。另一方面,通过构建指令数据集,可以要求llm生成特定格式的内容。例如,在自适应或迭代检索场景中,llm被微调以生成有助于确定下一步行动时间的内容 [Jiang等人,2023b, Asai等人,2023]。
通过协同微调检索器和生成器,我们可以增强模型的泛化能力,并避免单独训练它们可能产生的过拟合。然而,联合微调也会导致资源消耗增加。RA-DIT [Lin等,2023]提出了一种轻量级的双指令调优框架,可以有效地为任何llm添加检索功能。检索增强指令微调更新LLM,指导它更有效地利用检索到的信息,并忽略分散注意力的内容。
尽管有其优点,但微调也有局限性,包括需要专门的数据集进行RAG微调以及需要大量的计算资源。然而,这个阶段允许根据特定的需求和数据格式定制模型,与预训练阶段相比,潜在地减少了资源使用,同时仍然能够微调模型的输出样式。
总而言之,微调阶段对于使RAG模型适应特定的任务至关重要,从而能够对检索器和生成器进行细化。这一阶段增强了模型的通用性和对各种任务的适应性,尽管资源和数据集需求带来了挑战。因此,RAG模型的战略性微调是开发高效和有效的检索增强系统的关键组成部分。
2)推理阶段
RAG模型中的推理阶段是至关重要的,因为它涉及到与llm的广泛集成。传统的RAG方法,也称为朴素RAG,涉及在此阶段合并检索内容以指导生成过程。
为了克服朴素RAG的局限性,先进的技术在推理过程中引入了更多上下文丰富的信息。
- DSP框架[Khattab et al., 2022]利用前沿LMs和检索模型(RM)之间复杂的自然语言文本交换,丰富了上下文,从而提高了生成结果。
- PKG [Luo等人,2023]方法为llm配备了一个知识引导模块,该模块允许在不修改LMs参数的情况下检索相关信息,从而能够执行更复杂的任务。
- CREAICL [Li et al., 2023b]采用跨语言知识的同步检索来增强上下文。
- 而RECITE[Sun et al., 2022]通过直接从LLM中抽取段落来生成上下文。
在推理过程中,RAG过程的进一步细化可以在满足需要多步骤推理的任务的方法中看到。
- ITRG [Feng等,2023]迭代检索信息以识别正确的推理路径,从而提高任务适应性。
- ITERRETGEN [Shao et al., 2023]采用迭代策略,在“检索增强生成”和“生成增强检索”之间交替的循环过程中合并检索和生成。
- 对于非知识密集型(NKI)任务,PGRA [Guo等人,2023]提出了一个两阶段框架,首先是任务不可知的检索器,然后是提示引导的重新排序器,以选择和优先考虑证据。
相比之下,IRCOT [Trivedi等人,2022]将RAG与思维链(CoT)方法结合起来,交替使用CoT引导的检索与检索通知的CoT过程,显著提高了GPT-3在各种问答任务中的表现。
从本质上讲,这些推理阶段的增强提供了轻量级的、经济有效的替代方案,可以利用预训练模型的功能,而不需要进一步的训练。其主要优点是在提供上下文相关信息以满足特定任务需求的同时维护静态LLM参数。然而,这种方法并非没有局限性,因为它需要细致的数据处理和优化,并且受到基础模型固有能力的约束。为了有效地解决不同的任务需求,该方法通常与过程优化技术相结合,如分步推理、迭代检索和自适应检索策略。
(2)增强来源
扩充数据源的选择严重影响RAG模型的有效性。不同的知识水平和维度需要不同的处理技术。它们分为非结构化数据、结构化数据和LLM生成的内容。具有代表性的不同增强方面的RAG研究技术树如下图所示。叶子以三种不同的深浅颜色表示使用不同类型数据的增强:非结构化数据、结构化数据和llm生成的内容。该图清楚地表明,最初,增强主要通过非结构化数据实现,例如纯文本。这种方法后来扩展到包括使用结构化数据(例如知识图)以进一步改进。最近,在研究中有一种日益增长的趋势,即利用llm本身生成的内容进行检索和增强。
1)非结构化数据增强
非结构化文本从语料库中收集,例如用于微调大型模型的提示数据[Cheng等人,2023a]和跨语言数据[Li等人,2023b]。检索单元从token(例如kNN-LM [Khandelwal等人,2019])到短语(例如NPM, COG [Lee等人,2020,Lan等人,2022])和文档段落不等,更细的粒度以增加检索复杂性为代价提供精度。
- FLARE [Jiang等人,2023b]引入了一种主动检索方法,由LM生成的低概率词触发。它为文档检索创建一个临时句子,然后使用检索到的上下文重新生成该句子,以预测后续的句子。
- RETRO使用前一个块来检索块级别上最近的邻居,结合前一个块的上下文,它指导下一个块的生成。为了保持因果关系,下一个块Ci的生成只利用前一个块的最近邻居N(Ci−1)而不是N(Ci)。
2)结构化数据增强
结构化数据,如知识图(KGs),提供了高质量的上下文并减轻了模型幻觉。
- RET-LLMs [Modarressi et al., 2023]从过去的对话中构建知识图记忆,以供将来参考。
- SUGRE [Kang et al., 2023]使用图神经网络(Graph Neural Networks, gnn)对相关KG子图进行编码,通过多模态对比学习确保检索事实与生成文本的一致性。
- Knowledge edGPT [Wang et al., 2023]生成知识库搜索查询,并将知识存储在个性化库中,增强了RAG模型的知识丰富性和上下文性。
3)在RAG中LLM生成的内容
针对RAG中外部辅助信息的局限性,一些研究侧重于利用LLM的内部知识。
- SKR [Wang等,2023e]将问题分类为已知或未知,有选择地应用检索增强。
- GenRead [Yu et al., 2022]用LLM生成器替换了检索器,发现LLM生成的上下文通常包含更准确的答案,因为它更好地符合因果语言建模的预训练目标。
- Selfmem [Cheng et al., 2023b]使用检索增强生成器迭代创建无界内存池,使用内存选择器选择作为原始问题对偶问题的输出,从而自增强生成模型。
这些方法强调了RAG中创新数据源利用的广度,努力提高模型性能和任务有效性。
(3)增强过程
在RAG领域中,标准过程通常涉及一个检索步骤,然后是生成,这可能导致效率低下。一个值得注意的问题被称为 “中间丢失”现象 ,当单个检索产生冗余内容(可能会稀释或相矛盾的基本信息)时,从而降低生成质量[Liu et al., 2023a]。此外,这种单步检索通常不足以解决需要多步推理的复杂问题,因为它提供的信息范围有限[Yoran等人,2023]。
为了解决这些挑战,当代研究提出了改进检索过程的方法:迭代检索、递归检索和自适应检索。
- 迭代检索允许模型进行多个检索周期,增强了所获得信息的深度和相关性。
- 递归检索过程,其中一次检索操作的结果用作后续检索的输入。它有助于深入研究相关信息,特别是在处理复杂或多步骤查询时。递归检索通常用于需要逐步得到最终答案的场景,例如在学术研究、法律案例分析或某些类型的数据挖掘任务中。
- 自适应检索提供了一种动态调整机制,使检索过程适应不同任务和上下文的具体要求。
1)迭代检索
RAG模型中的迭代检索是基于初始查询和迄今为止生成的文本重复收集文档的过程,为LLM提供了更全面的知识库[Borgeaud等人,2022,Arora等人,2023]。这种方法已被证明可以通过多次检索迭代提供额外的上下文引用来增强后续答案生成的鲁棒性。然而,它可能会受到语义不连续和不相关信息积累的影响,因为它通常依赖于n个令牌序列来划定生成文本和检索文档之间的边界。
2)递归检索
递归检索常用于信息检索和自然语言处理,以提高搜索结果的深度和相关性。该过程涉及基于从以前的搜索中获得的结果迭代地改进搜索查询。
为了解决特定的数据场景,使用了递归检索和多跳检索技术。递归检索涉及到以分层方式处理和检索数据的结构化索引,其中可能包括在基于该摘要执行检索之前对文档或冗长PDF的各个部分进行总结。随后,文档中的二次检索细化了搜索,体现了该过程的递归性质。相比之下,多跳检索旨在更深入地挖掘图结构数据源,提取相互关联的信息[Li et al., 2023c]。
此外,一些方法集成了检索和生成的步骤。ITER-RETGEN [Shao等人,2023]采用协同方法,利用“检索增强生成”和“生成增强检索”来完成需要复制特定信息的任务。该模型利用处理输入任务所需的内容作为检索相关知识的上下文基础,这反过来又有助于在随后的迭代中生成改进的响应。
递归检索旨在通过反馈循环逐渐收敛到最相关的信息,从而增强搜索体验。
- IRCoT [Trivedi et al., 2022] 使用思维链(chain ofthought)来指导检索过程,并利用获得的检索结果对CoT进行细化。
- ToC [Kim等人,2023]创建了一个澄清树,系统地优化查询中的模糊部分。在复杂的搜索场景中,如果用户的需求从一开始就不完全清楚,或者所寻求的信息非常专门化或微妙,那么它特别有用。该过程的递归性质允许不断学习和适应用户的需求,通常会提高对搜索结果的满意度。
3)自适应检索
自适应检索方法,如Flare和SelfRAG [Jiang等人,2023b, Asai等人,2023],通过使llm能够主动确定检索的最佳时刻和内容,从而提高了信息源的效率和相关性,从而完善了RAG框架。
这些方法是llm在其操作中采用主动判断的更广泛趋势的一部分,正如在AutoGPT, Toolformer和Graph-Toolformer等模型代理中所看到的那样[Yang等人,2023c, Schick等人,2023,Zhang, 2023]。
- Graph-Toolformer将其检索过程划分为不同的步骤,其中llm主动使用检索器,应用Self-Ask技术,并使用少量提示来启动搜索查询。这种主动的姿态允许llm决定何时搜索必要的信息,类似于代理如何利用工具。
- WebGPT [Nakano等人,2021]集成了一个强化学习框架,在文本生成过程中使用搜索引擎自主训练GPT-3模型。它使用特殊的令牌来导航这个过程,这些令牌促进了搜索引擎查询、浏览结果和引用引用等操作,从而通过使用外部搜索引擎扩展了GPT-3的功能。
- Flare通过监测生成过程的置信度来自动获取时序,如生成项的概率所示[Jiang等,2023b]。当概率低于某一阈值时,将激活检索系统收集相关信息,从而优化检索周期。
- Self-RAG [Asai等人,2023]引入了“反思token”,允许模型自省其输出。这些标记有两种:“检索”和“批评”。
(1)模型自主地决定何时激活检索,或者通过预定义的阈值触发可能的流程。在检索过程中,生成器在多个段落之间进行片段级波束搜索,以获得最连贯的序列。
(2)评论分数用于更新细分分数,在推理过程中可以灵活地调整这些权重,从而调整模型的行为。
Self-RAG的设计不需要额外的分类器或依赖于自然语言推理(NLI)模型,从而简化了何时使用检索机制的决策过程,并提高了模型在生成准确响应方面的自主判断能力。
LLM优化由于其日益普及而受到了极大的关注。诸如提示工程、微调(FT)和RAG等技术各有不同的特征,如下图所示。
虽然快速工程利用了模型的固有功能,但优化llm通常需要同时应用RAG和FT方法。RAG和FT之间的选择应该基于场景的特定需求和每种方法的固有属性。下表给出了RAG和FT的详细比较。
5、RAG评估
6、未来展望
相关文章:
【检索增强】Retrieval-Augmented Generation for Large Language Models:A Survey
本文简介 1、对最先进水平RAG进行了全面和系统的回顾,通过包括朴素RAG、高级RAG和模块化RAG在内的范式描述了它的演变。这篇综述的背景下,更广泛的范围内的法学硕士研究RAG的景观。 2、确定并讨论了RAG过程中不可或缺的核心技术,特别关注“…...
EVM Layer2 主流解决方案
深度解析主流 EVM Layer 2 解决方案:zk Rollups 和 Optimistic Rollups 随着以太坊网络的不断演进和 DeFi 生态系统的迅速增长,以太坊 Layer 2 解决方案日益受到关注。 其中,zk Rollups 和 Optimistic Rollups 作为两种备受瞩目的主流 EVM&…...
go中结构体标签:omitempty、json꞉“name“、 gorm꞉“column꞉name“、yaml꞉“name“
在Go语言中,结构体标签(Struct Tags)提供了一种在编译时附加到结构体字段上的元数据,这些标签可以被运行时的反射(reflection)机制读取。结构体标签的存在意义和用途非常广泛,主要包括ÿ…...
七月论文审稿GPT第4版:通过paper-review数据集微调Mixtral-8x7b,对GPT4胜率超过80%
前言 在此之前,我司论文审稿项目组已经通过我司处理的paper-review数据集,分别微调了RWKV、llama2、gpt3.5 16K、llama2 13b、Mistral 7b instruct、gemma 7b 七月论文审稿GPT第1版:通过3万多篇paper和10多万的review数据微调RWKV七月论文审…...
【QT学习】1.qt初识,创建qt工程,使用按钮,第一个交互按钮
1.初识qt--》qt是个框架,不是语言 1.学习路径 一 QT简介 ,QTCreator ,QT工程 ,QT的第一个程序,类,组件 二 信号与槽 三 对话框 四 QT Desiner 控件 布局 样式 五 事件 六 GUI绘图 七 文件 八 …...
JavaScript_与html结合方式
JavaScript_语法 ECMAScript:客户端脚本语言的标准 1.基本语法 1.1 与html结合方式(2种) 1. 内部JS 定义<script>,标签体内容就是js代码 2. 外部JS 定义<script>,通过src属性引入外部的 js文件 注意: 1.<script>…...
WPF —— 动画
wpf动画类型 1<类型>Animation这些动画称为from/to/by动画或者叫基本动画,他们会在起始值或者结束值进行动画处理,常用的例如 <DoubleAnimation> 2 <类型>AnimationUsingKeyFrames: 关键帧动画,功能要比from/to这些动画功…...
前端二维码生成工具小程序:构建营销神器的技术解析
摘要: 随着数字化营销的不断深入,二维码作为一种快速、便捷的信息传递方式,已经广泛应用于各个领域。本文旨在探讨如何通过前端技术构建一个功能丰富、操作简便的二维码生成工具小程序,为企业和个人提供高效的营销支持。 一、引言…...
光伏发电量预测(Python代码,CNN结合LSTM,TensorFlow框架)
1.数据集(开始位置),数据集免费下载链接:https://download.csdn.net/download/qq_40840797/89051099 数据集一共8列,第一列是时间,特征列一共有6列:"WindSpeed" - 风速 "Sunshi…...
GPT带我学-设计模式11-组合模式
设计模式类型 结构型设计模式 使用场景 将对象组合成树状结构来表现"部分-整体"的层次结构。这种模式能够使得客户端对单个对象和组合对象的使用具有一致性。这句话太抽象了,拿一个实际的网站菜单树例子来说。 例子:网页菜单树 一个网站的…...
Centos7 elasticsearch-7.7.0 集群搭建,启用x-pack验证 Kibana7.4用户管理
前言 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 环境准备 软件 …...
[CSS]中子元素在父元素中居中
元素居中 对于当行文字居中,比较简单,设置text-align:center和text-height为盒子高度即可 对于父元素中子元素居中,要实现的话有以下几个方法 方法1:利用定位margin:auto <style>.father {width: 500px;heig…...
电脑突然死机怎么办?
死机是电脑常见的故障问题,尤其是对于老式电脑来说,一言不合电脑画面就静止了,最后只能强制关机重启。那么你一定想知道是什么原因造成的吧,一般散热不良最容易让电脑死机,还有系统故障,比如不小心误删了系…...
Kyligence 正式加入华为“同舟共济”行动计划,成为行业数智化“联盟级伙伴”
让“生态飞轮”旋转让“生态飞轮”旋转3月14日至15日,华为中国合作伙伴大会 2024 在深圳召开。本次大会以“因聚而生,数智有为”为主题,皆在升级“伙伴华为”数智体系,共筑解决方案竞争力,共赢数智世界新机遇。Kyligen…...
大模型推理框架——text-generation-inference
项目地址:https://github.com/huggingface/text-generation-inference 安装 安装rust curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh安装 Protoc PROTOC_ZIP=protoc-21.12-linux-x86_64.zip curl -OL https://github.com/protocolbuffers/protobuf/relea…...
电梯四种事故检测YOLOV8
电梯四种事故检测,采用YOLOV8训练得到PT模型,然后转换成ONNX,OPENCV调用,支持C/PYTHON/ANDORID开发 电梯四种事故检测YOLOV8...
构建docker环境下的thunder迅雷插件
前言 从迅雷群晖套件中提取出来用于其他设备的迅雷远程下载服务程序。仅供测试,测试完请大家自觉删除。 下载保存目录 /xunlei/downloads, 对应迅雷应用内显示的下载路径是 /downloads 或者 /迅雷下载 仓库 阿里云镜像(国内访问ÿ…...
Django开发复盘
一、URL 对于一个不会写正则表达式的蒟蒻来说,在urls.py中就只能傻傻的写死名字,但是即便这样,还会有很多相对路径和绝对路径的问题(相对ip端口的路径),因为我们网页中涉及到页面跳转,涉及到发送…...
第6章 数据存储操作
思维导图 6.1 引言 数据存储与操作包括对存储数据的设计、实施和支持,最大化实现数据资源的价值,贯穿于数据创建/获取到处置的整个生命周期。 6.1.1 业务驱动因素 数据存储与操作活动对于依赖数据的企业来说非常关键,这些活动的主要驱动因素是…...
接口自动化框架搭建(八):pytest+allure+jenkins接入
1,安装allure插件 2,创建jenkins项目 怎么确定路径,可以查看工作空间,jenkins默认根目录就是工作空间 配置执行用例的命令,可以现在pycharm上试一下,然后在jenkins中配置: 把启动java服务的代…...
linux监控命令全
1.1 top 1.1.1 命令说明 Top 命令能够实时监控系统的运行状态,并且可以按照cpu、内存和执行时间进行排序 1.1.2 用法 top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...] 1.1.3 参数说明 命令行启动参数: -b : 批次…...
【GenAI】使用GenAI堆栈构建视频分析和转录字幕聊天机器人
【GenAI】使用GenAI堆栈构建视频分析和转录字幕聊天机器人 目录 【GenAI】使用GenAI堆栈构建视频分析和转录字幕聊天机器人高层架构入门指南克隆存储库指定您的API密钥构建和运行应用程序使用yt-whisper提交视频访问Dockerbot聊天服务结论推荐超级课程: Docker快速入门到精通K…...
全国产数据采集卡定制,24位八通道以太网数据采集卡 labview 100K采样
XM702是一款以太网型高速数据采集卡,具有8通 道真差分输入,24位分辨率,单通道最高采样率100ksps八通 道同步共计800ksps、精密前置增益放大、集成IEPE/ICP硬件 支持的特点。本产品采用了多个高精度24位ADC单元及配合本 公司多年积累开发的前置…...
JavaEE初阶-线程3
文章目录 一、线程安全问题-内存可见性二、等待通知2.1 wait()方法2.2 notify()方法 一、线程安全问题-内存可见性 import java.util.Scanner;public class Demo27 {private static int count0;//下面这段代码会出现内存的可见性问题//将从内存中读取count值的操作称为load 判…...
C++递归(2)
数塔问题? 题目描述: 有如下所示的数塔,要求从底层走到顶层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 输入 输入数据首先包括一个整数整数N(1 输出 从底层走到顶层经过的数字的最大…...
算法训练营第27天|LeetCode 39.组合总和 40.组合总和2 131.分割回文串
LeetCode 39.组合总和 题目链接: LeetCode 39.组合总和 解题思路: 用回溯的方法,,注意这次回溯不是i1,而是i,是因为可用重复选取。 代码: class Solution { public:vector<vector<i…...
【Web】NSSCTF Round#20 Basic 两道0解题的赛后谈
目录 前言 baby-Codeigniter 组合拳! 前言 本想着说看看go的gin框架就睡了的,r3师傅提醒说赛题环境已经上了,那不赶紧研究下😀 主要来谈谈做题的心路历程 baby-Codeigniter 拿到题目的第一反应应该是:“什么是C…...
memcached缓存数据库简介
memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。 memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。 …...
C# WPF编程-Application类(生命周期、程序集资源、本地化)
C# WPF编程-Application类 应用程序的生命周期创建Application对象应用程序的关闭方式应用程序事件 Application类的任务显示初始界面处理命令行参数访问当前Application对象在窗口之间进行交互 程序集资源添加资源检索资源pack URI内容文件 每个运行中的WPF应用程序都由System…...
fpga_hdmi
HDMI简介: 高清晰度多媒体端接口,通常用来连接一些音视频设备,进行高质量的传输,能够同时传输音频信号和视频信号。而且在传输速度上具有较大的优势。 通过hdmi接口进行数据传输时,不需要切换模块,或者提前设置转换。…...
那家做网站好/上海公布最新情况
中兴路由器无中继的DHCP配置一、实验目的二、实验内容三、实验流程四、实验总结一、实验目的 掌握DHCP的基本原理和作用,及其DHCP的网络架构; 二、实验内容 1.完成路由器DHCP(不含中继)的基本配置和结果验证; 三、…...
英文网站建设需求/高级搜索百度
2020博客地址汇总2019年博客汇总 Skywalking链路监控 1、Skywalking概述 请求链路追踪,故障快速定位:可以通过调用链结合业务日志快速定位错误信息。 可视化:各个阶段耗时,进行性能分析。 依赖优化:各个调用环节的…...
沈阳建设网站费用/百度百家号官网
主成分分析(PCA)是一种常用的数据降维技术,可以将高维数据转化为低维数据,并保留数据的主要特征。在机器学习和数据分析中,PCA被广泛应用于特征提取、数据可视化和模型训练等领域。本文将介绍如何使用Matlab实现PCA算法…...
做网站设计的电脑需要什么配置/超八成搜索网站存在信息泄露问题
使用注解配置 步骤 导包(421)基本4个组件包加2个日志包(log4j,logging),再加aop 将对象注册到容器中spring 中提供Component 的三个衍生注解:(功能目前来讲是一致的) 如果不指定任何属性时,默认使用短类名作为bean的id(首字母改成小写) Component("…...
免费空间做自己的网站/海外营销推广
关于用织梦cms做的网站,优化这块有个地方必须要注意一下,就是列表页,我们默认生成的每一页,他的标题、关键词、描述都是一样的,但是搜索引擎有个要求,就是尽量保证网站的标题具有唯一性,意思就是说不要存在同样的title的你的网站里面.很明显织梦默认的是不符合要求的,比如某个栏…...
仿牌网站安全/百度关键词模拟点击软件
主题 客户端 发布订阅的对象是主题(Topic) 向主题发布消息的客户端应用程序称为生产者(Producer),生产者可以持续不断地向多个主题发送消息 订阅这些主题消息的客户端应用程序称为消费者(Consumer&#…...