链载Ai

标题: 应用场景 [打印本页]

作者: 链载Ai    时间: 前天 09:49
标题: 应用场景

发布时间:2024 年 05 月 09 日

RAG

A Survey on RAG Meets LLMs: Towards Retrieval-Augmented Large Language Models

检索增强生成(RAG)技术,作为 AI 领域的尖端技术,能够提供可靠且最新的外部知识,极大地便利了各种任务。在 AI 内容生成的浪潮中,RAG 通过其强大的检索能力为生成式 AI 提供了额外的知识,助力其产出高质量内容。尽管大型语言模型(LLMs)在语言处理上展现了突破性的能力,但仍受限于内部知识的幻觉和过时。因此,检索增强的 LLMs 应运而生,它们利用外部权威知识库,而非仅依赖内部知识,以提升生成质量。本综述全面审视了 RA-LLMs 的研究现状,从架构、训练策略到应用三个技术层面进行探讨。我们首先概述了 LLMs 的基础和进展,随后根据应用领域对相关研究进行了分类,并深入分析了每个领域的挑战及 RA-LLMs 的应对能力。最后,我们探讨了当前研究的局限,并展望了未来研究的可能方向。

https://arxiv.org/abs/2405.06211

背景

检索技术是指解析查询,并从外部数据源中获取有关信息,在搜索、问答、推荐系统等多个领域得到广泛运用。比如谷歌、Bing、baidu都是检索技术成功应用的典型代表,这些搜索引擎可以精准筛选并提供与用户查询相匹配的网页和文档,大大提升了信息检索的效率。用过维护外部数据库中的数据,检索模型可以获得最新、准确的知识。

在AIGC时代,检索基于与生成式模型结合,催生了RAG(检索增强生成技术),这一技术对提升文本内容的生成质量发挥着重要作用。

RAG通过整合外部数据源的信息或知识,为输入查询或生成输出提供补充,从而提升生成模型的性能。首先利用检索器从外部数据库中提取相关文档,这些文档随后作为上下文来增强生成过程。RAG技术在各种生成任务中应用广泛,且易于适配,几乎无需额外训练。RAG在开放域问答(OpenQA)等知识密集型任务以及通用语言任务和多种下游应用中都展现出巨大潜力。

大型语言模型(LLM)作为预训练基础模型的代表,已在推荐系统、分子发现和报告生成等多个任务中展现出卓越性能。LLM的成功得益于其先进的架构和在海量多源数据上的十亿级参数预训练,使其在语言理解和生成、上下文学习等方面具有显著的涌现能力。然而,LLM也面临一些挑战,如缺乏特定领域知识、易产生幻觉以及更新模型所需的巨大计算资源。特别是在医学和法律等专业领域,这些问题尤为突出。近期研究显示,即使是最先进的LLM,在特定法律查询中也普遍存在幻觉现象,幻觉率高达69%至88%。此外,解决幻觉问题所需的大量计算资源,进一步限制了LLM在现实世界应用中的普及。

为了解决或者缓解大语言模型的局限性,近期有研究开始探索利用检索增强生成技术来提升大语言模型在多项任务中的表现,尤其是那些需要最新技术、可靠知识有很高要求的领域。

本篇综述的目的是全面梳理RAG技术,在架构、训练、应用方面进行总结。

检索技术

当接收到LLM的查询输入时,RAG框架中的检索环节旨在从外部知识库中提取相关信息,这些知识库可能是公开的或私有的,如上图所示。

如上图,核心组件检索器是由多个步骤组成,协同工作,以确保信息检索的准确性。检索的具体操作流程,还包括预检索和后检索等步骤。后面的内容里会逐一介绍主要的检索技术细节,包括:检索器类型、检索粒度、预后检索增强、数据库技术等。

检索器类型

检索方法大致分为两大类:基于词的稀疏检索和将查询和外部知识嵌入向量空间的密集检索。其中,稀疏检索主要用于文本检索,而密集检索则适用于多种数据格式。

稀疏检索

