SELF-RAG: Learning to Retrieve, Generate, and Critique Through Self-reflection

更多文章,请关注微信公众号:NLP分享汇

原文链接:ICLR2024:能够自我反思的SELF-RAG


下面介绍的这篇论文是最近被ICLR 2024 accepted oral,作者来自University of Washington & Allen Institute for AI & IBM Research AI。

论文标题:SELF-RAG: Learning to Retrieve, Generate, and Critique Through Self-reflection

论文链接:https://arxiv.org/pdf/2310.11511

代码和模型:https://selfrag.github.io/

背景

大语言模型(LLMs)尽管功能强大,但它们生成的响应常常包含事实性错误,这是因为它们只依赖于模型内部的参数知识。

现有方法的局限性:检索增强生成(RAG)是一种通过检索相关知识来增强语言模型输入的方法,它减少了知识密集型任务中的事实错误。然而,RAG方法在检索和整合检索到的文档时存在不区分情况的问题,可能会导致生成的回答质量下降,或者引入不相关或偏题的文档。

论文介绍了一种新的框架,自反思检索增强生成(SELF-RAG),旨在通过检索和自我反思提高LLMs生成文本的质量和事实准确性。SELF-RAG训练一个任意的语言模型,使其能够根据需求适应性地检索文档,并生成和反思检索到的文档以及自身的生成内容,这是通过特殊的token—reflection tokens来实现的。

SELF-RAG的关键特点:

  • 按需检索:SELF-RAG只在必要时检索文档,提高了模型的多功能性。

  • 自我反思:通过生成reflection tokens,模型能够在推理阶段控制自己的行为,以适应不同的任务需求。

  • 可控性:在推理阶段,SELF-RAG能够根据reflection tokens来定制其行为,使其能够满足多样化的任务要求。

SELF-RAG概览

图片

图1 Overview of SELF-RAG

SELF-RAG如何通过检索、批评和生成文本来增强整体生成质量、事实性和可验证性。图1左侧部分展示了检索增强生成(RAG)的传统方法,它不区分检索的必要性,统一检索固定数量的文档,并且不会重新审视生成质量。右侧部分展示了SELF-RAG的工作流程:

Step1:检索(Retrieve on demand)

在第一步中,SELF-RAG根据输入提示(prompt)和前面的生成内容,决定是否需要通过检索来增强持续生成的内容。如果模型确定检索将会有帮助,它会输出一个检索标记(retrieval token),以按需调用检索模型(Retriever Model)。

Step2:生成(Generate segment in parallel)

在第二步中,SELF-RAG会并行处理多个检索到的文档,评估它们的相关性,并生成相应的任务输出。这一步骤可能涉及生成多个候选的输出片段。

Step3:批评(Critique outputs and select best segment)

在第三步中,SELF-RAG生成批评标记(critique tokens),以批评自身的输出,并在事实性和整体质量方面选择最佳片段。批评过程涉及评估检索到的文档的相关性(ISREL),输出片段的支持度(ISSUP),以及整体的实用性(ISUSE)。

举例说明:
  • 以“美国各州名称的由来”为例,SELF-RAG首先确定是否需要检索信息。

  • 确定需要检索后,模型检索并评估检索到的文档的相关性,并生成关于州名来源的输出。

  • 然后,模型生成critique tokens,以自我评估生成的输出在事实性和质量方面的表现。

四种reflection tokens

图片

表1 Four types of reflection tokens used in SELF-RAG

Retrieve(检索)
输入:输入 x 和前一步的输出 y

输出:是一个决策标记,决定何时需要进行检索。

  • yes:表示继续生成需要事实基础,需要检索相关文档。

  • no:表示当前生成不需要检索文档,可能是因为序列不需要事实基础或可能不会通过知识检索得到增强。

  • continue:表示模型可以继续使用之前检索到的证据。

ISREL(相关性)

输入:输入 x,检索到的文档 d

输出:评估检索到的文档 d 对于解决输入 x 是否提供了有用的信息。

  • relevant:表示文档 d 对于回答输入 x 是相关的。

  • irrelevant:表示文档 d 对于回答输入 x 是不相关的。

ISSUP(支持度)
输入:输入 x,当前的输出 y,以及检索到的文档 d
输出:评估输出 y 中的信息是否得到了文档 d 的支持。
  • fully supported: 输出 y 中的所有可验证陈述都得到了文档 d 的支持。
  • partially supported: 输出 y 中的部分信息得到了文档 d 的支持,但不是全部。
  • no support: 输出 y 中的信息没有得到文档 d 的支持,或者与文档相矛盾。
