Self-RAG:通过自我反思学习检索、生成和批判

论文地址:https://arxiv.org/abs/2310.11511

项目主页:https://selfrag.github.io/

Self-RAG学习检索、生成和批评,以提高 LM 的输出质量和真实性,在六项任务上优于 ChatGPT 和检索增强的 LLama2 Chat。 

问题:万能LLM错误陈述事实的问题
尽管大型语言模型(LLM)具有非凡的能力,但由于它们完全依赖于它们所封装的参数知识,因此通常会产生包含事实不准确的响应。他们经常产生幻觉,尤其是在长尾方面,他们的知识已经过时,并且缺乏归因。

检索增强是否是银弹
检索增强生成 (RAG) 是一种临时方法,通过检索相关知识来增强 LM,减少此类问题,并在 QA 等知识密集型任务中显示出有效性。然而,不加区别地检索和合并固定数量的检索到的段落,无论检索是否必要,或者段落是否相关,都会降低 LM 的多功能性或可能导致生成无用的响应。此外,并不能保证所引用的证据会影响几代人。

Self-RAG的概念
自反思检索增强生成(Self-RAG)是个新框架,通过检索和自反思来提高LM的质量和事实性。我们的框架训练单个任意LM,该LM可以自适应地按需检索段落(例如,可以在生成过程中多次检索或完全跳过检索),并使用称为
反思令牌的特殊标记生成并反映检索到的段落及其自己的生成。生成反射令牌使LM在推理阶段可控,使其能够根据不同的任务要求调整其行为。

Self-RAG的好处
实验表明,Self-RAG(7B和13B参数)在各种任务上显着优于最先进的LLM和检索增强模型。具体来说,Self-RAG在开放域QA、推理和事实验证任务上优于ChatGPT和检索增强的Llama2-chat,并且相对于这些模型,它在提高长格式生成的事实性和引用准确性方面显示出显着的收益。

1. 基本思想

自我反思检索增强生成(SELF-RAG),通过按需检索和自我反思来提高LLM的生成质量,包括其事实准确性,而不损害其通用性。以端到端方式训练任意LLM,使其学会在任务输入时,通过生成任务输出和间歇性特殊标记(即反思标记)来反思自己的生成过程。反思标记分为检索标记和批判标记,分别表示检索需求和生成质量。

Self-RAG是个新的框架,通过自我反思令牌(Self-reflection tokens)来训练和控制任意LM。它主要分为三个步骤:检索、生成和批评。

  1. 检索:Self-RAG首先解码检索令牌(retrieval token)以评估是否需要检索,并控制检索组件。如果需要检索,LM将调用外部检索模块查找相关文档。
  2. 生成:如果不需要检索,模型会预测下一个输出段。如果需要检索,模型首先生成批评令牌(critique token)来评估检索到的文档是否相关,然后根据检索到的段落生成后续内容。
  3. 批评:如果需要检索,模型进一步评估段落是否支持生成。最后,一个新的批评令牌(critique token)评估响应的整体效用。

具体来说,在给定输入提示和前几代的情况下,SELF-RAG 首先会判断用检索到的段落来增强继续生成是否有帮助。

  1. 如果有帮助,它就会输出一个检索标记,按需调用检索模型(步骤 1)。
  2. 随后,SELF-RAG 同时处理多个检索到的段落,评估它们的相关性,然后生成相应的任务输出(步骤 2)。
  3. 然后,它生成批判标记来批判自己的输出,并从事实性和整体质量方面选择最佳输出(第 3 步)。

这一过程不同于传统的 RAG(图 1 左),后者无论检索的必要性如何(例如,下图示例不需要事实性知识),都会持续检索固定数量的文档进行生成,而且从不对生成质量进行二次检查。

此外,SELF-RAG 还会为每个段落提供引文,并对输出结果是否得到段落支持进行自我评估,从而更容易进行事实验证。

SELF-RAG 通过将任意 LM 统一为扩展模型词汇表中的下一个标记预测,训练其生成带有反射标记的文本。

2. 实现详情

SELF-RAG 通过检索和自我反思来提高 LLM 的质量和事实性,同时又不牺牲 LLM 的原始创造性和多功能性。

端到端训练可以让 LMM 在必要时根据检索到的段落生成文本,并通过学习生成特殊标记对输出进行批判。

这些反思标记(表 1)表示需要检索或确认输出的相关性、支持性或完整性。相比之下,常见的 RAG 方法会不加区分地检索段落,而无法确保引用来源的完整支持。

2.1 问题形式化和概述

