SELF-RAG 论文详解

论文:
https://arxiv.org/pdf/2310.11511.pdf
code:
https://github.com/langchain-ai/langgraph/blob/main/examples/rag/langgraph_self_rag.ipynb?ref=blog.langchain.dev

在这里插入图片描述

相关工作

RAG

尽管 RAG 方法可以通过检索生成得到更为准确的结果,但是不可避免的是会引入以下几个问题:

  • 降低运行效率
  • 对于不相关上下文的鲁棒性,即如果上下文无关,则容易检索出不相关信息
  • 缺乏归因,个人理解为无法找到很好的支撑点,即无法确认产生的结果是否是因为检索回来的内容导致的

为解决上述问题,作者提出了一种方法,训练任意的 LM 模型,使其可以可以根据不同指令的需求查询检索相关文献。并且通过 reflections token 引导生成受控的内容,以进一步提高生成的质量。

Concurrent RAG work/并行 RAG 工作

已有的一些工作会提出一些新的训练方法或者 prompt 策略来提高 RAG 的效果。例如,分两步在instruction-tuning 数据集上对 retriever 和 LM 进行微调;利用摘要模型过滤或者压缩检索段落等。

在训练和生成阶段引入 critics

训练 LLM 的时候引入 RLHF(Reinforcement Learning from Human Feedback)已经被证明是一个非常有效的方法。与已有方法不同的是,Self-RAG 在包含 reflection tokens 的离线任务示例上训练 LM,相较于 RLHF 训练成本低了很多。

Reflection token 定义

作者定义了如下的几个 token 来辅助生成,在文中统一称为 reflection token,如下图所示:
在这里插入图片描述

  • Retrieve token:决定是否需要调用 retriever 来检索相关信息
  • IsRel token:决定检索回来的信息是否和 input prompt 相关
  • IsSup token:决定检索回来的信息是否可以支撑生成结果
  • IsUse token:判断生成结果是否是对input prompt 有用和有信息的回答,与它是否事实无关

训练流程

在这里插入图片描述

Training critic 模型

创建数据集

作者通过 GPT-4 生成 reflection token 来创建监督数据并将这部分知识加入到 in-house 的 critical model 中。

以 Retrieve token 为例,作者用特定的指令集(Given an instruction, make a judgment on whether finding some external documents from the web helps to generate a better response.) 提示 GPT-4 ,随后加入 few-shot 演示结果,包括原始的输入,输出以及正确的 reflection token。 手动评估显示,GPT-4 reflection 预测与人类评估高度一致。

Critic 模型学习

在收集训练数据后,作者用预先训练的 LM 作为初始化的 Critic model,之后用标准 LM 目标在训练数据集上训练它,最大化可能性,如下图所示:
在这里插入图片描述

训练生成模型

创建数据集

给定输入输出对(x,y),作者使用检索到的信息和 critic 模型来增强原始输出,以创建精确模拟Self-RAG 推理时间过程的监督数据。

  • 对于每一个 segment,作者调用 critic model 来评估是否需要额外的信息来增强生成。
  • 如果判断是需要检索,则会将 Retrieve token 设置为 True 并且检索 top-K 的段落。
  • 对于每一个检索返回的段落,Critic 模型会进一步用 IsRel token 来评估该段落是否和预测相关。
  • 如果段落是相关的,Critic 模型会进一步用 IsSup token 来评估该段落是否支持模型的生成结果。
  • (论文中写道 IsRel token 和 IsSup token 会被追加到检索段落或者生成段落之后,这个地方和用 LangGraph 实现的 code 有一些不一致,code 中直接将其作为判断节点,进行后续操作)
  • 最后 Critic 模型会用 IsUse token 评估是否需要被使用,最终将经过增强的输出和 reflection token 以及原始的输入作为 pair 对加入到数据集中。

生成器训练

作者用标准的下一个令牌目标在上述生成的具有 reflection token 的语料库上训练生成器模型,具体目标函数如下:
在这里插入图片描述
与 Critic 训练不同,生成器训练用于预测目标输出以及 reflection token。在训练过程中,作者屏蔽了检索到的文本块以进行损失计算,并新增了一组 reflection token{Critique,Retrieve}。

