8、RAG论文笔记(Retrieval-Augmented Generation检索增强生成)

news2025/1/7 5:23:15

RAG论文笔记

  • 1、 **研究背景与动机**
  • 2、方法概述
  • 3、RAG 模型架构
    • 3.1总体架构
    • 3.2 Generator(生成器)
    • 3.3 检索器(Retriever)
    • 3.4训练(Training)
    • 3.5**解码方法**(求近似 )
    • 3.6微调的参数
  • 4、数学
  • 5、总结
    • 一、研究概述
    • 二、RAG 模型架构
    • 三、训练与解码
    • 四、实验设置与结果
    • 五、相关工作与对比
    • 六、研究总结与展望

论文:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 知识密集型NLP任务的检索增强生成
链接:https://arxiv.org/abs/2005.11401
代码:使用 RAG 运行实验的代码已作为 HuggingFace Transformers Library [66] 的一部分开源,可以在 https://github.com/huggingface/transformers/blob/master/ examples/rag/ 中找到。可以在 https://huggingface.co/rag/ 上找到 RAG 模型的交互式演示

要点:基于RAG单任务的微调

1、 研究背景与动机

  • 预训练语言模型虽能存储知识,但在知识获取、更新和解释方面存在缺陷,如易产生“幻觉”。
  • 混合模型结合参数与非参数记忆可解决部分问题,但此前相关研究多针对特定提取任务(但此前研究多针对抽取式下游任务,在开放域问答等任务上取得了先进成果),本文将其应用于序列到序列(seq2seq)模型。

2、方法概述

在这里插入图片描述

方法概述:

  • 预训练语言模型的能力与局限:预训练神经语言模型能从数据中学习大量知识,但存在诸多缺点。它缺乏对外部记忆的访问,难以扩展或修订记忆,无法直观解释预测结果,还可能产生“幻觉”。例如,在一些知识问答场景中,可能给出错误或不准确的答案。
  • 混合模型的发展与不足:结合参数与非参数记忆的混合模型(如 REALM 和 ORQA)虽有一定成果,但仅针对开放域提取性问题回答进行了探索,应用范围有限。
  • RAG 模型的引入:本文提出的 RAG 模型将混合记忆应用于序列到序列(seq2seq)模型。其参数化记忆采用预训练的 seq2seq 模型(如 BART),非参数化记忆是维基百科的密集向量索引,并通过预训练的神经检索器访问(神经检索器即 Dense Passage Retriever [26],简称 DPR)。通过端到端的训练方式,使检索器和生成器联合学习,为解决知识密集型任务提供了新的途径。
  • RAG 模型的预期优势:RAG 模型有望在知识密集型任务上取得良好效果。在开放域问答任务中,有望突破现有技术水平;在知识密集型生成任务中,能生成更准确、多样且符合事实的语言;在事实核查任务中,也能取得较好成绩,并且能够随着知识的更新便捷地更新模型的知识储备。

端到端和非端到端区别:

  • 端到端(End - to - End) :端到端学习是一种机器学习方法,指的是从原始输入数据直接到最终输出结果的整个过程都由一个单一的模型来处理,中间不需要人工干预或手动特征工程。在这种架构中,模型自身学习如何从输入数据中提取特征,并进行分类、预测等任务。
  • 非端到端:是一种将复杂任务分解为多个子任务,利用多个独立模块分别处理的方式。它与端到端系统不同,不是直接从原始输入获取最终输出,而是通过一系列中间步骤来完成任务。例如:从模型架构与组件来看,非端到端模型由多个独立模块组成,模块之间有明确的输入和输出接口。比如语音识别系统,包括声学特征提取模块、音素识别模块和语言模型模块。声学特征提取模块从语音信号中提取梅尔频率倒谱系数(MFCC)等声学特征,传递给音素识别模块,音素识别模块根据声学特征识别音素,输出作为语言模型模块的输入,最终生成文本。

非参数化记忆和参数化记忆区别:

  • 存储机制
    • 参数化记忆:模型内部参数的形式存储知识,如预训练的 seq2seq 模型(以 BART 为例),其知识是通过在大规模文本数据上的预训练,将语言知识和模式编码在模型的参数(权重)中。这些参数在训练过程中不断调整以适应学习到的语言规律和语义信息。
    • 非参数化记忆:是外部的知识存储形式,像文中维基百科的密集向量索引,通过预训练的神经检索器(DPR)进行访问,并非直接存在于模型参数内。以维基百科的密集向量索引为代表,它是将维基百科的文本内容转换为向量形式进行存储,并非依靠模型内部的参数来存储知识。这种存储方式更像是一个外部的知识库,通过特定的检索机制(如预训练的神经检索器 DPR)来访问其中的知识。

