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

论文地址: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.mzph.cn/diannao/48624.shtml

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

相关文章

编程中的智慧六:单例、原型、建造者

上一篇咱们结合Spring介绍了设计模式中的工厂模式相关方法&#xff0c;其实现在Java开发基本上都是基于Spring框架开发&#xff0c;所以后续我们在开发过程中基本上很少自己重写一个工厂模式&#xff0c;都是直接使用Spring来完成。今天咱们接着看剩下的创建型设计模式&#xf…

Dubbo学习笔记

Dubbo 简介 Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架&#xff0c;可以和Spring框架无缝集成。 其中文官网:https://dubbo.gitbooks.io/dubbo-user-book/content/ 特性和用法 架构 节点角色说明 节点角色…

应用层的重点协议

目录 一、DNS 二、NAT 1、技术背景 2、NAT机制IP转化过程 三、NAPT NAT技术的缺陷 四、HTTP 1、协议格式 2、HTTP请求 1&#xff09;method(方法) GET请求的特点 POST请求的特点 GET和POST的区别 2&#xff09;URL(网址) 基本格式 关于URL encode 3&#xff0…

el-table表头使用el-dropdown出现两个下拉框

问题描述&#xff1a;el-table在固定右边列时&#xff0c;表头使用el-dropdown会出现两个下拉框&#xff0c;如图所示&#xff1a; 解决方法&#xff1a; 1.只显示第一个下拉框&#xff0c;通过控制样式将其他的下拉框display:none; 2.如图所示&#xff0c;修改插槽写法&…

<数据集>学生课堂行为识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13899张 标注数量(xml文件个数)&#xff1a;13899 标注数量(txt文件个数)&#xff1a;13899 标注类别数&#xff1a;8 标注类别名称&#xff1a;[js, tt, dk, zt, dx, zl, jz, xt] # 举手 js # 抬头听课 …

从FasterTransformer源码解读开始了解大模型(2.3)代码通读04

从FasterTransformer源码解读开始了解大模型&#xff08;2.3&#xff09;代码解读04-forward函数 写在前面的话 本篇的内容继续解读forward函数&#xff0c;从972行开始进行解读 零、embedding函数 让我们考虑一种不包含prefix_soft_prompt的情况&#xff0c;从999行的embe…

在 PostgreSQL 里如何实现数据的冷热数据分层存储的自动化策略调整?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的冷热数据分层存储的自动化策略调整 在 PostgreSQL 里如何实现数据的冷…

【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是我国2013——2022年的省…

mongodb数据导出与导入

一、先去检查mongodump mongodump --version 如果报 mongodump version: built-without-version-string 或者其他的较老的版本&#xff0c;直接去下载最新的【传送门】 【以Ubuntu18.04为例】 安装工具 假设你下载的是 .tgz 文件&#xff08;适用于 Linux 系统&#xff09;&am…

【项目】星辰博客介绍

目录 一、项目背景 二、项目功能 1. 登录功能&#xff1a; 2. 列表页面&#xff1a; 3. 详情页面&#xff1a; 4. 写博客&#xff1a; 三、技术实现 四、功能页面展示 1. 用户登录 2. 博客列表页 3. 博客编辑更新页 4.博客发表页 5. 博客详情页 五.系统亮点 1.强…

高性能图数据库Neo4j从入门到实战

图数据库Neo4j介绍 什么是图数据库&#xff08;graph database&#xff09; 随着社交、电商、金融、零售、物联网等行业的快速发展&#xff0c;现实社会织起了了一张庞大而复杂的关系网&#xff0c;传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈…

【数据结构】栈和队列的深度探索,从实现到应用详解

&#x1f48e;所属专栏&#xff1a;数据结构与算法学习 &#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f341;1. 栈的介绍 栈是一种后进先出的数据结构&#xff0c;栈中的元素只能从栈顶进行插入和删除操作&#xff0c;类似于叠盘子&#xff0c;最后放上去的盘子最…

广州机房搬迁网络部署方案

新机房网络部署应包括核心模块、业务模块、光传输模块、安全模块、流量采集模块、路由模块、带外管理模块等&#xff0c;每个模块都根据业务需求规划成多个POD&#xff08;Point Of Delivery&#xff0c;基本物理设计单元&#xff09;。 核心模块部署主要实现各业务模块的高速互…

HighConcurrencyCommFramework c++通讯服务器框架 :目录,修改标题,配置,日志打印

目录规划 nginx 根目录下的三个文件 makefile :编译项目的入口&#xff0c;编译项目从这里开始 config.mk&#xff1a;也是个配置脚本用来增加变动的东西&#xff0c;应付可变 common.mk&#xff1a;最核心的编译脚本&#xff0c;每个子目录都要被编译.cpp程序 配置文件 配…

postman创建mock server

B站博主的说明&#xff1a;

《python语言程序设计》第6章2题(求一个整数各个数字的和)编写一个函数

求一个整数各个数字的和编写一个函数&#xff0c;计算一个整数各个数字的和&#xff0c; def sumDigits(n):a n // 100b n % 100 // 10c n % 100 % 10print(f"{n}数&#xff0c;分成个&#xff0c;十&#xff0c;百&#xff0c;{a}{b}{c}", a b c)sumDigits(23…

算法日记day 16(二叉树的广度优先遍历|反转、对称二叉树)

一、二叉树的层序遍历 题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3]…

SQUID - 形状条件下的基于分子片段的3D分子生成等变模型 评测

SQUID 是一个形状条件下基于片段的3D分子生成模型&#xff0c;给一个3D参考分子&#xff0c;SQUID 可以根据参考分子的形状&#xff0c;基于片段库&#xff0c;生成与参考分子形状非常相似的分子。 SQUID 模型来自于 ICLR 2023 文章&#xff08;2022年10月6日提交&#xff09;&…

vue+watermark-dom实现页面水印效果

前言 页面水印大家应该都不陌生&#xff0c;它可以用于验证数字媒体的来源和完整性&#xff0c;还可以用于版权保护和信息识别&#xff0c;这些信息可以在不影响媒体质量的情况下嵌入&#xff0c;‌并在需要时进行提取。‌本文将通过 vue 结合 watermark-dom 库&#xff0c;教大…

OpenCV 像素操作—证件照换底色详细原理 C++纯手写实现

文章目录 总体步骤1.RGB转HSV2.找出要换的底色3.取反&#xff0c;黑白颠倒4.将原图像的非背景部分复制到新背景上 完整代码1.C纯手写版2.官方API版本 总体步骤 1.RGB转HSV 为什么一定要转为HSV 颜色空间&#xff1f; 将图像从BGR颜色空间转换为HSV颜色空间是因为HSV颜色空间更…