心法利器[112] | 考古RAG-20年RAG概念提出的论文

news2025/1/31 11:07:06

心法利器

本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。

2023年新的文章合集已经发布,获取方式看这里:又添十万字-CS的陋室2023年文章合集来袭,更有历史文章合集,欢迎下载。

往期回顾

  • 心法利器[107] onnx和tensorRT的bert加速方案记录

  • 心法利器[108] | 微调与RAG的优缺点分析

  • 心法利器[109] | RAG效果评估经验

  • 心法利器[110] | 知识文档处理和使用流程

  • 心法利器[111] | 近期RAG技术总结和串讲(4w字RAG文章纪念)

上一期是写了最近RAG文章的小结(心法利器[111] | 近期RAG技术总结和串讲(4w字RAG文章纪念)),里面提到RAG比较早的一篇论文,可见RAG这个概念并非大模型之后才有的,早在2020年就已经有这样的一篇文章,提出了真正意义的RAG,今天让我们来讨论这篇论文吧。

  • 原论文:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

  • 论文翻译:https://blog.csdn.net/m0_52695557/article/details/134307931

  • 论文笔记:https://blog.csdn.net/weixin_73479446/article/details/133278543

叠个甲,本文没有覆盖全文内容,更多是从文章中抽取了值得分享和分析的部分来讲,如果要深入了解,包括当时视角的研究现状,论文内具体使用的技术、实验数据等,还是需要回到论文里详细看的。

目录:

  • Introduction精读

  • 模型

  • 实践细节和实验

  • 分析讨论

Introduction精读

看完这篇文章的introduction,感觉很有必要解读一下,因为这里面对RAG模型的意义理解的还是很透彻的,充分体现出了RAG的价值,时至今日,RAG的价值很大程度也是围绕着这个在推广(也就4年前的事,怎么感觉好像很久远的样子)。

They cannot easily expand or revise their memory, can’t straightforwardly provide insight into their predictions, and may produce “hallucinations”.

很多更老的模型并不能拓展或者更新知识,不能直接提供对预测的见解,并容易产生幻觉,这应该就是原有模型的劣势,而作者的解决方式就是通过RAG,这个是作者的解释。

We endow pre-trained, parametric-memory generation models with a non-parametric memory through a general-purpose fine-tuning approach which we refer to as retrieval-augmented generation (RAG).

紧跟着对这个概念进行了展开。

We build RAG models where the parametric memory is a pre-trained seq2seq transformer, and the non-parametric memory is a dense vector index of Wikipedia, accessed with a pre-trained neural retriever. We combine these components in a probabilistic model trained end-to-end.

从这几句话可以理解到,这个"the parametric memory"就是一个生成模型,此处是用的一个预训练好的seq2seq模型,而非参数的记忆是用一堆向量来存储的,这里的知识来自于维基百科,而记忆的获取则是通过预训练好的neural retriever来实现的,整体就形成一个端到端的模型,此时,再看作者的图,就更好理解了。

3309c020faa71f8d583980d5c488008d.png

这个架构显然和现在的RAG是完全一样的,query-encoder就是一个向量表征模型,后续存入库中,就可以做向量召回,MIPS就是最近邻检索,也就是所谓的向量检索了(有关向量召回和向量检索的概念,可以参考这篇:),而后对top-K文章,可以进行拼接,交给seq2seq模型进行预测。

在此基础上,作者进一步阐述了RAG结构的优势,省去论证讨论的话术,这里我直接说作者提及的结论:

  • 知识更新层面,RAG能够快速拓展或者更新知识。参数和非参数记忆组件都是预先训练并预先加载了广泛的知识,无需额外训练就可以获得新知识。

  • 生成内容层面,RAG相比直接生成,内容会更加真实、具体和多样。

模型

从上面的图可以看到,整个模型的核心组件就是两个。

  • 一个检索器,给定输入的query ,输出top K相似度的文档。

  • 一个生成器,基于检索器的返回的文档以及query ,给出最终的回复结果。

模型结构是类似的,但是根据训练和使用策略的不同,文章中提出了两种方案,RAG-Sequence和RAG-Token,其实对应的是两种映射关系,一个是用单个文档预测出序列输出的结果,另一个是基于单个token,用多个文章综合预测出结果。

这里就可以看到,两者的区别就在于,一个是先积再和,一个是先和再积,具体两者有什么效果上的区别,后续作者会做实验。

在模型的选用上,基本都是选用比较常见的方案了。检索上,作者从简是选择了BERT的向量化,用的DPR方案(Dense passage retrieval for open-domain question answering),在当时的视角也并不算一个落后的方案,类似simcse是21年才出来的(EMNLP21),而生成器,选用了BART( BART: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension)。

