RAG 面向 LLM: 基于检索增强的大语言模型调研

news2024/11/20 8:46:57

摘要

作为 AI 领域最先进的技术之一,检索增强生成(RAG)技术可以提供可靠和最新的外部知识,为众多任务提供巨大的便利。特别是在 AI 生成内容(AIGC)时代,RAG 中检索强大的提供额外知识的能力使得检索增强生成能够辅助现有生成式 AI 生产高质量输出。最近,大语言模型(LLM)在语言理解和生成方面表现出革命性的能力,但仍面临固有的局限性,如幻觉和过时的内部知识。鉴于 RAG 在提供最新和有用的辅助信息方面的强大能力,检索增强的大语言模型应运而生,利用外部和权威的知识库,而不是仅仅依赖模型的内部知识,以增强 LLM 的生成质量。新加坡国立大学在这篇综述中,全面回顾了检索增强大语言模型(RA-LLM)现有的研究,涵盖了三个主要技术视角:架构、训练策略和应用。作为基础知识,该研究简要介绍了 LLM 的基础和最新进展。然后,为了说明 RAG 对 LLM 的实际意义,该研究按应用领域对主流相关工作进行分类,详细说明了每个领域的具体挑战以及 RA-LLM 的相应能力。最后,为了提供更深入的见解,该研究讨论了当前的局限性和未来研究的几个有前景的方向。

论文出处: https://arxiv.org/pdf/2405.06211

1 简介

作为最基础的数据挖掘技术之一,检索旨在理解输入查询并从外部数据源中提取相关信息。它在各个领域都有广泛的应用,如搜索、问答和推荐系统。例如,搜索引擎(如谷歌、必应和百度)是检索在行业中最成功的应用;它们可以过滤和检索与用户查询最相关的网页或文档,使用户能够有效地找到所需信息。同时,通过在外部数据库中有效地维护数据,检索模型可以提供可靠和及时的外部知识,从而在各种知识密集型任务中发挥重要作用。由于其强大的能力,检索技术已成功地集成到人工智能生成内容(AIGC)时代的先进生成模型中。值得注意的是,检索模型与语言模型的结合产生了检索增强生成(RAG),它已经成为生成式 AI 领域最具代表性的技术之一,旨在提高文本内容的生成质量。在这里插入图片描述

为了提高生成模型的效果,RAG 从外部数据源引入信息或知识,作为输入查询或生成输出的补充。具体而言,RAG 首先调用检索器来搜索和提取外部数据库中的相关文档,然后将其作为上下文来增强生成过程。在实践中,RAG 技术通过简单地调整检索组件,在各种生成任务中都很容易且有效地应用,几乎不需要额外的训练。最近的研究表明,RAG 不仅对知识密集型任务如开放域问答(OpenQA)有很大的潜力,而且对一般语言任务和各种下游应用也有很大的潜力。

近年来,预训练基础模型,特别是大语言模型(LLM)的快速发展,在各种任务上都表现出惊人的性能,包括推荐系统、分子发现[72]和报告生成。LLM 的巨大成功从技术上可以归因于具有数十亿参数的先进架构,在来自各种来源的海量训练语料上进行预训练。这些技术改进带来了 LLM 的显著涌现能力,特别是在语言理解和生成、上下文学习等方面。例如,GPT-FAR 引入详细的提示来教导 GPT-4 进行图像标注、统计分析和文本分析,以生成多模态时尚报告。LLM 还通过理解用户对物品的偏好,在推荐系统中取得了良好的性能。尽管取得了成功,但 LLM 仍然存在内在的局限性,例如缺乏特定领域的知识、"幻觉"问题以及更新模型所需的大量计算资源。这些问题在医疗和法律等特定领域尤其明显。

例如,最近的一项研究表明,法律幻觉普遍存在且令人不安,对特定法律查询的幻觉率从 69%到 88%不等,适用于最先进的 LLM[21]。此外,由于需要大量计算资源来用特定领域或最新数据对 LLM 进行微调,解决幻觉问题的挑战变得更加困难。这反过来又严重阻碍了 LLM 在各种实际应用中的广泛采用。

为了解决这些局限性,最近有人努力利用 RAG 来增强 LLM 在各种任务中的能力,特别是那些对最新和可靠知识要求很高的任务,如问答(QA)、AI4Science 和软件工程。例如,Lozano et al.介绍了一个科学特定的 QA 系统,该系统基于动态检索科学文献。MolReGPT 利用 RAG 来增强 ChatGPT 在分子发现中的上下文学习能力。如图1所示,基于 LLM 的对话系统将无法很好地回答超出范围的查询。相比之下,在 RAG 的帮助下,从外部数据源检索相关知识并将其集成到生成过程中,对话系统成功地给出了用户正确的答案。鉴于利用 RAG 推进 LLM 方面取得的显著进展,迫切需要对检索增强大语言模型(RA-LLM)的最新进展进行系统的回顾。

本综述旨在通过从 RA-LLM 的架构、训练和应用等几个主要方面总结代表性方法,对检索增强大语言模型(即 RA-LLM)进行全面概述。更具体地说,在第2节简要介绍 LLM 的背景知识之后,该研究从 RA-LLM 在检索、生成和增强方面的几个主要视角回顾了现有研究,以及 RAG 中检索的必要性和应用频率。然后,该研究在第4节总结了 RA-LLM 的主要训练技术,在第5节总结了各种 RA-LLM 应用。最后,在第6节中,该研究讨论了关键挑战和未来探索的潜在方向。

与本综述同时,其他几篇相关综述对 RAG 和 LLM 有不同的侧重点。例如,Zhao et al.专门回顾了基于多模态信息的 RAG 技术,Zhao et al.讨论了用于 AIGC 的 RAG。Gao et al.对 LLM 的 RAG 进行了相对全面的概述。本综述不同于这些综述,集中于技术视角,并根据 RA-LLM 中的架构和训练范式以及应用任务系统地回顾模型。

2 背景

在本节中,该研究简要介绍大语言模型和提示学习的背景知识。

2.1 大语言模型(LLM)

最近,LLM 的重大突破彻底改变了人工智能领域。先进的 LLM 通常在大量数据上进行预训练,具有数十亿参数,表现出理解和生成类人文本的能力,推动了各种自然语言处理任务的进步,如文本生成和信息检索。LLM 可以通过在特定数据集上微调来适应各种下游任务,使它们能够专注于特定领域或应用。总的来说,大多数现有的 LLM 可以大致分为三类:仅编码器模型、仅解码器模型和编码器-解码器模型。