形式上,给定输入 x,训练 M 按顺序生成由多个片段 y=y1,…,yT 组成的文本输出 y,其中 yt 表示第 t 个片段的标记序列。

首先看推理阶段。图 1 和算法 1 展示了 SELF-RAG 的推理情况。

对于每一个 x 和前序生成结果 y<t,模型都会解码一个检索标记,以评估检索的效用。如果不需要检索,模型就会像标准 LM 一样预测下一个输出段落。如果需要检索,模型就会生成一个评论标记,用于评估检索段落的相关性,然后生成下一个回复段落以及一个评论标记,用于评估回应段中的信息是否得到段落的支持。

SELF-RAG 并行处理多个段落以生成每个段落,并使用自己生成的反射标记对生成的任务输出执行软约束或硬控制。例如:

在上图中,由于 d2 没有提供直接证据(ISREL 为不相关),且 d3 输出仅得到部分支持,而 d1 得到完全支持,因此在第一个时间步骤中选择了检索到的段落 d1。

2.2 训练阶段

Self-RAG的训练包括三个模型:检索器(Retriever)、评论家(Critic)和生成器(Generator)。

首先,训练评论家,使用检索器检索到的段落以及反思令牌增强指令 - 输出数据。

然后,使用标准的下一个 token 预测目标来训练生成器 LM,以学习生成自然延续 (continuations) 以及特殊 tokens (用来检索或批评其自己的生成内容)。

下面介绍两个模型的监督数据收集和训练,即批判者 C 和生成器 M。

2.2.1 训练批判者模型

数据收集。对每个片段的反射标记进行人工标注的成本很高。最先进的 LLM(如 GPT-4)可有效用于生成此类反馈。然而,依赖这种专有的 LLM 可能会提高 API 成本并降低可重复性,通过促使 GPT-4 生成反射标记来创建监督数据,然后将其知识提炼为内部 C:{Xsample,Ysample}∼{X,Y}。

如表 1 所示,不同的反射标记组有不同的定义和输入,因此我们对它们使用不同的指令提示。反射标记定义如下:‍‍‍‍

  • 按需检索(Retrieve):给定输入和前一步生成(如适用)后,LM 会确定续篇是否需要事实依据。no 表示不需要检索,因为序列不需要事实基础或可能不会通过知识检索得到加强;yes 表示需要检索。continue 表示一个模型可以继续使用之前检索到的证据。例如,一段话可能包含丰富的事实信息,因此 SELF-RAG 会根据这段话生成多个片段。
  • 相关性(ISREL):检索到的知识不一定总是与输入相关。这一方面表明证据是否提供了有用的信息(相关)。
  • 支持 (ISSUP):归因是指输出是否得到某些证据的充分支持。这一方面判断的是输出中的信息有多少是由证据所包含的,归因分为三个等级:完全支持、部分支持和不支持 / 矛盾。
  • 有用(ISUSE):将感知到的有用性定义为回复是否是对查询有帮助且信息丰富的答案,而与回复是否符合事实无关,这也可视为可信度。对于有用性,采用五级评价(1 为最低,5 为最高)。

以” 检索” 为例。向 GPT-4 发送了一条特定类型的指令(” 给定指令,请判断从网络上查找一些外部文档是否有助于生成更好的回复。”),然后用 fewshot 演示了 I 的原始任务输入 x 和输出 y,以预测适当的反映标记文本:p(r|I,x,y)。

其针对每个标记,都设定了一些 prompt,这块是整个数据的关键:

表 8 显示了初始检索标记的指令和示例。

表 9 显示了用于收集” 检索给定指令”、” 前面的句子” 和” 以前检索过的段落” 三路输出标记的指令和示例。

表 10 显示了用于收集 ISREL 三路输出标记的指令和示例。

表 11 显示了用于收集 ISREL 三路输出标记的指令和示例。

表 12 显示了用于收集 ISUSE 的五路输出标记的指令和示例。

人工评估结果表明,GPT-4 的反射标记预测与人工评估结果具有很高的一致性,所以为每种类型收集了 4k-20k 个有监督的训练数据,并将它们组合起来形成 C 的训练数据,样式如下:‍‍‍‍‍‍

训练数据的样式如下:

批判学习。在收集到训练数据 Dcritic 之后,用预先训练好的 LM 对 C 进行初始化,并使用标准的条件语言建模目标–最大化似然–对其进行训练:

$\max {\mathcal{C}} \mathbb{E}{((x, y), r) \sim \mathcal{D}{\text {critic }}} \log p{\mathcal{C}}(r \mid x, y), r \text { for reflection tokens. }$

