前沿重器[42] | self-RAG-大模型决策的典型案例探究

news2024/11/24 17:45:57

前沿重器

栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经是20年的事了!)

2023年文章合集发布了!在这里:又添十万字-CS的陋室2023年文章合集来袭

往期回顾

  • 前沿重器[37] | 大模型对任务型对话的作用研究

  • 前沿重器[38] | 微软新文query2doc:用大模型做query检索拓展

  • 前沿重器[39] | 对话式推荐系统——概念和技术点

  • 前沿重器[40] | 高级RAG技术——博客阅读

  • 前沿重器[41] | 综述-面向大模型的检索增强生成(RAG)

在上一期(前沿重器[41] | 综述-面向大模型的检索增强生成(RAG))提到的综述文章中,有提到一篇比较有意思的论文——self-RAG,个人感觉这篇论文除了RAG本身,还有就是在大模型做系统内部决策这块,都具有很大的参考意义,因此今天我打算重点讨论一下这篇论文。

材料列表:

  • 论文:https://arxiv.org/abs/2310.11511

  • 讲解:https://zhuanlan.zhihu.com/p/662654185

  • 翻译:https://zhuanlan.zhihu.com/p/663814320

文章中可能会涉及一些对RAG的基本概念,此处不再赘述,大家具体可以看我以前RAG的文章补充一下。

  • 前沿重器[40] | 高级RAG技术——博客阅读

  • 心法利器[104] | 基础RAG-向量检索模块(含代码)

  • 心法利器[105]  基础RAG-大模型和中控模块代码(含代码)

  • 心法利器[106]  基础RAG-调优方案

  • 前沿重器[41] | 综述-面向大模型的检索增强生成(RAG)

整体方案框架

0d577e71eacaf05361561c509a5a808d.png

如图所示,左边是普通RAG的操作方法,先对query进行检索,然后把检索结果TOP N和原始query一起放入大模型,让大模型输出结果,而右边,作者训练了模型,用于判断query和检索到的模型之间的关系,判断是都需要进一步检索以及本身回复的质量。

本文中,作者把这种分析文章质量与进一步检索称为RAG系统对自身的反思(critique,虽说直译是评论,但我自己感觉翻译为反思更合适)。

相比一般的RAG,这里本质上其实是多做了四个判断:

  • 此刻是否进行检索,输入为query或query以及回复y,输出为是、否以及继续。(Retrieve标签)

  • 文档是否和query有关,输入为query和文档d,输出为相关和不相关。(IsREL标签)

  • 文档是否足够支持回答query,输入为query、文档d和回复y,输出为完全支持、部分支持和不支持。(IsSUP标签)

  • 回复是否有效,输入为query以及回复y,输出为1-5共5个档位。(IsUSE标签)

流程上,是这样的:

4923830a056747d381aff491dbbcca57.png

这里,作者用Retrieve标签判断是否还需要进行检索,如果是不需要检索了则会输出最终的返回结果,其他三个标签,则用于doc以及最终可能的输出的的排序。

这里提一个小问题,在这里是什么含义,输入没提及,而且和M也不一样,这个在全文里我也没找到提示。

有了这个框架和流程,实际上我们关心的就是这几点:

  • 检索使用的是什么方法。

  • 这个生成模型M是如何构造和生成的。

  • 标签如何产生作用的,其中retrieve标签在上面的流程图里还挺明显的,但是另外3个怎么用还不明确)。

回答了这3个问题,这篇论文里的方法就算理解清楚了。

具体方案细节

检索方案

