北大最新综述精读:RAG在AIGC中的前世今生,覆盖300篇论文!

图片

©作者|Haoyang

来源|神州问学

如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「神州问学」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和前沿资讯。

引言:

人工智能生成内容(AIGC)的不断发展得益于模型算法、可扩展的模型价格以及大规模的高质量数据集的发展。但它面临重重挑战,比如维护实时知识、长尾知识(发生频率低但占比大的知识)、数据泄露风险以及训练和推理所需的高成本。而

RAG(Retrieval-Augmented Generation)检索生成增强正在成为解决这一系列问题的新范式。RAG引入了信息检索过程,即从可用的数据存储中检索相关内容增强AIGC的结果,进而提高准确性和鲁棒性。

本文主要回顾将RAG集成到AIGC场景中的现有工作,首先根据增强的方式对RAG基础进行分类,提炼了各种检索器和生成器的增强方法的摘要,基本涵盖所有RAG场景以及潜在的关键技术。此外,总结了RAG其他能够促进RAG系统的实施与工程化的增强方法。我们也为研究者和实践人员提供了RAG在不同模式和任务中的实际应用以供参考。最后,介绍了RAG的参考基准、目前存在的局限性以及未来研究的可能方向。

一、AIGC场景下的RAG的组成

RAG最初的概念出现于文本到文本生成的领域中,模型首先从大量的语料库中检索相关的信息,然后使用这些信息来指导文本的生成过程。这种方法可以提高生成文本的质量和准确性,尤其是在处理需要特定领域知识的任务时,后来也被应用于各个领域。引言中提到的AIGC众多的问题,RAG可以通过可适应的外部数据存储库来应对上述这些挑战,存储的用于检索的知识可以被抽象为非参数的记忆内容。它的特点是很容易修改,既能容纳众多的长尾知识,也能对机密数据进行编码。此外,它也能减小大规模生成模型的大小,比如通过提供长上下文支持来消除一些生成模型中的步骤等等。

一个典型的RAG流程如图1所示:给定一个输入的查询,检索器定位并查找相关数据源,将检索结果与生成器进行交互,以增强整个生成流程。其中,检索结果可以以不同的方式与生成器进行交互:① 作为生成器的增强输入 ② 生成中期作为潜在表征加入 ③ 以对数的形式对生成结果进行影响 ④ 影响特定的生成步骤。RAG的基本思想和流程基本一致,但根据具体的方式和任务需要对其增强技术进行调整,比如检索器和生成器的选择方面等等。

图片

图1:一个通用的RAG结构。用户的查询(可能是文本、代码、图像等不同模式查询)同时作为检索器和生成器的输入。检索器通过搜素存储中相关的数据与生成器进行交互,最终生成各种所需形式的结果

生成器:

在整个RAG系统中,生成模块占据非常重要的地位,它使得生成式AI在有效性方面超过了最初的专家系统。在应用方面,通常针对不同的场景选取不同的生成模型。比如,Transfomer模型通常被用于文本到文本的生成任务;VisualGPT通常用于图像到文本的生成任务;Stable Diffusion通常用于文本到图像任务;Codex用于文本到代码任务等等。总的来说,我们可以将生成器分为四大类:Transformer Model、LSTM长短期记忆网络、扩散模型和GAN生成对抗网络。

它们的网络结构图分别如图2、图3、图4和图5所示。

图片

图2 传统的Transformer模型架构

图片

图3 带有遗忘门的一个经典的LSTM模块

图片

图4 扩散模型通过添加噪声平滑的扰动数据,然后将这一过程反向从噪声中生成新的数据。反向过程中的每个去噪步骤通常都需要估计分数函数,它指向了具有更少噪声的数据方向的梯度。

图片

图5 一个典型的GAN网络结构图

检索器:

检索是识别和获取与所需信息相关的系统资源。如果将信息资源抽象化为一个键值对存储的形式,每个键对应一个值,对于给定一个查询,目标就是使用相似函数搜索前k个最相似的键并获取对应的值。根据相似度函数的不同,现有检索器的方法可以分为稀疏检索、密集检索和其他方法(直接使用自然语言文本之间的编辑距离活代码片段中的抽象语法树AST)。其中稀疏检索和密集检索现在广泛使用,整个过程可分为两个不同的阶段:第一阶段将每个对象编码为特定的表示;第二阶段,构建索引来组织数据源进而进行高效搜索。

稀疏检索:广泛用于文档检索,通常利用术语匹配指标比如TF-IDF、查询相似度和BM25。它们都是通过分析文本中的单词,对信息进行统计并构建反向的索引来进行高效检索。

密集检索:与稀疏检索不同,它使用密集的嵌入向量表示查询和关键字并构建近似最近邻ANN索引来加快搜索速度。对于文本数据来说,通常使用BERT和RoBERTa等预训练模型来作为编码器来编码查询和键值。对于音频、图像、视频等也提出了相应的编码模型。密集检索中的相似性得分可以通过计算余弦、内积、L2距离等方法来计算。训练过程中,它通常遵循对比学习范式,使正样本更相似、负样本更不相似。对于近似最近邻,局部敏感哈希、邻近图搜索等方法被开发出来用于ANN的搜索,在大规模数据上提高了搜索效率。

二、四种RAG基础范式

根据检索器增强生成器方式的不同,可以将RAG的基础范式分为四类,如图6所示,分别为基于查询的RAG、基于潜在表征的RAG、基于对数几率的RAG和基于推测的RAG。