仅编码器模型,如 BERT(来自 Transformers 的双向编码器表示)系列模型,通过将输入文本编码到高维空间来处理输入文本。仅编码器模型的关键特点是它们的双向性,这意味着它们在编码每个 token 时可以同时考虑左右上下文。这种双向性使得仅编码器模型能够更好地理解上下文中单词的含义,这对于情感分析、评论阅读和文本分类等任务至关重要。与这些模型相比,仅解码器模型以从左到右的方式生成文本。作为仅解码器模型的代表,GPT(生成式预训练 Transformer)根据先前 token 提供的上下文预测序列中的下一个 token。它们的架构使它们特别适用于语言生成、代码生成和创意写作等任务。编码器-解码器模型,如 T5(文本到文本转换 Transformer),独特地将各种 NLP 任务转化为文本生成问题。更具体地说,T5 中的编码器处理输入序列以捕获其含义,而解码器根据编码信息生成输出序列。这种 T5 架构非常适合涉及将一个序列转换为另一个序列的任务,如机器翻译、摘要和对话回复生成。

2.2 提示学习

2.2.1 提示工程

。由于 LLM 的大量参数,提示学习成为一种利用 LLM 的能力来实现各种任务的范式,而不是对 LLM 进行大量微调。提示学习精心设计指导模型执行下游任务的输入。例如,早期方法提供手工制作的模板来处理 NLP 中的各种任务。具体来说,像 BERT 这样的仅编码器模型通常采用完形填空提示,因为它们与其预训练任务的形式非常接近。对于其他模型,如 GPT,前缀提示往往更合适,因为它们很好地融合了生成任务。然而,手动设计的提示依赖于人类经验,没有有效性保证。为了解决这一局限性,研究人员开发了软提示调整,以学习可训练的连续提示嵌入。例如,前缀调整在输入中预先添加一系列前缀嵌入,可以进行训练和更新。这种分配允许提示不是真实文本,为生成提示提供了更多灵活性。然而,由于缺乏特定领域的知识,在面对新任务时,模型可能仍然无法生成准确的响应。

2.2.2 上下文学习(ICL)

。为了克服普通提示学习的局限性,最近的研究开发了上下文学习(ICL)。ICL 是提示学习的一种特定方法,它在提示中给出几个任务示范。这种范式允许预训练的 LLM 理解示范提供的模式来解决新任务,而无需微调。例如,通过精心选择几个示范,GPT-3展示了执行小样本任务的能力。这一成功表明,LLM 具有根据任务特定知识快速适应新任务的显著能力。

尽管 ICL 有效,但它通常严重依赖所提供示范的质量,这可能导致生成次优输出。更糟糕的是,ICL 可能没有足够的必要信息或先验知识来指导 LLM 生成准确的响应。为了解决 ICL 上述局限性,最近的研究引入了检索增强生成(RAG)技术。通过集成检索和生成,RAG 模型为提高 LLM 在各种任务中的性能和适应性提供了一个有前景的方向。

3 检索增强大语言模型(RA-LLM)

LLM 时代的 RAG 框架通常由检索、生成和增强三个主要过程组成,以及确定是否需要检索的机制。在本节中,该研究将介绍每个组件中涉及的重要技术。

3.1 检索

给定来自 LLM 输入的查询,RAG 中的检索过程旨在从外部知识源提供相关信息,这些知识源可以是开源的或封闭的,如图2所示。关键组件检索器,如图3所示,由几个过程组成,作为一个整体来衡量查询和数据库中文档之间的相关性,以有效地检索信息。检索的具体流程进一步取决于是否包括检索前和检索后的处理。在本小节中,该研究将介绍传统 RAG 和基于 LLM 的 RAG 中检索所涉及的主要技术,包括检索器类型、检索粒度、检索前和检索后增强以及数据库构建。

3.1.1 检索器类型

。根据信息编码方法,检索方法通常可以分为两类:稀疏检索和密集检索。稀疏检索是基于词的,主要应用于文本检索,而密集检索将查询和外部知识嵌入到向量空间中,容易应用于各种数据格式。

作为一种直接的方法,稀疏检索,例如 TF-IDF 和 BM25,通常依赖于倒排索引匹配以及原始数据输入。例如,许多研究直接应用 BM25 进行段落级检索,以促进其 RAG,其中段落被特别表示为一袋词,并根据词项和逆文档频率进行排序。除了作为生成器输入的补充外,稀疏检索还被用于寻找示例作为 ICL 的演示,用于 RA-LLM。应用稀疏检索到 RAG 中的主要局限性在于它的非训练性质,这使得检索性能严重依赖于数据库构建和查询生成的质量。此外,这种固定的基于词项的方法只支持相似性检索,而不能适应 LLM 应用中需要的其他检索考虑,如多样性。

在这里插入图片描述
在这里插入图片描述

相比之下,密集检索将查询和文档嵌入到连续向量空间中,并满足某些标准,例如语义相似性。密集检索方法通常可以训练,因此在适应性方面具有更大的灵活性和潜力。作为密集检索器的关键组件,现有 RAG 模型中的嵌入模型在设计上略有不同。一个简单的设计是直接使用生成模型的一部分作为检索器的嵌入层,这可能能够增强检索和生成过程之间的一致性。基于 BERT 的主干被广泛应用于检索模型中。一种常见的检索器设计是用 BERT 结构构建双流编码器(一个编码器用于查询,另一个用于文档),这也称为双编码器。早期阶段的 RAG 方法倾向于冻结或部分冻结检索器的参数,以执行一般级别的相关知识提取,并更多地关注知识利用和生成器微调。大规模专门的预训练进一步增强了 RAG 模型在更多知识密集型任务中的表现。一个典型的成功案例是密集段落检索器(DPR),它使用基于 BERT 的主干,并使用问答对数据专门针对 OpenQA 任务进行预训练。DPR 作为预训练的检索器表现出强大的能力,促进许多 RAG 模型在各种下游任务中取得成功。它还被认为是改进 LLM 性能的 RAG 范式中的第一步,通过微调可以进一步增强查询和相关文本数据之间的嵌入一致性。最近的一项研究还发现,DPR 训练分散了知识在网络中的存储方式,为同一信息创建了多个访问路径。通过有效的微调,双编码器检索器也被广泛应用于基于 ICL 的 RAG。具体来说,它们更多地用于基于句子嵌入相似性的检索,以及 ICL 中的一些特殊要求,如多样化示例检索。

