【论文阅读】SELF-RAG,让模型决策和反思检索

news2024/11/24 12:35:13

关于LLM何时使用RAG的问题,原本是阅读了关于ADAPT-LLM模型的那篇论文,被问到与SELF-RAG有何区别。所以,大概看了一下SELF-RAG这篇论文,确实很像,这些基于LLM针对下游任务的模型架构和方法,本来就很像。不过,对比起来,SELF-RAG还是更像前面介绍的SteerLM。进一步觉得SELF-RAG这种方法具有通用性,所以又详细阅读了一下,并重新总结了SELF-RAG的完整方法。

论文链接:https://ar5iv.labs.arxiv.org/html/2310.11511

在这里插入图片描述

摘要

尽管大型语言模型(LLMs)具有显著的能力,但它们仍然会产生包含事实错误的响应,这些错误仅依赖于它们所包含的参数知识。检索增强生成(RAG)是一种通过检索相关知识来增强LLMs输入的方法,这在知识密集型任务中减少了知识错误。然而,RAG方法会不加选择地检索和整合检索到的段落,无论检索是否必要或段落是否相关,这可能会减少LLMs的多功能性或导致生成质量低下。为了解决这些问题,文章介绍了一种新的框架——自反思检索增强生成(Self-Rag:Self-Reflective Retrieval-Augmented Generation),通过按需检索和自我反思提高了LLMs生成的质量,包括事实准确性,同时不损害其多功能性。

方法简述

Self-Rag框架训练流程涉及两个模型,一个是评价模型(Critic Model),一个是生成模型(Generator Model)。大概方法是,借助GPT-4形成数据集,训练评价模型;然后通过评价模型,生成新的数据集,再来训练生成模型。如何,是不是与SteerLM的流程非常相似。

整个训练步骤:

  1. 初始化评价模型(Critic Model):评价模型使用预训练的语言模型进行初始化。初始模型可以是任何预训练的LM,文章使用与生成模型LM相同的模型(即Llama 2-7B)来初始化。
  2. 数据采样:从原始训练数据中随机采样实例,形成用于训练评价模型的数据集。
  3. 生成反思Token(Reflection Tokens):手动为每个段落注释反思Token成本高昂,文章使用GPT-4(或其他高级语言模型)生成反思Token,这些Token用于评估是否需要检索、检索到的文档的相关性和生成文本的质量。
  4. 训练评价模型:将生成的反思Token与原始训练数据一起,训练评价模型,使其能够预测给定输入和输出的适当反思Token。
  5. 创建生成模型的训练数据:使用评价模型来评估每个生成的段落是否需要检索,如果需要,就检索相关的文档。然后,评价模型评估检索到的文档的相关性(IsRel),支持度(IsSup),以及整体效用(IsUse)。
  6. 生成模型的训练:将上述步骤中收集到的数据,包括原始输入、输出和预测的反思Token,用于训练生成模型。生成模型被训练为能够预测下一个词,包括正常的生成文本和反思Token。
  7. 训练细节:训练时,可能会对检索到的文本块进行掩码处理,并且在损失计算时不包括这些文本块。此外,原始词汇表会通过添加反思Token进行扩展。
    通过这些步骤,生成模型能够学习如何根据需要检索文档,并生成包含反思Token的文本,这些反思Token可以在推理阶段用于评估和改进生成文本的质量。

Self-Rag使用特殊的反思Token(Reflection Tokens)来生成和反思检索到的段落以及自身的生成内容。反思token在推理阶段使LLM可控,使其能够根据不同任务需求调整行为。具体来说,Self-Rag通过以下步骤工作:

  1. 确定是否需要通过检索来增强生成。
  2. 如果需要,输出一个检索token,按需调用检索器模型。
  3. 并行处理多个检索到的段落,评估它们的相关性,并生成相应的任务输出。
  4. 生成评价token来评价自身的输出,并选择最佳输出。