图片

图6 RAG基础分类

基于查询的RAG:它将用户的查询与检索过程中获取到的文本直接集成到语言模型初始的输入阶段,也被称为提示增强。在检索完成后,其内容与原始用户查询合并后生成复合输入序列,将增强的序列输入到一个与训练好后的模型中来生成结果。比较经典的模型有REALM、KILT等等。在当前多模态应用研究中,将检索内容集成到输入中已经被证明是提高各种任务性能的有效方法,可以应用到代码生成、音频生成、知识库问答等多个领域。

基于潜在表示的RAG:它通过生成模型与检索对象的潜在表示进行交互,进而增强模型的理解能力并提高生成内容的质量。例如,比较经典的FID技术利用BM25和DPR来寻找响应查询的段落,它将检索到的每个段落及标题与查询链接起来,通过编码器分别处理。在解码器中,融合多个检索段落的信息来有效利用相关信息生成答案。在知识库问答领域,FID方法被广泛采用,大幅提高QA问答系统的效率和准确性。

基于对数几率的RAG:生成模型在解码过程中通过对数几率来组合检索得到的信息。通常,模型通过对数进行求和或者组合来得到逐步生成的概率。例如,KNN-LM模型将预训练的语言模型与K近邻搜索结合,预训练模型生成候选词列表以及对应的概率分布,同时从数据库中进行检索,根据当前上下文找到K个最相关的邻居,从而增强原始语言模型的输出。它主要能够从广泛的文本语料库中动态检索信息,提高预测的准确性和相关性。

基于推测的RAG:它主要通过寻找机会来进行检索,替代生成以节省资源并加快响应速度。例如,REST模型用检索来替代小模型中的推测解码,自己生成草稿。

 三、增强RAG性能的五种方法

Ⅰ. 输入增强:输入通常指的是用户的查询,它被输入到检索器中,而查询的质量将会明显影响检索阶段的最终结果。因此,增强输入至关重要,目前主要分为两种方法对输入进行增强,分别是查询转换和数据增强。

① 查询转换:通过修改转换输入的查询来增强检索结果。例如,Query2doc和HyDE两个模型首先利用query来生成伪文档,然后将其作为检索的关键部分。这么做的好处就是生成的伪文档包含更为丰富的相关信息,有助于检索得到更准确的结果。

② 数据增强:该方法时在检索前对查询进行改进,消除不相关信息、消除歧义、更新过期的文档、合成新数据等方式来提高最终RAG系统的性能。例如,MakeAnAudio模型使用字幕和音频-文本检索为任一语言的音频生成字幕来减少数据稀疏性,并添加随机的概念音频来改进原始音频。

Ⅱ. 检索增强:RAG系统中,检索过程十分重要,一般内容质量越高,就越容易激发大模型上下文学习的能力以及其他生成器和范式的能力。而内容质量越差,大模型越容易产生幻觉。目前,主要有以下6种方法进行检索增强。

①递归检索:递归检索是在检索前对查询进行拆分,用来执行多次搜索进而得到更多、更高质量的内容。例如,使用思维链(CoT)能够使模型逐步分解查询,提供更丰富的相关知识。

② 块优化:它是指通过调整块的大小来获得更好的检索结果。其中句子窗口检索是一种高效的方法,它通过获小块文本并返回被检索片段周围的相关句子窗口来增强检 索,确保了目标句子前后的上下文均包含在内。自动合并检索是另一种较为先进的RAG方法,比如LlamaIndex以树 状结构组织文档,文章、段落、句 子都遵循父子关系。在检索过程中对子节点的细粒度搜索,最终返回父节点提供更丰富的信息。

③ 微调检索器:模型的嵌入能力越好,语义上相似的内容能够在向量空间挨的越近,因此模型的嵌入能力对整个RAG系统的有效性至关重要。我们可以使用高质量的领域数据或任务相关数据对模型进行微调,以提高其在特定领域或任务上的性能。例如,APICoder使用python文件、API名字、签名、描述对检索其进行微调等等。

④ 混合检索:它是指同时使用多种检索方法,比如同时使用密集检索器和稀疏检索器来提高检索质量,密集检 索器来捕获语义信息,然后使用稀疏检索器来捕获词汇信息。

⑤ 重排序:它是指对检索到的内容进行重新排序,目的是为了减少将文本压缩成向量所造成的信息丢失对检索质量产生的影响,以获得更多样更好的结果。

⑥ 元数据过滤:这是另一种帮助处理检索到的文档的方法,它使用元数据比如时间、目的等过滤检索到的文档,以获得更好的结果。

Ⅲ. 生成器增强:在整个RAG系统中,生成器的质量往往决定了最终输出结果的质量,因此它可以决定整个系统的性能上限。目前主要有提示词工程、解码微调和微调生成器三种方法。

① 提示词工程:它主要用于提高大语言模型的输出质量,具体技术有提示词压缩、回步提示词、思维链等。例如XRICL利用思维链技术添加翻译,作为跨语言语义解析和推理的中间步骤。

② 解码微调:解码微调指的是在生成器处理期间添加额外的控件,这可以通过调整超参数来实现更大的多样性,进而限制输出词汇表等等。

③ 微调生成器:对生成器微调可以增强模型的能力,使其具有更精确的领域知识或者能更好的适应检索结果。例如,RETRO固定了检索器的参数,使用生成器中的分块交叉注意力机制将查询内容与检索器结合起来。

