论文阅读:Speculative RAG: Enhancing Retrieval Augmented Generation through Drafting

news2024/9/20 10:52:35

论文地址:https://arxiv.org/abs/2407.08223

RAG 将 LLM 的生成能力与外部知识源相结合,以提供更准确和最新的响应。最近的 RAG 进展侧重于通过迭代 LLM 完善或通过 LLM 的额外指令调整获得自我批判能力来改进检索结果。在这项工作中,作者介绍了 SPECULATIVE RAG,一种利用较大、通用 LLM 高效验证由较小、经过提炼的专业 LLM 并行生成的多个 RAG 草案的框架。每个草稿都是从检索到的文件中的一个不同子集生成的,从而为证据提供了不同的视角,同时减少了每个草稿的输入 tokens。这种方法增强了对每个子集的理解,并减轻了 long context 中潜在的立场偏差。该方法将起草工作委托给较小的专家 LM,由较大的通用 LM 对草稿进行一次验证,从而加快了 RAG 的速度。

广泛的实验证明,SPECULATIVE RAG 在 TriviaQA、MuSiQue、PubHealth 和 ARC-Challenge 基准测试中实现了最先进的性能,同时降低了延迟。与 PubHealth 上的传统 RAG 系统相比,它显著提高了 12.97% 的准确率,同时减少了 51% 的延迟。

方法介绍

在知识密集型任务中,每个条目都可以表示为 (Q, D, A),其中 Q 是一个需要额外知识的问题或语句; D = { d 1 , … , d n } D = \{d_1, \ldots, d_n\} D={d1,,dn} 是一组从数据库中检索到的 n 个文档;A 是预期答案。RAG 系统的目标是根据检索到的辅助文档提供的上下文,生成包含预期答案的流畅回复,或从提供的选项中选出预期答案。

图 1:不同 RAG 方法的说明。给定一个知识密集型查询 Q 和检索到的文档,(a) 标准 RAG 将所有文档都纳入提示,从而增加了输入长度并减慢了推理速度;(b) Self-Reflective RAG(Asai 等人,2023 年)需要对通用语言模型(LM)进行专门的指令调整,以生成用于自反思的特定 token;© Corrective RAG(Yan 等人,2024 年)采用外部检索评估器来改进文档质量,只关注上下文信息,而不增强推理能力;(d) 相比之下,SPECULATIVE RAG 利用较大的通用 LM 来有效验证由较小的专用 LM 并行生成的多个 RAG 草案。每个草案都是从检索到的文档的一个不同子集生成的,从而为证据提供了不同的视角,同时最大限度地减少了每个草案的输入 tokens。

如图 1 所示,作者引入了推测性检索增强生成(SPECULATIVE RAG),目标是在不影响处理速度的情况下,增强 LLM 对检索文档的推理能力。提出了一种“分而治之”的方法,而不是依靠强行调整参数或指令调整整个 LM 来处理知识密集型任务。作者利用一个较小的专业 LM(RAG drafter),根据检索结果快速生成多个答案草案。然后,一个较大的通用 LM(RAG verifier)会对这些草稿进行评估,根据其合理性选择最佳草稿,并将其整合到生成结果中。