top-K 每输出进行边缘化与每标记进行边缘化的区别如下:
用 top-K 近似值将潜在文档边缘化,要么基于每个输出(假设同一个文档负责所有令牌)要么基于每个令牌(不同的文档负责不同的令牌)。

  • 基于每输出进行边缘化(假设同一文档负责所有的标记):在这种方式下,对于一个给定的输出序列,模型认为是由一个检索到的文档来提供主要信息支持生成的。例如在生成一个完整的句子回答时,整个生成过程主要依赖于检索到的 top - K 文档中的某一个文档来提供上下文和知识信息,生成器基于这个文档以及输入来生成每个 token。这种方式相对简单直接,计算复杂度可能相对较低,但可能在某些复杂情况下无法充分利用多个文档中的多样化信息。
  • 基于每标记进行边缘化(不同文档负责不同标记):此方式更为灵活,模型允许在生成不同的 token 时,从检索到的 top - K 文档中动态地选择不同的文档来获取信息。例如在生成一个包含多个概念的回答时,对于不同概念相关的 token,可能会从不同的检索文档中获取最相关的知识,从而有可能生成更丰富和准确的内容。但这种方式的计算复杂度相对较高,因为需要在生成每个 token 时都重新考虑不同文档的贡献和选择。
  • 例子
    边缘化近似是在 RAG 模型中处理检索到的潜在文档的一种重要方式。在模型运行过程中,检索器(DPR)会依据输入找到 top - K 个潜在文档,然后生成器(BART)在生成输出时会基于这些潜在文档以及输入进行操作。
    比如在一个关于“苹果公司发展历程”的知识问答任务中,输入为“苹果公司早期的重要产品有哪些”。检索器可能会从维基百科的密集向量索引中检索出与苹果公司相关的 top - K 篇文档。
    • 如果是基于每输出进行边缘化(假设同一文档负责所有的标记),假设检索到的一篇文档详细介绍了苹果公司从成立到推出 iPhone 之前的历史,在生成回答“苹果公司早期的重要产品有 Apple I、Apple II 等”时,模型主要依据这一篇文档来生成整个输出。在计算生成概率等相关指标时,会对这篇文档在模型中的作用进行综合考量,将其对每个单词(token)生成的影响进行整合近似。
    • 而基于每标记进行边缘化(不同文档负责不同标记)时,对于“Apple I”这个 token,可能从一篇专门讲述苹果公司早期硬件产品研发的文档中获取信息;对于“Apple II”相关的 token,可能从另一篇关于苹果公司产品迭代的文档中获取知识。然后在计算过程中对这些不同文档在不同 token 生成时的作用分别进行近似处理,使得模型能够更灵活地利用多个文档中的信息来生成输出。
      通过这种 top - K 近似的边缘化处理,模型能够更好地结合检索到的文档信息以及自身的参数化记忆来生成高质量的回答,在训练和推理过程中更有效地利用非参数化记忆提供的知识支持。

3、RAG 模型架构

3.1总体架构

在这里插入图片描述
图 1:我们的方法概述。我们将预训练的检索器 (Query Encoder + Document Index) 与预训练的 seq2seq 模型 (Generator) 相结合,并进行端到端微调。对于查询 x,我们使用最大内部产品搜索 (MIPS) 来查找前 K 个文档 z i z_{i} zi。对于最终预测 y ,我们将 z 视为潜在变量,并在给定不同文档的情况下边缘化 seq2seq 预测。

模块具体功能图中位置
Query Encoder(查询编码器)将不同类型的输入问题(包括问答、事实验证、问题生成等类型的问题)编码为向量表示q(x)图的左侧
Retriever(检索器)接收查询向量q(x),从文档索引(包含多个文档z1, z2, z3, z4等)中检索出相关文档d(z),是非参数化模块图的中间偏左
Generator(生成器)基于检索到的文档d(z)生成相应的输出,如问答中的答案、事实验证中的标签等,是参数化模块图的中间偏右
Margin - alize(边缘化)处理检索到的文档和生成的答案之间的关系,确保系统能有效利用检索信息生成准确答案图的中间,连接检索器和生成器
End - to - End Backprop(端到端反向传播)从生成器的输出y反向传播到查询编码器的输入x,用于训练整个系统用虚线箭头表示,从生成器指向查询编码器

我们对检索增强生成(RAG)模型进行了探索,这类模型利用输入序列x来检索文本文档 z,并在生成目标序列 y 时将其用作额外的上下文信息。如图 1 所示,我们的模型利用了两个组件:(i)一个带有参数η的检索器 p η ( z ∣ x ) p_{\eta}(z|x) pη(zx),它在给定查询 x 的情况下,返回(经过 top - K 截断的)文本段落分布;(ii)一个由参数θ参数化的生成器 p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{\theta}(y_{i}|x,z,y_{1:i - 1}) pθ(yix,z,y1:i1),该生成器基于前 i − 1 i - 1 i1 个标记 y 1 : i − 1 y_{1:i - 1} y1:i1、原始输入 x 以及检索到的文本段落 z 所构成的上下文来生成当前标记 y i y_{i} yi。( y i y_{i} yi基于前i-1个生成,自回归)

为了端到端地训练检索器和生成器,我们将检索到的文档视为潜在变量。 我们提出了两种模型,它们以不同的方式边缘化潜在文档,以在生成的文本上产生分布。在一种方法 RAG-Sequence 中,该模型使用相同的文档来预测每个目标标记。第二种方法 RAG-Token 可以根据不同的文档预测每个目标令牌。在下文中,我们将正式介绍这两个模型,然后描述 p n p_{n} pn p θ p_{\theta} pθ 组件,以及训练和解码过程。

3.2 Generator(生成器)

