纠错检索增广生成论文
一、摘要
动机:RAG严重依赖于检索文档的相关性,如果检索出错,那么LLM的输出结果也会出现问题
解决方案:提出纠正性检索增强生成(CRAG)即设计一个轻量级的检索评估器,用来评估针对某个查询检索到的文档的整体质量,并返回一个置信度,基于此可以触发不同的知识检索操作。
由于从静态且有限的语料库中检索只能返回次优文档,因此我们利用大规模网络搜索作为扩展手段,以增强检索结果
还设计了一种分解-重组算法,用于对检索到的文档进行选择性聚焦,提取关键信息并过滤掉无关信息。
二、相关工作
1.LLM
因为内部信息过时、有可能错误等会导致输出幻觉
2.RAG
如果检索出错会怎样? 因为引入检索的目的是确保生成式语言模型能够获取相关且准确的知识。如果检索到的文档不相关,检索系统甚至可能加剧语言模型产生的事实性错误。
3.高级RAG
Self-RAG(Asai等,2024)被提出,它能够选择性检索知识,并引入一个评判模型来决定是否进行检索。
Yoran等(2024)设计了一个自然语言推理(NLI)模型,用于识别无关上下文并提高鲁棒性。
SAIL(Luo等,2023)通过指令调优,在指令前插入检索到的文档。Toolformer(Schick等,2023)则通过预训练来调用诸如维基百科等API
Jiang等(2023)在生成长文本时主动预测未来内容,并决定何时检索以及检索什么内容。
总结:与近期与我们工作最相关的研究(Schick等,2023;Luo等,2023;Asai等,2024)相比这些方法的目标是将检索作为一种有用的工具来增强生成,或者判断检索是否必要,而本研究则特别关注检索器返回不准确结果的场景。
三、任务表述
RAG的表述:
X:输入
C={d1.....dN}:包含大量知识文档的语料库
Y:生成的结果
R:检索器
G:生成器
D={dr1....drk}:检索器根据输入检索到前k个相关文档
RAG的两个阶段:
1.检索阶段:P(D∣X):
- 检索器 R 根据输入 X 计算每个文档 di 的相关性得分。
- 选择前 k 个最相关的文档组成集合 D。
- P(D∣X) 表示在给定输入 X 的条件下,检索到文档集合 D 的概率
2.生成阶段:P(Y,D∣X):
- 生成器 G 基于输入 X 和检索到的文档 D 生成结果 Y。
- P(Y,D∣X) 表示在给定输入 X 的条件下,生成结果 Y 且检索到文档 D 的联合概率。
联合概率(Joint Probability)是概率论中的一个重要概念,用于描述多个事件同时发生的概率。具体来说,联合概率表示两个或多个随机变量在特定条件下同时取某些值的概率。
P(X=x,Y=y)
3. 整体生成概率:P(Y∣X):
- 整体生成概率 P(Y∣X) 可以表示为检索阶段和生成阶段的联合概率:
- P(Y∣X)=D∑P(D∣X)P(Y∣X,D)其中,P(Y∣X,D) 是在给定输入 X 和检索到的文档 D 的条件下生成结果 Y 的概率。
RAG可以表述为:P(Y|X) = P(D|X)P(Y, D|X).
这表明检索器和生成器是紧密耦合的,表现出较低的风险容忍度。任何检索失败都可能导致不理想的响应,即使生成器具备出色的能力。这也正是本文的重点,即提高生成的鲁棒性。
四、CRAG:校正性检索增强生成
1.模型推理概述
给定输入查询和从任意检索器检索到的文档,构建一个轻量级检索评估器来估计检索文档与输入查询的相关性得分(第 4.2 节)。
相关性得分被量化为三种置信度,并触发相应的操作:{正确、错误、模糊}(第 4.3 节)。如果触发“正确”操作,检索到的文档将被细化为更精确的知识片段。这一细化操作包括知识分解、过滤和重组(第 4.4 节)。如果触发“错误”操作,检索到的文档将被丢弃,转而依赖网络搜索作为补充知识源进行校正(第 4.5 节)。最终,当无法自信地做出正确或错误的判断时,会触发一种软性且平衡的“模糊”操作,该操作结合了前两者。
在优化检索结果后,可以采用任意生成模型。如图:

伪代码如下:

2.检索评估器
检索评估器的目标:目标是在检索到的文档不相关时对其进行校正。
具体说:
1.采用 T5-large(Raffel 等,2020)来初始化并微调检索评估器,参数量远小于很多大语言模型。
2.为了确保所有实验结果与 Self-RAG(Asai 等,2024)具有可比性,我们在实验中也采用了 Self-RAG 提供的通过 Contriever(Izacard 等,2022)检索到的相同结果。
3.用于微调评估器的相关性信号可以从现有数据集中收集。例如,PopQA(Mallen 等,2023)
4.微调的负样本均从检索结果中随机采样,这些样本与输入查询非常相似但不相关。
5.对于每个问题,通常会检索到 10 个文档。问题与每个文档连接作为输入,评估器分别预测每个问题-文档对的相关性得分。
6.基于这些计算出的相关性得分,最终判断检索是否正确,并与操作触发相关联。
在我们提出的框架中,检索质量的评估成本相对较低,无需访问大型且昂贵的大型语言模型。与 Self-RAG(Asai 等,2024)中指令调优的 LLaMA-2(7B)的批评模型相比,CRAG 中设计的评估器展现了其轻量化的优势(0.77B)。
3.操作触发
设计了三种类型的操作并相应地触发,其中设置了上下阈值。如果置信度得分高于上阈值,则检索文档被识别为“正确”;如果低于下阈值,则被识别为“错误”。否则,执行一种更软性且中间的操作,即“模糊”。每个检索文档单独处理,最终进行整合。
正确:当至少一个检索文档的置信度得分高于上阈值时,检索被假定为“正确”。说明检索的结果存在相关文档,则检索结果被认为更可靠,但是不能避免存在一些噪声知识片段。为了提纯,则对片段进行细化操作。
错误:置信度得分均低于下阈值时,检索被假定为“错误”。就是检索的所有文档都不相关,则抛弃检索的结果,从其他地方进行搜索。
模糊:检索的准确性难以区分且评估器给出中间得分时。由于检索评估器对其判断缺乏信心,因此将“正确”和“错误”两种处理过的知识结合起来,以相互补充。
仅使用“正确”和“错误”操作的初步实验表明,CRAG 的效果很容易受到检索评估器准确性的影响。原因可能是无论判断的置信度如何,所有输入案例都进行了明显的知识切换。“模糊”操作的设计显著帮助减轻了对检索评估器准确性的依赖。
4.知识细化
一种“分解-重组”的知识细化方法,以进一步提取其中最关键的知识片段。
该方法的核心思想是将检索到的文档分解为更小的知识片段,然后过滤掉不相关的片段,最后将相关片段重组为内部知识。具体步骤如下:
- 分解:将检索到的文档分割为细粒度的知识片段。
- 过滤:使用检索评估器计算每个片段的相关性得分,并过滤掉不相关的片段。
- 重组:将相关片段按顺序连接,形成最终的内部知识。
5.网络搜素
和我的方向不相关,暂时不研究
五、实验(不全)
1.任务、数据集和指标
数据集:PopQA(Mallen 等,2023)(短文本生成)、Biography(Min 等,2023)(长文本生成)、PubHealth(Zhang 等,2023a)(是非题)、Arc-Challenge(Bhakthavatsalam 等,2021)(选择题)共四个数据集
指标:PopQA、PubHealth 和 Arc-Challenge 采用准确率作为评估指标。Biography 采用 FactScore(Min 等,2023)作为评估指标
2.基准
主要将 CRAG 与有检索和无检索的方法进行了比较,后者可以进一步分为标准 RAG 和最新的高级 RAG
六、未来挑战
但微调外部检索评估器是不可避免的。如何消除此外部评估器并赋予 LLM 更好的检索评估能力将是我们未来的工作。
相关文章:
纠错检索增广生成论文
一、摘要 动机:RAG严重依赖于检索文档的相关性,如果检索出错,那么LLM的输出结果也会出现问题 解决方案:提出纠正性检索增强生成(CRAG)即设计一个轻量级的检索评估器,用来评估针对某个查询检索…...
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”,通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解: 目录 一、原理分析 1. 单源 BFS vs…...
Jenkins 构建 Unity 打包 .apk 同时生成 .aab
Jenkins 构建 Unity 打包 .apk 同时生成 .aab Android App Bundle简称 AAB,想了解更多关于 AAB 的知识,请看官网 https://developer.android.google.cn/guide/app-bundle/faq?hlzh-cn APK 打包部分在复用上一篇 Jenkins 构建 Unity打包APK 一、新建一…...
LTO优化详解
嵌入式开发过程中的LTO优化是什么意思?能够用来解决什么问题?它都优化了哪些?仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题? 嗯,用户问关于嵌入式开发中的LTO优化,我需要详细解释这个概…...
嵌入式之条件编译
在C编程中,条件编译是一种在编译时根据特定条件选择性地包含或排除代码的技术。它通过预处理器指令来实现,允许程序员根据不同的编译环境、平台或配置来控制哪些代码被编译。条件编译在跨平台开发、调试、功能开关场景中非常有用。 1. 预处理器指令 条…...
清华大学第五弹:《DeepSeek与AI幻觉》
作者:清华大学新闻与传播学院新媒体研究中心、人工智能学院(新媒沈阳团队) 时间:2025年2月 完整版下载地址:夸克网盘分享 一、AI幻觉的定义与分类 定义 学术定义:模型生成与事实不符、逻辑断裂或脱离上下…...
理解构件的3种分类方法
对于Java程序员来说,理解“构件分类方法”是非常重要的,因为这直接关系到如何高效地管理和复用软件组件。以下是针对三种常见分类方法的具体解释: 构件的3种分类方法 1. 关键字分类法 (Keyword Classification Method) 关键字分类法是最直…...
分布式数据库解析
title: 分布式数据库解析 date: 2025/2/20 updated: 2025/2/20 author: cmdragon excerpt: 通过金融交易、社交平台、物联网等9大真实场景,结合Google Spanner跨洲事务、DynamoDB毫秒级扩展等38个生产级案例,揭示分布式数据库的核心原理与工程实践。内容涵盖CAP定理的动态…...
Zotero 快速参考文献导出(特定期刊引用)
目录 一、添加样式 每次投期刊时每种期刊的引用方式不一样,就很麻烦。发现zeotero添加期刊模板再导入很方便 一、添加样式 然后就能导出自己想要的期刊格式的引用了...
库的制作与原理(一)
1.库的概念 库是写好的,现成的可以复用的代码。本质上库是一种可执行的二进制形式,可以被操作系统载入内存执行。库有俩种:静态库 .a[Linux] .lib[windows] 动态库 .so[Linux] .dll[windows] 就是把.c文件变成.o文件,把…...
go 日志框架
内置log import ("log""os" )func main() {// 设置loglog.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)// 自定义日志前缀log.SetPrefix("[pprof]")log.Println("main ..")// 如果用format就用PrintF,而不是…...
JavaScript 最佳实践
我只选取了我还没完全贯彻的条目罗列如下. 1.函数命名 函数名由动词开头,如getName(); 2.布尔类型命名 若函数返回布尔值,则函数名以is/can等开头. 3.常量命名约定 常量名全大写并以下划线""连接. 4.变量类型透明化 定义变量时,应将其立即初使化为一个与其同类型…...
Rust配置笔记
1.Node.js下载配置 2.c环境配置 C我是用vs装的点击这个installer 点击修改 选择C环境就行,这个时候它就帮忙配置环境了 3.Rust下载配置 4.装napi-rs框架 npm install -g napi-rs/cliRust下载网站 下完之后直接打开 一开始下包会比较慢,多等等 下好之后跑项目前第一件事配置…...
大模型WebUI:Gradio全解12——LangChain原理及agents构建Gradio UI(1)
大模型WebUI:Gradio全解12——LangChain原理及agents构建Gradio UI(1) 前言本篇摘要12. LangChain原理及其agent构建Gradio UI12.1 LangChain介绍12.1.1 概念12.1.2 用途12.1.3 文档参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易WebU…...
具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)
整合各亚专科医学领域知识能力的AI代理的开发与研究 一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能(AI)已成为推动各行业变革的关键力量,医疗领域也不例外。近年来,AI 在医疗行业的应用取得了显著进展,从医学影像诊断到疾病预测,从药物研发到个性化医疗,AI 技…...
机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解
机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解 目录 引言 脑卒中的全球影响机器学习在医疗预测中的挑战类别不平衡问题的核心痛点数据预处理与特征选择 数据来源与清洗缺失值处理方法类别特征编码特征选择技术处理类别不平衡的四大方法 SMOTE(合成少数类过采样技术…...
数据表的存储过程和函数介绍
文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...
为AI聊天工具添加一个知识系统 之117 详细设计之58 思维导图及观察者效应 之2 概念全景图
(说明:本文和上一篇问题基本相同,但换了一个模型 deepseek-r1) Q1227、在提出项目“为使用AI聊天工具的聊天者加挂一个专属的知识系统”后,我们已经进行了了大量的讨论-持续了近三个月了。这些讨论整体淋漓尽致体现了…...
Error [ERR_REQUIRE_ESM]: require() of ES Module
报错信息: 【报错】Message.js 导入方式不对,用的是 ES Moudle 的语法,提示使用 import 引入文件 项目开发没有用到 js-message 依赖,是 node-ipc 依赖中用到的 js-message 依赖, node-ipc 中限制 js-message 版本&a…...
GStreamer源码安装1.24版本
从官网下载 1.24的源码包 https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/1.24?ref_typeheads#getting-started ,尝试过使用git clone 的方式,但速度贼慢,就选择了下载源码包的方式安装依赖 sudo apt install libssl-dev g me…...
从CNN到Transformer:遥感影像目标检测的未来趋势
文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践(遥感图像场景分类)专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…...
从 x86 到 ARM64:CPU 架构的进化与未来
在计算机发展的历史长河中,x86、x64 和 ARM64 这三大主流 CPU 架构各自书写了辉煌的篇章。它们不仅代表了技术的进步,更承载着无数创新者的梦想与努力。 x86:从 16 位到 32 位的辉煌之路 诞生与崛起 1978 年,英特尔(…...
Java数据结构第十二期:走进二叉树的奇妙世界(一)
专栏:数据结构(Java版) 个人主页:手握风云 目录 一、树型结构 1.1. 树的定义 1.2. 树的基本概念 1.3. 树的表示形式 二、二叉树 2.1. 概念 2.2. 两种特殊的二叉树 2.3. 二叉树的性质 2.4. 二叉树的存储 三、二叉树的基本操作 一、树型结构 1.…...
基于ffmpeg+openGL ES实现的视频编辑工具-添加贴纸(八)
在当下丰富多元的音视频编辑应用领域,添加贴纸已然成为一项广受欢迎的功能,它能够为音视频作品注入独特的趣味与创意元素。本文将深入探究音视频添加贴纸背后所涉及的技术原理与实现路径。 一、技术原理概述 音视频从本质上来说,是由一系列连续的图像帧(针对视频部分)以…...
【AI时代】基于AnythingLLM+ Ollama + DeepSeek 搭建本地知识库
一、本地安装Ollama及DeepSeek 参考教程: https://blog.csdn.net/Bjxhub/article/details/145536134 二、下载并安装AnythingLLM AnythingLLM下载地址: https://anythingllm.com/ 傻瓜式安装即可 可以自定义安装路径。三、配置AnythingLLM并使用 3.…...
leetcode刷题记录(一百一十五)——64. 最小路径和
(一)问题描述 64. 最小路径和 - 力扣(LeetCode)64. 最小路径和 - 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下…...
UE5 编辑器辅助/加强 插件搜集
1. Actor Locker 地址:https://www.fab.com/listings/ec26ac5e-4720-467c-a3a6-b5103b6b74d0 使用说明:https://github.com/Gradess2019/ActorLocker 支持:5.0 – 5.5 简单的编辑器扩展。它允许你通过世界轮廓窗口/热键/上下文菜单在编辑器视…...
怎么在Github上readme文件里面怎么插入图片?
环境: Github 问题描述: 怎么在Github上readme文件里面怎么插入图片? https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解决方案: 1.相对路径引用 上传图片到仓库 将图片文件(如 .png/.jpgÿ…...
什么是矩阵账号?如何高效运营tiktok矩阵账号
…...
SpringSecurity初始化的本质
一、对SpringSecurity初始化的几个疑问 通过前面第一次请求访问的分析我们明白了一个请求就来后的具体处理流程 对于一个请求到来后会通过FilterChainProxy来匹配一个对应的过滤器链来处理该请求。那么这里我们就有几个疑惑。 FilterChainProxy什么时候创建的?过滤器链和对应的…...