如TF-IDF和BM25,是一种简单直接的方法,通常依赖于倒排索引匹配和原始数据输入。例如,许多研究直接采用BM25进行段落级别的检索,以支持其RAG系统,用词的集合来表示段落,并根据词频和逆文档频率进行排序。除了辅助生成器输入外,稀疏检索也被用于寻找上下文学习示例。

在RAG中应用稀疏检索的主要局限在于其非训练性质,这导致检索性能在很大程度上依赖于知识库的构建质量和查询生成的效果。此外,这种固定术语的方法仅支持相似性检索,并不能适应LLM应用中所需的其他类型的检索,如多样性。

密集检索

与稀疏检索不同,密集检索将查询和文档根据特定标准嵌入到连续向量空间,例如语义相似性。由于可以进行训练,密集检索方法在适应性上展现出更大的灵活性和潜力。在现有的RAG模型中,作为密集检索器核心的嵌入模型。

一种简洁的设计方法是直接利用生成模型的一部分作为检索器的嵌入层,这有助于加强检索与生成过程的一致性。

另外基于Bert的一些模型,也在检索模型中得到广泛运用。常见的一种检索器设计是构建双流编码器(一个用于处理查询,另一个用于处理文档),这种方法也被称作双编码器。早期的RAG方法往往会冻结或部分冻结[69]检索器的参数,以便执行基础级别的相关知识提取,同时更加注重知识的利用和生成器的微调。大规模的专门预训练进一步提升了RAG模型在知识密集型任务上的表现。一个典型的例子是Dense Passage Retriever(DPR),它基于BERT构建,专门为OpenQA任务预训练,使用问题-答案对数据。

通过有效的微调,双编码器检索器也被广泛应用于基于ICL的RAG中,尤其是在基于句子嵌入相似性的检索,以及ICL特殊需求,如多样化示例检索。

另一类在RA-LLMs中广泛使用的密集检索器是单编码器结构,可能基于Transformer、BERT或其他现成的序列建模。这些单编码器检索器通常在大规模未对齐文档上通过对比学习进行预训练,因此在通用性上表现出色,能够更好地适应和泛化到新领域或任务。这类通用型预训练检索器在面向多样化任务的LLM中更加灵活,已在多种RA-LLM方法中证明了它们的有效性,例如In-Context RALM、Atlas、Self-RAG。

根据现有研究的实验结果,对于开放域问答任务,与InstructGPT结合使用时,未经微调的通用型预训练检索器(如Contriever)的性能可与稀疏检索器(如BM25)相媲美。然而,它们都不如在目标数据集上经过微调的DPR模型,这表明了在特定任务和数据上进行微调的重要性和有效性。

检索粒度

检索粒度是指索引资料库时采用的检索单元,比如:文档、段落、词、实体等不同层级。在大语言模型RAG应用中,选择何种粒度会显著影响模型的效果和性能,也取决于数据库存储空间大小、检索时的计算开销。

预检索和检索后处理

为了提高检索的精确度和相关性,大家设计了多种策略优化检索器的输入输出流程。

另一种预检索策略是查询重写,其目的是缩小输入文本与检索所需知识之间的差异,将原始问题转化为更利于检索的形式。

后检索增强指的是在将检索器提取的前k个文档输入生成器之前,对这些文档进行处理的步骤,以改善检索与生成阶段之间的匹配度,尤其适用于LLMs等封闭源生成器。

最近提出了利用LLMs生成推理路径和计划的高级RAG流程,通过与信息检索(IR)模块的迭代配合,逐步检索知识以增强基于LLM的生成能力。然而,朱等研究者指出,如果IR和LLM的输出质量不高,检索和生成过程可能会在这样的迭代引导流程中相互阻碍。为克服这一障碍,他们提出了一种新的推理方法,用以增强查询和检索到的知识。

后检索策略也可用于提高检索结果与生成模型之间的兼容性。例如,现有LLMs的一个主要限制是输入令牌的长度,这限制了长检索文档直接融入现有的RA-LLMs。为解决这一限制,徐等研究者提出了检索、压缩、前置(RECOMP)方法,该方法在生成过程中的上下文增强前增加了一个中间步骤,将检索到的文档处理成文本摘要。