主要内容整理

  • 介绍了两种 RAG 模型:RAG - Sequence 模型和 RAG - Token 模型。
    • RAG - Sequence 模型用同一个检索到的文档生成完整序列,将其当作单一潜在变量,经 top - K 近似边缘化处理得到 seq2seq 概率 p ( y ∣ x ) p(y|x) p(yx)。具体是先用检索器找出 top K 个文档,生成器针对各文档算出输出序列概率后进行边缘化操作。
    • RAG - Token 模型针对每个目标标记可从 top K 个文档中选不同潜在文档并边缘化,使生成器在生成答案时能从多个文档选内容。先检索 top K 个文档,生成器为各文档的下一个输出标记算概率分布,经边缘化后重复此过程生成整个序列。
    • 最后指出 RAG 模型用于序列分类任务时,若将目标类别视为长度为 1 的目标序列,RAG - Sequence 和 RAG - Token 模型等效。

主要搞懂: ∑ \sum_{} ∏ i N \prod_{i}^{N} iN先后顺序, ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) \sum_{z\in top - k(p(\cdot|x))} ztopk(p(x)) 用于对检索到的 top - K 个文档进行求和操作(边缘化操作)。 ∏ i N \prod_{i}^{N} iN 就是对从第 1 个标记到第 N N N 个标记(整个序列的所有标记)对应的相关概率等进行连乘。

公式解释

  • RAG - Sequence 模型公式
    p R A G − S e q u e n c e ( y ∣ x ) ≈ ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y ∣ x , z ) = ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) ∏ i N p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{RAG - Sequence}(y|x) \approx \sum_{z\in top - k(p(\cdot|x))} p_{\eta}(z|x)p_{\theta}(y|x, z) = \sum_{z\in top - k(p(\cdot|x))} p_{\eta}(z|x) \prod_{i}^{N} p_{\theta}(y_{i}|x, z, y_{1:i - 1}) pRAGSequence(yx)ztopk(p(x))pη(zx)pθ(yx,z)=ztopk(p(x))pη(zx)iNpθ(yix,z,y1:i1)
  • ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) \sum_{z\in top - k(p(\cdot|x))} ztopk(p(x)):对检索出的 top K 个文档进行求和(边缘化)操作。
    • p η ( z ∣ x ) p_{\eta}(z|x) pη(zx):检索器基于输入 x x x 检索到文档 z z z 的概率,反映文档 z z z 与输入 x x x 的相关性。
    • p θ ( y ∣ x , z ) p_{\theta}(y|x, z) pθ(yx,z):生成器基于输入 x x x 和文档 z z z 生成输出序列 y y y 的概率, ∏ i N p θ ( y i ∣ x , z , y 1 : i − 1 ) \prod_{i}^{N} p_{\theta}(y_{i}|x, z, y_{1:i - 1}) iNpθ(yix,z,y1:i1) 细化到生成序列中每个标记 y i y_{i} yi 的概率连乘,即生成器依据已生成的前 i − 1 i - 1 i1 个标记 y 1 : i − 1 y_{1:i - 1} y1:i1、输入 x x x 及当前文档 z z z 生成当前标记 y i y_{i} yi 的概率,连乘得到生成整个序列的概率。整个公式综合考虑 top K 个文档生成目标序列的概率,通过边缘化得到最终概率。
  • RAG - Token 模型公式
    p R A G − T o k e n ( y ∣ x ) ≈ ∏ i N ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{RAG - Token}(y|x) \approx \prod_{i}^{N} \sum_{z\in top - k(p(\cdot|x))} p_{\eta}(z|x)p_{\theta}(y_{i}|x, z, y_{1:i - 1}) pRAGToken(yx)iNztopk(p(x))pη(zx)pθ(yix,z,y1:i1)
  • ∏ i N \prod_{i}^{N} iN:表示对生成序列的所有标记按顺序逐个生成并整合概率。
    • ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y i ∣ x , z , y 1 : i − 1 ) \sum_{z\in top - k(p(\cdot|x))} p_{\eta}(z|x)p_{\theta}(y_{i}|x, z, y_{1:i - 1}) ztopk(p(x))pη(zx)pθ(yix,z,y1:i1):针对每个标记进行边缘化处理,即对每个要生成的标记 y i y_{i} yi,生成器基于不同文档 z z z(来自 top K 个文档)、输入 x x x 和已生成的前标记 y 1 : i − 1 y_{1:i - 1} y1:i1 计算概率,求和(边缘化)综合不同文档影响,各标记生成概率连乘得到整个序列生成的概率。

3.3 检索器(Retriever)