在 RA-LLM 中广泛应用的另一类密集检索器具有单编码器结构,可能基于 Transformer、BERT 或其他现成的序列建模主干。这些单编码器检索器通常在大规模未对齐文档上通过对比学习进行预训练,因此可能因其通用性而脱颖而出,这意味着它们可以更好地迁移和泛化到新的领域或任务。这种通用预训练的检索器,例如 Contriever和 Spider,在针对各种任务的 LLM 中会更灵活地使用,并在许多 RA-LLM 方法中证明了它们的有效性,例如 In-Context RALM、Atlas、Self-RAG和其他。根据现有研究的实验结果,对于开放域 QA 任务,在与 InstructGPT合作时,应用通用预训练检索器(Contriever)而不进行微调可以达到与稀疏检索器(BM25)相当的性能。然而,它们都比在目标数据集上微调的 DPR 模型差,显示了在目标任务和数据上微调的有效性。

3.1.2 检索粒度

。检索粒度表示语料库被索引的检索单元,例如文档、段落、token 或其他级别,如实体。对于 RAG 而言,检索粒度的选择在有效性和效率方面可能会对模型的整体性能产生重大影响,因为它们决定了数据库的存储空间以及搜索的计算成本。早期的检索增强语言模型提出检索整个文档,然后应用训练用于检测返回文档中答案范围的机器理解模型,这更侧重于语言阅读和文档中关键信息定位。在生成式语言模型中,Chunk 检索(在某些参考文献中也称为段落)很常见,已经用于传统和基于 LLM 的 RAG 模型,如 REALM、RAG和 Atlas。更细粒度的检索,即 token 检索,可以进行更快的搜索,但会给数据库存储带来更多负担。token 检索更适用于需要稀有模式或域外数据的情况,同时与每 token 检索策略配合良好,如 kNN-LM 和其他类似工作中应用的。相比之下,文本块可能包含紧凑和完整的信息,冗余和不相关性较少,因此成为 RAG 中主流的检索文本粒度。

RAG 中提出的另一个主要检索粒度是实体检索。与上述粒度类型不同,实体检索从知识而非语言的角度设计。Févry et al. 引入了 Entities as Experts(EAE)模型,它根据实体身份划分语言模型的参数空间。提出的 EAE 模型旨在利用 Wikipedia 数据库从文本中学习实体表示以及其他模型参数,并用实体记忆表示知识。在更细粒度的层面上,de Jong et al. 提出通过学习和检索提及而不是实体来构建知识库。总的来说,在 RAG 中应用实体或提及级检索对以实体为中心的任务会更有效,与 token 检索相比,在空间上也更有效。

3.1.3 检索前和检索后增强

。为了确保检索质量,即提高检索结果的准确性和相关性,各种检索前和检索后策略已被提出来进一步增强检索器的输入和输出。

Wang et al.提出了一种查询扩展方法 Query2doc,它通过少样本提示 LLM 生成伪文档,并用伪文档中的相关信息扩展查询,这可以帮助消除查询歧义并指导检索器。他们通过实证证明,这种方法可以提高稀疏和密集检索器[56]在特定信息检索数据集上的性能。类似地,Gao et al.提出了假设文档嵌入(HyDE)方法,该方法指示 LLM 为给定查询生成假设文档。然后将假设文档用作新查询进行嵌入并使用密集检索器搜索邻居。

另一种检索前策略,查询重写,旨在缩小输入文本与检索所需知识之间的差距,将原始问题重新表述为更有利于检索的版本。具体来说,Ma et al.提出了 Rewrite-Retrieve-Read 框架,它提示 LLM 生成检索功能的查询。重写步骤的动机是在新查询中澄清检索需求,以减轻检索功能理解输入和增强输出(即检索相关信息)的负担。他们测试了使用冻结 LLM 和可训练模型作为重写器的设置,两者都优于朴素 RAG 或生成模型,尽管在不同测试的 QA 数据集上表现各异。

Yu et al. 提出查询增强,将原始查询和初步生成的输出组合成新查询,然后用于从外部数据库中检索相关信息。检索到的结果可以启发语言模型重新思考生成的结果并对其进行增强。与仅应用原始查询相比,这种增强可能为语料库中检索到的信息贡献更多相关性,以直接澄清查询-输出关系。在新查询中包含初始输出进一步增强了要检索的支持文档与给定问题之间的词汇和语义重叠。查询增强在这些查询增强策略中取得了总体更好的性能,因为它可能在生成答案时集体处理所有检索到的知识。

后检索增强表示在将检索器提取的 top-k 文档馈送到生成器之前对其进行处理的过程,目的是更好地协调检索和生成阶段,特别是对于封闭源生成器(如 LLM)。例如,Yang et al. 提出了可插入奖励驱动上下文适配器(PRCA),它能够在特定数据集上微调轻量级适配器而不是生成器。它还通过生成器产生的奖励利用强化学习提炼检索到的文档。Glass et al.提出了 Retrieve-Rerank-Generate(R2G)方法,该方法通过重排操作组合不同检索方法检索到的文档,以提高检索结果的稳健性。应用后检索增强的另一个考虑因素是,检索到的信息有时可能不相关或包含噪声,这可能无助于任务的生成模型,甚至可能损害生成过程。Wang et al.、Asai et al.、Yu et al.提出了不同的策略来减轻检索到的知识文档中的噪声。然而,Xiong et al.通过实证研究发现,这些方法取决于 LLM 的置信度,这可能不如预期的那样精确。为了解决这个问题,Wang et al.提出了 BlendFilter,它同时考虑了检索前查询生成混合和检索后知识过滤。该方法可以解决复杂问题以及噪声检索知识问题,从而全面增强 RA-LLM 性能。

最近,先进的 RAG 流程已经被提出,使用 LLM 生成推理路径和计划,并通过信息检索(IR)模块迭代检索知识,以增强基于 LLM 的生成。然而,Zhu et al. 指出,如果 IR 和 LLM 的输出质量较低,检索和生成过程将通过这种迭代引导管道相互阻碍。为了克服这一障碍,他们提出了一种新的推理方法来增强查询和检索知识。后检索策略也可能用于增强检索结果与生成模型之间的兼容性。例如,现有 LLM 的主要局限性之一是输入 token 的长度,这阻止了将长检索文档直接纳入现有 RA-LLM。对于这个限制,Xu et al.提出了 Retrieve, Compress, Prepend(RECOMP),它在上下文增强生成过程之前添加了一个中间步骤,将检索到的文档处理成文本摘要。

3.1.4 数据库

。RAG 中的检索是基于外部知识源进行的,可以是封闭源的或开源的,如图2所示。封闭源数据库通常存储知识的键值对,可以通过各种方式构建。键主要用于相似性匹配,作为 BM25 中的稀疏向量或来自检索编码的密集嵌入。值取决于具体的检索目标,在大多数情况下是原始文本。例如,在早期的 RAG 中,每篇 Wikipedia 文章被分割成不相交的 100 个词的块,总共制作了 2100 万个文档。每个文档分别由密集嵌入和存储在数据库中的值和键编码。值也可以存储 token,每个 token 一个,如 kNN-LM 和 Spalm 中应用的那样。数据库的来源取决于特定的应用领域和任务。