具体来说,如算法 1 所示。

  1. 首先,将检索到的文档按照它们与所提问题的关系进行聚类,其中每个聚类代表检索结果中的一个视角(第 2 行)。
  2. 然后,从每个聚类中抽取一个文档到一个子集中,这样子集中的文档就涵盖了检索结果中的多个视角。目标是尽量减少冗余并增加文档的多样性(第 5 至第 8 行)。将一个子集记为 δ ⊂ D,它包含了检索结果中具有不同内容和多个视角的检索文档。
  3. 接着,将每个子集 δ 分配给带有所提问题 Q 的 RAG drafter端点 M D r a f t e r M_{Drafter} MDrafter,以并行生成答案草稿 α 和理由说明 β(第 12 行)。RAG drafter 经过指令调整,可成为理解检索文档的专家,并生成忠实于输入文档的理由。它比通用 LM 更小,其并行处理进一步确保了高效率。对于 M D r a f t e r M_{Drafter} MDrafter 中的每一对草案-理由(α, β),都会根据问题 Q 和相应的理由 β,用通用 LM M V e r i f i e r M_{Verifier} MVerifier 计算置信度得分(第 13 行)。值得一提的是, M V e r i f i e r M_{Verifier} MVerifier 不需要进行指令调整,因为我们利用的是其在预训练中已经学到的语言建模能力。同时, M V e r i f i e r M_{Verifier} MVerifier 可以根据 M D r a f t e r M_{Drafter} MDrafter 提供的信息理由验证草稿,而不是处理繁琐或可能多余的检索文档。
  4. 最后,选择置信度最高的答案草稿作为最终答案,并将其整合到通用 LM 的生成结果中(第 15 行)。

模块:专业 RAG Drafter

作者使用较小的专业 LM( M D r a f t e r M_{Drafter} MDrafter)来理解检索到的文档。通过训练 M D r a f t e r M_{Drafter} MDrafter生成答案草稿和理由,来更好地理解上下文文档。在解决知识密集型任务时,可以作为通用 LM 的 RAG 模块。

图 4:在 Gemini-Ultra 上生成理由 E 的 prompt。

我们可以用强 LLM 为每个三元组(查询,响应,文档)生成合理的理由 E。然后,使用标准的语言建模目标训练 M D r a f t e r M_{Drafter} MDrafter,让 M D r a f t e r M_{Drafter} MDrafter 可以学习在查询和相关文档的基础上生成有理有据的响应和理由。

多视角抽样和答案生成

对于每个知识密集型问题,以提出的问题作为检索查询,从数据库中检索出一组文档。由于查询本身的模糊性,这些文档可能包含不同的内容。为了尽量减少冗余并提高用于生成答案草案的文档子集的多样性,作者采用了多视角抽样策略。

  1. 首先,使用指令感知嵌入模型(Peng 等人,2024 年)和 K-Means 聚类算法将文档聚类为几个主题。
  2. 然后,从每个聚类中抽取一份文档到文档子集中,因此每个子集包含 k(聚类簇的个数)份不同内容的文档。总共构建了 m 个子集。

图 5:RAG drafter 生成答案的 prompt。

对 m 个文档自己运行 RAG drafter 并行推理,生成相应的答案草稿。将每个文档自己纳入 prompt,查询 RAG drafter 获得响应。我们会得到 m 份答案草稿(基于检索结果中的多个视角)作为候选答案。除了答案草稿 α \alpha α外,还有理由说明 β \beta β。作者将条件生成概率记为 p D r a f t , j = P ( β j ∣ Q , d j 1 , … , d j k ) + P ( α j ∣ Q , d j 1 , … , d j k , β j ) p_{Draft, j} = P(\beta_j | Q, d_{j1}, \ldots, d_{jk}) + P(\alpha_j | Q, d_{j1}, \ldots, d_{jk}, \beta_j) pDraft,j=P(βjQ,dj1,,djk)+P(αjQ,dj1,,djk,βj),衡量了生成理由的可靠性和生成答案草稿的可信度。

模块:通用 RAG Verifier

从 RAG drafter 生成答案草稿和理由后,通过通用 LM M V e r f i e r M_{Verfier} MVerfier(可以是任意现成的预训练 LM)对其进行评估,过滤掉可靠性较低的草稿并选出最佳答案。因为只考虑答案草稿-理由对 ( α , β ) (\alpha, \beta) (α,β),跳过了繁琐冗余的检索结果,从而提升了处理效率。

