【RAG 论文】Chain-of-Note:为 RAG 引入 CoT 让模型生成阅读笔记来提高面对噪音文档和未知场景的鲁棒性

论文:Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models
⭐⭐⭐
Tencent AI Lab, arXiv:2311.09210

文章目录

    • 一、论文速读
    • 二、实现的细节
      • 2.1 Note Design
      • 2.2 Data Collection
      • 2.3 Model Training
    • 三、实验结果
      • 3.1 QA Performance
      • 3.2 对 Noise Robustness 的实验
      • 3.3 对 Unknown Robustness 的实验
    • 四、总结

一、论文速读

这篇文章的主要关注于 RAG LLM 模型的以下两个方面:

  1. Noise Robustness:即能够自动忽视掉检索到的不相关的文档,不要让无关知识误导
  2. Unknown Robustness:当无法回答用户的提问时,应当承认自己的局限性并回答 “unknown”

本工作提出了 Chain-of-Noting,思路如下:

CoN 示例

  1. 用户提出问题 user query q q q 和检索到的 k 个文档 [ d 1 , … , d k ] [d_1, \dots, d_k] [d1,,dk]
  2. LLM 针对每一个检索到的文档,生成一段阅读笔记,即针对 passage d 1 d_1 d1,就生成一段阅读笔记 y d 1 y_{d_1} yd1,比如上图中的 The first passage suggests ...
  3. 基于阅读笔记 [ y d 1 , … , y d k ] [y_{d_1}, \dots, y_{d_k}] [yd1,,ydk],LLM 综合这些信息来生成 final response y y y,也就是上图中回答部分的黑体字 Based on information ...

这样就能得到最终的答案。

这里 LLM 是使用了训练的 LLaMa-2 7B 模型,为了能够实现 Noise Robustness 和 Unknown Robustness,关键的工作在于 prompt 的设计、训练数据的收集和对模型的训练

二、实现的细节

这里关键的工作就是三个:

  1. Note Design:即设计出模型如何生成 reading notes
  2. Data Collection:收集用于训练 LLaMa 模型的数据
  3. Model Training:使用训练数据来训练 LLaMa

2.1 Note Design

阅读笔记(note)的主要目的是为了使模型能够系统地评估每个检索到的文档对输入问题的相关性。这些笔记帮助模型识别文档中的最关键和可靠的信息,同时过滤掉不相关或不可信的内容。

论文定义了三种类型的 note:

  1. 直接答案型:当检索到的文档直接回答了问题,模型会生成阅读笔记,并基于这些信息形成最终答案。
  2. 上下文推断型:如果文档没有直接回答问题,但提供了有用的上下文信息,模型会利用这些信息和自身的知识库来推断答案,并生成相应的阅读笔记。
  3. 无关答案型:当检索到的文档与问题不相关,且模型缺乏足够的知识来回答时,模型会生成表示“未知”的阅读笔记。

这些 note 都是文本形式的摘要,突出显示文档中与问题最相关的部分。

2.2 Data Collection

为了训练 LLaMa-2 7B 以整合 CoN 框架,作者需要收集包含 notes 和 answer 的训练数据。

数据收集过程如下:从 Natural Questions(NQ)数据集中随机抽取了 10,000 个 question,根据这些 question 和相应检索到的 passages,通过 prompt 让 ChatGPT 生成这个 question 的 notes 和 answer,CoN 的 prompt 如下:

prompt 模板

该 prompt 可以在 LangSmith 中体验到:https://smith.langchain.com/hub/bagatur/chain-of-note-wiki/playground?commit=6533425b

通过上面的 prompt,就可以让 ChatGPT 生成训练数据了。之后,ChatGPT 生成的训练数据需要进一步的人工校验。

2.3 Model Training

本工作基于 LLaMa-2 7B 训练,训练时,将 instruction、user question 和 retrieved passages 结合 prompt 作为 input,教 model 生成 notes 和 answer。

损失函数的设计:在 model 的生成中,包含 notes 和 answer,一个很明显的现象是 notes 比 answer 长很多,这样两者对 loss 的 contribute 就不太协调,为了克服这个问题,整个训练过程中 loss 的计算会有变化:

  • 50% 的训练时间中,next token prediction 的 loss 是整个 notes 和 answer 的 token 序列的损失
  • 50% 的训练时间中,next token prediction 的 loss 是只有 answer 的损失,这样能让 model 也更加专注于最终 answer 的准确度和可靠性