Wikipedia 是以前 RAG 工作中最常用的通用检索集之一,它存储事实结构化信息,并有几个不同规模的版本,从十亿 token 级别到万亿 token 级别。特定领域的数据库也用于下游任务。例如,对于代码生成任务,Zan et al.收集公共库的 API 信息和代码文件来构建他们的 APIretriever 数据库。此外,Zhou et al提出使用经常用新内容(新发布的库)更新的文档池。

应用互联网搜索引擎,如 Bing 和 Google,可以避免维护搜索索引,并可以访问最新知识。同时,它提供了比封闭源数据库更广泛的知识库。互联网搜索已广泛与黑盒 LLM 结合,并显示出不同功能的有效性,如知识增强、事实检查]和 LLM 代理增强。与传统 RAG 相比,由于 LLM 作为读者理解搜索结果(即检索到的文档)以及 LLM 使用工具处理和分析它们的非凡能力,互联网搜索更多地被用作 RA-LLM 中的检索器。现有研究[173]表明,利用搜索引擎(如 InstrucGPT)对 LLM 在 OpenQA 和事实检查等零样本知识密集型任务上特别有效。

3.2 生成

生成器的设计在很大程度上取决于下游任务。对于大多数文本生成任务,仅解码器和编码器-解码器是两种主要结构。最近商业封闭源大基础模型的发展使得黑盒生成模型成为 RA-LLM 的主流。在这一部分,该研究将简要回顾使用这两种类型生成器的研究:参数可访问(白盒)和参数不可访问(黑盒)。

3.2.1参数可访问生成器(白盒)

编码器-解码器结构使用不同的参数集独立处理输入和目标,其中开发了交叉注意力组件将输入 token 连接到目标 token。典型的编码器-解码器模型包括 T5和 BART。相比之下,仅解码器模型在级联后处理输入和目标,这使得两部分的表示随着它们在网络中向上传播而同时构建。这两种类型的生成器在现有 RAG 工作中被广泛应用。例如,RAG 和 Re2G采用 BART;FID 和 EMDR2 利用 T5。还有其他模型利用基于 Transformer 的编码器-解码器架构,但有一些定制设计。RAG 中的生成器通过结合检索到的数据来增强生成准确性和相关性,从而区别于一般生成器。此外,白盒生成器允许参数优化,可以训练以适应不同的检索和增强方法,以获得更好的生成性能。

3.2.2 参数不可访问生成器(黑盒)

一定比例的 LLM 在发布时没有披露内部结构或参数的可访问性,尤其是那些特别大规模的,如 GPT 系列、Codex和 Claude,它们被称为黑盒生成模型。这些生成器只允许馈送查询(输入)和接收响应(输出)的操作,而不允许改变内部结构或更新参数。从另一个角度来看,即使是开放微调的 LLM,其规模也很大,很难用有限数量的数据对下游特定领域的任务进行调整。因此,黑盒 RA-LLM 更关注检索和增强过程,试图通过用更好的知识、指导或示例增强输入(在 LLM 的上下文中也称为提示)来增强生成器,用于生成。例如,Rubin et al.提出训练一个由语言模型自己标记数据的提示检索器,可用于为上下文学习提供更好的示例,从而提高最终生成性能。Xu et al.提出在上下文集成之前压缩检索到的文档,这可以减少计算成本,也可以减轻 LM 在长检索文档中识别相关信息的负担。

3.3 生成增强的检索集成

增强描述了集成检索和生成部分的技术过程,这是 RA-LLM 的关键部分。在本小节中,该研究介绍了增强的三个主要设计,分别在生成器的输入、输出和中间层进行,如图2所示。

3.3.1 输入层集成

集成检索信息/文档的一种常见方式是将它们与原始输入/查询组合,并共同传递给生成器,这称为输入层集成。例如,In-Context RALM通过特别地将原始输入和所有检索到的文档级联成单个序列作为生成模型的新输入来应用输入层集成。尽管有效,但这种集成受到检索文档数量的限制,因为级联的新输入可能太长而无法由生成模型处理。In-context RALM 通过从新输入的开头删除 token 来特别缓解这一限制。为了避免这种 token 删除策略带来的信息丢失,FID 采用了一种不同的集成方法,即在编码器中独立处理每个检索到的文档。这种策略可扩展到大量上下文,因为它在后续处理中每次只对一个上下文执行自注意力。Atlas和 REPLUG应用类似的并行集成,每次将查询和一个检索到的文档级联。一般来说,大多数基于黑盒生成的 RAG 方法应用输入层集成,因为生成模型的中间层或输出分布都无法访问。

更特别地针对 LLM,输入层集成可能会使用检索到的内容作为(附加的)提示或示范,而不是像传统 RAG 那样将其用作原始输入的补充。提示检索旨在自动通过检索找到合适的自然语言提示,以教导 LLM 在上下文中学习或诱导 LLM 推理。它可能在不需要精细提示工程的情况下提高 LLM 的零样本能力。例如,Cheng et al.提出学习一个基于由冻结 LLM 产生的分数标签的输入-提示对数据的提示检索器。

3.3.2 输出层集成

另一种增强是事后的,即输出层集成,它联合检索和生成结果。例如,kNN-LM 在预测中插值两个下一个 token 分布:一个由 LM 诱导,另一个由检索语料库中的最近邻诱导。输出层线性集成很灵活,可以应用,因为它可以插入到大多数生成模型中,无需额外训练。然而,输出层集成的简单性也限制了模型对检索文本进行推理的能力。为了解决这一局限性,Yogatama et al.提出添加一个额外的门控网络来后处理检索到的数据,并获得相对更好的性能。对于 LLM,输出层集成与输入层集成一样合理和适应性强。REFEED 提出了一种答案细化机制,应用 LLM 评估检索到的信息并相应调整初始答案,以提高响应的准确性。类似地,Zhang et al. 提出了 COMBO 框架,该框架基于预训练的鉴别器将 LLM 生成的段落与检索到的对应段落匹配成兼容对。然后由基于 Fusion-in-Decoder 的模型处理段落对,得出最终答案。

3.3.3 中间层集成