ISUSE(实用性)
输入:输入 x 和当前的输出 y
输出:评估输出 y 对于输入 x 的整体实用性和信息价值。5个等级。

算法实现

图片

图2 SELF-RAG算法伪代码

输入:输入提示 x 和前一步的生成 y<t(如果有的话)。

输出:下一个输出片段 yt

步骤:

if 检索决策:模型M预测是否需要检索(Retrieve)。这是通过模型根据当前的输入和前一步的生成来决定的。

  • 执行检索 (如果Retrieve == "Yes"):使用检索器 R 根据当前的输入 x 和前一步的生成 yt-1 来检索相关的文本段落 D

  • 生成和评估

    • 对于每个检索到的文档 d ∈ D,模型预测其与输入 x 的相关性 ISREL

    • 同时,模型生成下一个响应片段 yt 并预测该片段是否得到文档 d 的支持 ISSUP

  • 批评和选择最佳片段

    • 模型生成批评标记 ISUSE 来评估整体的响应片段的实用性。

    • 根据 ISRELISSUP 和 ISUSE 的预测,模型对每个片段进行评分并选择最佳片段。

else 不执行检索:(如果Retrieve == "No"):

  • 模型直接预测下一个输出片段 yt 给定输入 x

  • 模型预测该片段的实用性 ISUSE

输出选择

  • 根据上述步骤中的评分和批评,选择最终的输出片段 yt

RetrieveISRELISSUPISUSE 是反思标记(reflection tokens),它们帮助模型在生成文本时进行自我评估和自我调整。推理过程中,模型会动态决定是否需要检索信息,并基于检索到的信息和自我反思的结果生成文本。该算法允许模型灵活地调整检索频率和生成文本的行为,以适应不同的下游应用和用户偏好。

SELF-RAG训练

训练批评模型(Critic Model)
数据收集:为了训练批评模型,研究者们需要收集关于反思标记的数据。手动标注这些数据成本较高,因此他们使用高级的LLM(如GPT-4)生成这些反馈,然后将其知识蒸馏到内部批评模型C中。
Critic学习:收集到训练数据后,批评模型C使用标准的有条件的语言模型目标进行训练,即最大化似然函数来预测反思标记。
训练生成模型(Generator Model)
数据收集:生成模型M的训练数据是通过增强原始输出y,使用检索和批评模型来创建的。对于每个输出片段yt,运行批评模型C来评估是否需要额外的段落来增强生成。
生成学习:使用标准的语言模型目标训练生成模型M,学习预测目标输出以及反思标记。在训练期间,检索到的文本块会被遮蔽(mask out),并且原始词汇表V会扩展以包含一组反思标记。

图片

图3 SELF-RAG training examples

图3在论文中提供了SELF-RAG训练的示例,展示了该框架如何在实际场景中工作。该图通过两个不同的示例来阐释SELF-RAG的训练过程,一个不需要检索,另一个需要检索。

实验结果

图片

表2 Overall experiment results on six tasks

表2展示了SELF-RAG在六个不同任务上的性能结果,并与一系列基线模型进行了比较。这些任务包括封闭集合任务(如PubHealth和ARC Challenge)、短形式生成任务(如PopQA和TriviaQA-unfiltered)、以及长形式生成任务(如传记生成和ALCE-ASQA)。表中列出了不同模型在各个任务上的表现,包括准确率(acc)、事实得分(FS)、情感得分(em)、流畅度(rg)、MAUVE、引用精确度(prec)和引用召回率(rec)等指标。

表中的结果表明,SELF-RAG在多个任务上显著优于基线模型,包括在开放域问答、推理和事实验证任务上的表现。特别是在ALCE-ASQA任务上,SELF-RAG在引用精确度和引用召回率方面取得了显著提升,显示出其在长形式生成任务中的优势。此外,表中还展示了SELF-RAG在不同训练数据规模下的性能,以及通过调整检索阈值来平衡检索频率和准确性的实验结果。这些分析有助于理解SELF-RAG模型的性能特点和潜在的应用场景。

图片

图4 Analysis on SELF-RAG

图4(a): SELF-RAG关键组件的消融研究 (Ablation Studies)

