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

news2024/11/27 8:47:21

论文地址: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.coloradmin.cn/o/1399622.html

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

相关文章

活性白土数据研究:预计2029年将达到9.2亿美元

活性白土是用粘土(主要是膨润土)为原料&#xff0c;经无机酸化或盐或其他方法处理&#xff0c;再经水漂洗、干燥制成的吸附剂&#xff0c;外观为乳白色粉末&#xff0c;无臭&#xff0c;无味&#xff0c;无毒&#xff0c;吸附性能很强&#xff0c;能吸附有色物质、有机物质。广…

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

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

CSS注释

CSS注释 哇&#xff0c;最近我发现CSS里面的注释真是个好东西呢&#xff01;虽然它们不会在网页上显示出来&#xff0c;但是对于我这样的新手来说&#xff0c;真的很有助于理解代码是怎么工作的。 CSS注释的小秘密 你知道吗&#xff0c;CSS里的注释就像是小纸条&#xff0c;…

Leetcoder Day10|栈与队列part02(栈的应用)

语言&#xff1a;Java/C 目录 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 今日总结 20. 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串&#xff0c;判断字符串是否有效。 有效字…

Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin

Android双击图片放大移动图中双击点到ImageView区域中心&#xff0c;Kotlin 初始化状态&#xff0c;ImageView里面只是显示一张fitcenter被缩放的原图&#xff0c;当手指在图片上双击后&#xff08;记录双击点位置&#xff1a;mCurX&#xff0c;mCurY&#xff09;画一个红色小圆…

TensorRT模型优化部署 (八)--模型剪枝Pruning

系列文章目录 第一章 TensorRT优化部署&#xff08;一&#xff09;–TensorRT和ONNX基础 第二章 TensorRT优化部署&#xff08;二&#xff09;–剖析ONNX架构 第三章 TensorRT优化部署&#xff08;三&#xff09;–ONNX注册算子 第四章 TensorRT模型优化部署&#xff08;四&am…

AxiosError: Request failed with status code 503

spring.application.name属性指定了应用程序的名称为ssm_serviceA。这个属性用于标识应用程序&#xff0c;可以在日志、监控和其他相关功能中使用。通常情况下&#xff0c;应用程序的名称是用来区分不同的应用程序或服务的。 通过配置spring.application.name&#xff0c;你可以…

LSTM学习笔记

上一篇文章中我们提到&#xff0c;CRNN模型中用于预测特征序列上下文的模块为双向LSTM模块&#xff0c;本篇中就来针对该模块的结构和实现做一些理解。 Bidirectional LSTM模块结构如下图所示&#xff1a; 在Pytorch中&#xff0c;已经集成了LSTM模块&#xff0c;定义如下&…

Sqoop故障排除指南:处理错误和问题

故障排除是每位数据工程师和分析师在使用Sqoop进行数据传输时都可能遇到的关键任务。Sqoop是一个功能强大的工具&#xff0c;但在实际使用中可能会出现各种错误和问题。本文将提供一个详尽的Sqoop故障排除指南&#xff0c;涵盖常见错误、问题和解决方法&#xff0c;并提供丰富的…

认识并使用Shiro技术

认识并使用Shiro 一、对Shiro的基本认知1、Shiro是什么&#xff1f;2、Shiro的核心组件是&#xff1f;2.1 Subject2.2 UsernamePasswordToken2.3 Realm&#xff08;重点是&#xff1a;AuthorizingRealm用于授权、AuthenticatingRealm用于认证&#xff09;2.4 SecurityManager2.…

NLP论文阅读记录 - 2021 | WOS 基于多头自注意力机制和指针网络的文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.问题定义和解决问题的假设问题定义解决问题的假设 三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4…

面试官:什么是泛型擦除、泛型上界、泛型下界、PECS原则?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 问题1&#xff1a;什么是PECS原则&#xff1f; 说说具体怎么…

回溯法:回溯法通用模版以及模版应用

从一个问题开始 给定两个整数 n 和 k&#xff0c;返回 1 ... n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4] ] 很容易想到 用两个for循环就可以解决。 如果n为100&#xff0c;k为50呢&#xff0c;那就50层for循…

文字的baseLine算法

使用canvas的drawText方法时候&#xff0c;除了要传入画笔和text还需要传入一个x坐标和y坐标。这边的x和y坐标是Baseline的坐标。 public void drawText(NonNull String text, float x, float y, NonNull Paint paint) {super.drawText(text, x, y, paint);} top:是 baseLine到…

微信小程序之WXML 模板语法之数据绑定、事件绑定、wx:if和列表渲染

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

消息中间件之Kafka(二)

1.Kafka线上常见问题 1.1 为什么要对topic下数据进行分区存储? 1.commit log文件会受到所在机器的文件系统大小的限制&#xff0c;分区之后可以将不同的分区放在不同的机器上&#xff0c; 相当于对数据做了分布式存储&#xff0c;理论上一个topic可以处理任意数量的数据2.提…

OpenHarmony 应用开发入门 (二、应用程序包结构理解及Ability的跳转,与Android的对比)

在进行应用开发前&#xff0c;对程序的目录及包结构的理解是有必要的。如果之前有过android开发经验的&#xff0c;会发现OpenHarmony的应用开发也很简单&#xff0c;有很多概念是相似的。下面对比android分析总结下鸿蒙的应用程序包结构&#xff0c;以及鸿蒙对比android的诸多…

【报错】Arco新建工程时 Error: spawnSync pnpm.cmd ENOENT

文章目录 安装环境开始安装选择技术栈选择pro项目遇到的问题 安装步骤&#xff1a;https://arco.design/vue/docs/pro/start 安装环境 npm i -g arco-cli开始安装 arco init hello-arco-pro选择技术栈 ? 请选择你希望使用的技术栈React❯ Vue选择pro项目 ? 请选择一个分类业…

智谱AI发布新一代国产文本生成模型:GLM-4,“宣称”性能逼近GPT-4 (怎么又是GPT )

希望别又是一个只顾着跑分数不注重性能的东西。。。 智谱AI GLM-4介绍体验网址链接&#xff1a;智谱AI开放平台 更多消息&#xff1a;AI人工智能行业动态&#xff0c;aigc应用领域资讯 智谱AI是一家专注于人工智能技术研发和应用的公司&#xff0c;致力于打造全球领先的大模型…

2024年美赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…