Ⅳ. 结果增强:在很多场景下,RAG的最终结果可能达不到预期效果,利用一些结果增强手短可以帮助缓解这个问题。这种方式主要通过重写输出的方法来实现,例如SARGAM通过Levenshtein Transformer对删除分类器、占位分类器和插入分类器进行分类,修改了代码相关任务中生成的结果以更好的适应代码上下文。

Ⅴ. 管道增强:在很多场景下,检索并不一定会有利于生成最终的结果,如果模型本身的参数化的知识足以回答相关问题时,过度检索就会造成资源浪费,也可能增加模型的混乱。因此,自适应检索和可迭代RAG两种方法被用来解决这个问题。

① 基于规则的自适应检索:FLARE模型在生成过程中通过计算概率主动决定是否检索和何时检索,此外也有方法在生成答案前对问题进行统计分析,允许模型直接回答高频率问题,对低频率问题引入RAG。

② 基于模型的自适应检索:例如,Self-RAG使用经过训练的生成器,根据不同指令下的检索token确定是否执行检索,并利用自反馈token来评估检索文本的相关性和支撑程度。

③ 可迭代RAG:RepoCoder采用迭代检索生成通道,更好地利用代码完成任务中分散在不同文件中的有用信息,在第i次迭代期间使用先前生成的代码来增强本轮的检索查询,获得更好的结果。

四、RAG在不同模态上的具体应用

本文总结了RAG在文本、代码、音频、图像、视频、3D、知识和科学八个领域的具体应用,其分类如图7所示。

图片

图7 RAG在多模态数据下的应用分类

Ⅰ. 文本:

主要介绍使用RAG方法进行文本生成的近期工作。

① 问题回答:问题回答是指从大量的文本数据源中提取问题的答案的过程。FID和REALM模型通过查询识别出前K个最相关的文章片段,并将每个片段与问题一起转发给大模型生成K个响应,这些回答最终被综合形成一个最终的答案。此外,也有研究证明了利用RAG协助大语言模型完成开放领域的问答任务,可以显著提高其小样本学习能力。还有学者将知识图谱与大语言模型相结合,通过构造提示将知识图谱中的结构化知识整合到大模型的输入中,提高响应的质量。还可以基于知识图谱提高大模型在长尾问题回答上的表现,通过促进大模型和知识图谱之间的交互以及通过束搜索策略扩展推理的路径空间来实现性能的提升。

② 事实验证:事实验证设计评估信息的准确性,它是自然语言处理(NLP)、信息检索和数据挖掘等学科中的关键功能。在现代数字化的背景下,数据呈指数级别增长,在社交媒体和在线新闻平台上未经检查的信息迅速扩散,事实验证正是打击这些具有欺骗性的假新闻的方法。CONCRETE利用跨语言检索机制来挖掘丰富的多语种证据,有效地弥补了事实验证中数据集代表性不足的语言的缺口。

③ 常识推理:常识推理需要机器以人的方式利用它们的外部知识对问题或任务进行推断、决策,然而常识知识范围之广、推理过程之复杂使其成为NLP领域长期具有挑战性的问题。KG-BART通过整合不同概念之间的复杂关系,在知识图谱内扩展了概念。它使用图注意力机制来帮助LLM生成更细微、逻辑更连贯的句子,这种方法既提升了模型的泛化能力又提高了常识推理能力。

④ 人机对话:人机对话包括机器理解自然语言的能力,并熟练地运用这种技能与人类无缝接触。这种能力代表了人工智能和自然语言处理领域的重大挑战,并提供了广泛的实际应用。因此,人机对话仍然是许多学者研究的焦点。ConceptFlow利用常识性知识图谱来构建对话,根据注意力得分指导对话流,并推动对话向前发展。该方法即使在模型参数大幅减少的情况下,也取得了不错的结果。Cai等人通过检索和提炼过去会话历史的本质,将文本生成任务重新想象为完形填空,从而获得了显著的结果。Komeili等人通过利用先进的搜索引擎技术从互联网中获取相关内容,提高了对话生成的质量。BlenderBot3拓宽了其搜索范围,不仅挖掘相关的互联网内容,还挖掘本地对话历史,并采用实体提取等技术来改进生成的对话质量。Kim等人通过整合跨语言知识,有效地解决了非英语数据集的稀缺性,并提高了生成对话的质量,从而提高了非英语对话的质量。

⑤ 神经网络机器翻译:神经机器翻译(NMT)是将文本从源语言翻译成目标语言的自动化过程。它是NLP领域的一项关键任务,也是人工智能研究的一个重要目标,具有重要的科学意义和现实意义。Cai等人提出了一种利用单语语料库和多语学习技术的创新方法,挑战了神经机器翻译对双语语料库的传统依赖。这种方法确保了检索系统提供了充足的信息,同时优化了检索机制和翻译模型,最终取得了很好的性能。TRIME通过联合训练检索系统和生成模型,有效地减少了训练阶段和推理阶段之间的差异,从而提高了翻译的精度。

⑥ 事件提取:事件提取是NLP中的一项专门任务,其重点是从非结构化文本数据中精确定位和提取特定事件类型的实例,最终目标是将文本的嵌入中的细节转换为结构化格式,进而促进高级分析、高级信息检索和其他下游应用。事件通常由中心动作或谓词以及相关实体所表示,这些实体可以包括参与者、时间、位置和其他相关属性。R-GQA采用基于检索的方法,通过识别和利用存储库中最紧密对齐的问答对来增强给定问题的上下文,从而丰富了处理当前查询的可用信息。