这部分展示了对SELF-RAG模型中关键组件进行消融研究的结果。消融研究是为了识别模型中哪些部分对于最终性能最为关键。

  • Training No Retriever R:没有检索组件的模型。

  • Training No Critic C:没有批评组件的模型。

  • Test No retrieval:在测试时不进行检索的模型。

  • Test Hard constraints:使用硬约束进行检索的模型。

  • Test Retrieve top1:只使用检索到的顶部一个文档的模型。

  • Test Remove ISSUP:在批评引导的束搜索中移除ISSUP分数的模型。

图4(b): 推理时自定义效果的影响 (Customization)

这部分探讨了在推理时调整不同批评类型(Critique token type)权重对模型性能的影响。

  • 权重对ISSUP的影响:ISSUP批评类型评估输出由文本段落支持的程度。通过改变ISSUP的权重,可以观察到模型在引用精确度(Citation Precision)和流畅度(Mauve)上的表现变化。

  • 引用精确度和流畅度:随着ISSUP权重的增加,模型更倾向于生成由证据支持的内容,可能会提高引用精确度但降低流畅度。

图4(c): 检索频率与模型性能之间的关系 (Retrieval)

这部分分析了检索频率如何影响模型在特定任务上的性能。

  • 检索阈值(Retrieval Threshold):改变检索触发的阈值,观察模型检索频率和准确率之间的关系。

  • 检索频率:检索频率的变化,可能通过不同的阈值δ来控制。

  • 准确率(Accuracy):随着检索频率的变化,模型在PubHealth和PopQA任务上的准确率表现。

图片

图5 Training scale and Human analysis

图5展示了SELF-RAG模型在不同规模的训练数据下的性能表现。包括使用不同数量的训练样本(例如5k、10k、20k、50k)来训练模型,并测量模型在特定任务上(如PopQA、PubHealth、ASQA)的性能(例如准确率、事实得分等)。包含了人类评估的结果,评估SELF-RAG生成的输出以及预测的反思标记的可靠性。这可能涉及到对模型输出的合理性(S&P)、相关性、支持度等指标的评估。

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

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

相关文章

Z字形变换 ---- 模拟

题目链接 题目: 分析: 题意如图所示:如果我们按照题意, 真的实现一个矩阵, 这样做的时间和空间复杂度很高, 所以我们可以试试看找规律, 优化一下我们观察他们的下标: 如果找到下标的规律, 那么我们就不用创建矩阵, 就能找到最终结果的下一个字符是什么特殊情况, 当numRows 1…

C++17之std::void_t

目录 1.std::void_t 的原理 2.std::void_t 的应用 2.1.判断成员存在性 2.1.1.判断嵌套类型定义 2.1.2 判断成员是否存在 2.2 判断表达式是否合法 2.2.1 判断是否支持前置运算符 2.2.3 判断两个类型是否可做加法运算 3.std::void_t 与 std::enable_if 1.std::void_t 的…

算法-堆结构和堆排序

文章目录 本节大纲1. 堆结构2. 堆排序本节的代码实现合集 本节大纲 1. 堆结构 堆结构是为集合类里面的优先级队列来服务的 优先级队列其实就是顺序存储的二叉树结构, 我们的底层的源码里面是没有链式存储的二叉树的,二叉树的实现的细节是通过我们的数组来模拟实现的 底层的实现…

【计算机毕设】基于SpringBoot的教学资源库设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的教学资源库系统&#xff0c;以便教师和学生能够方便地存储、分享和查找各种教学资源。具体目标包括&…

分治策略的实现

目录 前言 分治策略的应用 最大子数组问题 矩阵乘法问题 求解递归式的三种方法 代入法求递归式 用递归树求递归式 主方法求递归式 前言 分治三个步骤&#xff1a; 分解&#xff1a;分解原问题为子问题&#xff0c;这些子问题为原问题的较小规模的问题。 解决&#xf…

Redis——基本命令

概念&#xff1a; Redis(REmote Dlctionary Server) 是用 C语言开发的一个开源的高性能键值对(key-value) 数据库 特征&#xff1a; 1. 数据间没有必然的关联关系 2. 内部采用单线程机制进行工作 3. 高性能 4. 多数据类型支持 字符串类型 string 列表类型 …

新 Google 邮箱注册的美区Appleid 账户被停用如何解冻?

什么条件触发美区账号被停用&#xff1f; 如何触发的被停用&#xff0c;我猜是因为新账户没有进行安全认证&#xff0c;在新机器手机上登陆&#xff0c;下载app导致的。 如何解冻美区 Appleid 账户&#xff1f; 打苹果服务支持电话&#xff1a;4006668800 苹果员工会非常耐心…