与上述两种非参数方法相比,更有吸引力的增强是设计一个半参数模块,通过生成模型的内部层集成检索结果,这称为中间层集成。这种集成可能增加额外的复杂性,并有望通过有效的训练来增强生成模型的能力。通常,引入 Transformer 模块来利用检索到的信息(主要编码成密集表示)到生成模型中,与生成中间阶段的表示进行交互。例如,RETRO引入了一个分块交叉注意力(CCA)层来处理生成器块中检索到的块,Wu et al.引入了 kNN 增强注意力层。类似地,EAE和 TOME 分别使用实体记忆和记忆注意力层来集成检索到的实体和实体提及。这种中间层集成可以频繁有效地使用许多块来增强整个 RAG 模型的能力。它为频繁检索到的大量文本块提供了一种有效的替代方案,这些文本块由于 LM 的输入长度限制而难以通过输入层集成进行处理[6]。然而,还需要注意的是,中间层集成需要高度访问生成模型,这对于大多数通过推理 API 访问的 LLM 来说是不可行的。

3.4 检索增强的必要性和频率

LLM 基于生成的检索操作通常旨在补充知识以增强生成。尽管检索增强模型已经显示出前景,但它们被批评为不是通用解决方案,因为不加区分地用不相关的段落增强LLM可能会覆盖LLM已经拥有的潜在正确知识,导致错误响应。Thakur et al.贡献了一个人工注释的数据集,以帮助评估LLM对外部检索知识中错误的稳健性,并观察到LLM在不相关的检索段落上的幻觉率是相关段落的两倍。因此,对于RA-LLM来说,准确回忆先验知识,同时有选择地纳入检索信息,只在必要时纳入,这是通向稳健RA-LLM的途径。

大多数现有方法根据LLM的初步答案或其内部推理结果来确定检索的必要性。例如,Self-RAG引入特殊token来评估检索的必要性并控制检索行为。其他方法设计迭代提示来决定生成过程中是否需要额外信息,从而需要为LLM调用检索或其他操作。在传统RAG中,检索必要性判断也有探索,并提出用直观的方法解决,如评估生成模型产生的logits置信度。这种解决方案也适用于RA-LLM,例如,FLARE在logits低于特定阈值时动态触发RAG。

更灵活地,Tan et al.引入SlimPLM,这是一种协作方法,用一个纤细的代理模型检测LLM中缺失的知识,该模型的功能是生成一个"启发式答案"。"启发式答案"用于评估检索的必要性,如有必要,通过应用于查询重写来促进检索过程。

在很少考虑检索必要性的传统RAG中,检索频率(也称为检索步幅)是一个重要的设计方面,以确定检索在生成中的使用程度,从而极大地影响RAG模型的整体性能。检索频率控制对检索结果的依赖程度,从而影响模型的效率和有效性。当不考虑检索的必要性时,检索频率通常是预定义和固定的,有三种常见设置:一次性、每n个token和每个token。一次性检索仅调用一次检索函数,并试图在一次操作中找到所有所需信息。一次性检索通常在生成过程开始时进行,然后将所有检索到的文档连同原始输入一起提供给生成模型,如REALM中应用的那样。一次性检索更适用于LLM对外部数据库中的信息需求很明显的情况。然而,对于需要长格式输出(如开放域摘要)的语言任务,输出中token之间的依赖关系在生成过程中更重要。在这些情况下,预先检索的文档(通过一次性检索)可能不足以支持整个输出序列的生成,这需要在生成过程中进行检索操作。为此,In-Context RALM和RETRO在生成过程中应用每n个token检索,以更好地增强。相比之下,kNN-LM[57]采用了更频繁的检索策略,即在生成过程中为每个token的预测检索信息。总的来说,应用不同频率的检索会影响整个RAG方法的有效性和效率。例如,更频繁的检索会带来更好的性能,但也会增加计算成本。选择检索频率几乎是计算成本和性能之间的权衡。

4 RA-LLM训练

根据是否需要训练,现有的RAG方法可以分为两大类:无训练方法和基于训练的方法。无训练方法通常直接在推理时利用检索到的知识,而无需引入额外的训练,具有计算效率。然而,一个潜在的挑战是,检索器和生成器组件没有针对下游任务进行特定优化,这可能很容易导致检索知识的次优利用。为了充分利用外部知识,提出了大量方法来微调检索器和生成器,从而指导大语言模型有效地适应和集成检索信息。

根据训练策略,该研究将这些基于训练的方法分为三类:1)独立训练方法独立训练RAG过程中的每个组件,2)顺序训练方法首先训练一个模块,并冻结训练好的组件以指导另一部分的调整过程,3)联合训练方法同时训练检索器和生成器。在下面的部分中,该研究将全面回顾无训练、独立训练、顺序训练和联合训练方法。这些不同训练方法的比较如图4所示。

4.1 无训练

凭借大量参数,LLM在各种下游任务上表现出人类水平的智能和出色的预测性能。然而,由于需要大量时间和计算资源,频繁地执行微调和更新模型参数中存储的知识是极具挑战性的。最近,许多研究表明,可以通过检索机制增强LLM,使它们能够从外部来源动态获取新知识,而无需额外的训练过程(即无训练),而不是仅仅依赖于模型参数中编码的隐式知识。这些方法在各种知识密集型任务中显示出显著的性能改进,如开放域问答[69]和文档摘要。根据LLM利用检索信息的不同方式,该研究将这些无训练方法分为两类:1)基于提示工程的方法将检索到的知识直接集成到原始提示中,2)基于检索引导的token生成方法检索信息以校准token生成过程。

4.1.1基于提示工程的方法。

由于LLM的生成性能高度依赖于输入查询,许多无训练RAG方法通过优化原始提示来采用外部知识。具体来说,检索到的文本通常作为上下文信息,与原始提示相结合,指导LLM的生成。例如,In-Context RALM保持LLM参数不变,并直接将检索到的文档合并到原始提示之前,以增强生成过程。IRCoT交织了思维链(CoT)生成和知识检索步骤,使检索更多相关信息用于后续推理步骤,与仅依赖问题作为查询的标准检索方法相比。GENREAD不是从大型语料库中检索知识,而是首先提示LLM根据查询生成上下文文档,然后根据给定的上下文和问题生成答案。SKR提出引导LLM确定他们是否可以基于内部知识回答给定的问题,通过有选择地调用检索器,实现灵活利用内部和外部知识。TOC首先为模糊问题检索相关知识,并通过将模糊问题澄清为多个明确问题递归地构建一个树结构,进一步聚合生成长格式答案。

4.1.2基于检索引导的Token生成方法。

除了直接将外部知识集成到原始提示中,辅助信息还可用于调整token生成过程。例如,KNN-KM首先从数据存储中检索k个最相关的上下文,并基于距离计算邻居分布。输出分布通过插值邻居分布和原始模型的输出分布进行校准。Rest提出用非参数检索数据存储替换参数化草稿模型,并根据当前上下文检索相关token用于推测性解码。