数据库

RAG的检索依托于外部知识源,这些知识源可以是封闭的或开放的,如上图所示。封闭源数据库通常存储键值对形式的知识,这些键值对可以有多种构建方式。键主要用于相似性匹配,可以是BM25中的稀疏向量,也可以是检索编码生成的密集嵌入。值的内容取决于检索目标,大多数情况下是原始文本。

例如,早期RAG会将每篇维基百科文章分割成100字的独立段落,总计约2100万份文档[69]。这些文档通过密集嵌入编码,其值和键分别存储于数据库中。值也可以是标记,每个标记对应一个,如kNN-LM和Spalm中所采用的。数据库的来源根据应用领域和任务的不同而异。

维基百科是RAG研究中常用的通用检索集,它存储了大量事实性结构化信息,并且有不同规模的版本,从十亿级到万亿级。特定领域的数据库也用于特定的下游任务。例如:

与常规RAG相比,互联网搜索在RA-LLMs中作为检索器的使用更为频繁,这是因为LLM具有理解搜索结果的非凡能力,即检索到的文档,以及使用工具处理和分析这些文档的能力[92]。现有研究表明,利用搜索引擎(如InstrucGPT)对于LLM在零样本知识密集型任务,如OpenQA和事实核查上,尤其有效。

生成器

在整个检索增强生成过程中,生成器的作用也至关重要。目前生成器主要有两种主流选择,分别是:纯解码器模型和编码器-解码器模型。

但是在实际应用中,生成器往往可以分类为白盒模型和黑盒模型。

白盒模型

白盒模型是指可以访问到模型参数的模型。

这两种架构的生成器在RAG研究中得到了广泛的应用。例如,RAG和Re2G采用了BART模型;而FID和EMDR2则利用了T5。还有一些其他模型采用了基于Transformer的编码器-解码器架构,并进行了特定的定制设计。

RAG中的生成器通过整合检索到的数据来提升生成的准确性和相关性,从而与传统生成器有所区别。此外,白盒生成器支持参数优化,能够通过训练适应不同的检索和增强方法,以提升生成效果。

黑盒模型

黑盒模型是指不可访问参数的生成器。部分大型语言模型(LLMs)发布时并未公开其内部结构或参数访问权限,尤其是那些规模极大的模型,如GPT系列、Codex和Claude,这些通常被称为黑盒生成模型。这类生成器仅支持输入查询和接收响应的基本操作,不允许修改其内部结构或更新参数。

从另一个角度来看,即便是开放微调的大型语言模型,由于其庞大的规模,也难以仅凭有限的数据量针对特定下游任务进行有效微调。

因此,黑盒RA-LLMs更侧重于检索和增强过程,通过为输入添加更丰富的知识、指导或示例来提升生成器的性能。

检索与生成融合技术

融合技术是将检索和生成模块整合起来的关键步骤,在增强型大型语言模型(RA-LLMs)中扮演着至关重要的角色。一般有三种主要的融合设计策略:输入层融合、输出层融合和中间层融合,这些设计分别作用于生成器的不同层面,具体细节如上图。

输入层融合

一种常见的融合检索信息或文档的方法是将其与原始输入或查询结合,然后一并送入生成器,这种方法称为输入层融合。例如,In-Context RALM 通过将原始输入和所有检索到的文档串联成单一序列,以此作为生成模型的新输入,实现了输入层融合。尽管这种方法效果显著,但它受限于检索到的文档数量,因为过长的输入序列可能超出了生成模型的处理能力。

特别是对于大型语言模型,输入层融合可能会将检索到的内容用作(额外的)提示或示例,而不仅仅是作为传统RAGs 中对原始输入的补充。提示检索的目的是自动找到合适的自然语言提示,通过检索教导LLM在特定上下文中学习或促使LLM进行推理。这种方法可以在不进行精细的提示设计的情况下增强LLM的零样本能力。例如,Cheng等提出了一种基于输入-提示对数据学习提示检索器的方法,这些数据的得分标签来自一个固定的LLM。

输出层融合

增强技术的另一种形式是输出层融合,它将检索结果与生成结果相结合。