评估方式

  • self-contain 分数:通过答案草稿-理由对的条件概率来计算自我一致性分数,即 p s e l f − c o n t a i n = P ( α , β ∣ Q ) p_{self-contain} = P(\alpha, \beta | Q) pselfcontain=P(α,βQ)。自我一致性分数可以评估答案草稿和理由在问题的上下文中是否一致和流畅。
  • self-reflection 分数:此外,作者还加入 self-reflection 语句 R,以提示 M V e r f i e r M_{Verfier} MVerfier 评估答案草稿的可靠性(例如,“您认为理由是否支持答案,是或否?”),将 self-reflection 分数定义为 p s e l f − r e f l e c t i o n = P ( " Y e s " ∣ Q , α , β , R ) p_{self-reflection} = P("Yes" | Q, \alpha, \beta, R) pselfreflection=P("Yes"∣Q,α,β,R)

我们可以在 M V e r i f i e r M_{Verifier} MVerifier 的一次前向传递中高效计算自我一致性和 self-reflection 分数。给定问题 Q 和答案草稿-理由对 ( α , β ) (\alpha, \beta) (α,β),构建一个 prompt [ Q , α , β , R , " Y e s " ] [Q, \alpha, \beta, R, "Yes"] [Q,α,β,R,"Yes"]。用 M V e r i f i e r M_{Verifier} MVerifier 对 prompt 进行编码,并根据下图所示的数学公式进行计算。