最近,吴恩达提到:“大型语言模型 (LLM) 的低成本token生成和智能体工作流为在合成数据上训练LLM开辟了有趣的新可能性。在LLM直接生成的响应上进行预训练是没有帮助的。但是,如果使用LLM实现的智能体工作流产生的输出质量高于LLM直接生成的输出质量,那么对该输出进行训练就很可能变得有用。”Self-Rag的方法也可以看做一种依靠智能体技术生成合成数据的案例!

反思Token(Reflection Tokens)的定义

文章的重要创新之处,是引入了反思Token(Reflection Tokens),所以先看看这个特殊的Token是如何定义的。
在这里插入图片描述
如上表所示,反思Token表明了检索的需求或评估输出的相关性、支持性或完整性。相比之下,常见的 RAG 方法不分青红皂白地检索段落,而不能确保引用来源的对输出的支持性。Self-Rag中使用的四种反思Token。每种类型使用几个token来表示其输出值。第一行是检索Token,下面三行是三种评价Token,粗体文本表示最理想的评价token。x、y、d分别表示输入的问题、输出的响应和检索的相关段落。下面是反思Token的具体定义。

检索需求(Retrieval-on-demand):

Retrieve: 给定输入和前一步生成的内容(如果适用),语言模型(LM)确定继续生成是否需要事实基础支撑。

No 表示检索是不必要的,因为序列不需要事实基础支撑,或者可能不会通过知识检索得到增强。

Yes 表示检索是必要的。

Continue to use evidence 表示模型可以继续使用之前检索到的段落。例如,一个段落可能包含丰富的事实信息,因此Self-Rag会基于该段落生成多个段落。

相关性(Relevance):

IsRel: 检索到的知识 d 可能并不总是与查询 x 相关。这个Token表明检索是否提供了有用的信息(Relevant)或者没有(Irrelevant)。

支持度(Support):

IsSup: 归因(Attribution)表示是否输出 y 完全由特定证据 d 支持。

这个方面根据证据支持的程度,评价输出信息的相关性,分为三个等级:Fully supported(完全支持)、Partially supported(部分支持)和No support / Contradictory(无支持/相反)。

有用性(Usefulness):

IsUse: 定义为响应 y 是否是查询 x 的有帮助和信息丰富的答案,无论它实际上是否真实。

对于有用性,使用五级评估(1是最低,5是最高)。

方法介绍

尽管最新的大型语言模型(LLMs)在模型和数据规模上有所增加,但它们在事实错误方面仍然存在挑战。检索增强生成(RAG)方法通过向LLMs的输入中增加检索到的相关段落,减少了知识密集型任务中的事实错误。然而,这些方法可能会阻碍LLMs的多功能性,或者引入不必要的或离题的段落,导致生成质量低下,因为它们无论检索的事实基础是否有帮助,都会不加选择地检索段落。此外,输出并不能保证与检索到的相关段落一致,因为模型没有明确地被训练去利用和遵循提供段落中的事实。
自反思检索增强生成(Self-Rag:Self-Reflective Retrieval-Augmented Generation),通过按需检索和自我反思,提高LLM生成质量,包括其事实准确性,而不会损害其多功能性。通过以端到端的方式训练任意的语言模型,让它学会在给定任务输入时反思自己的生成过程,通过生成任务输出和间歇性的特殊token(即反思token)。反思token被归类为检索和评价token,以分别指示检索需求和其生成质量。
在这里插入图片描述
上图的左上侧是传统的RAG方式。图下侧通过左右两种情况对比,显示在某些情况下,不必要的检索会导致生成质量低下。
图的右上侧显示Self-Rag的流程,给定一个输入提示和上下文生成内容,Self-Rag首先确定是否需要通过检索段落来增强持续生成的内容。如果需要检索,它将输出一个检索token,按需调用检索器模型(步骤1)。随后,Self-Rag同时处理多个检索到的段落,评估它们的相关性,然后生成相应的任务输出(步骤2)。然后生成评价token来评估自身的输出,并在事实准确性和整体质量方面选择最佳输出(步骤3)。从图中看出,检索到的段落𝑑1被选中,因为𝑑2不提供直接证据(显示为不相关)、𝑑3虽然相关但是输出仅部分支持,而𝑑1完全支持。
这个过程与传统的RAG不同(图1左侧),后者在生成过程中始终检索固定数量的文档,无论是否需要检索(例如,底部图例示例不需要事实知识),并且从不重新审视生成质量。此外,Self-Rag为每个段落提供了相关性评估,以及自我评估输出是否由段落支持,从而更容易进行事实验证。
Self-Rag通过将反思token统一为模型词汇表中的下一个token预测,训练任意的语言模型生成带有反思token的文本。
生成模型LM是在一个多样化的文本集合上训练,这些文本与反思token和检索到的段落交错在一起。反思token受强化学习中的奖励模型启发,通过已经训练良好的评价模型离线插入到原始语料库。这种离线方式,减少了训练开销。
评价模型基于通过提示专有语言模型(GPT-4)收集的输入、输出和相应的反思token数据集进行监督学习。之前的研究使用控制token来启动和引导文本生成,这里训练的语言模型使用评价token在每个生成段之后评估自身的预测,作为生成输出的一个组成部分。

