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

关于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.mzph.cn/bicheng/23750.shtml

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

相关文章

【Mybatis】源码分析-自定义框架

1、自定义持久层框架 1.1、分析JDBC操作问题 package blnp.net.cn.jvm.demos;import java.sql.*;/*** <p></p>** author lyb 2045165565qq.com* createDate 2024/5/24 14:24*/ public class JdbcTest {public static void main(String[] args) {Connection conne…

红酒保存中的软木塞与瓶身保护

云仓酒庄雷盛红酒&#xff0c;以其卓着的品质和精美的包装赢得了众多消费者的喜爱。在红酒的保存过程中&#xff0c;软木塞与瓶身保护是至关重要的环节。本文将深入探讨这两方面的问题&#xff0c;以帮助消费者更好地理解和欣赏云仓酒庄雷盛红酒。 首先&#xff0c;我们来谈谈软…

gitee上传整个项目文件夹

1.访问git官网并下载 Git 如下图&#xff1a; 点击download&#xff0c;然后选择合适的版本进行下载&#xff1a; 如下图&#xff0c;我下载的是2.32.0.2版本&#xff0c;64位windows版。 下载完之后&#xff0c;直接点击安装。 然后根据向导&#xff0c;一路默认到安装完成。…

SL3160 替换PN6008 耐压150V 降5V输出降压恒压芯片 脚位一样

在电子工程领域&#xff0c;芯片替换是一项常见且至关重要的任务。今天&#xff0c;我们将详细探讨SL3160芯片如何替换PN6008芯片&#xff0c;重点关注两者在耐压150V和降5V输出降压恒压方面的性能对比&#xff0c;以及它们脚位一致性的优势。 我们来了解一下SL3160和PN6008这两…

Java工程师的行业的生命周期

在现代商业环境中&#xff0c;理解行业的生命周期是每一个企业家、经理人以及市场分析师必须掌握的关键知识。行业的生命周期不仅决定了企业的战略方向&#xff0c;也影响着资源配置、产品开发、市场营销等各个方面。认识行业生命周期的重要性在于它能够帮助企业在不同的阶段采…

关于vue2 antd 碰到的问题总结下

1.关于vue2 antd 视图更新问题 1.一种强制更新 Vue2是通过用Object…defineProperty来设置数据的getter和setter实现对数据和以及视图改变的监听的。对于数组和对象这种引用类型来说&#xff0c;getter和setter无法检测到它们内部的变化。用这种 this.$set(this.form, "…

搜狗输入法的软键盘怎么关闭

我的搜狗输入法软件盘和typora中ctrlshiftk冲突了&#xff0c;关闭软键盘

2024.6.9周报

目录 摘要 ABSTRACT 一、文献阅读 1、相关信息 2、摘要 3、文献解读 1、Introduction 2、文章主要贡献 3、模型架构 4、实验 4、结论 二、代码实现 总结 摘要 本周我阅读了一篇题目为《Unlocking the Potential of Transformers in Time Series Forecasting with …

如何理解与学习数学分析——第二部分——数学分析中的基本概念——第8章——可微性

第2 部分&#xff1a;数学分析中的基本概念 (Concepts in Analysis) 8. 可微性(Differentiability) 本章讨论梯度(gradients)/斜率(slopes)和切线(tangent)&#xff0c;指出常见的误解并解释如何避免这些误解。将可微性的定义与图形表示联系起来&#xff0c;展示如何将其应用…

【2024】零基础Python 快速入门篇

2023年是AI的元年&#xff0c;AI的爆火不仅推动了科技领域的进步&#xff0c;更让 Python 语言成为了这一变革中的关键角色。 Python 语言简单易懂&#xff0c;语法清晰明了&#xff0c;懂一点英语的都能学得会。很适合在职场摸爬滚打多年的前端组长作为捅破天花板的语言&…

Linux服务器扩容及磁盘分区(LVM和非LVM)

Linux扩容及磁盘分区&#xff08;LVM和非LVM&#xff09; 本文主要介绍了阿里云服务器centos的扩容方法&#xff1a;非LVM分区扩容方法&#xff08;系统盘&#xff09;&#xff0c;以及磁盘改LVM并分区&#xff08;数据盘&#xff09;。主要是ext4文件系统及xfs磁盘scsi MBR分…

【轻量化】YOLOv10: Real-Time End-to-End Object Detection

论文题目&#xff1a;YOLOv10: Real-Time End-to-End Object Detection 研究单位&#xff1a;清华大学 论文链接&#xff1a;http://arxiv.org/abs/2405.14458 代码链接&#xff1a;https://github.com/THU-MIG/yolov10 推荐测试博客&#xff1a;YOLOv10最全使用教程&#xff0…

现代密码学-X.509认证业务

X.509的基础式公钥密码体制和数字签名。 证书 证书的格式 证书由可信的认证机构CA建立并由CA或者用户自己将其放入目录&#xff0c;以供其他用户方便访问。目录服务器本身并不负责为用户建立公钥证书&#xff0c;仅仅为用户访问公钥提供方便。 x.509证书格式 证书的获取 其…

微前端基于qiankun微前端应用间通信方案实践

【qiankunvue】微前端子应用之间的通信方式总结 ------------------------------------------------------------------补充--------------------------------------------------------- 什么是微前端&#xff1f; 微前端 微前端是一种多个团队通过独立发布功能的方式来共同构…

【Linux】用户和组的管理、综合实训

目录 实训1&#xff1a;用户的管理 实训2:组的管理 实训3:综合实训 实训1&#xff1a;用户的管理 (1)创建一个新用户userl&#xff0c;设置其主目录为/home/user 1。 (2)查看/etc/passwd 文件的最后一行&#xff0c;看看是如何记录的。 (3)查看文件/etc/shadow文件的最后一…

封装了一个仿照抖音评论轮播效果的iOS轮播视图

效果图 原理 就是我们在一个视图里面有两个子视图&#xff0c;一个是currentView, 一个是willShowView,在一次动画过程中&#xff0c;我们改变current View的frame&#xff0c;同时改变willShowView的frame&#xff0c;同时&#xff0c;需要改变currentVIew 的transform.y不然…

软件管理、rpm安装、yum安装、源码编译安装

目录 一、Windows安装/卸载 二、软件的卸载&#xff1a; 三、Linux的软件安装和卸载 3.1rpm安装 第一步&#xff1a;挂在光盘 第二步&#xff1a;查看/mnt 第三步&#xff1a;切换到/mnt/Packages 第四步&#xff1a;安装 3.2yum安装&#xff08;使用关盘作为yum源&…

Facechain系列: constants.py文件解读

在根目录下还有个facechain目录&#xff0c;其中的constants.py文件中定义了代码控制的重要参数。 1.姿态控制 在应用代码进行推理&#xff08;见这里Facechain系列: 通过代码进行推理&#xff09;中&#xff0c;如果将以下代码 use_pose_model False 修改为 use_pose_mo…

低代码专题 | 低代码开发平台一般都有哪些功能和模块?

在上一篇文章中&#xff0c;我们已经对低代码开发平台的概念进行了初步的探讨&#xff0c;认识到了低代码开发平台提高开发效率、降低技术门槛方面的巨大潜力。 然而&#xff0c;要真正掌握并应用低代码开发平台&#xff0c;还需要深入了解其背后的功能与模块构成。这篇就对低…

【数据结构】平衡二叉树(AVL树)

目录 前言 一、AVL树概念 二、AVL树节点定义 三、AVL树插入 1. 按照二叉搜索树的方式插入新节点 2. 维护节点的平衡因子与调整树的结构 a. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 b. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 c. 新节点插入…