例如,kNN-LM 在预测阶段将语言模型产生的下一个令牌分布与检索语料库中的最近邻产生的分布进行插值。输出层的线性融合方法应用灵活,因为它可以无缝集成到大多数生成模型中,无需额外训练。但是,输出层融合的简洁性也可能限制模型对检索文本进行深入推理的能力。

为了克服这一限制,Yogatama等人提出了增加一个额外的门控网络来后处理检索数据,从而获得更好的性能。输出层融合与输入层融合一样,都是合理且适应性强的策略。

REFEED 提出了一种答案优化机制,利用LLM评估检索到的信息,并据此调整初始答案,以提升回答的准确性。同样,Zhang等人提出的COMBO框架,通过预训练的鉴别器将LLM生成的段落与检索到的对应段落匹配成兼容对,然后通过基于解码器的融合方法来得出最终答案。

中间层融合

与前述的两种非参数方法相比,更深入的增强方法是设计一个半参数模块,通过生成模型的内部层来整合检索结果,这称为中间层融合。这种融合可能会增加额外的复杂性,但有望通过有效训练提升生成模型的性能。通常,会引入一个Transformer模块,将检索到的信息(通常编码为密集表示)融入到生成模型中,以便在生成过程的中间阶段与模型的内部表示进行交互。

例如,RETRO 引入了一个块状交叉注意力(CCA)层来处理生成器块中的检索块,而Wu等人 引入了kNN增强的注意力层。EAE 和TOME 也分别使用实体记忆和记忆注意力层来整合检索到的实体及其提及。这种中间层融合可以频繁且高效地使用多个模块来增强整个RAG模型的能力。它为频繁检索的大量文本块提供了一种有效的整合方式,这些文本块由于语言模型的输入长度限制而难以通过输入层融合来处理。然而,也应注意到,中间层融合需要对生成模型有较高的访问权限,这对于那些主要通过推理API [92] 提供访问的大多数LLMs来说是不现实的。

检索增强的必要性与频次

在基于大语言模型的生成任务中,检索操作的主要目的是补充知识以提升生成质量。尽管检索增强型模型展现出了潜力,但它们也因无法普遍适用而受到批评。无差别地向LLM添加无关文段可能会覆盖LLM已掌握的正确知识,反而导致错误响应。Thakur等人现LLM在处理不相关检索文段时的幻觉率可能是相关文段的两倍。因此,对于增强型LLM(RA-LLMs)来说,准确回忆先验知识并在必要时有选择性地整合检索信息,是构建鲁棒RA-LLMs的关键。

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

Tan等人提出了SlimPLM,这是一种协作式方法,通过一个精简的代理模型检测LLM中缺失的知识,并生成一个“启发式答案”。这个答案用来评估检索的必要性,并在需要时通过查询重写促进检索过程。

在传统RAGs中,由于很少考虑检索的必要性,检索频次(也称为检索步幅)成为重要的设计考量,它决定了在生成中使用检索的程度,从而显著影响RAG模型的整体性能。检索频次控制了对检索结果的依赖程度,影响模型的效率和效果。当不考量检索必要性时,检索频次通常是预设且固定的,常见的设置有:一次性、every-n-token 和 every token。

一次性检索仅在生成过程开始时调用一次检索功能,尝试一次性找到所有所需信息,并随后将所有检索到的文档与原始输入一起提供给生成模型,如REALM 所应用的。这种方式更适合于LLM已经明确知道外部数据库所需信息的情况。

然而,对于需要长篇输出的语言任务,如开放域摘要,输出中token之间的依赖性在生成过程中更为重要。在这些情况下,通过一次性检索预先检索到的文档可能不足以支持整个输出序列的生成,这就要求在生成过程中进行检索操作。为此,In-Context RALM 和RETRO 在生成过程中采用每n个token检索,以实现更好的增强效果。相比之下,kNN-LM 采用了更频繁的检索策略,为生成过程中每个令牌的预测检索信息。总体而言,采用不同频次的检索可以影响整个RAG方法的有效性和效率。例如,更频繁的检索虽然能提升性能,但也会提高计算成本。因此,在计算成本和性能之间选择检索频次几乎是一种权衡。