训练上,文章选用的方案是联合训练,即联合检索器和生成器一起训练,直接对端到端的和进行训练。值得注意的是,联合训练的过程,因为检索的编码器,也就是DPR那个模型的文档编码器会更新,这导致检索的索引也需要伴随更新,为了降低这块的性能要求,此处就对doc的文档编码器就不更新,只更新对query的编码器,生成器照常更新。

解码是文本生成的重要一步,对RAG-Sequence和RAG-Token有不一样的操作方法,后者直接用beam search即可,而前者则不可以,而是采用了“彻底解码”和“快速解码”两个方式来分别解决短句和长句的解码问题。

实践细节和实验

首先是实践上,作者使用的是维基百科数据,每篇文章会被切分,用编码器进行编码,然后存入FAISS中方便检索。

实验上,作者设计了开放域问答、抽象问答(自由文本问答)、Jeopardy问答(直译是危险,但感觉不像,这里是指猜实体,例如In 1986 Mexico scored as the first country to host this international sports competition twice的答案是The World Cup)、事实验证这4个任务来判断RAG的具体能力,并借助消融实验判断RAG中各个设计对最终效果的影响。

实验结果就不过多赘述,不过作者在这里的一些发现我想拿出来分享一下。

  • 即使RAG抽取出来的文档相关但不包含答案,仍对最终效果有收益。甚至即使没检索到正确文档,RAG仍能得到更优的结果。

  • RAG的幻觉似乎比直接生成(BART)要少,而且多样性也更高。

  • RAG在特定任务场景,更不需要对中间的检索进行训练。

  • 索引支持热更新,能让模型更敏捷地更新知识。

  • 对文档的检测数量,作者也进行了实验,RAG-Sequence对召回文档数量的性能影响不大,感觉很可能因为最后的加权稀释,影响变小而且趋于稳定,但对RAG-Token会有些明显,一般文档越多效果越好。

  • 检索模块作者只是用了BM25作对比,感觉有些受限,不过从最终的结果看来,随着任务的变化,在一些任务中差距可能会很大,但也有好几个任务来看效果差距并不是很大,甚至可能比向量召回还要好。

分析讨论

这篇文章从现在的视角看,能有如下启发:

  • 即使是小模型,经过训练,仍然能很大程度能理解灌入的知识,并借助知识的支持回答问题。

  • RAG中的R和G存在联合训练的可能,并且联合训练对最终的结果输出是有收益的,现在我们如果要对RAG效果做提升,也可以考虑这个方案。

  • 检索模块的返回,即使并非正确,但只要相关,就有可能对最终结果产生收益,当然如果能正确,收益会更加大。

  • 思路要拓宽,向量召回不是唯一方法,类似BM25之类的字面方案,也是有收益的。

当然对比现在的大模型,大模型目前有更好的底子,对知识的处理不那么依赖训练了,而是大模型本身就有知识处理、理解的能力,从而降低了联合训练的必要性,当然了,考虑到大模型的成本,为了压缩成本也可以考虑用大模型做预标注之类的手段辅助做小模型的训练支撑,也是一个思路。

c9f19bc415f445792151b00be84321d0.png

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

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

相关文章

瑞_23种设计模式_访问者模式

文章目录 1 访问者模式(Visitor Pattern)1.1 介绍1.2 概述1.3 访问者模式的结构1.4 访问者模式的优缺点1.5 访问者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 拓展——双分派4.1 分派4.2 动态分派(多态&am…

ubuntu 20.04 更新显卡驱动

1. 问题描述 $ watch -n 1 nvidia-smi画面不动 而且运行 pytorch 代码时出现问题: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11070). Please update your GPU driver by downloading and installing a new…

libVLC 视频窗口上叠加透明窗口