检索组件 p η ( z ∣ x ) p_{\eta}(z|x) pη(zx) 基于密集段落检索器(DPR)[26]。DPR 采用双编码器架构:
p η ( z ∣ x ) ∝ exp ⁡ ( d ( z ) ⊤ q ( x ) ) p_{\eta}(z|x) \propto \exp \left(d(z)^{\top}q(x)\right) pη(zx)exp(d(z)q(x))
其中 d ( z ) d(z) d(z) 是由一个 B E R T B A S E BERT_{BASE} BERTBASE 文档编码器 [8] 生成的文档的密集表示形式,而 q ( x ) q(x) q(x) 是由一个同样基于 B E R T B A S E BERT_{BASE} BERTBASE 的查询编码器生成的查询表示形式。计算 t o p − k ( p η ( ⋅ ∣ x ) ) top - k(p_{\eta}(\cdot|x)) topk(pη(x)),也就是具有最高先验概率 p η ( z ∣ x ) p_{\eta}(z|x) pη(zx) k k k 个文档 z z z 的列表,这是一个最大内积搜索(MIPS)问题,该问题能够在亚线性时间内近似求解 [23]。我们使用来自 DPR 的一个预训练双编码器来初始化我们的检索器并构建文档索引。这个检索器经过训练,可用于检索包含“琐事问答”(TriviaQA)[24] 问题以及“自然问题”(Natural Questions)[29] 答案的文档。我们将该文档索引称作非参数化记忆。

基于 DPR(密集段落检索器)的检索算法:(上面段话涉及算法原理)

  • 原理及架构基础
    • DPR 采用双编码器架构。在此架构中,有文档编码器和查询编码器,它们都基于 B E R T B A S E BERT_{BASE} BERTBASE。对于文档,通过 B E R T B A S E BERT_{BASE} BERTBASE 文档编码器将文档转化为其密集表示形式 d ( z ) d(z) d(z),也就是 d ( z ) = B E R T d ( z ) d(z) = BERT_{d}(z) d(z)=BERTd(z);对于查询(比如用户输入的问题等),利用基于 B E R T B A S E BERT_{BASE} BERTBASE 的查询编码器生成查询表示形式 q ( x ) q(x) q(x),即 q ( x ) = B E R T q ( x ) q(x) = BERT_{q}(x) q(x)=BERTq(x)
    • 基于这样的表示形式,计算检索概率 p η ( z ∣ x ) p_{\eta}(z|x) pη(zx) 的方式是 p η ( z ∣ x ) ∝ exp ⁡ ( d ( z ) ⊤ q ( x ) ) p_{\eta}(z|x) \propto \exp \left(d(z)^{\top}q(x)\right) pη(zx)exp(d(z)q(x)),也就是通过计算文档的密集表示 d ( z ) d(z) d(z) 与查询表示 q ( x ) q(x) q(x) 的内积,然后取指数来得到与检索相关的概率。这个概率体现了给定查询 x x x 的情况下,文档 z z z 与之相关的可能性大小,概率越大意味着文档越有可能是符合查询需求的相关文档。
  • 最大内积搜索(MIPS)算法
    • 在计算 t o p − k ( p η ( ⋅ ∣ x ) ) top - k(p_{\eta}(\cdot|x)) topk(pη(x)) 时会用到该算法。 t o p − k ( p η ( ⋅ ∣ x ) ) top - k(p_{\eta}(\cdot|x)) topk(pη(x)) 表示要找出具有最高先验概率 p η ( z ∣ x ) p_{\eta}(z|x) pη(zx) k k k 个文档 z z z 所构成的列表。这本质上就是一个最大内积搜索问题,因为要从众多文档中,依据前面计算得到的 p η ( z ∣ x ) p_{\eta}(z|x) pη(zx)(通过文档和查询表示的内积等计算而来),筛选出内积最大(也就是概率最高)的 k k k 个文档。
    • 它能够在亚线性时间内近似求解,这使得在面对大规模文档集合时,可以相对高效地获取到与查询最相关的 k k k 个文档,从而为后续利用这些文档进行生成等操作提供基础。例如在处理海量文本数据作为文档索引时,不用遍历所有文档去精确比较,而是通过该近似算法快速定位较相关的那部分文档。

总体而言,先是利用基于双编码器架构的 DPR 算法来获取文档与查询之间的关联概率,再通过最大内积搜索算法依据此概率找出最相关的 top - k 个文档,用于后续生成。

3.4训练(Training)

联合训练检索器和生成器,将检索文档视为潜在变量,在给定输入/输出对 ( x j , y j ) (x_{j}, y_{j}) (xj,yj) 的微调训练语料上,使用 Adam 随机梯度下降最小化每个目标的负边际对数似然 ∑ j − l o g p ( y j ∣ x j ) \sum_{j}-log p(y_{j} | x_{j}) jlogp(yjxj)。训练时通常固定文档编码器 B E R T d BERT_{d} BERTd,仅微调查询编码器 B E R T q BERT_{q} BERTq 和 BART 生成器,因为更新文档编码器成本高且非必要。

3.5解码方法(求近似 )