2.2.2 训练生成器模型

数据收集。给定一对输入 - 输出(x,y),使用检索模型和批判者模型来增强原始输出 y,以创建精确模拟 SELF-RAG 推理时间过程的监督数据。对于每个语段 yt∈y,运行 C 来评估额外的语段是否有助于增强生成。如果需要检索,则添加检索特殊标记 Retrieve=yes,然后 R 检索前 K 个段落 D。对于每个段落,C 进一步评估该段落是否相关,并预测 ISREL。如果段落相关,C 会进一步评估该段落是否支持模型生成,并预测 ISSUP。

其中,批判标记 ISREL 和 ISSUP 会附加在检索到的段落之后。在输出 y(或 yT)结束时,C 会预测总体效用标记 ISUSE,并将包含反射标记和原始输入对的增强输出添加到 Dgen 中。

生成器学习。使用标准的下一个标记目标,在添加了反射标记 Dgen 的编辑语料库上训练生成器模型 M:

$\max {\mathcal{M}} \mathbb{E}{(x, y, r) \sim \mathcal{D}{g e n}} \log p{\mathcal{M}}(y, r \mid x)$

M 与 C 训练不同,M 学习预测目标输出和反射标记。在训练过程中会屏蔽掉检索到的文本块以计算损失,并用一组反射标记 {Critique,Retrieve} 来扩展原始词汇 V。 

3、推理阶段

Self-RAG 通过学习生成反思令牌,使得在不需要训练 LMs 的情况下为各种下游任务或偏好量身定制模型行为。特别是:

  1. 它可以适应性地使用检索令牌进行检索,因此模型可以自发判断是不是有必要进行检索。
  2. 它引入了多种细粒度的批评令牌,这些令牌用于评估生成内容的各个方面的质量。在生成过程中,作者使用期望的批评令牌概率的线性插值进行 segment 级的 beam search,以在每一个时间步骤中确定最佳的 K 个续写方案。

在推理阶段,SELF-RAG 通过生成反射标记来自我评估输出结果,从而使其行为适应不同的任务要求。

对于要求事实准确性的任务,目标是让模型更频繁地检索段落,以确保输出结果与可用证据密切吻合。在开放性较强的任务中,如撰写个人经历文章,重点则转向减少检索次数,优先考虑整体创造性或实用性得分。

因此,在推理过程中需要实施控制以满足这些不同目标。方法如下:‍‍‍‍‍‍

带阈值的自适应检索。SELF-RAG 通过预测” 检索”(Retrieve)来动态决定何时检索文本段落。另外还允许设置阈值。具体来说,如果在 Retrieve 的所有输出标记中生成 Retrieve=Yes 标记的概率超过了指定的阈值,就会触发检索:

带批判标记的树状解码。在每个分段步骤 t,当需要根据硬条件或软条件进行检索时,R 会检索 K 个段落,生成器 M 会并行处理每个段落,并输出 K 个不同的候选续篇。进行分段级波束搜索(波束大小 = B),以获得每个时间戳 t 的前 B 个分段连续性,并在生成结束时返回最佳序列。

每个段落 yt 相对于段落 d 的得分都会用批判者得分 S 更新,该得分是每个段落 yt 和段落 d 的归一化概率的线性加权和。

对于每个批判标记组 G(如 ISREL),将其在时间戳 t 的得分记为 sGt,并按如下方式计算片段得分:

3.实验设置与结果分析‍‍‍‍

3.1 任务和数据集

该工作在一系列下游任务上对 SELF-RAG 和各种基线进行了评估,用旨在评估整体正确性、事实性和流畅性的指标对输出进行了整体评估。

封闭集任务包括两个数据集,即关于公共卫生的事实验证数据集(PubHealth)和根据科学考试创建的多选推理数据集(ARC-Challenge),使用准确率作为评估指标,并对测试集进行报告。

两个开放域问题解答(QA)数据集:PopQA 和 TriviaQA-unfiltered,其中系统需要回答有关事实知识的任意问题。

长式生成任务包括传记生成任务和长式质量保证任务 ALCE-ASQA,使用 FactScore 来评估传记,并使用基于 MAUVE 的官方指标正确性、流畅性以及引用精度和召回率来评估 ASQA。

3.2 实验结果

表 2(上)列出了相关对比效果:‍

如表 2(下)所示:

在 PubHealth 和 ARC-Challenge 上,有检索功能的基线与没有检索功能的基线相比,性能提升并不明显。

