RAG开山之作:结合参数化与非参数化记忆的知识密集型NLP任务新解法

20年RAG刚提出时的论文:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks,也算是RAG的开山之作之一了。

摘要:检索增强生成(RAG)方法结合了预训练语言模型与基于检索的非参数化记忆,通过端到端训练提升知识密集型NLP任务的性能。RAG模型在多个任务上展现卓越成果,解决了传统模型的知识访问、操作及更新难题,为NLP领域带来新启示。

image.png

引言

在自然语言处理(NLP)领域,大型预训练语言模型已经在各种下游任务中取得了显著的成果。然而,这些模型在处理知识密集型任务时,如开放域问答(QA)和事实验证,仍然存在局限性。这些模型虽然能够存储大量事实知识,但在精确操作和检索这些知识方面能力有限。此外,为模型的决策提供出处(provenance)以及更新其世界知识仍然是开放的研究问题。本文提出了一种名为检索增强生成(Retrieval-Augmented Generation, RAG)的方法,旨在通过结合预训练的参数化记忆和非参数化记忆来提升模型在知识密集型任务上的性能。

方法背景与动机

传统的预训练语言模型,如BERT和GPT,虽然在许多NLP任务上表现出色,但在需要外部知识的任务中,它们的性能受限于其参数化的知识库。这些模型无法轻松扩展或修改其记忆,也难以提供对其预测的洞察,有时甚至会产生“幻觉”。为了解决这些问题,研究者们提出了结合参数化记忆(如预训练的语言模型)和非参数化记忆(基于检索的记忆)的混合模型。
在知识密集型自然语言处理任务中,传统的预训练语言模型面临以下几个主要问题:

  1. 知识访问与操作限制:尽管预训练模型能够存储大量知识,但它们在精确访问和操作这些知识方面存在局限,尤其是在需要复杂推理和外部知识验证的任务中。
  2. 缺乏可解释性:预训练模型往往被视为“黑箱”,难以提供对其决策过程的清晰解释,这在需要高度可靠性的任务中尤为突出。
  3. 知识更新困难:预训练模型通常难以适应新信息或纠正错误知识,因为它们的参数化知识库一旦固定,就很难进行修改或扩展。
  4. 生成内容的幻觉问题:在没有足够外部知识支持的情况下,模型可能会生成与事实不符的内容,即所谓的“幻觉”。

RAG方法的动机是将预训练的序列到序列(seq2seq)模型与非参数化的密集向量索引(例如Wikipedia)相结合,通过预训练的神经检索器访问这些索引。这种方法允许模型在生成语言时利用外部知识源,从而提高在知识密集型任务上的表现。

方法详解

针对上述问题,RAG模型提出了以下解决方案:

  1. 检索增强的生成模型:RAG通过结合预训练的seq2seq模型(参数化记忆)和基于Wikipedia的密集向量索引(非参数化记忆),增强了模型对知识的访问和操作能力。
  2. 端到端训练:RAG模型通过端到端训练的方式,使得检索器和生成器能够共同学习如何最有效地利用外部知识源,而无需额外的检索监督。
  3. 知识源的动态更新:RAG模型的非参数化记忆允许通过替换文档索引来更新模型的知识,而无需重新训练整个模型。
  4. 生成内容的准确性提升:RAG模型在生成文本时,可以利用检索到的具体文档内容,从而减少幻觉的发生,并提高生成内容的准确性和事实性。

RAG模型的核心是结合了两种类型的内存:参数化内存和非参数化内存。参数化内存是一个预训练的seq2seq模型,而非参数化内存则是一个由Wikipedia文章组成的密集向量索引。以下是RAG方法的关键步骤:

  1. 预训练的检索器(DPR):使用Dense Passage Retriever(DPR)作为检索组件,它基于BERTBASE文档编码器和查询编码器生成文档的密集表示。
  2. 预训练的生成器(BART):使用BART-large作为生成组件,它是一个预训练的seq2seq变换器,具有400M参数。
  3. 端到端训练:通过最小化目标序列的负对数似然来联合训练检索器和生成器,不需要直接监督检索到的文档。
  4. 解码策略:在测试时,RAG-Sequence和RAG-Token需要不同的解码方法来近似最大似然生成序列。
  5. 检索增强:对于查询x,使用最大内积搜索(MIPS)找到前K个文档,然后将这些文档作为生成目标序列y的上下文。

实验分析