三、实验结果

3.1 QA Performance

如下数据体现了 CoN 的提升效果:

Table2

  • 第一行是纯 LLaMa 的输出,即 answer = LLM( q q q )
  • 第二行是使用 DPR 作为检索器,搭配 LLaMa 做 standard RAG 的效果
  • 第三行则是在 standard RAG 上额外附加了 CoN 的效果

3.2 对 Noise Robustness 的实验

噪声数据指的是与查询不相关或误导性的信息,在该实验中,通过故意引入 noise data 来实验 CoN 模型的鲁棒性。

噪声比例(noise ratio)指的是不相关的文档在所有检索到的文档中的比例,通过调整噪声比例,作者们模拟了不同程度的噪声数据对模型性能的影响。

如果需要检索 k 个文档,当噪声比例为 20% 时,那么检索到的 k 个文档中有 1 个是噪声文档,其余 k-1 个是相关文档。

具体的分析可以参考原论文。

3.3 对 Unknown Robustness 的实验

这里使用了 RealTimeQA 数据集,这个数据集的测试内容(因为很新)完全不在训练模型的知识范围内。

在这个实验中,评估模型的拒绝率(RR),拒绝问题的数量/总问题。这突出了我们的模型在初始训练阶段识别和忽略不熟悉或未学习的信息的增强能力。

四、总结

我们都知道,RAG中的召回阶段并不能保证一直能检索出最相关或者最值得信赖的信息。不相关的信息可能会对模型带来错误的指导,即使模型内部已经包含了回答问题的信息,也可能会被忽视。因此,如何进行 RAG 上下文召回的自适应可控回复,如典型的拒答,显得十分重要

关于拒答逻辑,通过构造诚实样本,进行微调,也可以让模型具备拒答能力:

在这里插入图片描述
而本文提出了使用 CoT 类似的思路使用 Chain-of-Note 提示让 LLM 生成阅读笔记,并用于 RAG 上下文的自适应增强,是可以与其他的思路进行交融的。

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

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

相关文章

使用新版ESLint,搭配Prettier使用的配置方式

概述 ESLint重大更新(9.0.0版本)后,将不再支持非扁平化配置文件,并且移除了与Prettier冲突的规则,也就是说与Prettier搭配使用,不再需要使用插件“eslint-config-prettier”来处理冲突问题。 注:使用新版的前提条件是Node.js版本必须是18.18.0、20.9.0,或者是>=21.1…

014、Python+fastapi,第一个后台管理项目走向第14步:建立python+fastapi项目,创建common通用模块

一、说明 通用模块主要是完成文件的上传下载,抄吧,要不然怎么叫通用模块呢? 我把RuoYi-Vue3-FastAPI中的验证码模块放在这里了,我觉得验证也比较通用吧, 二、添加common通用模块 1、通用模块没有数据表&#xff0c…

涨跌失据了?现货白银市场的波动如何捕捉

现货白银市场近期出现了强劲的上涨,但近两个交易日,却出现了令人感觉诧异的大跌。很多刚入场打算买入做多的朋友,面对这两天这么强的跌势都感觉无所适从。到底现货白银市场的波动如何才能捕捉呢?下面我们就来讨论一下这个问题。 用…

阿里云物联网平台 | 透传与ICA标准数据格式(Alink JSON)| 定值SDK非动态注册与动态注册 | SOC+4G模组移植方案

文章目录 一、透传与ICA标准数据格式(Alink JSON)二、定值SDK选非动态注册还是动态注册三、SOC4G模组移植方案 一、透传与ICA标准数据格式(Alink JSON) 透传和ICA标准数据格式(Alink JSON)是物联网设备与阿…

DevOps(十二)Jenkins实战之Web发布到远程服务器

前面两篇博文介绍了怎么将django开发的web应用推送到gitlab源码仓库,然后jenkins服务器从gitlab仓库拉下来,布署到jenkins服务器上,并用supervisor进行进程管理,保证web应用一直能正常运行,今天我们继续优化&#xff0…

数据结构:初识集合框架

目录 1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法3.1 什么是数据结构3.2 容器背后对应的数据结构3.3 相关java知识3.4 什么是算法 1. 什么是集合框架 官方教程 Java 集合框架Java Collection Framework ,又被称为容器和其实现类classes …

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性 异常详情 有一个类,里面有两个属性和一个类似工具的getRealName()方法如下: getRealName()方法就是获取这个人的真实名字,如果获取不到就以name返回…