检索方案本身不是论文的主要创新点,因此找一个用作baseline即可,作者用的是Contriever-MS MARCO,没记错是21年的论文(https://arxiv.org/abs/2112.09118),后续22年是v4更新,其本质是一种基于对比学习的训练方法,和同期的simcse有些类似,此处不赘述。

个人感觉其实可以选更新的模型,亦或者是提供一下有关这块的准确率之类的数据,验证或者讨论检索这块本身占实际问题的占比,然后分析self-RAG这块对这方面的优化的情况,这样可以进一步明确self-RAG的收益,甚至是可以对比经过self-RAG筛选前后的结果对大模型输出的影响,毕竟我们根据经验其实会发现,即使检索模块结果是相关的,文档交给大模型了,大模型仍旧有不小的概率会出错,通过这个,可能可以探索出检索正确和大模型预测正确之间的这个gap的具象化表现。

模型训练

此处需要训练的模型有两个,一个是单独用于进行标签预测的评论模型C(直译是批评,但感觉更像是评论模型),另一个是生成模型M。

首先是评论模型模型C,它本身并不在推理流程里,他本身是用于进行离线的标签生成,最终要服务于生成模型M的训练。评论模型这块,我把全文里有关这方面的重点进行了梳理(主要是方法、实验、附录里都有):

  • 首先,大体思路上,使用用GPT4配合prompt生成数据,然后进行训练,标签预测模型的选择进行过少量实验,选的是Llama2-7B。

  • 标签分类本身就是分类任务,但是使用的生成模型的方式来处理的,而分类本身是有概率的,这个概率的计算就是用各个类的token对应的概率做归一化来作为分类的概率,这个分类概率无论是用作损失还是用作预测都是这么用的,此时训练使用中可以使用最简单的LM语言模型的损失函数——极大似然估计(说白了就是MLM任务),即判断对应token的概率即可,这个我在前面的文章里有提及这个的具体操作手法和代码(前沿重器[33] | 试了试简单的prompt)。

  • 有一个我挺好奇的点,我在文中没有找到,如果有小伙伴找到了欢迎补充——这4个标签具体用的4个模型还是1个(根据符号推测评论模型C没有角标,所以是1个模型,但不确定)。

我相信有挺多人关注这个标签预测的准确率的,我自己也觉得有一定的分析空间,在这里:

1e3fe0b8f6f5ea37d2d7e472ab7bac19.png

我自己的分析:

  • 首先,这里只是用了两个基座模型进行对比,结果发现Llama2-7b遥遥领先,但感觉对比有点少。

  • 对不同的标签,效果差异挺大的,前面2个还不错(虽然isSup标签在FLAN上效果很差),后面两个标签的准确率不算高。

  • 说白了这个标签预测的效果,我个人觉得只能算差强人意,但这种质量的中间变量结果就能让端到端带来提升,这个确实没想到。

  • 第一点好奇,用FLAN这个比较差的效果来做self-RAG的推理,效果会损失多少,换个说法,标签预测错误对整体结果的敏感性,不太了解。

  • 第二点好奇,因为本身是分类任务,虽然是相对复杂的句子对分类,但在数据默认比较充足的情况下为什么不考虑直接尝试用分类的方法来做,例如bert之类的,虽然直观感觉因为缺少世界知识,我对bert这个级别的模型效果不报很高期待,但还是挺想知道这类型问题在小模型上的效果和用7B模型的差异。

有了评论模型的预测结果,就可以训练生成器M了,这里的生成器M,本质上是有两个任务:

  • 预测评价标签,即Retrieve/IsREL/IsSUP/IsUSE。

  • 预测生成结果。

有关生成器M的训练,样本的生成如下(这里又莫名出现了)。

07c088963646d4177890d6861580ad14.png

可以看到,评价模型C的作用就是辅助生成样本,生成样本后,用于训练M。关键点梳理:

  • 相比评价模型C,M的训练用的是next token预测的损失函数。

  • 推理上M既要用于标签的预测,也要用于最终的回复生成的预测。

标签的作用和推理

有了标签,我们就可以开始推理了。

首先,此处作者提出的是一个自适应的方式,该自适应方式能提供更灵活的调节方案,以进行更高程度的可控性,技能应对知识检索类似比较严格的场景,也能应对一些类似个人经验文章的创新性场景。这个自适应性本质其实是阈值的控制,这点是论文有提及的比较重点的部分,融入在本方案里。

根据前文提及的标签预测,每个标签都会有对应概率,这个概率就能够用于进行阈值计算,如果retrieve标签超过阈值,则会进行进一步的检索,否则就不进行检索。

然后就是算分的过程,对检索出来的每个结果,都会进行算分,如下:

553409802e2c9235731d4ac2a4756bbf.png

这里的是指每个标签的概率了,而这里的权重则是超参可以进行灵活调整。

另外,对于这个的计算,即每个标签的得分计算,在附录里面也有更详细的解释:

61b5c601c2bc8710fb714890e81c49bf.png

一些补充讨论

这篇文章虽然方案本身具有比较强的参考价值,其内核以及一些细节还有很多值得探讨的地方,这里有比较有参考价值的发现,也有值得我们进一步思考和研究的点。叠甲,这里并非指出论文的错误,而是基于现有论文的一些思路延伸,也有可能作者讨论到了但是我并未找到,这个就是我的问题了。

评论者相比强化学习的关系。self-RAG一定程度的本质,是在整个RAG过程中,引入了一个“评论者”来帮忙决策答案内容的评价,这点和强化学习中的“奖励模型”有异曲同工之妙,只不过这个奖励模型仅在训练阶段使用,而并非推理阶段,这两者的差别在作者看来,“评论者”更倾向于下游的控制,灵活性会更高,但RLHF这种模式其实更能贴合人类的预期,这应该是功能上或者是主观上的对比。至于端到端的效果,亦或者两者结合的效果,作者倒是没有做直接对比,只是用了开源数据做了一个指令微调,这点应该还有进一步实验的空间。

评论模型的模型方案选择。最开始其实我并不能理解为什么作者会使用大模型作为标签预测的基础模型,但在对问题的逐步了解,也能够明白,有关“IsREL标签”之类的标签,背后很大程度依赖“世界知识”,例如问题和query的匹配,这个问题抽象出来其实就是一个不对称的句子对分类问题,这个任务固然小模型也能做,但小模型一般只能学习到训练数据相关的“知识”,而并非推理的相关本身,且对没学到的,依旧是不会,因此使用大模型作为基础模型是合理的。但话锋一转,尽管我们有预期,小模型效果可能一般,但从实验角度,小模型差多少,是否就不可用,这里是一个值得探索的问题,另一个角度,用更大的模型,是否还有收益,我们不得而知。

不同的评论模型对最终self-RAG效果的影响。有留意到评论模型在IsREL标签和IsUSE标签的效果都不是很好(80.2/73.5),但仍旧能在后面带来不小的收益,那么,这个步骤的效果好坏,对最终效果的影响大小,在进一步的优化中,我们是否有需要关注这块的效果,是否需要调优,这块的灵敏度分析应该是挺有必要的。注意这个问题和上面问题的差异,上面一段聊的是大小模型对评价模型本身任务的效果的影响,这一段是不同评价模型及其效果对最终端到端的self-RAG的影响,两者有较大差别

标签的设计问题。在这里,作者设计了4个标签,除了retrieve标签外,另外3个标签都具有一定的相似性,然而为什么要拆成3个,以及还是否需要拆,这个可能是有一定技巧的,灵敏度分析里只分析了IsUSE标签是否删除下的波动,结果是差异不大,但是其他3个倒是没有讨论,再扣得细小一些,这里用的self-RAG的数据似乎和上面大表的数据好像不太一致,不知道是不是我自己没看清,有一些奇怪。

小结

在RAG系统中,self-RAG在内部引入了决策模块(论文里是叫评价模型),用于对是否检索进行决策以及对检索结果进行评价,从而提升了RAG的整体效果。这个思想对我而言还是有很大启发的,而其中还有很多细节还有待进一步研究和尝试。

9180d10a66419327b603b4f547c0f20e.png

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

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

相关文章

Junit5基础教程

文章目录 一,导入依赖二,基本功能一、常用断言二、执行顺序和常用注解1、通过BeforeAll类的注解来保证顺序2、通过order注解来保证执行顺序 三、依赖测试四、参数化测试五、测试套件SelectPackages、IncludePackages、SelectClasses、IncludeTags等注解的…

javaweb物业管理系统jsp项目

文章目录 物业管理系统一、系统演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 物业管理系统 可用作javaweb项目、servlet项目、jsp项目的项目设计 一、系统演示 物业管理系统 二、项目介绍 语言&a…

春晚魔术和约瑟夫问题

春晚的魔术实际上是一个约瑟夫问题,最终的结果是魔术开始时确定的几个变量确定好的,扑克牌只是道具和障眼法。网上一查这个问题发现颇有历史渊源,17世纪的法国数学家加斯帕在《数目的游戏问题》中讲了这样一个故事:15个教徒和15 个…

酷开科技荣获“消费者服务之星”称号后的未来展望

恭喜酷开科技荣获2023年第四季度黑猫平台“消费者服务之星”称号!这是对酷开科技长期以来坚持用户至上、用心服务的肯定和认可。作为OTT行业的佼佼者,酷开科技一直秉承着“以用户为中心”的服务理念,不断追求卓越品质,为用户提供更…

《CSS 简易速速上手小册》第6章:高级 CSS 技巧(2024 最新版)

文章目录 6.1 使用 CSS 变量进行设计:魔法配方的调配6.1.1 基础知识6.1.2 重点案例:创建可定制的主题6.1.3 拓展案例 1:响应式字体大小6.1.4 拓展案例 2:使用 CSS 变量创建动态阴影效果 6.2 calc(), min(), max() 等函数的应用&am…

Java 基于微信小程序的电子商城购物系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

使用R语言fifer包进行分层采样

使用R语言fifer包中的stratified()函数用来进行分层采样非常方便,但fifer包已经从CRAN存储库中删除,需要从存档中下载可用的历史版本,下载链接:Index of /src/contrib/Archive/fifer (r-project.org)https://cran.r-project.org/s…

架构篇34:深入理解微服务架构 - 银弹 or 焦油坑?

文章目录 微服务与 SOA 的关系微服务的陷阱小结 微服务是近几年非常火热的架构设计理念,大部分人认为是 Martin Fowler 提出了微服务概念,但事实上微服务概念的历史要早得多,也不是 Martin Fowler 创造出来的,Martin 只是将微服务…

Github 2024-02-11 开源项目日报Top10

根据Github Trendings的统计,今日(2024-02-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4非开发语言项目2C项目1C项目1Solidity项目1JavaScript项目1Rust项目1HTML项目1 免费服务列表 | f…

KingSCADA实现按钮点击效果

哈喽,你好啊,我是雷工! 在做SCADA项目的时候,按钮是不可缺少的功能,但软件自带的按钮太丑,已经无法满足现如今客户对界面美观度的要求。 这时候就需要UI小姐姐设计美观大气的SCADA界面,但UI设计…

内网安全-内网穿透

目录 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 ssh代理内网穿透 ssh配置socket代理 MSF多级网络穿透 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 1、termite 之前叫ew (可以进行正向连接,可以…

[ai笔记3] ai春晚观后感-谈谈ai与艺术

欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第3篇分享! 今天我们不聊技术,只聊感受! 1 关于ai春晚 期待许久的ai春晚,但是等初一晚上观看的时候,或多或少还是有些失望。 首先是观看人数…

【java】笔记10:类与对象——本章练习

题目1: 代码如下: import java.util.Scanner; public class Input{public static void main(String[]args){Circle cnew Circle();PassObject yuannew PassObject();System.out.println("r""\t""times");yuan.printAreas…

Linux操作系统基础(九):Linux用户与权限

文章目录 Linux用户与权限 一、文件权限概述 二、终端命令:组管理 三、终端命令:用户管理 1、创建用户 、 设置密码 、删除用户 2、查看用户信息 3、su切换用户 4、sudo 4.1、给指定用户授予权限 4.2、使用 用户 zhangsan登录, 操作管理员命令…

HTTP网络通信协议基础

目录 前言: 1.HTTP协议理论 1.1协议概念 1.2工作原理 2.HTTP抓包工具 2.1Fiddler工具 2.2抓包原理 3.HTTP协议格式 3.1HTTP请求 3.2HTTP响应 3.3格式总结 前言: 在了解完网络编程的传输层UDP和TCP通信协议后,就需要开始对数据进行…

Netty应用(六) 之 异步 Channel

目录 12.Netty异步的相关概念 12.1 异步编程的概念 12.2 方式1:主线程阻塞,等待异步线程完成调用,然后主线程发起请求IO 12.3 方式2:主线程注册异步线程,异步线程去回调发起请求IO 12.4 细节注释 12.5 异步的好处…

【Android】使用Android Studio运行Hello World项目

文章目录 1. JDK的安装与配置2. Android Studio的安装3. 运行Hello World项目3.1 新建项目3.2 修改项目配置3.2.1 修改UI界面3.2.2 配置 Android SDK 3.3 添加并运行虚拟设备3.4 运行项目 1. JDK的安装与配置 想要使用Android Studio,必须先配置Java环境&#xff0…

机器学习之监督学习和非监督学习

监督学习(Supervised Learning)监督学习是一种学习方式,其中模型从标记的训练数据中学习。这意味着每个训练样本都是由输入向量和相应的目标输出(也称为标签)组成的。模型的任务是学习输入到输出的映射函数,以便当提供新的、未见过的数据时,模…

MyBatis中#和$符的区别,sql注入问题,动态sql语句

MyBatis中#{}和${}的区别 #{}和${}都是MyBatis提供的sql参数替换。区别是:#{}是预编译处理,${}是字符串直接替换。#{}可以防止SQL注入,${}存在SQL注入的风险,例如 “ or 11”虽然存在SQL注入风险,但也有自己的适用场…

CSS Selector—选择方法,和html自动——异步社区的爬取(动态网页)——爬虫(get和post的区别)

这里先说一下GET请求和POST请求: post我们平时是要加data的也就是信息,你会发现我们平时百度之类的 搜索都是post请求 get我们带的是params,是发送我们指定的内容。 要注意是get和post请求!!! 先说一下异…