方法的算法表达

形式上,给定输入x,训练模型ℳ顺序生成由多个段落组成的文本输出y,其中y=[y1,…,yT],yt表示第t个段落的一系列Token。在实验中,将一个句子当作一个段落,但这个框架适用于任何段落单位(即子句)。yt中的生成token包括原始词汇表中的文本以及反思token。
在这里插入图片描述
推理概览:算法1展示了Self-Rag推理的流程。对于每个x和前面的已经生成的y,模型解码一个检索token以评估检索的效用。如果不需要检索,模型像标准LM一样预测下一个输出段落。如果需要检索,模型生成:一个评价token IsRel来评估检索段落的相关性,下一个响应段落,以及一个评价token IsSup来评估响应段落中的信息是否由段落支持。最后,一个新的评价token IsUse评估响应的整体效用。
生成每个段后,Self-Rag 并行处理多个段落,并使用自己生成的反思token对生成的任务输出实施相关控制。
训练概览:Self-Rag通过将反思token统一为模型词汇表中的下一个token预测,使任意LM能够生成带有反思token的文本。具体来说,在包含反思token的精选语料库上训练生成模型ℳ,使用标准的LM目标,使ℳ能够自己在推理时生成反思token,而无需依赖评价模型。

Self-Rag训练

具体看两个模型的监督数据收集和训练,即评价模型ℂ和生成模型ℳ。

1)训练评价模型
评价模型的数据收集

手动为每个段落注释反思token成本高昂。像GPT-4这样的最先进LLM可以有效地用于生成此类反馈。通过提示GPT-4生成反思token,然后将其知识提炼到内部ℂ中,创建监督数据。
对于每组反思token,从原始训练数据中随机采样实例:{Xsample,Ysample}∼{X,Y}。由于不同的反思token组有自己的定义和输入,需要使用不同的指令提示。这里,以检索为例,用类型特定的指令提示GPT-4(“给定一个指令,判断是否查找一些来自网络的外部文档有助于生成更好的响应。”),然后给定一些示例I,原始任务输入x和输出y,以预测适当的反思token作为文本:p(r|I,x,y)。
手动评估显示,GPT-4反思token预测与人类评估高度一致。为每种类型收集了4k-20k的监督训练数据,并将它们结合起来形成训练数据。
评价模型学习
在收集到训练数据Dcritic之后,使用预训练的LM初始化,并使用标准的有条件的语言建模目标对其进行训练,最大化概率见公式:
在这里插入图片描述
初始模型可以是任何预训练的LM,使用与生成模型LM相同的模型(即Llama 2-7B)来初始化ℂ。

2)训练生成模型
生成模型的数据收集