大多数带检索的基线模型在提高引用准确率方面都很吃力。

在实际精确度的度量上,SELF-RAG7B 偶尔会优于 13B,这是因为较小的 SELF-RAG 通常倾向于生成精确且较短的输出。

Llama2-FT7B 是在与 SELF-RAG 相同的指令 - 输出对上训练的基准 LM,不进行检索或自我反省,仅在测试时进行检索增强,它落后于 SELF-RAG。这一结果表明,SELF-RAG 的收益并非完全来自训练数据,并证明了 SELF-RAG 框架的有效性。

Self-RAG 在六项任务中均超越了原始的 ChatGPT 或 LLama2-chat,并且在大多数任务中,其表现远超那些广泛应用的检索增强方法。以上是一些消融实验,可以看到:每一个组件和技术在 Self-RAG 中都起到了至关重要的作用。调整这些组件可以显著影响模型的输出性质和质量,这证明了它们在模型中的重要性。

综上所述,Self-RAG 作为一种新型的检索增强生成框架,通过自适应检索和引入反思令牌,不仅增强了模型的生成效果,还提供了对模型行为的更高程度的控制。这项技术为提高开放领域问答和事实验证的准确性开辟了新的可能性,展示了模型自我评估和调整的潜力。

4. 总结

SELF-RAG 通过预测原始词汇中的下一个标记以及新添加的特殊标记(称为” 反思标记”),训练 LM 学习检索、生成和批判文本段落以及自己的生成。

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

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

相关文章

10分钟完成权限系统全流程开发

背景 首先问下chatgpt,权限系统的模型有哪些&#xff1f; 基于上述的结论&#xff0c;我们选择基于角色的访问控制(RBAC)&#xff0c;请从数据库设计、接口文档、代码实现、单元测试四个方面分别详细描述每个部份需要实现的内容。 数据库实现 针对上述的数据库设计部份&#…

格局打开!前端未死,只是要求变高了

本文笔者会从以下几个方面分享&#xff0c;希望能够帮助正在迷茫的前端小伙伴提供一点思路&#xff01; 逛技术博客 不局限框架 全栈工程师兴起 关注前沿 写技术文章 录制前端视频 总结 2024年了&#xff0c;没工作的找到工作了吗&#xff1f;有工作的加薪了吗&#xff1f;加薪…

【高等数学之极限】

一、引言 我们先思考一下&#xff0c;上面三个表达式&#xff0c;是否可以将极限值直接代入求值&#xff0c;我们在计算之前需要先分析一下&#xff0c;如果将极限值代入&#xff0c;那么表达式将会变成什么形式? 经过上面的分析&#xff0c;我们发现第一个式子可以直接带入&a…

浪花 - 主页开发

一、简易版主页 1. 主页展示用户列表 <template><!--推荐用户列表--><van-cardv-for"user in userList":desc"user.profile":title"${user.username}(${user.planetCode})":thumb"user.avatarUrl"><template #…

VUE表单中多个el-upload上传组件共享回调函数解决方案

产品需求界面&#xff1a; 在产品配置页面表单中需要上传多个图片&#xff0c;项目中上传组件采用Element Plus 中的 el-upload&#xff0c;目前问题是每个上传组件都需要实现自己的回调&#xff0c;比如:on-change&#xff0c;采用官方推荐标准代码如下&#xff1a; <el-fo…

java中的时间API

Created: January 19, 2024 2:31 PM 1、旧版时间API的缺点 在java1.0中使用java.utol.Date类表示时间&#xff0c;该类存在很多问题&#xff0c;例如时间零点是1900年1月0日&#xff0c;例如想到表示2024年1月19日就需要如下定义&#xff0c;此外Date也无法表示时间、包含默认…

西瓜书读书笔记整理(十二) —— 第十二章 计算学习理论

第十二章 计算学习理论&#xff08;上&#xff09; 12.1 基础知识12.1.1 什么是计算学习理论&#xff08;computational learning theory&#xff09;12.1.2 什么是独立同分布&#xff08;independent and identically distributed, 简称 i . i . d . i.i.d. i.i.d.&#xff0…

Mysql运维篇(一) 日志类型

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人&#xff0c;如有侵权请留言&#xff0c;我及时删除。 一、mysql相关日志 首先&#xff0c;我们能接触到的&#xff0c;一般我们排查慢查询时&#xff0c;会去看慢查询…

一篇文章带你了解 什么是u(ustd)带你了解他的前世今生

