LLM之RAG理论(一)| CoN:腾讯提出笔记链(CHAIN-OF-NOTE)来提高检索增强模型(RAG)的透明度

论文地址:https://arxiv.org/pdf/2311.09210.pdf
检索增强语言模型(RALM)已成为自然语言处理中一种强大的新范式。通过将大型预训练语言模型与外部知识检索相结合,RALM可以减少事实错误和幻觉,同时注入最新知识。然而,目前的RALM面临以下几个关键挑战:
- 噪声检索(Noisy retrieval):不相关的检索文档可能会误导模型并导致错误的响应;
- 未知鲁棒性(Unknown robustness):RALM很难确定他们是否有足够的知识来回答问题,当缺乏信息时,应该默认为“未知”;
- 缺乏透明度(Lack of transparency):目前尚不清楚RALM是如何利用检索到的信息来生成回应的。
为了解决这些问题,腾讯人工智能实验室的研究人员在他们的论文《CHAIN-OF-NOTE: ENHANCING ROBUSTNESS IN RETRIEVAL-AUGMENTED LANGUAGE MODELS》中提出了一个新的框架,称为笔记链(CON)。

一、笔记链概述
笔记链的关键思想是通过对检索到的每个文档进行总结和评估,让模型生成阅读笔记,然后再生成最终的回应。此记录过程可以增强模型的以下能力:
- 评估检索到文档的相关性
- 识别可靠信息与误导信息
- 过滤掉无关或不可信的内容
- 认识到知识差距并回应“未知”
具体而言,给定一个问题和k个检索到的文档,“笔记链”会进行如下操作:
- 笔记生成:为每个文档创建1个阅读笔记,然后分析其相关性;
- 综合:整合笔记中的见解来确定最终回应。
这种方法反映了人类的推理——将问题分解为更小的步骤。笔记为模型的思维过程提供了透明度,并提高了其噪声和未知稳健性。
二、阅读笔记的类型
笔记链生成的笔记可分为三类:
-
相关(Relevant):文档可以直接回答问题,最终的回复只来自该文档;
-
无关但有用的上下文(Irrelevant but useful context):文档没有回答问题,但提供了有用的背景。该模型将其知识与上下文相结合可以推断出答案;
-
无关(Irrelevant):文档是无关的,模型缺乏知识来回答。默认响应为“未知”。
该系统允许模型在直接检索信息、进行推断和承认其局限性之间取得平衡。

三、笔记示例
笔记链(CON)框架根据检索到的文档与输入问题的相关性生成三种类型的阅读笔记。以下是每种类型的笔记的示例:
3.1 类型1——直接回答:
输入问题:“法国首都是什么?”
检索文件:一篇讨论法国各个城市的文章。
生成的笔记:“正如文章中所提到的,法国的首都是巴黎。”
最后回应:“法国首都是巴黎。”
3.2 类型2——有用上下文:
输入问题:“光合作用是如何工作的?”
检索文件:解释植物生物学基础的文本,不直接涉及光合作用。
生成笔记:“虽然该文件没有直接解释光合作用,但它提供了有关植物生物学的有用信息,表明光合作用是植物将光转化为能量的过程。”
最后回应:“光合作用是植物将光转化为能量的过程,包括叶绿素对光的吸收以及二氧化碳和水转化为葡萄糖和氧气。”
3.3 类型3——无关或未知:
输入问题:“量子计算的最新进展是什么?”
检索文档:一篇讨论经典计算技术的文章。
生成的笔记:“检索到的文档不包括量子计算,而是专注于经典计算技术。该模型缺乏足够的信息来根据此文档进行回答。”
最终回应:“未知,因为现有文件没有提供量子计算最新进展的相关信息。”
这些例子说明了CON框架如何处理不同类型的文档:直接使用相关文档中的信息,从上下文有用的文档中推断答案,并承认知识或无关信息中的差距。
四、训练模型
为了训练一个模型来生成阅读笔记,腾讯团队执行如下步骤:
- 使用ChatGPT为不同类型的笔记生成10K的训练数据;
-
使用这些数据对LLaMa-2模型进行微调,以增强模型记笔记的能力;
-
使用加权损失函数策略,将训练重点放在最终答案的准确性上。
五、评估笔记链