在测试时,RAG-Sequence 和 RAG-Token 需要不同的方法来近似 arg maxy p(y|x)。
RAG - Token 类似标准自回归生成器,可使用标准束解码;RAG - Sequence 因概率形式特殊,需针对每个检索文档运行束搜索并进行额外计算来估计假设概率,有“Thorough Decoding”和“Fast Decoding”两种方式。

  • RAG - Token 解码:可视为标准的自回归 seq2seq 生成器,其转移概率为 p θ ′ ( y i ∣ x , y 1 : i − 1 ) = ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z i ∣ x ) p θ ( y i ∣ x , z i , y 1 : i − 1 ) p_{\theta}'(y_{i} | x, y_{1: i - 1})=\sum_{z \in top - k(p(\cdot | x))} p_{\eta}(z_{i} | x) p_{\theta}(y_{i} | x, z_{i}, y_{1: i - 1}) pθ(yix,y1:i1)=ztopk(p(x))pη(zix)pθ(yix,zi,y1:i1),可使用标准束解码器解码。
    - RAG - Sequence 解码:由于其似然 p ( y ∣ x ) p(y | x) p(yx) 不能分解为常规的逐 token 似然,不能用单束搜索解决。需对每个检索文档 z z z 运行束搜索,用 p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{\theta}(y_{i} | x, z, y_{1: i - 1}) pθ(yix,z,y1:i1) 对每个假设评分,然后通过额外的前向传播估计未出现在某些文档束中的假设概率并求和,此为“Thorough Decoding”;为提高效率,还可近似认为未在束搜索中生成的 p θ ( y ∣ x , z i ) ≈ 0 p_{\theta}(y | x, z_{i})≈0 pθ(yx,zi)0,避免额外前向传播,此为“Fast Decoding”。

3.6微调的参数

检索器 :(Query Encoder + Document Index)即 B E R T q BERT_{q} BERTq+ B E R T d BERT_{d} BERTd 即q(x)和d(z)
Generator(生成器):预训练的 seq2seq 模型
仅微调查询编码器 B E R T q BERT_{q} BERTq 和 BART 生成器,因为更新文档编码器成本高且非必要。

4、数学

∑ \sum_{} :对检索出的 top K 个文档进行求和(边缘化)操作。

  1. 边缘化处理的基本概念
    • 在概率论和统计学中,边缘化是一种重要的运算。假设我们有一个联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),其中 X X X Y Y Y 是随机变量。边缘化就是通过对联合概率分布中的一个变量进行求和(对于离散变量)或积分(对于连续变量)来得到另一个变量的边缘概率分布
    • 对于离散随机变量,边缘概率 P ( X = x ) P(X = x) P(X=x) 的计算公式为 P ( X = x ) = ∑ y P ( X = x , Y = y ) P(X=x)=\sum_{y}P(X = x,Y = y) P(X=x)=yP(X=x,Y=y)。例如,有一个骰子(变量 X X X)和一枚硬币(变量 Y Y Y),骰子有 6 6 6 种结果 { 1 , 2 , 3 , 4 , 5 , 6 } \{1,2,3,4,5,6\} {1,2,3,4,5,6},硬币有 2 2 2 种结果 { H , T } \{H,T\} {H,T},联合概率分布 P ( X , Y ) P(X,Y) P(X,Y) 记录了所有可能组合的概率。要得到骰子结果的边缘概率分布 P ( X ) P(X) P(X),就需要对硬币的两种结果分别求和,如 P ( X = 1 ) = ∑ y ∈ { H , T } P ( X = 1 , Y = y ) = P ( X = 1 , Y = H ) + P ( X = 1 , Y = T ) P(X = 1)=\sum_{y\in\{H,T\}}P(X = 1,Y = y)=P(X = 1,Y = H)+P(X = 1,Y = T) P(X=1)=y{H,T}P(X=1,Y=y)=P(X=1,Y=H)+P(X=1,Y=T)
    • 对于连续随机变量,边缘概率密度函数 f X ( x ) f_X(x) fX(x) 是通过对联合概率密度函数 f ( x , y ) f(x,y) f(x,y) 关于 y y y 积分得到的,即 f X ( x ) = ∫ − ∞ ∞ f ( x , y ) d y f_X(x)=\int_{-\infty}^{\infty}f(x,y)dy fX(x)=f(x,y)dy。例如,设 ( X , Y ) (X,Y) (X,Y) 的联合概率密度函数为 f ( x , y ) = 2 e − ( x + y ) f(x,y)=2e^{-(x + y)} f(x,y)=2e(x+y) x ⩾ 0 , y ⩾ 0 x\geqslant0,y\geqslant0 x0,y0,则 X X X 的边缘概率密度函数 f X ( x ) = ∫ 0 ∞ 2 e − ( x + y ) d y = 2 e − x ∫ 0 ∞ e − y d y = 2 e − x f_X(x)=\int_{0}^{\infty}2e^{-(x + y)}dy=2e^{-x}\int_{0}^{\infty}e^{-y}dy = 2e^{-x} fX(x)=02e(x+y)dy=2ex0eydy=2ex
  2. 边缘化在贝叶斯网络中的应用
    • 贝叶斯网络是一种概率图模型,用于表示变量之间的因果关系和概率依赖关系。在贝叶斯网络中,边缘化常用来计算某个变量的概率分布,给定其他变量的证据。
    • 例如,在一个简单的医疗诊断贝叶斯网络中,有疾病变量 D D D 和症状变量 S S S。联合概率分布 P ( D , S ) P(D,S) P(D,S) 表示疾病和症状同时出现的概率。如果我们观察到了某些症状,想要计算疾病的概率,就需要对症状变量进行边缘化处理。即 P ( D ) = ∑ S P ( D , S ) P(D)=\sum_{S}P(D,S) P(D)=SP(D,S)(假设症状变量是离散的)。

5、总结