在数字货币的繁荣世界中&#xff0c;USDT无疑是其中一位重要的角色。它的前世今生&#xff0c;是一个从无到有&#xff0c;从小到大&#xff0c;经历了种种波折和争议的故事。 2014年11月下旬&#xff0c;一个名为Realcoin的注册地为马恩岛和香港的公司决定改变自己的名字&…

C和指针课后答案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 第八章课后答案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参…

C++参悟:正则表达式库regex(更新中)

正则表达式库regex&#xff08;更新中&#xff09; 一、概述二、快速上手Demo1. 查找字符串2. 匹配字符串3. 替换字符串 三、类关系梳理1. 主类1. basic_regex 2. 算法3. 迭代器4. 异常5. 特征6. 常量1. syntax_option_type2. match_flag_type3. error_type 一、概述 C标准库为…

Halcon基于描述符的模板匹配

Halcon基于描述符的模板匹配 与基于透视形变的模板匹配类似&#xff0c;基于描述符的模板匹配能够在物体处于透视形变的状态下进行匹配&#xff0c;并且已标定和未标定的相机图像都适用。与透视形变不同的是&#xff0c;它的模板不是根据边缘轮廊创建的&#xff0c;而是根据特…

【根据loss曲线看模型微调效果】如何使用loss曲线诊断机器学习模型性能

一、Loss曲线 在模型的预训练或者微调过程中&#xff0c;我们一般通过观察loss曲线来得出模型对于数据集的学习效果等信息。那么我们如何根据loss曲线得到一些信息呢&#xff1f; 通常数据集会被划分成三部分&#xff0c;训练集&#xff08;training dataset&#xff09;、验证…

集美大学“第15届蓝桥杯大赛(软件类)“校内选拔赛 H卯酉东海道

dijk spfa思想 然后你需要存一下每个点 * l种颜色&#xff0c;你开个数组存一下 st[i][j] 为到达i点且到达以后是j颜色的最小距离是否已经确定了 #include<bits/stdc.h> using namespace std; using ll long long; const int N 3e510; struct Edge{ll to,col,w;bool …

C++进阶--哈希表的的闭散列和开散列(哈希桶)实现

哈希表的的闭散列和开散列&#xff08;哈希桶&#xff09;实现 一、哈希概念二、哈希冲突三、哈希函数3.1 直接定址法--&#xff08;常用&#xff09;3.2 除留余数法--&#xff08;常用&#xff09;3.3 平方取中法--&#xff08;了解&#xff09;3.4 折叠法--&#xff08;了解&…

极狐GitLab 线下『 DevOps专家训练营』成都站开班在即

成都机器人创新中心联合极狐(GitLab)隆重推出极狐GitLab DevOps系列认证培训课程。该课程主要面向使用极狐GitLab的DevOps工程师、安全审计人员、系统运维工程师、系统管理员、项目经理或项目管理人员&#xff0c;完成该课程后&#xff0c;学员将达到DevOps的专家级水平&#x…

19.云原生CICD之ArgoCD入门

云原生专栏大纲 文章目录 ArgoCDArgoCD 简介GitOps介绍Argo CD 的工作流程argocd和jinkens对比kustomize介绍ArgoCD和kustomize关系 安装argocdargocd控制台介绍首页应用创建表单SYNC OPTIONS&#xff08;同步选项&#xff09;SYNC POLICY&#xff08;同步策略&#xff09; 应…

【超实用】用Python语言实现定时任务的八个方法,建议收藏!

在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用 Linux 系统自带的 crond 结合命令行实现。另外一种方式是直接使用Python。接下来整理的是常见的Python定时任务的八种实现方式。 利用while True: + sleep()实现定时任务 位于 time 模块中的 sleep(secs) 函…

一键完成,批量转换HTML为PDF格式的方法,提升办公效率

在当今数字化的时代&#xff0c;HTML和PDF已经成为两种最常用的文件格式。HTML用于网页内容的展示&#xff0c;而PDF则以其高度的可读性和不依赖于平台的特性&#xff0c;成为文档分享和传播的首选格式。然而&#xff0c;在办公环境中&#xff0c;我们经常需要在这两种格式之间…

openGauss学习笔记-202 openGauss 数据库运维-常见故障定位案例-不同用户查询同表显示数据不同

文章目录 openGauss学习笔记-202 openGauss 数据库运维-常见故障定位案例-不同用户查询同表显示数据不同202.1 不同用户查询同表显示数据不同202.1.1 问题现象202.1.2 原因分析202.1.3 处理办法 openGauss学习笔记-202 openGauss 数据库运维-常见故障定位案例-不同用户查询同表…