在几个QA数据集的实验表明:
- 提高了QA性能: 从上表2可以看出,当使用检索到的文档时,Chain of Note的平均得分比标准RALM高+1.97 EM;
- 增强了噪声鲁棒性:从上表3可以看出,在给定不相关的检索文档的情况下,与标准RALM相比,Chain of Note将EM得分提高了+7.9;
- 更好的未知稳健性:从上表4可以看出,在域外问题上,笔记链将拒绝率提高了+10.5。
六、个案研究
让我们通过一个示例来了解笔记链的作用:
问题:《死侍2》是什么时候上映的?
文档1:讨论2018年6月1日在美国上映的《死侍2》。
文档2:提及《死侍2》于2018年5月10日首播,日期变更后于2018年8月18日上映。
标准RALM:2018年6月1日❌
带笔记链的RALM:
文档1笔记:猜测《死侍2》于2018年6月1日在美国上映。
文档2笔记:明确实际发布日期为2018年5月18日。
回复:根据Doc 2,答案为2018年5月18日✅
这展示了笔记链如何仔细分析文件,并确定最相关、最可信的细节,以产生正确的回应。
七、关键要点
- 笔记链增强了RALM对噪声检索和未知场景的鲁棒性;
- 记笔记为RALM推理过程提供了可解释性;
- 平衡检索信息、进行推断和确认限制;
- 分解复杂问题的简单而有效的方法。
参考文献:
[1] https://ai.plainenglish.io/unlocking-the-black-box-how-chain-of-note-brings-transparency-to-retrieval-augmented-models-rag-ae1ebb007876
[2] https://arxiv.org/pdf/2311.09210.pdf
相关文章:
LLM之RAG理论(一)| CoN:腾讯提出笔记链(CHAIN-OF-NOTE)来提高检索增强模型(RAG)的透明度
论文地址:https://arxiv.org/pdf/2311.09210.pdf 检索增强语言模型(RALM)已成为自然语言处理中一种强大的新范式。通过将大型预训练语言模型与外部知识检索相结合,RALM可以减少事实错误和幻觉,同时注入最新知识。然而&…...
Android studio:打开应用程序闪退的问题2.0
目录 找到问题分析问题解决办法 找到问题 老生常谈,可能这东西真的很常见吧,在之前那篇文章中 linkhttp://t.csdnimg.cn/UJQNb 已经谈到了关于打开Androidstuidio开发的软件后明明没有报错却无法运行(具体表现为应用程序闪退的问题ÿ…...
Spring IoC如何存取Bean对象
小王学习录 IoC(Inversion of Control)1. 什么是IoC2. 什么是Spring IoC3. 什么是DI4. Spring IoC的作用 存储Bean对象1. 创建Bean2. 将Bean注册到Spring中. 取Bean对象.1. 获取Spring上下文信息使用ApplicationContext和BeanFactory的区别 2. 获取指定Bean对象 IoC(Inversion …...
【开源】基于Vue.js的实验室耗材管理系统
文末获取源码,项目编号: S 081 。 \color{red}{文末获取源码,项目编号:S081。} 文末获取源码,项目编号:S081。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗…...
Datawhale聪明办法学Python(task2Getting Started)
一、课程基本结构 课程开源地址:课程简介 - 聪明办法学 Python 第二版 章节结构: Chapter 0 安装 InstallationChapter 1 启航 Getting StartedChapter 2 数据类型和操作 Data Types and OperatorsChapter 3 变量与函数 Variables and FunctionsChapte…...
量化交易怎么操作?量化软件怎么选择比较好?(散户福利,建议收藏)
一:量化的具体操作步骤是什么呢?1. 数据获取:索取和收集金融市场数据。 2. 策略制定:制定数量交易策略,这包括制定投资目标、建立交易规则和风险控制机制等,这个过程需要不断优化和更新。 3. 编写算法&am…...
什么是 AWS IAM?如何使用 IAM 数据库身份验证连接到 Amazon RDS(上)
驾驭云服务的安全环境可能很复杂,但 AWS IAM 为安全访问管理提供了强大的框架。在本文中,我们将探讨什么是 AWS Identity and Access Management (IAM) 以及它如何增强安全性。我们还将提供有关使用 IAM 连接到 Amazon Relational Database Service (RDS…...
Python从入门到精通七:Python函数进阶
函数多返回值 学习目标: 知道函数如何返回多个返回值 问: 如果一个函数如些两个return (如下所示),程序如何执行? 答:只执行了第一个return,原因是因为return可以退出当前函数,导致return下方的代码不执…...
uniapp踩坑之项目:使用过滤器将时间格式化为特定格式
利用filters过滤器对数据直接进行格式化,注意:与method、onLoad、data同层级 <template><div><!-- orderInfo.time的数据为:2023-12-12 12:10:23 --><p>{{ orderInfo.time | formatDate }}</p> <!-- 2023-1…...
webpack学习-2.管理资源
webpack学习-2.管理资源 1.这章要干嘛2.加载css注意顺序! 3.总结 1.这章要干嘛 管理资源,什么意思呢?管理什么资源?项目中经常会 导入各种各样的css文件,图片文件,字体文件,数据文件等等&#…...
658. 找到 K 个最接近的元素
658. 找到 K 个最接近的元素 Java代码:滑窗 class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> list new ArrayList<>();for (int i 0; i < arr.length; i) {arr[i] arr[i] - x;}for(i…...
十二、MapReduce概述
1、MapReduce (1)采用框架 MapReduce是“分散——>汇总”模式的分布式计算框架,可供开发人员进行相应计算 (2)编程接口: ~Map ~Reduce 其中,Map功能接口提供了“分散”的功能ÿ…...
shell条件测试
目录 1.1.用途 1.2.基本语法 1.2.1.格式: 1.2.2.例 1.3 文件测试 1.4.整数测试 1.4.1.作用 1.4.2.操作符 1.4.3.示例: 1.5.逻辑操作符 1.5.1.符号 1.5.2.例: 1.6.命令分隔符 1.1.用途 为了能够正确处理Shell程序运行过程中遇到的各种情况&am…...
python在线读取传奇列表,并解析为需要的JSON格式
python在线读取传奇列表,并解析为需要的JSON格式,以下为传奇中使用的TXT列表格式, [Server] ; 使用“/”字符分开颜色,也可以不使用颜色,支持以前的旧格式,只有标题和服务器标题支持颜色 ; 标题/颜色代码(0-255)|服务器标题/颜色代码(0-255)|服务器名称|服务器IP|服务器端…...
【docker 】 安装docker(centOS7)
官网 docker官网 github源码 官网 在CentOS上安装Docker引擎 官网 在Debian上安装Docker引擎 官网 在 Fedora上安装Docker引擎 官网 在ubuntu上安装Docker引擎 官网 在RHEL (s390x)上安装Docker引擎 官网 在SLES上安装Docker引擎 最完善的资料都在官网。 卸载旧版本 …...
智能网联汽车场景数据图像标注要求及方法
智能网联汽车场景数据图像标注要求及方法 1 范围 本标准规定了智能网联汽车场景数据图像中交通参与者、交通信号灯、交通标志、交通标线、可行驶区域、光照条件、遮挡截断情况7类元素的标注要求及方法。 本标准适用于智能网联汽车图像数据标注。 2 规范性引…...
四. 基于环视Camera的BEV感知算法-BEVFormer
目标 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. BEVFormerv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第四章—…...
gin投票系统3
对应视频v1版本 1.优化登陆接口 将同步改为异步 原login前端代码: <!doctype html> <html lang"en"> <head><meta charset"utf-8"><title>香香编程-投票项目</title> </head> <body> <m…...
windows如何解决端口冲突(实用篇)
在项目设计中,环境配置成功点击运行瞬间,一大堆红爆出,8080端口占用,这个是很烦人的。。。 解决方式: 笨方法:一、查看所有端口实用情况(挨个扫) 按住【WINR】快捷键打开运行输入…...
「PPT 下载」Google DevFest Keynote | 复杂的海外网络环境下,如何提升连接质量
(全网都在找的《社交泛娱乐出海作战地图》,点击获取👆) 12 月 10 日,“Google DevFest 2023 上海站”大会如期在上海市东方万国宴会中心举办。延续过往的技术交流碰撞、前沿技术学习基调传统,本届大会聚焦行…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