一、研究概述

  • 背景与目标:预训练语言模型虽能存储知识,但在知识获取、更新及解释预测方面存在不足,如易产生“幻觉”。本文旨在探索检索增强生成(RAG)模型,将预训练的参数化和非参数化记忆结合用于语言生成,以提升在知识密集型 NLP 任务上的性能,并解决传统模型的部分问题。
  • 主要贡献
    • 提出 RAG 模型,在多个知识密集型任务上取得 state-of-the-art 结果,如在三个开放域 QA 任务上表现突出。
    • 对比两种 RAG 模型公式,证明其在不同任务中的有效性。
    • 验证模型在生成任务中能生成更准确、多样和符合事实的语言,且可通过更新非参数记忆适应知识变化。

二、RAG 模型架构

  • 模型组成
    • 检索器(Retriever):基于 DPR(Dense Passage Retriever)的双编码器架构,其中文档编码器 d ( z ) = B E R T d ( z ) d(z)=BERT_{d}(z) d(z)=BERTd(z),查询编码器 q ( x ) = B E R T q ( x ) q(x)=BERT_{q}(x) q(x)=BERTq(x),通过计算 p η ( z ∣ x ) ∝ e x p ( d ( z ) ⊤ q ( x ) ) p_{\eta}(z | x) \propto exp(d(z)^{\top}q(x)) pη(zx)exp(d(z)q(x)) 来检索文档,即根据查询 x x x 返回文本段落的分布,计算 t o p − k ( p η ( ⋅ ∣ x ) ) top - k(p_{\eta}(\cdot | x)) topk(pη(x)) 是最大内积搜索(MIPS)问题,使用预训练的 DPR 双编码器初始化并构建文档索引,该检索器训练用于检索包含 TriviaQA 和 Natural Questions 答案的文档。
    • 生成器(Generator):采用 BART - large,是一个有 400M 参数的预训练 seq2seq 模型,通过 p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{\theta}(y_{i} | x, z, y_{1: i - 1}) pθ(yix,z,y1:i1) 基于前 i − 1 i - 1 i1 个 token、原始输入 x x x 和检索到的文档 z z z 生成当前 token,训练时将输入 x x x 与检索内容 z z z 简单拼接,其预训练采用去噪目标和多种噪声函数。
  • 模型变体
    • RAG - Sequence 模型:将检索到的同一文档作为单个潜在变量,通过 top - K 近似边缘化得到 seq2seq 概率 p ( y ∣ x ) p(y | x) p(yx),即 p R A G − S e q u e n c e ( y ∣ x ) ≈ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) ∏ i N p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{RAG - Sequence}(y | x) \underset{z \in top - k(p(\cdot | x))}{\approx} \sum_{z \in top - k(p(\cdot | x))} p_{\eta}(z | x) \prod_{i}^{N} p_{\theta}(y_{i} | x, z, y_{1: i - 1}) pRAGSequence(yx)ztopk(p(x))ztopk(p(x))pη(zx)iNpθ(yix,z,y1:i1)
    • RAG - Token 模型:可为每个目标 token 抽取不同的潜在文档并相应边缘化,使得生成器能从多个文档中选择内容,其概率定义为 p R A G − T o k e n ( y ∣ x ) ≈ ∏ i N ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{RAG - Token}(y | x) \approx \prod_{i}^{N} \sum_{z \in top - k(p(\cdot | x))} p_{\eta}(z | x) p_{\theta}(y_{i} | x, z, y_{1: i - 1}) pRAGToken(yx)iNztopk(p(x))pη(zx)pθ(yix,z,y1:i1)

三、训练与解码

  • 训练过程:联合训练检索器和生成器,将检索文档视为潜在变量,在给定输入/输出对 ( x j , y j ) (x_{j}, y_{j}) (xj,yj) 的微调训练语料上,使用 Adam 随机梯度下降最小化每个目标的负边际对数似然 ∑ j − l o g p ( y j ∣ x j ) \sum_{j}-log p(y_{j} | x_{j}) jlogp(yjxj)。训练时通常固定文档编码器 B E R T d BERT_{d} BERTd,仅微调查询编码器 B E R T q BERT_{q} BERTq 和 BART 生成器,因为更新文档编码器成本高且非必要。
  • 解码方式
    • RAG - Token 解码:可视为标准的自回归 seq2seq 生成器,其转移概率为 p θ ′ ( y i ∣ x , y 1 : i − 1 ) = ∑ z ∈ t o p − k ( p ( ⋅ ∣ x ) ) p η ( z i ∣ x ) p θ ( y i ∣ x , z i , y 1 : i − 1 ) p_{\theta}'(y_{i} | x, y_{1: i - 1})=\sum_{z \in top - k(p(\cdot | x))} p_{\eta}(z_{i} | x) p_{\theta}(y_{i} | x, z_{i}, y_{1: i - 1}) pθ(yix,y1:i1)=ztopk(p(x))pη(zix)pθ(yix,zi,y1:i1),可使用标准束解码器解码。
    • RAG - Sequence 解码:由于其似然 p ( y ∣ x ) p(y | x) p(yx) 不能分解为常规的逐 token 似然,不能用单束搜索解决。需对每个检索文档 z z z 运行束搜索,用 p θ ( y i ∣ x , z , y 1 : i − 1 ) p_{\theta}(y_{i} | x, z, y_{1: i - 1}) pθ(yix,z,y1:i1) 对每个假设评分,然后通过额外的前向传播估计未出现在某些文档束中的假设概率并求和,此为“Thorough Decoding”;为提高效率,还可近似认为未在束搜索中生成的 p θ ( y ∣ x , z i ) ≈ 0 p_{\theta}(y | x, z_{i})≈0 pθ(yx,zi)0,避免额外前向传播,此为“Fast Decoding”。