4.2 独立训练

独立训练是指将检索器和LLM作为两个完全独立的过程进行训练,其中在训练过程中检索器和LLM之间没有交互。与无训练方法相比,通过训练LLM利用检索到的知识或训练检索器以弥合信息检索和语言生成之间的差距,可以有效地提高RAG增强模型的性能。对于LLM的训练,负对数似然损失是最具代表性的训练目标,旨在引导LLM根据给定输入生成期望输出。关于检索器,可以分为两类:1)稀疏检索器,2)密集检索器。

稀疏检索器通常利用稀疏特征,如词频,来表示文档,并基于任务特定的度量,如TF-IDF和BM25,计算相关性得分。对于密集检索器,采用深度神经网络将查询和文档编码为密集表示,然后通常使用内积计算相关性得分并检索相关的外部知识。例如,DPR采用两个独立的BERT网络分别编码查询和段落,并利用对比学习训练这些模型。CoG提出训练一个前缀编码器和一个短语编码器用于检索,并将文本生成重新表述为从现有源文本集合中进行多个复制粘贴操作。

4.3 顺序训练

独立训练是在生成过程中利用外部知识的一种有效方法,因为检索器和生成器可以离线训练,任何现成的模型都可以使用,避免了额外的训练成本。为了更好地增强检索器和生成器之间的协同作用,提出了几种方法对检索器和LLM进行顺序训练。在这些顺序训练方法中,该过程通常从检索器或生成器的独立预训练开始,之后将预训练模块固定,同时对另一模块进行训练。请注意,可以直接采用各种现有模型(例如BERT、CLIP、T5)作为固定的检索器和生成器,从而绕过第一个预训练过程。与独立训练相比,顺序训练涉及检索器和生成器的协调训练,其中可训练模块受益于固定模块的辅助。根据检索器和生成器之间的训练顺序,顺序训练可以分为两类:1)检索器优先,2)LLM优先。
在这里插入图片描述

4.3.1 检索器优先

。这些方法首先训练检索模型,然后将其固定。然后训练LLM利用检索到的知识。例如,RETRO采用独立预训练的BERT模型作为检索器,并训练一个编码器-解码器架构将检索块集成到模型的预测中。RALM采用Google搜索和开源COLBERTV2作为预训练检索器,并微调LLM以有效利用检索到的段落。ITER-RTGEN利用预训练的S-BERT作为检索器,并引入自适应混合检索策略来检索示范。此外,它利用T5作为生成器,根据目标标签和结合原始提示和检索示范的输入进一步微调。SMALLCAP提出使用CLIP,这是一个强大的预训练多模态网络,对输入图像和外部数据存储的文本数据进行编码,并根据余弦相似度检索最相关的项目。训练一个交叉注意力层,使用GPT-2作为解码器来生成标题。

4.3.2 LLM优先

。同样,也可以先预训练LLM,然后在经过良好训练的LLM的监督下调整检索器。例如,DKRR表明,序列到序列模型的注意力分数可以指示文档的相关性。因此,他们提出利用读者模型的注意力分数产生合成标签来训练检索器。AAR提出使用小型语言模型生成训练检索器的监督信号。经过良好训练的检索器可以进一步用于增强黑盒LLM的性能。RA-DIT首先微调LLM以增强其利用检索知识的能力,然后训练检索器以更好地将其输出与LLM对齐。UPRISE提出一种轻量级方法,通过引入提示检索器来增强LLM在看不见的任务上的零样本性能。使用冻结的LLM来指导提示检索器的微调过程,然后这个检索器在推理期间使用不同的LLM为不同的任务检索提示。
在这里插入图片描述

4.4 联合训练

联合训练方法采用端到端范式同时优化检索器和生成器。与顺序训练每个模块的方法不同,联合训练方法有效地提高了检索器定位外部知识用于生成的能力,以及生成器有效利用检索信息的能力。例如,RAG最小化负对数似然以联合训练检索器和生成器。REALM采用与RAG类似的训练范式,并使用最大内积搜索(MIPS)技术来定位最相关的文档。为了采用MIPS,首先嵌入所有外部文档,并为每个嵌入生成搜索索引。提出异步索引更新策略以避免每几百个训练步骤重新索引所有文档的时间消耗。

5 应用

在本节中,该研究将介绍一些检索增强大语言模型(RA-LLM)的代表性应用。为了对RA-LLM的应用提供清晰的概述,该研究将从三个角度进行回顾:自然语言处理应用、下游任务和特定领域应用。本节提到的研究在图5中进行了总结和分类。

5.1 自然语言处理应用

由于文本生成的内在能力,RA-LLM在自然语言处理领域有各种应用,如问答(QA)系统、聊天机器人和事实验证。

5.1.1 QA系统

。QA系统旨在为用户的查询提供精确的答案。然而,即使在大量数据上训练,这些系统也可能缺乏最新信息或特定领域知识,而这些知识并不包含在其训练数据中。为了解决这一局限性,RA-LLM的集成在提高QA系统能力方面发挥了关键作用,增强了其检索和综合相关信息的能力。具体而言,RA-LLM可以通过利用其检索组件访问庞大的知识库,提供连贯且上下文相关的答案。例如,REALM集成了一个知识检索器,可以在预训练、微调和推理期间从大型语料库中检索信息。这种方法允许REALM有效地从庞大的知识语料库中检索,从而提高其响应的准确性。类似地,Fusion-in-Decoder从支持文档中检索段落,然后将其与问题融合以生成答案,实现更高的准确性。此外,Borgeaud et al.表明,答案的质量可能更多地依赖于检索编码器的输出。

5.1.2 聊天机器人

。聊天机器人旨在以自然和对话的方式与用户互动。与QA系统不同,聊天机器人侧重于与用户保持连贯且上下文丰富的对话。为了增强这些能力,最近的方法侧重于集成RA-LLM,因为它能够用相关的外部知识增强聊天机器人,促进与用户更具吸引力和上下文丰富的交互。例如,一些研究从静态数据库(如Wikipedia转储)中检索相关知识以增强对话。Komeili et al.提出从互联网搜索检索信息,以进一步增强对话性能。考虑到世界知识的动态特性,另一个模型进一步访问搜索引擎中大量的动态信息以生成响应。

5.1.3 事实验证

。事实验证是验证信息准确性和可靠性的关键任务。随着对可信证据的需求,RA-LLM正被用于增强事实验证的能力。Lewis et al.首先提出检索外部知识以增强一系列知识密集型任务,包括事实验证。另一方面,Atlas在小样本学习下检查了RA-LLM用于事实验证的性能。最近,Self-RAG通过结合自反机制给人留下了深刻印象。具体而言,Self-RAG反思检索到的信息是否有帮助,并判断检索到的信息的可靠性,从而大大提高了验证准确性。