⑦ 摘要:在NLP领域,摘要是一项任务,旨在从冗长的文本中提取重要信息,并产生一个简洁,连贯的概括主题的摘要。摘要使读者能够迅速掌握文本的精髓,从而节省了阅读大量材料所花费的时间。摘要有两种主要的方法:抽取和抽象。摘要抽取涉及直接从源文本中自动选择和编译关键短语。关键短语简洁地抓住了文本的主题、内容或观点,通常由一个或几个单词组成。关键短语的生成有助于理解、分类、检索和组织文本信息。它被广泛应用于搜索引擎优化、学术研究、文本摘要等领域。这种技术避免了创造新句子,而是重新利用原文中的片段。而抽象总结方法需要像人类一样,让机器理解原文的意思,并将其重新表述成新的句子。这种方法可以更流畅地传达源的意图,但由于其复杂性,在实现方面带来了更大的挑战。RAMKG有效地利用了一个全面的英语语料库来提高非英语语境下关键词生成的性能。它通过增强具有相似主题的不同语言文本中提取的关键字的对齐来实现这一点。

Ⅱ. 代码:

代码相关的任务有代码生成、代码总结、代码自动填充、程序自动修复等,是软件工程领域关注的重点。检索和生成以前是解决这些任务的两种不同方法。对于检索,通过相似的抽象语法树或文本编辑距离可以找到相似的代码片段,而通过稀疏检索或密集检索可以找到自然语言。对于生成,考虑到代码具有顺序的数据形式,应用了许多序列到序列的模型,从LSTM、Transformer到当前仅用解码器的LLM。最近的研究利用这两种技术来实现更好的性能,增加了检索结果的生成过程。

① 代码生成:目标是将自然语言描述转换为代码实现,是一个从文本到代码的过程。因此生成器广泛采用LSTM和Transformer模型,而到底是利用特定代码的检索还是基于文本的检索取决于要检索的内容。在小样本学习背景下,基于检索的提示词工程是代码生成任务里最流行的RAG应用场景。EDCODER使用密集检索器CodeBert检索相似的自然语言描述,然后将自然语言文本及其配对代码连接起来,用于下游生成器PLBART。而APICoder首先训练一个基于bert的深度检索器来对齐自然语言描述和API文档的嵌入。然后,检索相关API信息,为生成器CODEGEN-MONO构建提示符。

检索结果也可以在生成过程中应用。例如,RECODE使用编辑距离来检索相似的自然语言描述,然后从检索到的句子对应的目标代码抽象语法树(AST)中提取n-gram的动作子树。在基于LSTM的生成过程中,利用处理过的子树的模式来增加每个解码步骤对应的单词的可能性。

② 代码总结:其目标是将代码转换为自然语言描述,这是一个代码到文本的过程。与代码生成一样,许多序列到序列的模型被用作生成器。在许多研究工作中,检索结果需要额外的编码器进行处理。Rencos使用两种不同的方法来检索相似的代码片段,抽象语法树(AST)之间的语法相似性和密集表示之间的余弦相似性。对于生成器,采用基于注意力机制的LSTM。编码输入和检索结果分别有三个编码器,解码器结合三个概率进行最终生成。Re2Com和EditSum都使用稀疏检索BM25检索相似的代码,并使用LSTM生成摘要。它们分别对输入、检索代码和相应的摘要进行编码,然后在解码器中组合中间表示或者概率。用于上下文学习的RAG可以检索类似的示例并构建生成器的提示,例如REDCODER同时用于代码生成和总结,它用GraphCodeBert代替了代码总结任务的检索器。ASAP使用BM25检索相似的代码,并使用GPT模型生成摘要。

③ 代码补全:代码补全在编码层面可以被认为是“下一个句子预测”任务。ReACC遵循小样本学习范式,检索相似的代码来构建生成提示。在检索方面,采用稀疏检索与密集检索相结合的混合检索方法;对于生成,它使用codegpt改编。RepoCoder进一步执行迭代检索和生成,以弥补检索上下文与预期完成目标之间的差距。CoCoMic为整个代码项目构建一个项目上下文的图,并检索输入源代码的top-k个邻居。它生成源代码和检索上下文的表示,然后联合处理嵌入以完成代码。

④ 自动程序修复:存在bug的代码可能需要花费大量的精力来修复。自动程序修复技术则利用生成模型输出正确的版本。RAG技术目前广泛应用于程序自动修复中的小样本学习。其中RING基于稀疏向量和密集向量检索相似的错误信息,然后为生成器Codex构建提示。

⑤ 文本转SQL和基于代码的语义解析:语义解析是将自然语言翻译成明确的结构化意义表示的任务,通常利用代码来增强这一过程。SQL不仅是一种编程语言,而且还可以被视为一种结构化表示,因此我们将text -SQL(代码生成的一种特殊情况)放在本小节中。相关研究工作均采用检索增强的小样本学习方法。例如,XRICL关注的是将非英语话语翻译成SQL查询的问题。它通过密集检索使用非英语语音对英语语音进行搜索和重新排序,然后为Codex生成SQL查询生成提示。CodeICL使用Python进行语义解析,并为生成器GPT增加了结构化描述的提示。