janus模块介绍-SIP Gateway

模块启动 默认的SIP GateWay也是https协议,端口为8088或者8089 如果需要在自己搭建的测试服务上测试SIP GateWay模块,则也需要修改为wss 具体改动如下: 找到/opt/janus/share/janus/demos/siptest.js var server "wss://" window.location…

Python与数据库连接

新建表boss create table 创建表 Code import pymysqlcon pymysql.connect(hostlocalhost,\userroot,\password,\port3306,\dbbusiness) cursorcon.cursor() cursor.execute(create table if not exists boss(id int auto_increment primary key,name varchar(20)not null…

打包的意义 作用等前端概念集合 webpack基础配置等

基础网页是什么? 在学校最基础的三剑客 原生JS CSS H5就可以开发静态网页了 对于浏览器而言也能识别这些基础的文件和语法,真正的所见即所得,非常直接。 为什么要使用框架库? 对于常用的前端框架而言,无论是Vue Rea…

什么样的内外网文档摆渡,可以实现安全高效传输?

内外网文档摆渡通常指的是在内网(公司或组织的内部网络)和外网(如互联网)之间安全地传输文件的过程。这个过程需要特别注意安全性,因为内网往往包含敏感数据,直接连接内网和外网可能会带来安全风险。因此会…

为什么深度学习模型在 GPU 上运行得更快:CUDA 编程简介

如今,当我们谈论深度学习时,通常会将其实现与利用 GPU 来提高性能联系起来。 GPU(图形处理单元)最初设计用于加速图像、2D 和 3D 图形的渲染。然而,由于它们能够执行许多并行操作,因此它们的实用性超出了深度学习等应用程序。 GPU 在深度学习模型中的使用始于 2000 年代…

保姆级银河麒麟V10高级服务器离线安装mysql5.7数据库

离线在银河麒麟高级操作系统v10安装mysql5.7 下载mysql5.7 MySQL :: Download MySQL Community Server (Archived Versions) 2、把下载好的包上传到服务器 3、解压 [root1-0001 ~]# cd /data/mysql[root1-0001 mysql]# tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz…

Beego框架学习:深入指南

文章目录 Beego框架学习:深入指南安装与设置创建控制器自定义路由使用中间件使用模板引擎使用ORM Beego框架学习:深入指南 Beego是一个快速开发Go语言应用的开源框架,它基于MVC模式设计,提供了一系列的工具和库,使得开…

C++ 之 string类的模拟实现

这学习我有三不学 昨天不学,因为昨天是个过去 明天不学,因为明天还是个未知数 今天不学,因为我们要活在当下,我就是玩嘿嘿~ –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–…

Docker基础学习(3.Docker架构)

⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容:个人博客系统 ⭐我的文档网站:http://xyhwh-nav.cn/ ⭐微信公众号:码上言 文章目录 Docker基本概念1、镜像&…

JavaWeb-自学JSP组件报告

自学JSP组件报告 一、组件资源及作用 1. commons-fileupload-1.2.2.jar 组件作用:用于处理HTTP文件上传请求,提供了文件上传的解析和存储功能。它允许开发者在Web应用中轻松实现文件上传功能。 2. commons-io-2.4.jar 组件作用:提供了一…

springboot+vue新疆肉牛智慧牧场养殖系统

系统涉及的对象是奶牛。 系统使用员工有管理员和普通员工。 管理员有修改的权限,普通员工没有。 系统需要包含奶牛的编号,种类,体重,健康情况、生长情况、牛奶产量,以及上次更新数据时间等信息,管理员可以对…

Perfect Clear WorkBench 智能修图黑科技,你尽管拍剩下的交给我(v4.6.0.2653)

01 Perfect Clear Perfect Clear WorkBench是EyeQlmaging推出的先进图片处理工具,旨在自动优化和简化图像校正。它通过智能技术提高图片的清晰度、颜色保真度,并增强视觉效果,确保高品质输出。 它的核心优势是利用高级算法和AI技术&#xff…

第59篇:创建Nios II工程之控制LED<一>

Q:还记得第1篇吗?设计简单的逻辑电路,控制DE2-115开发板上LED的亮与熄灭,一行Verilog HDL的assign赋值语句即可实现。本期开始创建Nios II工程,用C语言代码控制DE2-115开发板上的LED实现流水灯效果。 A:在…