模型训练

现有的RAG技术根据是否需要训练分为两大类:无需训练的方法和基于训练的方法。无需训练的方法在推理阶段直接应用检索到的知识,通过将检索文本嵌入到提示中,避免了额外的训练步骤,这在计算上更为高效。但这种方法可能面临的问题是,检索器和生成器没有为特定下游任务进行特别优化,这可能导致检索知识的有效利用不足。为了更充分地利用外部知识,提出了一系列方法对检索器和生成器进行微调,以指导大型语言模型应用有效地适应和整合检索到的信息。根据训练策略的不同,将这些基于训练的方法细分为三个类别:独立训练方法、顺序训练方法和联合训练方法

无需训练方法

由于需要大量的时间和计算资源,频繁地进行微调和更新模型参数中存储的知识存在很大的问题,所以通过引入检索机制来增强LLM,使其能够在无需额外训练的情况下,动态地从外部来源获取新知识,而不是仅依赖于模型参数中隐含的知识。这些方法在各种知识密集型任务中,如开放领域问答和文档摘要,都显示出了显著的性能提升。根据LLM使用检索信息的不同策略,将这些无需训练的方法分为两大类:基于提示工程的方法和检索引导的令牌生成方法。

基于提示工程的方法

由于LLM的生成性能极大地依赖于输入查询,许多无需训练的RAG方法通过优化原始提示来利用外部知识。具体来说,检索到的文本通常作为上下文信息,与原始提示结合,以引导LLM的生成过程。

例如,In-Context RALM在不改变LLM参数的情况下,将检索到的文档直接插入到原始提示之前,以增强生成过程:

检索引导的令牌生成方法

除了将外部知识直接整合到原始提示中,还可以利用辅助信息来调整令牌生成过程:

独立训练

独立训练是指将检索器和大语言模型作为两个完全独立的过程进行训练,训练期间两者之间不发生交互。相较于无需训练的方法,通过训练LLM以利用检索得到的知识,或训练检索器以连接信息检索与语言生成之间的差距,可以显著提升RAG模型的性能。在LLM的训练中,负对数似然损失是最为典型的训练目标,目的是引导LLM根据给定的输入生成所需的输出。

至于检索器,它可以分为两种类型:1) 稀疏检索器;2) 密集检索器。

稀疏检索器通常使用词频等稀疏特征来表示文档,并依据特定任务的度量标准(如TF-IDF和BM25)来计算相关性得分。

密集检索器则利用深度神经网络将查询和文档编码为密集的表示,然后通常采用内积方法来计算相关性得分并检索相关的外部知识。例如,DPR使用两个独立的BERT网络分别对查询和段落进行编码,并通过对比学习的方法进行模型训练。CoG提出训练一个前缀编码器和短语编码器以用于检索,并将文本生成重新定义为从现有源文本集中执行多次复制和粘贴操作的过程。

顺序训练

独立训练因其高效性,成为在生成过程中利用外部知识的优选方法。这种方法允许检索器和生成器离线训练,且能直接应用现成模型,从而节省了额外的训练成本。

为了进一步提升检索器与生成器之间的协同效应,研究者提出了一系列顺序训练的方法。在这些方法中,通常先独立预训练检索器或大语言模型,随后固定其中一个模块,对另一个进行训练

与独立训练相比,顺序训练通过协调训练检索器和生成器,使得可训练模块得到固定模块的辅助。根据检索器和生成器的训练顺序,顺序训练可分为两类:1) 先训练检索器;2) 先训练LLM。

先训练检索器

这些方法首先对检索模型进行训练并固定,然后利用检索到的知识对LLM进行训练:

先训练LLM

同样,也可以首先预训练LLM,然后在训练有素的LLM的监督下调整检索器。

联合训练

联合训练方法通过端到端的训练模式同步提升检索器与生成器的性能。这种训练方式相较于分步训练,更能有效地提升检索器寻找外部知识以供生成使用的能力,同时增强生成器利用检索到的信息的效率。

应用场景






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5