很多时候,我们需要在界面上画一些三角形、文字等之类的东西,我们之需要重写paintEvent方法,比如像这样 void Widget::paintEvent(QPaintEvent *event) 以下就是重写的代码。 void Widget::paintEvent(QPaintEvent *event) {//创建QPainte…

家居网购项目(一)

文章目录 1.前置知识1.项目开发阶段2.Java经典三层架构3.项目具体分层(包方案)4.MVC 2.开发环境搭建1.新建普通javaweb项目,导入jar包2.创建项目结构3.搭建前端页面 3.会员注册前端js校验1.需求分析2.代码login.html 3.结果4.调试阶段1.验证信…

算法训练营第24天回溯(组合)

回溯(组合) 模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯&…

6.11物联网RK3399项目开发实录-驱动开发之定时器的使用(wulianjishu666)

嵌入式实战开发例程【珍贵收藏,开发必备】: 链接:https://pan.baidu.com/s/1tkDBNH9R3iAaHOG1Zj9q1Q?pwdt41u 定时器使用 前言 RK3399有 12 个 Timers (timer0-timer11),有 12 个 Secure Timers(stimer0~stimer11) 和 2 个 …

LC 501.二叉搜索树中的众数

501.二叉搜索树中的众数 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 …

深入浅出 -- 系统架构之在Java体系中的微服务标准组件

前面我们介绍了微服务架构的各个组件以及各组件的职责,在Java领域中,Spring可以说是无人不知无人不晓的,我们现代的企业级应用和互联网应用,很大一部分都是构建在Spring生态体系上的,同样,实现微服务架构的…

MySQL高级详解

文章目录 约束概述分类主键约束概述特点定义及删除主键自增 唯一约束作用语法 非空约束作用语法 面试题:非空唯一约束与主键约束有什么区别默认值约束作用语法 总结 表关系及外键约束表关系概述分类一对多关系表设计外键字段设计原则 多对多关系表设定设计原则 一对…

【图论】Dijkstra单源最短路径-朴素方法-简单模板(迪杰斯特拉算法)

Dijkstra单源最短路径 问题描述 输入n 表示n个结点,m表示m条边,求编号1的结点到每个点的最短路径 输出从第一个点到第n个点的最短路径 思路 将图g[][]中所有的权值初始化为0x3f表示正无穷 将dist[]中所有的值初始化为0x3f表示从第一个点到所有点的距离…

一辆新能源汽车需要多少颗传感器?

随着科技的发展和环保意识的日益提高,新能源汽车(包括纯电动汽车、混合动力汽车等)在全球范围内越来越受到欢迎。这些汽车不仅减少了碳排放,还推动了汽车产业的创新。然而,这些高科技汽车的背后,隐藏着许多…

Qt中播放GIF动画

在Qt应用程序中,如果你想在QLabel控件上播放GIF动画,可以使用QMovie类与QLabel配合来实现。以下是详细步骤和代码示例: 步骤1:引入必要的头文件 首先,在你的源代码文件中包含QMovie和QLabel相关的头文件:…

Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)

文章目录 前言:一、下载(一).链接(直达JDK21)(二).官网搜索(可选其他版本) 二、安装三、环境变量配置四、验证安装和配置五、常见问题解答 前言: 本文将为您提供关于Java官网下载JDK21版本的详细教程。作为…

springboot在使用 Servlet API中提供的javax.servlet.Filter 过滤器 对请求参数 和 响应参数 进行获取并记录日志方案

不多说 直接上代码 第一步 package com.xxx.init.webFilter;import com.alibaba.fastjson.JSONObject; import com.xxx.api.constant.CommonConstant; import com.xxx.api.entities.log.OperationLog; import com.xxx.init.utils.JwtHelper; import com.xxx.init.utils.Reques…

King‘s AUTO的QI妙能力|实验室“总导演”

在2023年夏天,两场国际赛事分别在成都、杭州盛大举办——第31届世界大学生夏季运动会(大运会)以及第19届亚洲运动会(亚运会)。为确保开幕式的顺利进行,大运会共进行了三次全要素彩排,而亚运会则…

上海人工智能实验室的书生·浦语大模型学习笔记(第二期第三课——上篇)

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,这次有机会参与试用,特记录每次学习情况。 一、课程笔记 本次学习的是RAG(Retrieval Augmented Generation)技术,它是通过检索与用户输入相关的信息片段…

【MATLAB源码-第185期】基于matlab的16QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

springboot如何切换内置web服务器?

切换内置web服务器 这是没有引入web依赖的服务 这是引入web依赖的服务 由此可知默认是tomcat服务器 那么如何切换内置服务器 只要有对应服务器的坐标即可自动切换&#xff0c;先排除tomcat再引入依赖&#xff0c;比如切换成jetty服务器 <dependency><groupId>org…

d3dx9_43.dll丢失的一些可行的解决方案,有效解决d3dx9_43.dll丢失

在电脑中&#xff0c;d3dx9_43.dll文件丢失是一个相当普遍的问题。实际上&#xff0c;要解决这个问题有多种方法。今天&#xff0c;我们将讨论一下关于d3dx9_43.dll文件丢失的问题&#xff0c;并向大家介绍一些可行的解决方案。 一.快速了解d3dx9_43.dll文件 首先&#xff0c;…

Linux的学习之路:6、Linux编译器-gcc/g++使用

摘要 本文主要是说一些gcc的使用&#xff0c;g和gcc使用一样就没有特殊讲述。 目录 摘要 一、背景知识 二、gcc如何完成 1、预处理(进行宏替换) 2、编译&#xff08;生成汇编&#xff09; 3、汇编&#xff08;生成机器可识别代码 4、链接&#xff08;生成可执行文件或…