推理流程

  • 对于每个输入和上次生成的结果,模型(Self-RAG)会对 retrieval token 进行解码,评估是否需要进行 retrieval
  • 如果不需要检索,则模型会和正常 LM 一样预测下一个输出段落
  • 如果需要检索,模型会生成一个 critique token 评估检索回来段落的相关性、下一段落的输出和一个 critique token 评估生成的下一段落输出是否得到了检索回来段落的支撑
  • 最终一个新的 critique token 会用来评估整体输出的质量
    在生成每个段落的时候,Self-RAG 并行处理多个段落(Tree-decoding),并用自己生成的 reflection token 对生成的结果进行软约束或者硬约束。如图所示。
    在这里插入图片描述

Tree-decoding with critique tokens

在每个 segment ,当需要检索时,会检索 K 个段落,生成器M并行处理每个段落并输出K个不同的连续候选。每个 segment 和检索段落都会有一个 critic 分数,该分数是每个 critique token 类型的归一化概率的线性加权和。每个 segment 的分数计算公式如下:
在这里插入图片描述

实验结果

对比实验

在这里插入图片描述

消融实验,参数敏感性实验

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Codeforce Monsters Attack!(B题 前缀和)

题目描述: 思路: 本人第一次的想法是先杀血量低的第二次想法是先搞坐标近的第三次想法看到数据量这么大, 我先加个和看看貌似我先打谁都行,由此综合一下, 我们可以把每一个不同的坐标当作一轮从最小的坐标开始&#x…

老子云2024全站焕新,重塑3D轻量体验

3D模型当前应用广泛,正以惊人的速度实现数据增长,轻量化需求随之增多。老子云团队一直在探索如何借助自研轻量化技术的能力,打破用户模型处理思维惯性,构建更高效、实用、简单的体验范式,来帮助用户解决3D素材数据处理…

开源工具和框架

目录 开源工具和框架 一、 开源工具和框架 二、开源工具和框架在现代软件开发中的角色 1、基础设施建设: 2、开发效率提升: 3、代码质量保障: 4、技术创新: 三、广泛使用的开源项目分析 3.1、Linux 3.2、Git 3.3、Docke…

js设计模式:状态模式

作用: 将对象的行为和状态进行分离,状态是由行为操作决定的,而不是直接控制。 同时,行为也是由状态决定的,每个状态都有自己的行为和相应的方法 行为与状态分离,可以使代码方便维护 示例: <!DOCTYPE html> <html lang"en"><head><meta cha…

THE TRAVELING OBSERVER MODEL

FiLM (Perez et al., 2018) 作者未提供代码 参考文献 [1] E. Perez, F. Strub, H. de Vries, Vincent Dumoulin, and Aaron C. Courville. Film: Visual reasoning with a general conditioning layer. In Proc. of AAAI, 2018.

华为OD机试真题-万能字符单词拼写-2023年OD统一考试(C卷)---Python3--开源

题目&#xff1a; 考察内容&#xff1a; str.repalce(old, new, 1); flag 代码&#xff1a; """ 题目分析&#xff1a; 没有掌握&#xff0c;输出为0 输入&#xff1a; words的个数&#xff0c; N int 每个字符串元素输出&#xff1a; 词汇表words中掌握的单…

软件实际应用实例,茶楼收银软件管理系统操作流程,茶室计时计费会员管理系统软件试用版教程

软件实际应用实例&#xff0c;茶楼收银软件管理系统操作流程&#xff0c;茶室计时计费会员管理系统软件试用版教程 一、前言 以下软件以 佳易王茶社计时计费管理系统软件V17.9为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、计时计费&…

SpringBoot:数据访问-整合 Druid 配置数据源监控

点击查看数据访问demo&#xff1a;LearnSpringBoot06DataJdbc 点击查看更多的SpringBoot教程 简介 Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池和监控。 一、添加druid-spring-boot-starter依赖 点击查询最新版 <dependency&g…

正版IDM多少钱?如何便宜购买序列号