四、实验设置与结果

  • 实验任务与数据
    • 任务:涵盖开放域问答(Open - domain Question Answering)、抽象问答(Abstractive Question Answering)、危险边缘问题生成(Jeopardy Question Generation)、事实核查(Fact Verification)等知识密集型任务。
    • 数据:使用 2018 年 12 月的维基百科数据构建非参数记忆,将文章分割为 100 字块,共 21M 文档,用文档编码器计算嵌入并构建 MIPS 索引用于快速检索。训练时检索 top k( k ∈ 5 , 10 k \in{5, 10} k5,10)文档,测试时根据开发数据设置 k k k
  • 主要实验结果
    • 开放域问答:在 Natural Questions、WebQuestions、CuratedTrec 和 TriviaQA 等任务上达到 state-of-the-art。RAG 结合了“闭卷”生成的灵活性和“开卷”检索的性能优势,在某些情况下能生成正确答案而提取式模型不能,如在 NQ 中当正确答案不在检索文档中时,RAG 仍有 11.8% 的准确率,而提取式模型为 0%。
    • 抽象问答:在 MS - MARCO NLG 任务上,RAG - Sequence 比 BART 在 Bleu 和 Rouge - L 指标上分别高出 2.6 分,接近 state-of-the-art 模型性能,且生成的答案更少“幻觉”,更符合事实。
    • 危险边缘问题生成:RAG - Token 在 Q - BLEU - 1 指标上优于 BART,人类评估显示 RAG 生成的问题在事实性和特异性上更优,分别有 42.7% 和 37.4% 的情况优于 BART。
    • 事实核查:在 FEVER 任务上,RAG 的 3 路分类得分与 state-of-the-art 模型差距在 4.3% 以内,2 路分类与对比模型差距在 2.7% 以内,且检索到的文档与标注证据有较高重叠。
    • 其他结果:RAG 模型生成具有多样性,RAG - Sequence 比 RAG - Token 更甚,且都比 BART 好;学习检索机制有效,冻结检索器会降低性能;对比不同检索器,在 FEVER 任务中 BM25 表现较好,其他任务中可微检索更优;可通过更新非参数记忆(替换索引)更新模型知识;检索更多文档在不同任务和指标上有不同影响。

五、相关工作与对比

  • 以往工作表明检索可提升多种 NLP 任务性能,但本文统一了将检索应用于不同任务的成功经验,证明单一检索架构可在多任务上表现良好。
  • 与其他通用 NLP 架构相比,本文通过学习检索模块增强预训练生成模型,扩展了单架构可处理的任务范围。
  • 与其他学习检索的工作相比,本文展示了单一检索架构在多种任务上微调即可获得强性能,而其他工作多针对单一任务优化检索模块。
  • 与基于记忆的架构相比,本文的文档索引由原始文本构成,具有可解释性和可更新性优势。
  • 与检索和编辑方法相比,RAG 更注重聚合检索内容而非轻编辑,且学习潜在检索和检索证据文档。

六、研究总结与展望

  • 本文提出的 RAG 模型在知识密集型任务上取得显著成果,在多个任务上超越现有方法,且在生成质量、检索有效性和知识更新方面表现出色。
  • 未来可研究对参数化和非参数化组件进行联合从头预训练,进一步探索两者的交互和组合方式,有望应用于更多 NLP 任务。同时,需关注模型应用可能带来的风险,如知识源偏见和内容滥用等问题,并采取相应措施缓解。

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

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

相关文章

PCA降维算法详细推导

关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…

Android studio 旧版本下载,NDK旧版本下载

记录一下旧版的ndk 和 Android studio 官方下载备份。 1.NDK 旧版本下载地址 下载地址:https://github.com/android/ndk/wiki/Unsupported-Downloads 2.Android studio 旧版本下载 下载地址 https://developer.android.com/studio/archive 如果出现以下页面 点击…

开源存储详解-分布式存储与ceph

ceph体系结构 rados:reliable, autonomous, distributed object storage, rados rados采用c开发 对象存储 ceph严格意义讲只提供对象存储能力,ceph的块存储能力实际是基于对象存储库librados的rbd 对象存储特点 对象存储采用put/get/delete&#xf…

Midjourney Imagine API 使用

Midjourney Imagine API 申请及使用 Midjourney 是一款非常强大的 AI 绘图工具,只要输入关键字,就能在短短一两分钟生成十分精美的图像。Midjourney 以其出色的绘图能力在业界独树一帜,如今,Midjourney 早已在各个行业和领域广泛…

docker从下载到Python项目打包到容器中运行(解决下拉超时问题)