5.2 下游任务

除了自然语言处理应用,RA-LLM还可以应用于各种下游任务,如推荐和软件工程。

5.2.1 推荐

。推荐系统在建模用户偏好和提供个性化推荐方面起着重要作用。最近,RA-LLM通过集成检索和生成过程,在提供个性化和上下文相关推荐方面显示出巨大潜力。例如,Di Palma提出了一个简单的检索增强推荐模型,利用电影或图书数据集中的知识来增强推荐。此外,Lu et al.进一步从评论中检索信息,以丰富推荐系统中的物品信息。CoRAL利用强化学习从数据集中检索协作信息,并将其与语义信息对齐,以获得更准确的推荐。

5.2.2 软件工程

。RA-LLM的兴起影响了软件工程的许多方面。例如,一些研究提出了用于代码生成和程序修复的检索增强生成范式。类似地,Parvez et al.从代码库中检索排名靠前的代码或摘要,并将其与输入聚合,以增强代码生成和摘要。此外,RA-LLM在表格数据处理和文本到SQL语义解析方面显示出潜力。

5.3 特定领域应用

RA-LLM已被广泛应用于各种特定领域任务,如AI for Science和金融。

5.3.1 AI for Science

。RA-LLM已被证明对科学领域有益,如分子和蛋白质。分子包括识别分子的性质和预测新分子,从而有利于药物发现。目前,一些RA-LLM已通过集成分子结构和生物医学实体(如蛋白质、分子和疾病)的检索应用于分子等。Li et al.、Wang et al.提出了基于从数据库检索指导分子生成的框架。Liu et al.通过从大规模数据集中检索文本知识引入了一个多模态分子结构-文本模型,用于分子性质预测。此外,RA-LLM也显著影响了蛋白质表示和生成。例如,RSA查询与一组结构或功能相似序列相关的蛋白质序列,以增强蛋白质表示。此外,Lozano et al.提出了一个临床QA系统,基于检索已发表的综述文章。

5.3.2 金融

。在高度数据驱动和信息密集型的金融领域,RA-LLM已被证明是增强决策的重要技术。例如,Zhang et al.从新闻平台(如彭博社和路透社)和社交媒体平台(如Twitter、Reddit)等外部来源检索财经信息,与原始查询结合,以提高财经情感分析的精度。此外,金融QA是金融分析的另一个主要任务,通常从金融文档中提取相关知识。由于专业文档通常以PDF格式存储,Lin引入了一个与RA-LLM相结合的PDF解析器,从财务报告中检索知识。另一方面,Yepes et al.提出了一种基于结构而不是基于段落分块的文档分块方法,进一步提高了RA-LLM输出的质量。

6 未来挑战和机遇

由于RA-LLM的研究仍处于早期阶段,该研究提出了一些未来可以在RA-LLM领域探索的潜在研究方向。

可信赖的RA-LLM。开发RAG增强LLM的根本目标是增强语言模型的能力,通过减轻冗余和无意义的劳动、增加便利性和促进社会进步,从而使用户和社会受益。然而,最近的研究表明,RA-LLM可能被恶意和无意地操纵,做出不可靠的决策并伤害人类,这可能在安全关键场景中产生严重后果。此外,私有检索数据库有泄露风险,引发对RA-LLM隐私的担忧。因此,开发值得信赖的RA-LLM至关重要,因为它可以显著降低LLM技术的潜在负面影响,并为人们提供可以完全信任的强大AI模型。具体而言,RA-LLM系统中理想的可信赖性应具有以下特征:1)稳健性,2)公平性,3)可解释性,以及4)隐私。例如,稳健性意味着可信赖的RA-LLM系统应该能够抵御攻击者引入的恶意或无意的扰动。公平性表示可信赖的RA-LLM系统在决策过程中应避免歧视。可解释性需要完全理解RA-LLM系统的内在工作原理,即RA-LLM系统的预测是可解释和透明的。隐私需要在建立可信赖的RA-LLM系统时保护存储在数据存储中的私有信息的安全。

多语言RA-LLM。利用多种语言知识的能力可以极大地提高检索增强语言模型的能力。随着世界变得越来越互联,对可以跨不同语言理解和沟通的AI系统的需求日益增长。通过集成多语言知识检索和生成,这些模型可以访问和综合来自不同语言来源的信息,实现更全面和细致入微的理解和生成能力。此外,多语言模型可以促进跨文化交流和知识共享,打破语言障碍,从而为不同地区的人们带来便利,特别是那些使用少数语言的地区。例如,使用普及度较低语言的国家的用户可以利用丰富的英文和中文语料库进行知识检索,提高下游任务中大语言模型的性能。

多模态RA-LLM。多模态检索增强生成将知识来源从文本扩展到包括图像、视频和音频等各种数据模态。通过集成各种模态,LLM可以利用比单模态RAG更丰富的上下文信息,并发展出对用户需求更全面的理解,带来精确、细粒度和高质量的生成。例如,图像或视频可以提供宝贵的视觉线索,补充文本信息,从而产生更精确的语言生成。通过融合多种模态,多模态RA-LLM可以发展出对世界更全面的理解,从而产生更准确和富有洞察力的输出,使医疗保健、药物发现、分子分析等广泛领域受益。

外部知识的质量。作为当前RAG系统中常用的数据存储,Wikipedia作为一个庞大的外部文本知识库,用于增强生成过程,其中包含数百万篇涵盖各个学科的文章。然而,Wikipedia中各个文章的可靠性和准确性差异很大,引入一些偏离事实的文本甚至可能误导模型的生成过程。因此,提高外部知识语料库的质量并缓解低质量知识对LLM性能的负面影响至关重要。通过提高外部知识的质量并定制稳健机制来过滤掉低质量或不可靠的信息,RAG增强的LLM系统可能会产生更准确、更可靠的输出,从而提高其在各种现实应用中的有效性。

7 结论

检索增强生成(RAG)是一种先进的AI技术,由于检索在提供补充信息以提高生成性能方面的强大能力,它在各种应用中取得了显著成功,包括推荐、分子生成、蛋白质表示和软件工程。最近,越来越多的努力致力于通过利用检索提供最新的辅助信息和教导LLM利用检索到的外部知识,来缓解大语言模型(LLM)的局限性,如幻觉和过时的内部知识。随着检索增强大语言模型(RA-LLM)的快速进步,迫切需要进行全面和系统的概述。为了弥合这一差距,在本文中,该研究从架构、训练策略和应用视角全面回顾了RA-LLM,为研究人员提供深入理解。此外,由于RA-LLM的研究仍处于早期阶段,该研究还讨论了当前的局限性和未来研究的几个潜在方向。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3组件库开发项目实战——03封装Button组件/输出vitePress文档