image.png
RAG模型在多个知识密集型任务上的实验结果表明:

  1. 性能提升:RAG在开放域QA任务上取得了最先进的结果,显示出比纯参数化seq2seq模型更强的性能。
  2. 生成内容的改善:在语言生成任务中,RAG生成的文本比基线模型更具体、多样且事实性更强。
  3. 知识更新的灵活性:通过替换非参数化记忆的索引,RAG能够适应世界知识的变化,显示出良好的适应性和灵活性。
  4. 可解释性的提高:尽管RAG模型的可解释性仍有待提高,但非参数化记忆的使用使得模型的决策过程更加透明,因为可以检查和验证检索到的文档。

RAG模型通过检索增强的方法,有效地解决了传统预训练语言模型在知识密集型任务中面临的挑战,提高了任务性能和生成内容的质量。然而,如何进一步提高模型的可解释性和减少训练成本,仍然是未来研究需要关注的方向。
image.png
研究者们在多个知识密集型NLP任务上对RAG模型进行了评估,包括开放域QA、抽象问答生成、Jeopardy问题生成和事实验证(FEVER)。实验结果显示,RAG模型在开放域QA任务上取得了最先进的结果,并且在语言生成任务中生成了更具体、多样和事实性更强的文本。

创新点

RAG模型的主要创新点在于:

  • 混合内存架构:结合了参数化和非参数化记忆,使得模型能够利用外部知识源。
  • 端到端训练:通过联合训练检索器和生成器,无需额外的检索监督。
  • 灵活的检索机制:能够根据不同的输入动态检索相关信息,提高了模型的适应性和准确性。
  • 实时知识更新:非参数化记忆的索引可以轻松替换,以适应世界知识的变化。

不足与挑战

尽管RAG模型在多个任务上取得了显著的成果,但仍存在一些挑战和不足:

  • 检索崩溃:在某些任务中,检索器可能会“崩溃”,忽略输入的变化,导致生成器学习忽略检索到的文档。
  • 训练成本:虽然不需要直接监督检索到的文档,但训练过程仍然需要大量的计算资源。
  • 知识源的局限性:模型的性能受限于外部知识源的质量和覆盖范围。
  • 解释性:虽然非参数化记忆提供了一定程度的可解释性,但模型的决策过程仍然不够透明。

结语

RAG模型通过结合参数化和非参数化记忆,为知识密集型NLP任务提供了一种新的解决方案。它在多个任务上的表现证明了这种方法的有效性,同时也为未来的研究提供了新的方向,特别是在如何更有效地结合参数化和非参数化记忆方面。尽管存在一些挑战,但RAG模型无疑为NLP领域带来了新的启示和可能性。

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

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

相关文章

webview的使用方法和后退键的处理

WebView是一个能够显示网页内容的控件,通常用于Android或iOS应用程序中嵌入网页。下面我将分别说明WebView在Android和iOS中的使用方法,以及如何处理后退键。 Android中的WebView使用方法 添加WebView到布局文件中 在你的布局XML文件中添加WebView控件…

Vue+Echarts 实现中国地图和飞线效果

目录 实现效果准备 实现效果 在线预览:https://mouday.github.io/vue-demo/packages/china-map/dist/index.html 准备 高版本的echarts,不包含地图数据,需要自己下载到项目中 1、地图数据下载 https://datav.aliyun.com/portal/school/at…

Pasta:HHE Optimized Stream Cipher

参考文献: [Dae95] Daemen J .Cipher and hash function design strategies based on linear and differential cryptanalysis[J].Doctoral Dissertation K.u.leuven, 1995.[GPP11] Guo J, Peyrin T, Poschmann A. The PHOTON family of lightweight hash function…

class091 贪心经典题目专题3【左程云算法】

class091 贪心经典题目专题3【左程云算法】 前言版权推荐class091 贪心经典题目专题3最后 前言 2024-4-23 13:58:40 以下内容源自《【左程云算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://…

数据转换 | Matlab基于RP递归图一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 Matlab基于RP递归图一维数据转二维图像方法 基于RP(Recurrence Plot)递归图的方法可以将一维数据转换为二维图像,以可视化数据的动态特征。RP递归图是一种表示时间序列相…

【数据结构3-栈和队列】

数据结构3-栈和队列 1 栈-特殊的线性表-先进后出1.1 栈的三个案例 2 队列-与栈相反-先进先出2.1 队列的案例 3 用C实现栈的代码:4 用C实现队列的代码 1 栈-特殊的线性表-先进后出 1.1 栈的三个案例 2 队列-与栈相反-先进先出 2.1 队列的案例 3 用C实现栈的代码&…

代码随想录算法训练营第三十六天| LeetCode435.无重叠区间、LeetCode763.划分字母区间、LeetCode56.合并区间

LeetCode 435 无重叠区间 题目链接:435. 无重叠区间 - 力扣(LeetCode) 【解题思路】 需要先将数组按照左/右边界排序,这里按照左边界排序来解 如果第i个区间的左边界大于等于i-1区间的右边界 【解题步骤】 1.判断数组大小&am…