IDM是一款互联网下载神器&#xff0c;它的全称是Internet Download Manager&#xff0c;可以将下载速度提升至5倍以上。那么IDM正版多少钱&#xff1f;如何才能买到正版IDM序列号呢&#xff1f; 正版IDM的价格根据付费模式和购买渠道不同&#xff0c;所需要的价格也是不同的。…

Vulnhub靶机:Hacker_Kid

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;Hacker_Kid&#xff08;10.0.2.42&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhub.com/hac…

zkLogin如何使加密学变得更快更安全

*本篇来自Mysten Labs官方blog&#xff0c;文中“我们”指代该组织。 zkLogin不仅是将更多用户引入Web3应用的一次革命性飞跃&#xff0c;其开发还使零知识&#xff08;ZK&#xff09;API变得更安全更快速。然而&#xff0c;开发zkLogin&#xff0c;Sui的OAuth认证原语&#x…

全网唯一基于共享内存的C++ RPC框架

首先声明&#xff1a;我不是标题党&#xff0c;我是在找遍全网&#xff0c;没有找到一个基于共享内存实现、开源且跨平台的C RPC框架之后&#xff0c;才着手开发的这个框架。 项目地址&#xff1a;https://github.com/winsoft666/veigar 1. Veigar Veigar一词来源于英雄联盟里…

彩虹全新 SUP 模板,卡卡云模板修复版

彩虹全新 SUP 模板&#xff0c;卡卡云模板&#xff0c;首页美化&#xff0c;登陆页美化&#xff0c;修复了 PC 端购物车页面显示不正常的问题。下载地址&#xff1a;彩虹全新 SUP 模板.zip 模板截图

vscode 设置打开中断的默认工作目录/路径

vscode 设置打开终端的默认工作目录/路径** 文章目录 vscode 设置打开终端的默认工作目录/路径**打开vscode&#xff0c;打开设置UI 或是设置JSON文件&#xff0c;找到相关设置项方式1&#xff1a;通过打开settings.json的UI界面 设置:方式2&#xff1a;通过打开设置settings.j…

音视频开发之旅(69)-SD图生图

目录 1. 效果展示 2. ControlNet介绍 3. 图生图流程浅析 4. SDWebui图生图代码流程 5. 参考资料 一、效果展示 图生图的应用场景非常多&#xff0c;比较典型的应用场景有风格转化&#xff08;真人与二次元&#xff09;、线稿上色、换装和对图片进行扩图等&#xff0c;下面…

【前沿热点视觉算法】-RGB-D显著目标检测的边缘感知多模态变压器

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。 1 论文题目 RGB-D显著目标检测的边缘感知多模态变压器 2 论文摘要 RGB-D显著目标检测&#xff08;SOD&#xff09;近年来引起了广泛的关注。特别是&#xff0c;变压器已被使用&#xff0c;并…

vmware安装centos 7.9 操作系统

vmware安装centos 7.6 操作系统 1、下载centos 7.9 操作系统镜像文件2、安装centos 7.9 操作系统3、配置centos 7.6 操作系统3.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载centos 7.9 操作系统镜像文件 本文选择centos 7.9 最小化安装镜像包 这里选…

C++ //练习 8.7 修改上一节的书店程序,将结果保存到一个文件中。将输出文件名作为第二个参数传递给main函数。

C Primer&#xff08;第5版&#xff09; 练习 8.7 练习 8.7 修改上一节的书店程序&#xff0c;将结果保存到一个文件中。将输出文件名作为第二个参数传递给main函数。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********…

pthread_cond_timedwait()函数

绝对时间&#xff1a;相对于1970年1月1日0时0分0秒 相对时间&#xff1a;相对于当前时间&#xff0c;如sleep(3);相对于当前&#xff0c;过3s.

RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:主设备和次设备

🚀返回专栏总目录 文章目录 一、主设备和次设备的概念二、设备号的分配和释放沉淀、分享、成长,让自己和他人都能有所收获!😄 字符设备通过字符(一个接一个的字符)以流方式向用户程序传递数据,就像串行端口那样。字符设备驱动通过/dev目录下的特殊文件公开设备的属性和…