【论文阅读】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的各种不同的提示):
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[AVL数四种旋转详细图解]

文章目录 一.右单旋二. 左单旋三. 右左双旋四. 左右双旋 一.右单旋 新节点插入较高左子树的左侧—左左:右单旋 由于在较高左子树的左侧插入一个节点后,左边插入导致30的平衡因子更新为-1,而60平衡因子更新为-2,此时不平衡&…

oracle数据库通过impdp导入数据时提示,ORA-31684:对象类型用户xxx已存在,和ORA-39151:表xxx存在的解决办法

前提条件:首先备份原数据库中此用户对应的schemas 比如名为cams_wf的schemas 以便出了问题后还可以恢复原数据。 解决办法一、 通过命令或者数据库管理工具删除掉此schemas下的所有表,然后在impdp中加入ignorey 来忽略ORA-31684:对象类型用…

Signac|成年小鼠大脑 单细胞ATAC分析(1)

引言 在本教程中,我们将探讨由10x Genomics公司提供的成年小鼠大脑细胞的单细胞ATAC-seq数据集。本教程中使用的所有相关文件均可在10x Genomics官方网站上获取。 本教程复现了之前在人类外周血单核细胞(PBMC)的Signac入门教程中执行的命令。…

Spring运维之boot项目bean属性的绑定读取与校验

第三方bean属性的绑定 先写一个实体类 我们在配置yml文件里写了属性值 能一一对应 我们用注解让其对应 我们在启动类里面测试 我们首先拿到容器对象 再拿到bean 打印bean 发现我们的容器获取到的bean bean的属性与配置里面的属性一一对应 这时候提出一个问题 这是我们自定义…

C++设计模式-外观模式,游戏引擎管理多个子系统,反汇编

运行在VS2022,x86,Debug下。 30. 外观模式 为子系统定义一组统一的接口,这个高级接口会让子系统更容易被使用。应用:如在游戏开发中,游戏引擎包含多个子系统,如物理、渲染、粒子、UI、音频等。可以使用外观…

组态软件远程监控

在信息化、智能化的浪潮下,远程监控技术已经渗透到工业生产的各个领域。HiWoo Cloud平台凭借其卓越的组态软件远程监控功能,为企业提供了高效、智能的监控解决方案,推动了工业生产的数字化转型。本文将详细介绍HiWoo Cloud平台在组态软件远程…

【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战

​​​​​​​ 目录 一、引言 二、模型简介 2.1 GLM4-9B 模型概述 2.2 GLM4-9B 模型架构 三、模型推理 3.1 GLM4-9B-Chat 语言模型 3.1.1 model.generate 3.1.2 model.chat 3.2 GLM-4V-9B 多模态模型 3.2.1 多模态模型概述 3.2.2 多模态模型实践 四、总结 一、引言…

cocos入门4:项目目录结构

Cocos Creator 项目结构教程 Cocos Creator 是一个功能强大的游戏开发工具,它为开发者提供了直观易用的界面和强大的功能来快速创建游戏。在使用 Cocos Creator 开发游戏时,合理地组织项目结构对于项目的可维护性和扩展性至关重要。以下是一个关于如何设…

49.线程池的关闭方法

shutdown方法 1.线程池状态变为shutdown 2.不会接收新任务 3.已提交的任务会执行完 4.此方法不会阻塞调用线程执行 ExecutorService executorService = Executors.newFixedThreadPool(2);executorService.submit(() -> {log.debug("task1 running");try {TimeUnit…

可视化数据科学平台在信贷领域应用系列五:零代码可视化建模

信贷风控模型是金融机构风险管理的核心工具,在信贷风险管理工作中扮演着至关重要的角色。随着信贷市场的环境不断变化,信贷业务的风险日趋复杂化和隐蔽化,开发和应用准确高效的信贷风控模型显得尤为重要。信贷风险控制面临着越来越大的挑战和…

Go实战 | 使用Go-Fiber采用分层架构搭建一个简单的Web服务

前言 📢博客主页:程序源⠀-CSDN博客 📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正! 一、环境准备、示例介绍 Go语言安装,GoLand编辑器 这个示例实现了一个简单的待办事项(todo&#xf…

【Linux网络】传输层协议 - UDP

文章目录 一、传输层(运输层)运输层的特点复用和分用再谈端口号端口号范围划分认识知名端口号(Well-Know Port Number)两个问题① 一个进程是否可以绑定多个端口号?② 一个端口号是否可以被多个进程绑定? n…

暗黑系短视频:成都鼎茂宏升文化传媒公司

暗黑系短视频:探索未知的视觉艺术 在短视频盛行的今天,各种风格和主题的作品层出不穷,其中,暗黑系短视频以其独特的魅力和深度,成都鼎茂宏升文化传媒公司吸引了众多观众的关注。这类视频往往带有一种神秘、压抑的氛围…

规则引擎LiteFlow发布v2.12.1版本,决策路由特性

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 简介 标题其实是不准确的,了解过的会知道在LiteFlow的2.12.0已经有了决策路由的特性&…

Redis-Cluster模式基操篇

一、场景 1、搞一套6个主节点的Cluster集群 2、模拟数据正常读写 3、模拟单点故障 4、在不停服务的情况下将集群架构改为3主3从 二、环境规划 6台独立的服务器,端口18001~18006 192.169.14.121 192.169.14.122 192.169.14.123 192.169.14.124 192.169.14.125 192…

XR模拟的巨大飞跃,Varjo如何塑造战斗机飞行员培训的未来

随着虚拟现实技术的不断发展,拥有直通功能的XR技术被广泛应用于各种虚拟培训项目之中,能够完美混合虚拟与现实环境的XR技术能够最大限度的优化培训效果并有效减少仿真培训中的成本消耗。 技术总部位于加利福尼亚州南旧金山的Aechelon是集培训、模拟和娱乐…

【简单讲解下TalkingData】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

PPT视频如何16倍速或者加速播放

有两种方式,一种是修改PPT本身,这种方式非常繁琐,不太推荐,还有一种就是修改视频本身,直接让视频是16倍速的视频即可。 如何让视频16倍速,我建议人生苦短,我用Python,几行代码&…

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证

文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建(测试工具)3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…

Mysql学习(三)——SQL通用语法之DML

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 DML添加数据修改数据删除数据 总结 DML DML用来对数据库中表的数据记录进行增删改操作。 添加数据 -- 给指定字段添加数据 insert into 表名(字段1,字…