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

news2024/11/26 21:53:15

论文: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 上下文的自适应增强,是可以与其他的思路进行交融的。

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

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

相关文章

Python:解析pyserial串口通讯

简介:串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单&#…

全额退款20000,what?

接单的时候有多兴奋,退单的时候就有多落寞。今天我对客户全额退款了,跟踪了10天的项目正式结束。 这是我接单以来项目单价最高的一个项目,本来不太想接的,因为业务领域不擅长,又想挑战一下。兜兜转转找了几个人因为各种…

Python请求示例电商商品详情数据(API接口开发系列),从入门到实战

在电商系统中,商品详情数据通常通过API接口提供。以下是一个从入门到实战的Python请求示例,展示如何获取电商商品详情数据。 入门篇:理解API接口 首先,你需要了解API(应用程序接口)的基本概念。API允许不…

用Redis实现获取验证码,外加安全策略

安全策略 一小时内只能获取三次,一天内只能获取五次 Redis存储结构 代码展示 import cn.hutool.core.util.RandomUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import org.spri…

JVM学习笔记(五)内存模型

目录 1、原子性 1.1 问题分析 1.2 解决方法 2、可见性 2.1 退不出的循环 2.2 解决办法 3、有序性 3.1 诡异的结果 3.2 解决办法 3.3 有序性理解 3.4 happens-before 4、CAS与原子类 4.1 CAS 4.2 乐观锁与悲观锁 4.3 原子操作类 5、synchronized 优化 5.1 轻量…

鸿蒙入门11-DataPanel组件

数据面板组件 用于将多个数据的占比情况使用 占比图 进行展示 参数 参数形式 : DataPanel( options:{ values: number[], max?: number, type?: DataPanelType } ) 参数名 参数类型 是否必填 默认值 参数描述 values number[] 是 - 数据值列表 最大支持…

Recommended Azure Monitors

General This document describes the recommended Azure monitors which can be implemented in Azure cloud application subscriptions. SMT incident priority mapping The priority “Blocker” is mostly used by Developers to prioritize their tasks and its not a…

zigbee cc2530的室内/矿井等定位系统RSSI原理

1. 定位节点软件设计流程 2. 硬件设计 cc2530 最小系统 3. 上位机 c# 设计上位机,通过串口连接协调器节点,传输数据到pc上位机,显示节点坐标信息 4. 实物效果 需要4个节点,其中一个协调器,两个路由器作为参考节点&a…

1分钟掌握 Python 函数参数

任何编程语言函数都是非常重要的一部分,而在进行函数调用时,了解函数的参数传递方式是非常有必要的。Python中支持哪些传参方式呢? Python中的传参方式是比较灵活的,主要包括以下六种: 按照位置传参按照关键字传参默…

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

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

STL ——priority_queue的模拟实现与基本使用 | 仿函数的介绍| 容器适配器的介绍

了解priority_queue 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为…

JetBot手势识别实验

实验简介 本实验目的在JetBot智能小车实现手势识别功能,使用板卡为Jetson Nano。通过小车摄像头,识别五个不同的手势,实现小车的运动及灯光控制。 1.数据采集 连接小车板卡的Jupyterlab环境,运行以下代码块,配置数据…

Go Energy 实现的跨平台桌面(GUI)应用介绍

关于 Energy Energy是Go语言基于LCL和CEF开发的跨平台桌面应用框架 系统支持 Windows 系列 XP SP3 到 Windows 11, Linux,MacOS. 版本 当前版本2.x 底层动态链接库 liblcl LCL: Lazarus 跨平台 GUI LCL 组件库, 包含了大量的系统原生GUI控件, 多达几百个控件. 在…

快速体验 Llama3 的 4 种方式,本地部署,800 tokens/s 的推理速度真的太快了!

北京时间4月19日凌晨,Meta在官网上官宣了Llama-3,作为继Llama1、Llama2和CodeLlama之后的第三代模型,Llama3在多个基准测试中实现了全面领先,性能优于业界同类最先进的模型,你有没有第一时间体验上呢,这篇文…

DS:单链表的实现

欢迎各位来到 Harper.Lee 的编程学习小世界! 博主主页传送门:Harper.Lee的博客 我将在这里分享我的学习过程等心得 创作不易,码字不易,兄弟们养成先赞后看的好习惯哦! 想一同进步的uu,可以来后来找我哦&…

20232937文兆宇 2023-2024-2 《网络攻防实践》实践七报告

20232937文兆宇 2023-2024-2 《网络攻防实践》实践七报告 1.实践内容 (1)使用Metasploit进行Linux远程渗透攻击 任务:使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务Usermap_script安全漏洞,获取目标Linux…

深入Linux下的GCC编译器:从入门到精通

目录标题 1、GCC编译器概述2、安装GCC3、GCC的基本使用4、高级功能4.1 多文件编译4.2 静态和动态链接4.3 什么是链接?4.4 静态链接优点缺点 4.5 动态链接优点缺点 4.6 实际应用4.7 编译优化 GCC(GNU Compiler Collection)是一款免费、开源的编…

累积流量计算(MODBUS RTU通信数据处理)

1、常用通信数据处理 MODBUS通信系列之数据处理_modbus模拟的数据变化后会在原来的基础上累加是为什么-CSDN博客文章浏览阅读1k次,点赞2次,收藏2次。MODBUS通信专栏有详细文章讲解,这里不再赘述,大家可以自行查看。链接如下:SMART S7-200PLC MODBUS通信_RXXW_Dor的博客-C…

操作系统(Operating System)知识点复习——第十一章 I/O管理与磁盘调度

目录 0.前言 1.I/O设备 2.I/O功能的组织 3.Operating System Design Issues 4.I/O缓冲 4.1 单缓冲Single Buffer 4.2 双缓冲Double Buffer 4.3 循环缓冲 5.磁盘调度Disk Scheduling 5.1 磁盘性能参数 5.2 磁盘调度策略 ①First-in,first-out(FIFO) ②Pr…

芯片胶点胶加工的效果和质量的检测方法有哪些?

芯片胶点胶加工的效果和质量的检测方法有哪些? 芯片胶在电子封装领域用的是比较多的,特别是高度精密集成芯片器件。那么如何判断点胶后的效果和质量的好与坏? 芯片胶点胶加工的效果和质量的检测是一个重要的环节,以确保产品满足设…