Vue3组件库开发项目实战——01组件开发必备知识导学-CSDN博客 Vue3组件库开发项目实战——02项目搭建(配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest)-CSDN博客 在前面两篇博客中,我分别介绍了组件库开发必学知识,以及…

整合Tess4J图文识别技术

仓库地址:https://gitee.com/z3inc/tess4j-demo.git 1. OCR图文识别介绍 OCR(全称 Optical Character Recognition,直译为光学字符识别)用于图片文字识别,例如 提取图片中车牌号等等。 Java中实现OCR的技术方案有&…

文本到语音的学习笔记:从Docker开始

1.docker 是什么意思? Docker 是一种开源的容器化平台,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后可以在任何支持Docker的系统上运行这个应用,而不必担心环境差异导致的问题。 以下是Docker的一些关键特…

品鉴中的精神内涵:如何通过红酒品味生活的美好与哲学

红酒不仅仅是一种物质享受,更是一种精神体验。在品鉴云仓酒庄雷盛红酒的过程中,我们能够品味到生活的美好与哲学,感受到红酒所蕴含的精神内涵。 红酒的精神内涵源于其酿造过程中所融入的时间和匠心。一瓶上好的红酒需要经过长时间的陈年&…

二叉树专题(有关二叉树的相关学习)

二叉树 1.数概念及结构 1.1树的结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结…

使用yarn/npm安装插件(涉及electron),总是报错证书错误或者ssl解析错误

同学们可以私信我加入学习群! 正文开始 前言一、问题描述二、解决措施总结 前言 最近electron更新到了30大版本,里面更新的一个重大变化是主进程增加了 WebContentsView 和 BaseWindow,对窗口的控制会更加丝滑。 正好最近在做把文章或者视频…

网页转长图插件html2canvas【前端】

网页转长图插件html2canvas【前端】 前言版权开源推荐网页转长图插件html2canvas【前端】wkImageStorage流程使用后端application.propertiesWkConfigShareControllerImageCleanupTask 前端html2canvas.jsshare.htmlshare.jsgetShare.jsgetShare.html 最后 前言 2024-5-10 18:…

linux学习:多媒体开发库SDL+视频、音频、事件子系统+处理yuv视频源

目录 编译和移植 视频子系统 视频子系统产生图像的步骤 api 初始化 SDL 的相关子系统 使用指定的宽、高和色深来创建一个视窗 surface 使用 fmt 指定的格式创建一个像素点​编辑 将 dst 上的矩形 dstrect 填充为单色 color​编辑 将 src 快速叠加到 dst 上​编辑 更新…

SpringAMQP Work Queue 工作队列

消息模型: 代码模拟: 相较于之前的基础队列,该队列新增了消费者 不再是一个,所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…

经典文献阅读之--U-BEV(基于高度感知的鸟瞰图分割和神经地图的重定位)

0. 简介 高效的重定位对于GPS信号不佳或基于传感器的定位失败的智能车辆至关重要。最近,Bird’s-Eye-View (BEV) 分割的进展使得能够准确地估计局部场景的外观,从而有利于车辆的重定位。然而,BEV方法的一个缺点是利用几何约束需要大量的计算…

React useEffect Hook: 理解和解决组件双重渲染问题

在React中,useEffect可能会在组件的每次渲染后运行,这取决于它的依赖项。如果你发现useEffect运行了两次,并且你正在使用React 18或更高版本的严格模式(Strict Mode),这可能是因为在开发模式下,…

解锁楼宇自动化新维度西门子Insight+BACnet IP I/O控制器

数字城市的楼宇自动化已不再是一个遥不可及的概念,而是成为了现代建筑的标配。特别是在大型商业综合体、高端写字楼和公共设施中,高效的楼宇管理系统是确保环境舒适度与能源效率的关键。当提及楼宇自动化领域的佼佼者,西门子Insight楼宇自动化…

Spring WebFlux:响应式编程

在软件开发领域,随着互联网应用的规模和复杂性不断增加,传统的编程模型逐渐暴露出一些局限性,尤其是在面对高并发、大规模数据流处理等场景时。为了应对这些挑战,响应式编程(Reactive Programming)应运而生…

AuroraFOC使用指南一(STM32F405双路FOC)

一. 简介 哈喽,感谢各位选择AuroraFOC开发板,在这里将对其进行一个详细的介绍,方便大家使用。并且对提供的工程文件和上位机的操作也进行了详细的说明。 有什么疑问或者好的建议 可以微信联系: WU1356742146 最后再次感谢大家的支持。 Aur…

Transformers中加载预训练模型的过程剖析(一)

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…

PostgreSQL 用户及授权管理 04:授予及回收权限

PostgreSQL 是一个坚如磐石的数据库,它非常注重安全性,提供了非常丰富的基础设施来处理权限、特权和安全策略。在前面的章节中以我们介绍的基本概念为基础,重新审视角色概念,特别关注授予角色的安全性和权限(角色可以是…

Linux/ubuntu build编译make时出现has modification time int the future的问题解决方法

针对Linux由于双系统之间的时间冲突导致linux时间经常变化,出现执行make命令时出现“make[2]: Warning: File xxx.c’ has modification time 1.6e05 s in the future “警告的问题,亦或者虚拟机出现相同的问题。 由于时钟同步问题,出现 warn…

CAST: Cross-Attention in Space and Time for Video Action Recognition

标题:CAST: 时空交叉注意力网络用于视频动作识别 原文链接:2311.18825v1 (arxiv.org)https://arxiv.org/pdf/2311.18825v1 源码链接:GitHub - KHU-VLL/CASThttps://github.com/KHU-VLL/CAST 发表:NeurIPS-2023(CCF A…

SwiftUI 调整视图内容周围间隙(Content Margins)的“时髦”方法

概述 在 SwiftUI 开发的应用中,往往在小屏设备(比如 iPhone)上布局良好的 App 放到大屏(iPad)上后就会“一塌糊涂”。因为它们一味的只想着“占据”却不知道“舍弃”。 从 iOS 17.0(iPad 17.0)开始苹果提供了原生的视图修改器方法专注于处理此事。 在本篇博文中,您将…

MVC WebAPI

创建项目 创建api控制器 》》》 web api 控制器要继承 ApiController 》》》 数据会自动装配 及自动绑定 》》》》FromBody: Post请求的基础类型的参数和Get请求有点不一样,我们知道Get请求的参数是通过Url来传递的,而Post请求则是通过H…