docker安装(如果第一步或者第二步没有成功,说明是你的镜像源有问题,私聊我获取镜像源)镜像位置_/etc/yum.repos.d/CentOS-Base.repo sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/dock…

运算指令(PLC)

加 ADD 减 SUB 乘 MUL 除 DIV 浮点运算 整数运算

Linux高级--3.2.5 “外挂式”死锁监测设计

一、生活中“死锁”的场景 三个人,甲乙丙, 甲借了丙的钱,丙借了乙的钱,乙借了甲的钱。 甲找乙还钱,乙说:“别人还我 我就还你 ”,甲说:“好,那我等你” 乙找丙还钱&am…

图像去雾 | 基于Matlab的图像去雾系统(四种方法)

图像去雾 | 基于Matlab的图像去雾系统(四种方法) 目录 图像去雾 | 基于Matlab的图像去雾系统(四种方法)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于Matlab的图像去雾系统(四种方法) 关于图像…

解决Vue中设置el-select的高度不生效问题

el-select是Element UI框架中的一个选择器组件&#xff0c;它允许用户从多个选项中选择一个或多个项目。但这里确存在一个小坑&#xff0c;我们可以看到直接修改el-select的高度是无法生效的 <template><div id"login"><el-select v-model"role…

嵌入式驱动开发详解8(阻塞/非阻塞/异步通信)

文章目录 前言阻塞非阻塞异步通知后续 前言 首先来回顾一下“中断”&#xff0c;中断是处理器提供的一种异步机制&#xff0c;我们配置好中断以后就 可以让处理器去处理其他的事情了&#xff0c;当中断发生以后会触发我们事先设置好的中断服务函数&#xff0c; 在中断服务函数…

人工智能之数学基础:向量内积以及应用

本文重点 向量的点积(Dot Product),又称数量积(Scalar Product)或内积,是线性代数中的一个重要概念。它接受两个向量作为输入,并返回一个实数作为输出。点积不仅在数学和物理学中有广泛应用,而且在人工智能领域也扮演着重要角色。 内积 在数学上,向量x和向量y的内积…

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…

linux 逻辑卷挂盘

1.输入 sudo-i 转到root账号下。 2. 输入root密码后登录&#xff0c;输入parted -l &#xff0c;发现与以前的挂盘不一样&#xff0c;未挂的盘与系统盘在一起&#xff0c;都是/dev/vda里。 2.输入 lsblkr,查看逻辑分区的设备名称 3. 新增目录 mkdir /data 4. 尝试直接将逻辑分…

python23-常用的第三方库01:request模块-爬虫

requests 模块是 Python 中的一个第三方库&#xff0c;用于发送 HTTP 请求。 它提供了一个简单且直观的 API&#xff0c;使得发送网络请求和解析响应变得非常容易。requests 模块支持各种 HTTP 方法&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并且具有处理 cookies…

解释一下:运放的输入失调电流

输入失调电流 首先看基础部分:这就是同相比例放大器 按照理论计算,输入VIN=0时,输出VOUT应为0,对吧 仿真与理论差距较大,有200多毫伏的偏差,这就是输入偏置电流IBIAS引起的,接着看它的定义 同向和反向输入电流的平均值,也就是Ib1、Ib2求平均,即(Ib1+Ib2)/2 按照下面…

常规继承类对象大小

这个相对简单&#xff0c;只需要考虑类对象大小的累加和内存对齐 #include<iostream> using namespace std;class Base { public:int ma;int mb;char mc; };class Derive :public Base { public:int md; };class Derive2 :public Derive { public:int me; };int main() …

Scrum中敏捷项目经理(Scrum Master)扮演什么角色?

敏捷开发模式已经逐渐被主流的软件研发团队所接受&#xff0c;其中Scrum是最具代表性的敏捷方法之一。Scrum框架中有三个核心角色&#xff1a;Product Owner&#xff08;PO&#xff09;、Scrum Master&#xff08;SM&#xff09;和Development Team&#xff08;DT&#xff09;。…

[网络安全]数据安全领域关键技术总结

去标识计算技术 概念 去标识计算 (Differential Privacy) 是一种数据隐私保护技术&#xff0c;它可以在不暴露个人敏感信息的前提下进行统计分析&#xff0c;并保证对隐私的泄露控制在可承受的范围之内。 底层逻辑 基于差分隐私的去标识计算是指在计算处理中采用一些差分隐私…

手机租赁平台开发实用指南与市场趋势分析

内容概要 在当今快速变化的科技时代&#xff0c;手机租赁平台的发展如火如荼。随着越来越多的人希望使用最新款的智能手机&#xff0c;但又不愿意承担昂贵的购机成本&#xff0c;手机租赁平台应运而生。这种模式不仅为用户提供了灵活的选择&#xff0c;还为企业创造了新的商机…

【从零开始入门unity游戏开发之——C#篇42】C#补充知识——随机数(Random)、多种方法实现string字符串拼接、语句的简写

文章目录 一、随机数1、Random.Next()生成随机整数示例&#xff1a;生成一个随机整数生成指定范围内的随机整数 2、Random.NextSingle生成随机浮点数示例&#xff1a;生成随机浮点数 3、 生成随机字母或字符示例&#xff1a;生成随机字母示例&#xff1a;生成随机小写字母 二、…