ios 新安装app收不到fcm推送

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Charles的安装和web端抓包配置

1.Charles的安装 通过官网下载&#xff1a;https://www.charlesproxy.com/download/&#xff0c;我之前下载的是4.6.2版本&#xff0c;下载成功后点击安装包&#xff0c;点击下一步下一步即可安装成功。 ​​ ​ 安装成功后打开charles页面如下所示。 ​ 2.乱码问题解决 打开…

【Docker学习】docker pull详细说明

docker pull是我们经常用到的一个命令。我们使用一些官方镜像&#xff0c;如MySql、Nginx等都需要用docker pull下载。不过不用的话&#xff0c;也可以。比如使用docker run&#xff0c;要是找不到镜像&#xff0c;会自动下载。 命令&#xff1a; docker image pull 描述&am…

插入排序以及希尔排序; 先学会插入,希尔会更简单喔

1.前言 首先肯定是要学会插入排序再学习希尔排序会更简单&#xff0c;因为代码部分有很多相似之处&#xff1b;如果你觉得你很强&#xff0c;可以直接看希尔排序的讲解。哈哈哈&#xff01;&#xff0c;每天进步一点点&#xff0c;和昨天的自己比 2.插入排序 让我们先来看看…

【Hive SQL 每日一题】统计每月用户购买商品的种类分布

文章目录 测试数据需求说明需求实现 测试数据 -- 创建 orders 表 DROP TABLE IF EXISTS orders; CREATE TABLE orders (order_id INT,user_id INT,product_id INT,order_date STRING );-- 插入 orders 数据 INSERT INTO orders VALUES (101, 1, 1001, 2023-01-01), (102, 1, 1…

pycharm简易使用码云gitee

文章目录 参考文献官网地址安装插件第一个选项报错了不可&#xff0c;第二个选项&#xff0c;可以了新库上传到主分支&#xff0c;push改进实验新建分支&#xff0c;上传为新分支&#xff1a;做另一种改进&#xff0c;选择回退主分支&#xff0c;另建一个分支 使用对于一个新项…

SQL158 每类视频近一个月的转发量/率

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-10-01 10:00:002021-10-01 10:00:20011NULL210220012021-10-01 10:00:002021-10-01 10:00:15001NULL310320012021-10-01 11:00:502021-10-01 11:01…

Python 基于机器学习模型的车牌检测和识别系统 有GUI界面 【含Python源码 MX_004期】

一、系统介绍 车牌的检测和识别技术在现代社会中的应用场景可谓十分广泛&#xff0c;不仅涉及交通管理领域&#xff0c;还延伸至社区安保等多个方面。例如&#xff0c;在交通违章管理中&#xff0c;通过车牌追踪可以有效追踪违章车辆&#xff0c;维护交通秩序&#xff1b;在小区…

【UML用户指南】-05-对基本结构建模-类

在UML中&#xff0c;所有的事物都被建模为类。类是对词汇表中一些事物的抽象。类不是个体对象&#xff0c;而是描述一些对象的一个完整集合。 强调抽象的最重要的部分&#xff1a;名称、属性和操作 类 &#xff08;class&#xff09;是对一组具有相同属性、操作、关系和语义的对…

JVM垃圾收集器和内存分配策略

概述 Java内存运行时数据区的程序计数器、虚拟机栈、本地方法栈3个区域会随着线程而产生&#xff0c;随线程而消失。这几个区域分配多少内存时在类结构确定下来即已知的&#xff0c;在这几个区域内就不需要过多考虑如何回收内存的问题&#xff0c;当方法结束或者线程结束时&am…

第三届大湾区算力大会丨暴雨开启数字未来新篇

5月30-31日&#xff0c;韶关市迎来主题为“算启新篇智创未来”的第三届粤港澳大湾区(广东)算力产业大会暨第二届中国算力网大会&#xff0c;活动由广东省人民政府主办&#xff0c;广东省政数局、韶关市人民政府共同承办。暴雨信息作为算力产业发展的重要构建者受邀赴会&#xf…

【C++进阶】深入STL之string:模拟实现走进C++字符串的世界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C模板入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之string &#x1f4d2;1. string…

力扣575. 分糖果

题目&#xff1a; Alice 有 n 枚糖&#xff0c;其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长&#xff0c;所以前去拜访了一位医生。 医生建议 Alice 要少摄入糖分&#xff0c;只吃掉她所有糖的 n / 2 即可&#xff08;n 是一个偶数&#xff09;。Alic…