⑥ 其他:还有其他几个采用RAG范式的与代码相关的任务。例如,对于数值推理任务,将思维链(Chain-of-Thought)替换为程序作为中间推理步骤,并及时为下游LLM增加基于密集检索的类似示例。StackSpotAI构建了一个人工智能编码助手,其中包含许多与代码相关的任务。它实现了一个RAG组件,识别作为GPT生成的上下文的最相关的信息片段。

Ⅲ. 音频:

① 音频生成:音频生成的目标是通过自然语言输入来生成对应的音频。ReAudioLDM采用密集检索器CLAP来检索给定输入下的相似字幕音频对。利用生成器、潜在扩散模型和基于vae的解码器将输入文本和检索对的表示作为输入并生成输出音频。

② 音频字幕:音频字幕的目标是用音频数据生成自然语言,这是一个序列到序列的任务。RECAP]利用CLAP检索给定音频数据的相关字幕,然后将检索到的字幕作为GPT-2模型的提示输入中,GPT-2模型通过交叉注意力与音频嵌入进行交互。

Ⅳ. 图像:

①图像生成:RAG通过整合信息检索系统来增强生成模型。对于图像生成,这意味着利用检索数据生成高保真度和可靠的图像,即使是罕见的或看不见的实体也可以生成。同时,该方法还可以减少生成模型的参数个数和计算成本。RetrieveGAN使用可微分检索过程从其他图像中选择兼容的patch作为生成的参考。采用Gumbel-softmax技巧使检索过程可微,实现端到端训练和嵌入函数的优化。RetrieveGAN可以从场景描述中生成真实多样的图像,其中检索到的patch是合理且连贯的。IC-GAN则将数据分布建模为每个训练实例周围条件分布的混合。它以实例特征作为生成器和鉴别器的条件,这些实例特征是由预训练的特征提取器获得的。它还使用条件反射实例的最近邻作为鉴别器的真实样本。IC-GAN可以为标记和未标记的数据集生成逼真和多样化的图像,并可以通过改变条件实例转移到未见过的数据集。IC-GAN还可以通过交换类标签或实例特征来控制生成图像的语义和样式。然而,使用训练数据本身进行检索可能会限制泛化能力。KNN-Diffusion使用大规模检索方法,在没有任何文本数据的情况下训练基于扩散的模型。该模型以两个输入为条件:由CLIP提取的文本或图像嵌入,以及从大型图像数据库中嵌入的k个最近邻。KNN嵌入有助于减小文本和图像分布之间的差距,并通过简单地交换数据库从不同的域生成图像。该模型还支持文本驱动的局部语义操作,无需掩码,通过微调模型来预测原始图像。

② 图像字幕:基于检索增强的图像字幕是一种受检索增强语言生成启发的创新方法。与仅依赖于输入图像的传统图像字幕方法不同,这种新技术通常通过利用从数据存储中检索到的一组字幕以及图像本身来生成描述性句子。记忆增强(memory -augmented, MA)利用记忆库中的显性知识来改进标题生成。记忆库是通过对训练数据中每个图像-文本对的历史上下文和目标词进行编码来构建的,即图像特征和过去句(key)以及目标词(value)。在推理过程中,模型使用当前上下文向量查询内存库并检索最相似的条目。然后,它根据检索到的条目计算词汇表的分布,并将其插入原始模型的预测。MA的主要亮点是它是非参数的,与任何字幕模型兼容,并且可以适应更大的数据集,而无需额外的训练。此外,RA-Transformer采用KNN存储器从外部语料库中检索相关标题,并增强生成过程。它由一个具有KNN-augmented注意层的Transformer-decoder架构组成,该注意层结合了对输入token的屏蔽自注意和对检索标题的交叉注意。学习门被用来平衡本地环境和外部记忆的贡献。在检索方面,它采用基于clip的视觉编码器在视觉语义空间中执行近似KNN搜索。EXTRA则通过合并从相似图像中检索的字幕来增强图像字幕。它使用预训练的视觉和语言(V&L) BERT编码器来联合处理图像和检索到的字幕,创建丰富的跨模态表示。解码器然后关注视觉和语言表示,从额外的文本上下文中受益。EXTRA表明,检索足够数量的标题确实可以提高标题质量。

Ⅴ. 视频:

① 视频字幕:视频字幕是用描述性的话语来描述视觉内容。R-ConvED引入了检索增强机制来促进单词预测。它使用双编码进行视频文本检索,并提出卷积编码器-解码器网络进行生成。对于给定的输入视频,R-ConvED首先从训练集中检索top-k个相关句子及其对应的视频,然后将这些句子对和输入视频分别送到生成器中。通过类似注意力机制的读取操作将得到的解码器隐藏状态组合起来,从而利用最终表示预测目标词。CARE则分别对帧、音频和检索文本使用视觉编码器、音频编码器和文本编码器。它采用CLIP作为检索器,Transformer解码器作为生成器。

将三种模式的嵌入结合起来增强解码器,产生与输入嵌入相关的全局语义引导和与注意层相关的局部语义引导。