给定输入输出对(x,y),使用检索和评价模型增强原始输出y,创建精确模拟Self-Rag推理过程的监督数据。对于每个段落yt∈y,运行评价模型ℂ评估是否需要额外的段落来增强生成。
如果需要检索,检索特殊Token Retrieve=YES被添加,并且ℛ检索K个最高段落,D。对于每个段落,ℂ进一步评估该段落是否相关,并预测IsRel。
如果一个段落相关,ℂ进一步评估该段落是否支持模型生成,并预测IsSup。评价Token IsRel和IsSup被添加到检索到的段落或生成之后。
在输出的末尾y,ℂ预测整体效用Token IsUse,并且带有反思token和原始输入对的增强输出被添加到数据集Dgen中。下图是训练数据示例。
在这里插入图片描述
生成模型学习
Self-Rag 通过将反射token统一为模型词汇表中的下一个token预测,使LM能够生成带有反思token的文本。具体来说,在包含检索到的段落和由评价模型预测的反思token的语料库上训练生成模型 ℳ。通过在带有反思token的精选语料库Dgen上训练,训练生成模型ℳ的预测下一个token的训练目标:
在这里插入图片描述
与ℂ训练目标不同,ℳ学习预测目标输出以及反思token。在训练期间,损失计算时遮蔽检索到的文本块,并将原始词汇表扩展为包含反思token的集合。

训练数据

最后看一下训练数据和提示是如何样子。简单截取片段,作为示例,详细的可以参见原文。

训练数据示例:
在这里插入图片描述
用于GPT-4生成反思token的提示,只选一种情况,仅有输入情况下的生成检索Token的提示(其他的提示包括给定输入、历史输出和检索段落的检索Token、以及生成评价Token的各种不同的提示):
在这里插入图片描述

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

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

相关文章

accelerate笔记:实验跟踪

Accelerate支持七种集成的跟踪器: TensorBoardWandBCometMLAimMLFlowClearMLDVCLive要使用这些跟踪器,可以通过在 Accelerator 类的 log_with 参数中传入所选类型来实现 from accelerate import Accelerator from accelerate.utils import LoggerTypeac…

Yolo-v5模型训练速度,与GeForce的AI算力描述

1.GeForce RTX3070 Ti官网参数: GeForce RTXTM 3070 Ti 和 RTX 3070 显卡采用第 2 代 NVIDIA RTX 架构 - NVIDIA Ampere 架构。该系列产品搭载专用的第 2 代 RT Core ,第 3 代 Tensor Core、全新的 SM 多单元流处理器以及高速显存,助您在高性…

北斗RTK+UWB定位的优势