→ α , β ⏞ ρ S C , R ,  "Yes"  ⏞ ρ S R ⇒ { ρ S S = ∏ t i ∈ α P ( t i ∣ t < i ) ⋅ ∏ t i ∈ β P ( t i ∣ t < i ) ρ S R = ∏ t i ∈  "Yes"  P ( t i ∣ t < i ) \xrightarrow{\overbrace{\alpha, \beta}^{\rho_{\mathrm{SC}}}, R, \overbrace{\text { "Yes" }}^{\rho_{\mathrm{SR}}}} \Rightarrow\left\{\begin{array}{l}\rho_{\mathrm{SS}}=\prod_{t_{i} \in \alpha} P\left(t_{i} \mid t_{<i}\right) \cdot \prod_{t_{i} \in \beta} P\left(t_{i} \mid t_{<i}\right) \\ \rho_{\mathrm{SR}}=\prod_{t_{i} \in \text { "Yes" }} P\left(t_{i} \mid t_{<i}\right)\end{array}\right. α,β ρSC,R, "Yes"  ρSR {ρSS=tiαP(tit<i)tiβP(tit<i)ρSR=ti "Yes" P(tit<i)

最后,得出最终分数 p j = p D r a f t , j ⋅ p S C , j ⋅ p S R , j p_j = p_{Draft, j} \cdot p_{SC, j} \cdot p_{SR, j} pj=pDraft,jpSC,jpSR,j,然后选择最可靠的答案作为问题的最终答案。

相关实验

主要结果

在 TriviaQA、MuSiQue、PubHealth 和 ARC-Challenge 这四个数据集上比较 SPECULATIVE RAG 与标准 RAG 方法,以及更先进的 Self-Refleective RAG 和 Corrective RAG。作者报告了 M D r a f t e r − 7 B M_{Drafter-7B} MDrafter7B单独使用或与 RAG 校验器(如 M V e r i f i e r − 7 B M_{Verifier-7B} MVerifier7B M V e r i f i e r − 8 x 7 B M_{Verifier-8x7B} MVerifier8x7B)搭配使用时的性能。作者同之前的工作,将准确性作为性能指标。

表 1: TriviaQA、MuSiQue、PubHealth 和 ARCChallenge (ARC-C) 的检索增强生成结果。(使用 RAG 草稿生成概率 ρ D r a f t ρ_{Draft} ρDraft 作为单独使用时选择草稿的置信度;“†”表示 Asai 等人(2023 年)报告的数字;“-”表示原始论文未报告或不适用的数字;“‡”使用 Mistral7B 或 Mixtral8x7B 作为 RAG 校验器,并将其表示为 M V e r i f i e r − 7 B M_{Verifier-7B} MVerifier7B M V e r i f i e r − 8 x 7 B M_{Verifier-8x7B} MVerifier8x7B)。

表 1 显示,在所有四个基准测试中,SPECULATIVE RAG 的性能始终优于所有基线。特别是, M V e r i f i e r − 8 x 7 B M_{Verifier-8x7B} MVerifier8x7B+ M D r a f t e r − 7 B M_{Drafter-7B} MDrafter7B 在 TriviaQA 上超过最具竞争力的标准 RAG 模型 Mixtral-Instruct8x7B 0.33%,在 MuSiQue 上超过 2.15%,在 PubHealth 上超过 12.97%,在 ARC-Challenge 上超过 2.14%。在指令调整参数数量相当的情况下, M V e r i f i e r − 7 B M_{Verifier-7B} MVerifier7B + M D r a f t e r − 7 B M_{Drafter-7B} MDrafter7B 的表现优于所有 Self-Reflective 和 Corrective RAG 方法,而 M D r a f t e r M_{Drafter} MDrafter 本身在大多数情况下也能超过这些基线。

RAG Drafter 的有效指令调整

指令调整有效地提高了草稿模型的推理能力,此外,当 Mixtral 8x7B 与经过指令调整的 RAG M D r a f t e r − 7 B M_{Drafter-7B} MDrafter7B 配对时,其性能显著提高,在 TriviaQA 上提高了 14.39%,在 MuSiQue 上提高了 12.41%,在 PubHealth 上提高了 39.52%,在 ARCChallenge 上提高了 31.83%。Mistral7B 也有类似的改进。在 Mistral7B 中,观察到 TriviaQA 提高了 19.76%,MuSiQue 提高了 14.32%,PubHealth 提高了 40.94%,ARC-Challenge 提高了 33.44%。作者将这些改进归功于 RAG drafter 对 SPECULATIVE RAG 中检索文档的卓越推理能力。通过最大限度地减少采样文档中的冗余,RAG drafter 根据检索结果中的不同观点生成了更高质量的答案草案。

延迟分析

作者分析了标准 RAG 和 SPECULATIVE RAG 在 TriviaQA、MuSiQue、PubHealth 和 ARC-Challenge 上的延迟。从每个数据集中随机抽取 100 个示例,并报告每个示例的平均时间成本,如图 2 所示。

图 2:标准 RAG 和 SPECULATIVE RAG 的延迟差异以红色标出(+x%)。TP 表示标准 RAG 运行 Mixtral-Instruct 8x7B 时的张量并行大小。由于检索文档的长度不同,不同数据集的延迟也不同。

为了模拟真实世界的应用场景,在不分批的情况下单独处理示例。作为代表性示例,在 SPECULATIVE RAG 和 Standard RAG 中分别运行了 M V e r i f i e r − 8 x 7 B + M D r a f t e r − 7 B M_{Verifier-8x7B} + M_{Drafter-7B} MVerifier8x7B+MDrafter7B 和 Mixtral-Instruct8x7B,因为它们在具有竞争力的基线中表现出了最高的性能(见表 1)。

为 TriviaQA、PubHealth 和 ARC-Challenge 启动了 5 个 M D r a f t e r − 7 B M_{Drafter-7B} MDrafter7B 端点,用于并行生成答案草稿。由于答案草稿数量较多,作者为 MuSiQue 启动了 10 个端点。使用张量并行技术将 Mixtral-Instruct 8x7B 装入 GPU 内存。在图 2 报告了Mixtral-Instruct 8x7B在张量并行度为4、8、16时的延迟情况。由于张量聚合和通信的开销,增加张量并行度并不能提高效率。相比之下,SPECULATIVE RAG 采用了较小的 RAG drafter 和并行答案草稿生成技术,在所有数据集上始终实现了最低的延迟。特别是,它在 TriviaQA 上将延迟降低了 23.41%,在 MuSiQue 上降低了 17.28%,在 PubHealth 上降低了 51.25%,在 ARC-Challenge 上降低了 26.73%。这凸显了 SPECULATIVE RAG 在保持高性能的同时缩短处理时间的优势。

总结

提出的 SPECULATIVE RAG 将 RAG 任务分解为两个独立的步骤:起草和验证。SPECULATIVE RAG 将繁重的起草工作委托给小型专业 RAG drafter,而验证工作则由大型通用 LM 完成。从不同的文档子集并行生成多个草稿,既能提供高质量的候选答案,又能减少输入 tokens 和位置偏差超过 long context 的潜在风险,从而大幅提高最终输出生成的质量和速度。作者证明了 SPECULATIVE RAG 的有效性,与传统 RAG 系统相比,其准确率提高了 12.97%,延迟时间缩短了 51%。SPECULATIVE RAG 为协作架构通过任务分解提高 RAG 性能的潜力提供了新的启示。

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

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

相关文章

MySQL:JOIN 多表查询

多表查询 在关系型数据库中&#xff0c;表与表之间是有联系的&#xff0c;它们通过 外键 联系在一起&#xff0c;所以在实际应用中&#xff0c;经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 MySQL多表查询是数据库操作中非常重要的一部分&#xff0c;它允许你…

《从C/C++到Java入门指南》- 17.命令行参数

命令行参数 一直写代码的童鞋可能留意到了&#xff0c;main函数中会传入一个String args[]的字符串数组。 这个数组由JVM接收用户输入并传给main函数。 import java.util.*; public class Main {public static void main(String[] args) {for (String arg : args) {System.out…

[Redis]典型应用——缓存

什么是缓存 缓存&#xff08;Cache&#xff09;是一种用于临时存储数据的机制&#xff0c;目的是提高数据访问速度和系统性能。 核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方&#xff0c;方便随时读取 缓存是一个相对的概念&#xff0c;比如说&#xff0c…

[CSS] 浮动布局的深入理解与应用

文章目录 浮动的简介元素浮动后的特点解决浮动产生的影响浮动后的影响解决浮动产生的影响 浮动相关属性实际应用示例示例1&#xff1a;图片与文字环绕示例2&#xff1a;多列布局示例3&#xff1a;响应式布局 总结 浮动布局是CSS中一种非常强大的布局方式&#xff0c;最初设计用…

as是python关键字吗

关键字as的作用把紧跟其后的对象代替其前方的一个对象&#xff0c;其作用效果如下所示&#xff1a; import scrapy as tools 这个表达式中就是在当前这个模块中&#xff0c;使用tools可以代替scrapy&#xff0c;相当于C中的宏定义。在该as作用域中&#xff0c;可以使用tools来代…

STM32CubeIDE工程编译提示“has a LOAD segment with RWX permissions”解决办法

0 问题描述 使用STM32CubeIDE进行STM32MP135的开发时&#xff0c;编译过程打印了如下警告&#xff1a; 描述&#xff1a;has a LOAD segment with RWX permissions1 解决办法 右键工程&#xff0c;依次点击Properties->C/C Build->Settings->MCU GCC Linker->M…

如何将PDF转换成可以直接编辑的CAD图纸?

PDF图纸是为了让用户更好的阅览CAD文件&#xff0c;但是&#xff0c;当我们想要对其进行编辑的时候&#xff0c;PDF图纸就是一个麻烦了。那么PDF转换成CAD后可以编辑吗&#xff1f;如何将PDF转换成可以直接编辑的CAD图纸呢&#xff1f;本篇给你答案。 1、启动迅捷CAD编辑器&…

vcs+verdi搭建基础仿真的版本V1

2024-7-20 数字软件安装&#xff0c;仿真环境测试 dut重新修改 makefile重新修改 verdi整合完成 dut.v module dut ( );reg clk;initial beginclk 0;forever begin#10 clk ~clk;endendinitial begin$fsdbDumpfile("verilog.fsdb");$fsdbDumpvars();$vcdpluson;$…

WAAP安全防护能力

利用传统安全漏洞发动攻击的难度不断提升&#xff0c;攻击者的重心从传统的应用漏洞转向无明显攻击特征&#xff0c;模拟合法业务操作的自动化攻击。Web应用程序和API面临众多攻击场景&#xff0c;根据国内的情况进行汇总分析&#xff0c;主要分为恶意爬虫防护、安全攻击防护、…

电脑显示mfc140u.dll丢失的修复方法,总结7种有效的方法

mfc140u.dll是什么&#xff1f;为什么电脑会出现mfc140u.dll丢失&#xff1f;那么mfc140u.dll丢失会给电脑带来什么影响&#xff1f;mfc140u.dll丢失怎么办&#xff1f;今天详细给大家一一探讨一下mfc140u.dll文件与mfc140u.dll丢失的多种不同解决方法分享&#xff01; 一、mfc…

【Espressif-ESP32S3】【VScode】安装【ESP-IDF】插件及相关工具链

一、ESP-IDF简介 二、VScode安装ESP-IDF插件 三、安装ESP-IDF、ESP-IDF-Tools以及相关工具链 四、测试例程&编译烧录 五、IDF常用指令 资料下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/15Q2rl2jpIaKfj5rATkYE6g?pwdGLNG 提取码&#xff1a;GLNG 一、ESP-…

Linux 文件安装的mysql 启动

1、找到my.cnf 2、确定文件类容&#xff1a; 并确保这些重要的配置&#xff1a;basedir 、datadir、socket 文件或目录都存在 3、找到mysqld 位置 4、启动mysqld mysqld --defaults-file/etc/my.cnf --usermysql

Codeforces Round 960 (Div. 2)

文章目录 题目链接A. Submission BaitB. Array CraftC. Mad MAD Sum 题目链接 点击跳转codeforces A. Submission Bait 这是一道博弈题&#xff0c;比较简单&#xff0c;但是赛时直接就WA了两发&#xff0c;刚开始把题想简单了&#xff0c;第二发没有考虑清楚。  题意&#…

【云原生】Prometheus 服务自动发现使用详解

目录 一、前言 二、Prometheus常规服务监控使用现状​​​​​​​ 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…

又缩水Unity7月闪促限时4折活动模块化角色模板编辑器场景美术插件拖尾怪物3D模型UI载具AI对话TPS飞机RPG和FPS202407

Flash Deals are Coming Back! 限时抢购又回来了&#xff01; July 17, 2024 8:00:00 PT to July 24, 2024 7:59:00 PT 太平洋时间 2024 年 7 月 17 日 8&#xff1a;00&#xff1a;00 至 2024 年 7 月 24 日 7&#xff1a;59&#xff1a;00&#xff08;太平洋时间&#xff09;…

ThreadX打印tick(时钟滴答)方法

0 工具准备 ThreadX V6.2.0 1 ThreadX打印tick&#xff08;时钟滴答&#xff09;方法 int ostick(void) {printf("tick : %lu\r\n", _tx_time_get());return 0; }打印效果展示&#xff1a;

240717.LeetCode——2974.最小数字游戏

题目描述 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff0c;游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下&#xff1a; 每一轮&#xff0c;Alice 先从 nums 中移除一个 …

[译] Rust项目的基础设施

本篇是对 RustConf 2023中的Infrastructure for Rust这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. 我今天要和大家讨论支持Rust及Rust项目的基础设施。Rust是一门令人惊叹的语言,我非常喜欢它,看到它的普及度和社区的成长令人非常满意。但从项…

电力需求预测挑战赛笔记 Task3 #Datawhale AI 夏令营

上文&#xff1a; 电力需求预测挑战赛笔记 Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读80次。【代码】电力需求预测挑战赛笔记 Task2。https://blog.csdn.net/qq_23311271/article/details/140360632 前面我们介绍了如何使用经验模型以及常见的lightgbm决策树模型来解决…

GIT命令学习 一

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监控,备份,应急故障处理 ​​