② 视频生成:文本到视频生成是在给定的自然语言描述下生成视频。animation - story开发了一个框架,可以基于文本生成高质量的讲故事的视频。它首先将文本分成单独的情节,并使用LLM丰富描述。然后,它通过密集检索器检索每个情节的相关视频[。它通过潜在扩散模型生成视频,该模型由两个分支组成:文本编码器CLIP和以检索视频的估计深度作为结构控制的结构编码器。

Ⅵ. 3D:

文本转3D:检索可以用于增强3D内容的生成。ReMoDiffuse旨在使用扩散模型生成运动。它首先通过CLIP给定的文本输入检索相关的运动实体,然后通过语义调节的注意力层利用文本和检索实体的信息。而AMD为保真度和多样性设计了两个运动扩散分支。第一分支输入原始提示文本进行扩散;第二个分支将输入文本分解为文字,并检索相似的参考运动进行扩散。进一步采用基于Transformer的融合模块实现自适应平衡。

Ⅶ. 知识

结构化知识在语言任务中得到了广泛的应用,包括知识库和知识图谱。它通常用作扩充生成器的检索源。

① 知识库问答:知识库问答涉及到利用知识库来确定问题的正确答案。给定一个问题,许多能够生成逻辑表示的语义分析方法被提出,比如SPARQL语言。ReTraCk使用提及检测来链接实体,并使用密集检索器Bert检索模式项。然后,它通过LSTM生成逻辑形式,通过特定于知识的规则合并检索到的项。对于给定的查询,看不见的实体处理通过FreeBase检索主题实体,并将查询与编码器-解码器的实体连接起来以生成SPARQL输出。CBRKBQA则使用基于roberta的深度检索检索相关问题和相应的逻辑形式答案,然后将问题和检索到的对连接起来,用于编码器-解码器转换器模型。它还修改最终的生成结果,使生成的关系与知识图谱中查询实体的局部邻域中存在的关系保持一致。ECBRF使用密集检索器检索相似的三元组,并为BART或GPT-2在上下文学习中构建输入的提示。DECAF将资源描述知识库中的三元组形成句子,然后将具有相同头部实体的句子连接成文档。它使用BM25稀疏检索或Bert密集检索检索相关文档,然后利用Fusion-in-Decoder技术在给定每个(查询、文档)对作为输入的情况下生成逻辑形式和直接答案。它将输出组合以获得最终答案。KD-CoT使用与DECAF相同的密集检索器和融合译码器。它遵循思维链范式,迭代地执行检索、生成和验证,直到完成CoT。FC-KBQA提取给定问题的相关类、关系和实体。

② 知识图谱补全:知识图谱由三元组组成,包括头部实体、关系和尾部实体。知识图谱补全的任务是预测不完整三元组中缺失的实体。ReSKGC通过串联,将所有训练三元组线性化为文本,然后使用BM25检索相关三元组,并使用T5与融合译码器生成完整的三元组。

Ⅷ. 科学:

在加强分子生成和医学任务等许多跨学科应用中,RAG也成为一个有前景的研究方向。

① 药物发现:药物发现的目标是产生同时具有多种特性的分子。etMol将轻量级检索机制集成到预训练的编码器-解码器生成模型中。该方法采用SMILES字符串表示分子以及ChemFormer模型,涉及样本分子与输入分子的检索和融合。它还利用迭代改进过程来动态更新生成的分子和检索数据库。DeepICL构成了一个以相互作用为重点的3D分子生成框架,特别强调蛋白质-配体相互作用的建模,旨在促进可推广的口袋约束配体设计。

② 药物应用:最近的一些研究通过从生物医学领域特定的数据库中检索信息,提高了LLM的表达能力,从而增强了模型的能力,为医学领域的任务提供有价值的指导。GeneGPT是一种培训LLM有效使用国家生物技术信息中心(NCBI)提供的Web API来解决基因组学查询的新方法。它通过集成特定领域的工具来增强LLM,从而通过API调用从NCBI检索此类数据,从而改进其访问生物医学信息的能力。当执行GeneTuring测试时,GeneGPT指示Codex通过上下文学习和精通检测和执行API调用的增强解码算法来利用NCBI Web API。Chat-Orthopedist则建立了一个关于青少年特发性脊柱侧凸(AIS)疾病和治疗方案的外部知识库,并开发了一个检索增强的ChatGPT,为LLM提供AIS领域的知识,为患者的询问提供准确和可理解的回应。利用外部AIS知识库和密集检索器,Chat-Orthopedist增强LLM与脊柱侧弯相关的领域特定知识,一定程度上避免幻觉的问题。

五、现有RAG评估基准

Chen等人提出了一个RAG基准,该基准分别从噪声鲁棒性、负面拒绝性、信息整合性和反事实鲁棒性四个方面对RAG进行评估。噪声鲁棒性评估LLM是否能够从包含噪声信息的文档中提取必要的信息。噪声信息与输入查询相关,但对回答查询无用。负面拒绝性衡量LLM是否会在检索到的内容不够时拒绝响应查询。信息整合评估LLM是否能够通过整合多个检索内容来获取知识并做出响应。反事实鲁棒性是指LLM识别检索内容中与事实不符的错误的能力。

另外三个基准,RAGAS , ARES和TruLens,分别考虑了三个不同的方面:可信度,答案相关性和上下文相关性。当正确答案能从检索到的事实推断出来时,可信度关注结果中的错误事实。回答相关性衡量生成的结果是否真正解决了问题(即查询)。上下文相关性判断检索到的内容是否包含尽可能多的知识来回答查询,以及尽可能少的无关信息。CRUD-RAG将所有RAG任务分为四类,分别是Create、Read、Update和Delete,并使用文本延续、问答(单文档和多文档问题)、幻觉修改和开放域多文档总结来评估每个类别。

六、  RAG的局限性

尽管在各种应用程序中广泛采用RAG,但在有效性和效率方面确实存在一些限制

1)检索结果中的噪声:信息检索不能产生完美的结果,因为信息丢失出现在编码器模型生成的表示中。 此外,人工神经网络搜索可以提供近似结果而不是精确结果。 因此,检索结果中不可避免地存在一定程度的噪声,表现为不相关的对象或误导性信息,这可能会导致RAG系统的故障点。 尽管常识是提高检索的准确性,将有助于 RAG 的有效性,但最近的一项研究表明,噪声检索结果可能反而有助于提高生成质量。 一个可能的解释是,检索结果的多样性对于快速构建也可能是必要的。 因此,噪声对检索结果的影响仍然不确定,导致人们对采用哪种度量进行检索以及如何促进检索器和生成器之间的交互仍感到困惑。