在当今科技飞速发展的时代,定位技术的应用已渗透到我们生活的方方面面。从导航、物流到无人驾驶、智能制造,精准定位技术无处不在。而北斗RTK(Real-Time Kinematic,实时动态)和UWB(Ultra-Wideband&#xff…

闭眼推荐的,新手教师工具

亲爱的老师们,尤其是那些刚踏入教育界的新手教师们,还在为如何高效管理课堂、如何制作精美的教学材料而头疼吗?让我来分享几款教育界口碑爆棚的工具。 易查分小程序 易查分是一款超级方便的成绩查询工具,一分钟就能上传成绩并生成…

[经验] 腰果树的外观特征和特点是什么 #媒体#微信

腰果树的外观特征和特点是什么 腰果树是一种生长在热带和亚热带地区的落叶乔木,其叶子为互生,倒披针形或披针形,整个树枝条生长勃勃,长势喜人。 腰果树的树皮是灰色或深褐色的,有着纵向裂缝,树皮粗糙而有光…

【Mybatis】源码分析-高级应用

1、Mybatis配置文件深入理解 1.2、动态SQL语句 Mybatis 的映射⽂件中,前⾯我们的 SQL 都是⽐较简单的,有些时候业务逻辑复杂时,我们的 SQL是动态变化的,此时在前⾯的学习中我们的 SQL 就不能满⾜要求了。 1.2.1、条件判断 我们根…

OrangePi KunPengPro | linux系统下挂载U盘

OrangePi KunPengPro | linux系统下挂载U盘 时间:2024年6月6日21:32:53 文章目录 OrangePi KunPengPro | linux系统下挂载U盘1.参考2.操作fdisk -l 列出系统上所有磁盘的分区表信息将 /dev/sda1 分区挂载到 /mnt/udisk/ 目录显示文件系统的磁盘空间使用情况卸载文件…

【C++】问题及补充(2)

string s2“hello word”;是怎么进行隐式类型转换的 在这里,"hello world"是一个C字符串常量,而s2是一个std::string类型的变量。当你将C字符串常量赋值给一个std::string类型的变量时,会发生隐式类型转换。编译器会将C字符串常量转…

机器学习笔记 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

Go微服务: 分布式Cap定理和Base理论

分布式中的Cap定理 CAP理论 C: 一致性,是站在分布式的角度,要么读取到数据,要么读取失败,比如数据库主从,同步时的时候加锁,同步完成才能读到同步的数据,同步完成,才返回数据给程序&…

【ssh命令】ssh登录远程服务器

命令格式:ssh 用户名主机IP # 使用非默认端口: -p 端口号 ssh changxianrui192.168.100.100 -p 1022 # 使用默认端口 22 ssh changxianrui192.168.100.100 然后输入密码,就可以登录进去了。

多模态vlm综述:An Introduction to Vision-Language Modeling 论文解读

目录 1、基于对比学习的VLMs 1.1 CLIP 2、基于mask的VLMs 2.1 FLAVA 2.2 MaskVLM 2.3 关于VLM目标的信息理论视角 3、基于生成的VLM 3.1 学习文本生成器的例子: 3.2 多模态生成模型的示例: 3.3 使用生成的文本到图像模型进行下游视觉语言任务 4、 基于预训练主干网…

Vue——子级向父级使用props传递数据(函数)

文章目录 前言原理案例效果演示 前言 看到这个标题,相信很多人会说我,你之前博客写的父级向子级中传递数据使用的是props,然后说的子级向父级传递数据则是用的$emit。 并且还说了对于String、数组Array,只能是父级使用props传递…

UE5 Mod Support 思路——纯蓝图

原创作者:Chatouille 核心功能 “Get Blueprint Assets”节点,用于加载未来的mod。用基础类BP_Base扩展即可。打包成补丁,放到Content\Paks目录下,即可让游戏访问到内容。 与文中所写不同的地方 5.1或者5.2开始,打…

音视频开发—V4L2介绍,FFmpeg 打开摄像头输出yuv文件

实验平台:Ubuntu20.04 摄像头:1080P 监控摄像头,采用V4L2驱动框架 文章目录 1.V4L2相关介绍1.1. 基本概念1.2. 主要功能1.3. V4L2驱动框架1.4. 主要组件1.5. 使用V4L2的应用1.6. 常用V4L2工具 2.ffmpeg命令实现打开摄像头输出yuv文件3.使用C…

算法金 | 读者问了个关于深度学习卷积神经网络(CNN)核心概念的问题

​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 读者问了个关于卷积神经网络核心概念的问题,如下, 【问】神经元、权重、激活函数、参数、图片尺寸,卷…

Python Excel 指定内容修改

需求描述 在处理Excel 自动化时,财务部门经常有一个繁琐的场景,需要读取分发的Excel文件内容复制到汇总Excel文件对应的单元格内,如下图所示: 这种需求可以延申为,财务同事制作一个模板,将模板发送给各员工,财务同事需收取邮件将员工填写的excel文件下载到本机,再类似…

jenkins的简单使用

2.1.简介 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 2.4.Jenkins安装 1.下载安装包jenkins.war; 2.在安装…

夕小瑶:资本寒冬下的AI创业一年

几天前我和几位前大厂朋友约了个饭,朋友纷纷向我透露出一种纠结: “GPT-4o将催生一大波创业机会啊,想离职” “但是现在是资本寒冬啊” “好想像你一样勇敢啊” 说起来这两年的大厂打工人确实比较难,受经济大环境影响&#xff0…

unity中animation和animator在使用上的区别

Animation(动画),可直接存储在物体上的animation组件中 Animation 组件用于在对象上直接存储和播放动画数据。这些数据通常是通过关键帧动画(keyframe animation)制作的,其中包含了对象在不同时间点的变换…