如何处理PHP中的文件上传和下载?

如何处理PHP中的文件上传和下载? 处理PHP中的文件上传和下载是Web开发中常见的任务,涉及到前端表单的设计、后端脚本的编写以及服务器配置等多个方面。下面将详细阐述如何在PHP中实现文件上传和下载的功能。 文件上传 文件上传通常涉及前端表单的创建…

【前端】vue3使用方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、vue3简介二、使用步骤三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人学习前端工具,本文主要是介绍vue3的使用方…

package.json 里面的 dependencies 和 devDependencies 的差异

差异 其实不严格的话,没有特别的差异;若是严格,遵循官方的理解。 dependencies:存放线上或者业务能访问的核心代码模块,比如 vue、vue-routerdevDependencies:处于开发模式下所依赖的开发模块&#xff0c…

c++ 二分查找

二分查找(Binary Search)是一种在有序数组中查找特定元素的高效算法。它通过不断将搜索范围减半来查找目标元素。其时间复杂度为 O(log n),这是因为每一步都将搜索范围减半,因此算法的性能非常高。 二分查找的基本思想是&#xf…

如何在TestNG中忽略测试用例

在这篇文章中,我们将讨论如何在TestNG中忽略测试用例。TestNG帮助我们忽略使用Test注释的情况,我们可以在不同的级别上忽略这些情况。 首先,只忽略一个测试方法或测试用例。第二,忽略一个类及其子类中的所有情况。第三个是&#…

C语言实现双人贪吃蛇项目(基于控制台界面)

一.贪吃蛇 贪吃蛇是一款简单而富有乐趣的游戏,它的规则易于理解,但挑战性也很高。它已经成为经典的游戏之一,并且在不同的平台上一直受到人们的喜爱和回忆。 二.贪吃蛇的功能 游戏控制:玩家可以使用键盘输入设备来控制蛇的移动方…

二分查找-边界条件讨论

题目&#xff1a;二分查找 存在问题的地方&#xff1a; 边界条件while(left __ right)中是 < 还是 <循环中if(nums[middle] > target) right _____中是middle还是middle - 1 应该在区间上讨论&#xff1a; 左闭右闭&#xff1a;[ left , right ]左闭右开&#xf…

二维字符型数组算法整理

1. 二维字符串数组的冒泡排序 #include <stdio.h> #include <string.h>int main(void) {char str[5][32] {0};int i 0;int j 0;char tmp[32] {0};for (i 0; i < 5; i){gets(str[i]);}for (i 0; i < 4; i){for (j 0; j < 4-i; j){if (strcmp(str[j…

【软件安装】(十六)双系统Ubuntu22.04引导启动菜单的默认项

一个愿意伫立在巨人肩膀上的农民...... 好学的人总是喜欢在电脑上安装双系统&#xff0c;可是安装好系统之后&#xff0c;就会出现默认启动优先级的苦恼&#xff0c;如果在Bios中设置Windows引导启动为优先启动&#xff0c;那么每次想要进如Ubuntu系统就都需要重新设置Bios。如…

TP6.0 命令行生成类库文件

1. 生成控制器 // 默认生成资源控制器&#xff0c;有七个方法资源操作方法// index、create、save、read、edit、update、deletephp think make:controller Blog// 创建多级控制器php think make:controller user/Blog// 创建index应用下的Blog控制器php think make:controller…

[Vue warn]: useModel() called with prop “xxx“ which is not declared

我们在使用vue3里面的defineModel的时候可能会出现这个问题&#xff0c;原因是我们使用的 kebab-case 形式的属性名&#xff0c;我也不知道是不是vue3设定这个api的时候设置的不支持&#xff0c;我没找到相关文档&#xff0c;不过我们把 kebab-case 的形式改为 驼峰命名法 或者…

YOLOv8 训练自己的数据集(20240423)

环境搭建请参考&#xff1a;Win10 搭建 YOLOv8 运行环境&#xff08;20240423&#xff09;-CSDN博客 环境测试请参考&#xff1a;本地运行测试 YOLOv8&#xff08;20240423&#xff09;-CSDN博客 一、使用 YOLOv8 的 coco128 数据集熟悉一下如何训练和预测 1.1、在项目根目录…

ClickHouse用UDF解析XML字符串和XML文件

一.如果是读取xml文件的时候&#xff0c;文件入库需要使用文件读取UDF 创建了1个测试文件 wsdFileRead()&#xff1a; 直接读取文件内容 SELECT wsdFileRead(/home/temp/wsd_test.xml)Query id: 09b6e5fe-7169-43f7-b001-90e2eeabb8da┌─wsdFileRead(/home/temp/wsd_test.xm…