2)额外开销:虽然在某些情况下检索可以帮助降低生成成本,但检索的结合有时会带来不可忽略的开销。 考虑到 RAG 主要用于提高现有生成模型的性能,包含额外的检索和交互过程会导致延迟增加。当与复杂的增强方法结合使用时,例如递归检索和迭代RAG,额外的开销将变得更加明显。 此外,随着检索规模的扩大,与数据源相关的存储和访问复杂性也会增加。 

3)检索和生成的交互:实现检索和生成之间的无缝集成需要精心的设计和优化。 鉴于检索器和生成器的目标不一致,并且两个模型可能不共享相同的潜在空间,设计和优化这两个组件之间的交互会遇到挑战。 虽然已经提出了许多方法来实现有效的 RAG,这些方法要么将检索和生成过程分开,要么在中间阶段将它们集成。 虽然前者更加模块化,但后者可能会从联合训练中受益。 到目前为止,还缺乏对不同场景下不同交互方式的充分比较。RAG 系统的调整也具有挑战性,RAG 中不同方面的反作用(例如度量选择和超参数调整)也仍未被探索。 因此,有必要在算法和部署方面进一步完善RAG系统,以充分释放其潜力。

4)长上下文生成:早期RAG利用即时增强的主要挑战之一是生成器固有的上下文长度限制。 即时压缩和长上下文支持方面的研究进展部分缓解了这一挑战,尽管在准确性或成本方面略有权衡。 鉴于这一挑战,最近出现了一个观点:“像 Gemini 1.5 这样的长上下文模型将取代 RAG”。 然而,这种说法并不成立——RAG 在管理动态信息方面表现出更大的灵活性,涵盖最新的和长尾知识。RAG 未来将利用长上下文生成来实现更好的性能,而不是简单地被它淘汰。

七、RAG未来趋势和方向

1)关于RAG方法、增强和应用的更高级研究:一个直接的研究方向是开发RAG更先进的方法、增强和应用。现有的工作已经探索了检索器和生成器之间的各种交互模式。 然而,由于这两个组件的优化目标不同,实际的增强过程对最终的生成结果有很大影响。 对更先进的增强基础的研究有望充分释放 RAG 的潜力。RAG 是一种通用技术,已应用于多种模式和任务。 然而,大多数现有工作直接将外部知识与特定的生成任务相结合,而没有彻底考虑目标领域的关键特征。 因此,对于未充分利用 RAG 功能的生成任务,我们相信设计适当的 RAG 系统将是更利于模型表现的。

2)高效部署和处理:目前,已经提出了几种针对LLM的基于查询的RAG部署解决方案,例如LangChain和LLAMA-Index。 然而,对于其他类型的 RAG 和生成任务,缺乏即插即用的解决方案。 此外,考虑到检索带来的额外开销,并考虑到检索器和生成器的复杂性将继续增长,在 RAG 中实现高效处理仍然是一个挑战,需要有针对性的系统优化。

3)结合长尾和实时知识:虽然RAG的一个关键动机是利用实时和长尾知识,但知识更新和扩展的管道仍未探索。 许多现有的工作仅用生成器的训练数据构成检索源,从而忽略了检索本来可以提供的动态和灵活的信息优势。 因此,设计一个具有不断更新的知识或灵活的知识源的有用的RAG系统,以及相应的系统级优化,是一个不断发展的研究方向。 凭借长尾知识的利用能力,我们也期望RAG能够利用个性化的信息和特征,以适应当今的网络服务。

4)与其他技术相结合:本质上,RAG 与其他技术正交,这些技术的目标都是提高 AIGC 的有效性,包括微调、强化学习、思想链、基于代理的生成和其他潜在的优化。 然而,同时应用这些技术的探索仍处于早期阶段,需要进一步研究深入算法设计并充分发挥其潜力。

论文地址:https://github.com/hymie122/RAG-Survey

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

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

相关文章

Sublime Text常用快捷键

Background Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器。Sublime Text官方下载链接:https://www.sublimetext.com/download 快捷键的使用可以帮助我们更加高效地编写代码或者处理数据。 快捷键 按键功能CtrlL选择整行(重复按继续选择下行&a…

C语言sizeof操作符与strlen函数

1.sizeof与strlen的介绍 (1).sizeof 计算变量的内存空间大小。底层实际上是对变量类型的计算。是一个单目操作符,不是函数,后面的括号可以省略 (2).strlen 函数原型 strlen是一个函数,返回的size_t类型的数据,头文件为string.h计算字符串…

docker 运行异构镜像

概述 关于docker镜像在不同的cpu架构下运行报错的解决办法,作者踩坑验证,在此分享经验 某次工作遇到需要银行内部部署docker镜像,由于行内已经开始走信创的路线,使用鲲鹏系统,arm架构,结果就遇到了standa…

【gpt实践】同时让chatgpt和claude开发俄罗斯方块

最近chatgpt和claude都在使用,其实大部分日常使用场景表现都没有相差太多,想搞一个有趣的小实验,如果同时让chatgpt和claude开发俄罗斯方块谁会表现的更好呢,说干就干! prompt 我选择了用英文描述,毕竟英…

导入空管基础数据

1、首先将data.tar.gz解压到自定义目录中 注意:由于数据文件的压缩包比较大,解压过程可能会持续3~5分钟,请耐心等待。 [rootnode3 ~]# cd /opt/software/ [rootnode3 software]# tar -xzf data.tar.gz -C /opt/ 2、利用SQLyog或者其他数据库…

LeetCode:链表相交

题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 示例 解题思想 将两个链表从尾部对齐,然后进行寻找。 此时我们就可以比较curA和curB是否相同&#xff0c…

Pytorch基础(21)-- torch.repeat_interleave()方法

分享一下自己目前在维护的Github项目,由于本人博士阶段接触了一个全新的研究方向-----使用机器学习、强化学习、深度学习等方法解决组合优化问题,维护这个项目的目的: (1)记录自己阅读过的paper,同时分享一…

G. Rudolf and Subway

解题思路 每条边的边权可选,由颜色决定同一颜色的线路可以直达颜色最多有种考虑将颜色视作链接点,进行分层图跑最短路最终结果除2最多建条边(直接存状态Map跑最短路被毙掉了) import java.io.*; import java.math.BigInteger; im…

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例

【Python】新手入门学习:详细介绍接口分隔原则(ISP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、Py…

Postman请求API接口测试步骤和说明

Postman请求API接口测试步骤 本文测试的接口是国内数智客(www.shuzike.com)的API接口手机三要素验证,验证个人的姓名,身份证号码,手机号码是否一致。 1、设置接口的Headers参数。 Content-Type:applicati…

三防手机与普通手机的区别在哪里?

一、三防手机和普通手机主要的区别在于其防护性能,它们是针对不同环境和使用场景设计的。三防手机一般包括防水、防尘和防摔三个方面的特点,而普通手机则往往没有这些特点。 防水性能。三防手机的防水性能通常比普通手机更强大。三防手机可以在一定程度上…

【XR806开发板试用】简单移植coremark并测试实际跑分

前言 首先,拿到板子的时候,由于xr806它是个IOT的片子,所以自然而然必然,在预想里就会有很多大佬会把文章出发点考虑在wifi/bt,各种物联网/WEB应用上。那么怎么另辟蹊径回避这个热点又体现出XR806的特色呢,…

一款好用的AI工具——边界AICHAT(三)

目录 3.23、文档生成PPT演示3.24、AI文档翻译3.25、AI翻译3.26、论文模式3.27、文章批改3.28、文章纠正3.29、写作助手3.30、文言文翻译3.31、日报周报月报生成器3.32、OCR-DOC办公文档识别3.33、AI真人语音合成3.34、录音音频总结3.35、域方模型市场3.36、模型创建3.37、社区交…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的条形码二维码检测系统(深度学习+UI界面+训练数据集+Python代码)

摘要:在物流和制造业中,开发一套高效的条形码与二维码识别系统显得尤为关键。本博文深入探讨了如何利用深度学习技术打造出一套先进的条形码及二维码检测系统,并且提供了一套完整的实施方案。该系统搭载了性能卓越的YOLOv8算法,并…

[LeetCode][LCR 175]计算二叉树的深度

题目 计算二叉树的深度 某公司架构以二叉树形式记录,请返回该公司的层级数。 示例 1: 输入:root [1, 2, 2, 3, null, null, 5, 4, null, null, 4] 输出:4 解释: 上面示例中的二叉树的最大深度是 4,沿…

【BI-Dataease】dataease设计思路

参考:https://juejin.cn/post/7089310768671227940 1、BI可视化工具的关键问题是什么? (1)各种数据源的数据结构和类型如何统一? (2)各种图表的配置属性不一致,属性如何绑定到数据…

【C++庖丁解牛】实现string容器的增删查改 | string容器的基本接口使用

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 前言📖push_b…

关于stm32(CubeMX+HAL库)的掉电检测以及flash读写

1.掉电检测 CubeMX配置 只需使能PVD中断即可 但是使能了PVD中断后还需要自行配置一些PWR寄存器中的参数,我也通过HAL库进行编写 void PVD_config(void) {//配置PWRPWR_PVDTypeDef sConfigPVD; sConfigPVD.PVDLevel PWR_PVDLEVEL_7; …

蓝桥杯2023年第十四届省赛真题-与或异或

一共10个电门&#xff0c;穷举310次 #include<stdio.h> #include<math.h> int main(){int a[5][5], max (int)pow(3, 10), t, op, count 0;a[0][0] a[0][2] a[0][4] 1;a[0][1] a[0][3] 0;for(int k 0; k < max; k){t k;for(int i 1; i < 5; i){fo…

vite ssr服务端渲染

阅读 Vue文档 这一章里有说过&#xff0c;vue是支持服务端渲染的。 通过createSSRApp创建vue组件实例&#xff0c;并使用renderToString将在服务器渲染好template并返回字符串结构&#xff0c;通过替换占位字符将渲染好的字符串输出到html上&#xff0c;这样的一个过程就实现了…
最新文章