有趣的“分而治之RAG”- Speculative RAG实现策略:兼看20240713大模型技术总结回顾

今天是2024年7月14日,星期日,北京,天气雨。

我们来看两个问题,一个是回顾20240713大模型进展早报,看看有哪些可以跟进的技术点。另一个是Speculative RAG框架思路,可以看看其分而治之的设计思路。

供大家一起参考并思考。

1、问题1:回顾20240713大模型进展早报

我们先来回顾昨日大模型进展早报(社区每日例行事宜),主要涉及到RAG、GraphRAG相关以及老刘说NLP线上交流总结。

我们来看看文字版本:【老刘说NLP20240713大模型进展早报】

1、老刘说NLP线上报告集锦,目前全集包括25+,当前分为《知识图谱与NLP专题》、《大模型训练、微调及评估专题》、《RAG、文档智能与知识图谱融合主题》三大专题。为了方便社区成员更好索引,做了整理,有历史视频备份及回放,欢迎大家使用。

知识图谱与NLP主题系列,包括学习路径指引、领域知识图谱与事件图谱应用探索、开源项目实操等多次报告:https://mp.weixin.qq.com/s/Mb2zTn9pAky3gOMuyOdYQw

大模型训练、微调及评估专题,主要涉及大模型基本认知、领域微调模型实现范式、大模型、知识图谱与文档智能的落地技术结合范式等多个主题:https://mp.weixin.qq.com/s/UkI4BZuNIeCYQnYpAWDHlg

RAG、文档智能与知识图谱融合主题,主要涉及大模型RAG、KG-RAG、Agent部署、文档智能、模型部署等多个线上分享:https://mp.weixin.qq.com/s/OOkpI4a0djt-02PMpK1dnA

2、Semantic Chunkers:多模态文本、视频和音频分块工具, Multi-modal Chunking Library for AI: https://github.com/aurelio-labs/semantic-chunkers,大家可以看下里面代码,不同模态都是怎么做切分的。

3、文档智能进展。TF-ID学术文章表格/图形识别器,可用于提取学术论文中的表格和图片:https://github.com/ai8hyf/TF-ID

4、关于RAG进展。Speculative RAG: Enhancing Retrieval Augmented Generation through Drafting,https://arxiv.org/abs/2407.08223,经过蒸馏的专家LM并行生成的多个RAG草稿。每个草稿都是根据检索到的文档的不同子集生成的,提供了关于证据的多样化视角,同时减少了每个草稿的输入标记数。

5、关于GraphRAG。GraphRAG科普长文推荐:知识图谱增强生成宣言,为通用人工智能注入知识,https://mp.weixin.qq.com/s/-hfMIgewfGt12ZdbaqYJeQ

6、关于GraphRAG进展。Neo4j开源基于LLM提取知识图谱的生成器lm-graph-builder ,h ttps://github.com/neo4j-labs/llm-graph-builder。https://llm-graph-builder.neo4jlabs.com/

问题2:再看Speculative RAG框架思路

《Speculative RAG: Enhancing Retrieval Augmented Generation through Drafting》(https://arxiv.org/abs/2407.08223),这个工作介绍了一种名为Speculative RAG的新框架,旨在通过“起草”(Drafting)过程来提高大型语言模型(LLMs)结合外部知识源生成更准确和最新响应的能力。

其实现思路很有趣,Speculative RAG框架利用一个更大的通用语言模型来有效验证由一个较小的、蒸馏的专家语言模型并行生成的多个RAG草稿。每个草稿都是基于检索到的文档的不同子集生成的,提供了证据的多样化视角,同时减少了每个草稿的输入token数。

1、现有的多种RAG范式

为了缓解幻觉的问题,当前已经出现了很多不同的RAG实现策略,如下图所示:

(a) 标准RAG (Standard RAG): 这种方法将所有检索到的文档合并到提示中,以便将它们一起用于生成最终答案。这会增加输入长度,减慢推理速度。

(b) 自反思RAG (Self-Reflective RAG): 自反思RAG要求对通用语言模型进行专门的指令调整,以生成特定的标签,用于自我反思。这涉及到在检索到的文档和生成的答案上生成特殊标签。

(c) 修正性RAG (Corrective RAG): 修正性RAG使用一个外部检索评估器来分类检索文档的质量,并在生成答案之前对它们进行细化。它侧重于上下文信息,而没有增强推理能力。

(d) 提出的Speculative RAG: 与上述方法不同,提出的Speculative RAG利用一个更大的通用语言模型来有效验证由一个较小的、专业的LM并行生成的多个RAG草稿。每个草稿都是基于检索到的文档的一个独特子集生成的,提供了证据的多样化视角,同时最小化了每个草稿的输入token数。

2、Speculative RAG的实现思路

先看问题界定,在知识密集型任务中,每个条目可以表示为(Q, D, A),其中Q是需要额外知识的疑问或陈述;D={d1, ..., dn}是从数据库检索的n个文档集;A是预期的答案。特别是在问答任务中,Q和A分别是自然语言形式的问题和预期答案;

在陈述验证任务中,Q是一个陈述,A∈{True, False}是一个布尔值,表示陈述的正确性;

在多项选择任务中,Q是一个带有少数选项的问题,A∈{A, B, C, ...}是正确答案的索引。

RAG系统的目标是根据检索到的支持文档提供的上下文,生成一个包含预期答案的流畅响应或从提供的选项中选择预期答案。

再看具体思想,Speculative RAG本质上是一种分而治之的方法。使用一个较小的专家LM,即RAG草稿生成器,基于检索结果快速生成多个答案草稿。然后,一个较大的通用LM,即RAG验证器,评估这些草稿,根据其理由选择最佳草稿,并将其整合到生成结果中。

形式化如下:

Query: 给定一个查询;Generalist LM: 当遇到知识密集型查询时,调用通用语言模型;Specialist RAG Drafter: 一个专家RAG草稿生成器,用于并行生成多个草稿和理由;Evaluate & Accept Drafts: 通用语言模型评估每个答案草稿,并基于问题和理由并行接受最佳草稿。

具体来说:

首先根据它们与提出问题的关系对检索到的文档进行聚类,每个聚类代表检索结果中的一个视角(第2行),然后从每个聚类中抽取一个文档到一个子集中,这样这个子集中的文档就涵盖了检索结果中的多种视角,目标是最小化冗余并增加文档的多样性(第5到8行)。

记一个子集为δ⊂D,其中包含具有不同内容和检索结果中多种视角的检索文档。然后,将每个子集δ分发到RAG草稿生成器MDrafter,并提出问题Q以并行生成答案草稿α和理由β(第12行)。

RAG草稿生成器经过指令微调,成为理解检索文档并产生忠实于输入文档的专家。它比通用LM小,并且其并行处理进一步确保了高效率。对于MDrafter的每对草稿-理由(α, β),使用通用LM MVerifier根据问题Q和相应的理由β计算置信分数(第13行)。

值得一提的是,MVerifier不需要进行指令调整,因为利用了它在预训练期间已经学习到的语言建模能力。同时,MVerifier可以根据MDrafter提供的信息丰富的理由来验证草稿,而不必处理繁琐或可能冗余的检索文档。

最后,选择置信分数最高的答案草稿作为最终答案,并将其整合到通用LM的生成结果中(第15行)。

3、专家RAG草稿生成器

首先是做微调,Instruction Tuning。训练MDrafter生成答案草稿和理由,以更好地理解上下文文档,在指令微调阶段,给定一个三元组(Q, A, D),其中Q是一般查询,A是响应,D是检索到的支持文档,根据文档D对响应A的理由进行扩充。

将理由表示为E,它从文档中提取关键信息,并简洁地解释为什么响应对查询是合理的,因此它较短,并且与原始文档提供的信息一致。然后利用相对较强的语言模型自动为每个三元组合成理由E。具体来,直接查询大语言模型以理解文档中的知识,并提供指令和响应之间的中间理由。

其次是多样性采样Multi-Perspective Sampling。对于每个知识密集型问题,使用提出的问题作为检索查询从数据库中检索一组文档。这些文档可能由于查询内在的歧义而包含多样化的内容。为了最小化用于生成答案草稿的文档子集的冗余并增强多样性,采用了多视角抽样策略。

首先使用指令感知的嵌入模型(《Answer is all you need: Instruction-following text embedding via answering the question》,https://arxiv.org/abs/2402.09642)和K-Means聚类算法将文档聚类为几个主题。

然后从每个聚类中随机抽取一个文档到文档子集δ,以便每个子集包含k个不同内容的文档

最后是RAG Drafting,在m个文档子集上运行MDrafter,并产生相应的答案草稿。将每个文档子集纳入提示,并查询MDrafter以获取响应,最终获得m个草稿作为答案候选,每个草稿都基于检索结果中的多种视角。

对应的prompt如下:

4、通用RAG验证器

在从RAG草稿生成器MDrafter生成草稿和理由之后,通过一个通用语言模型MVerifier来评估它们,以筛选出不太可靠的草稿并选择最佳答案。通用语言模型可以是任何现成的预训练语言模型。

具体操作上,只考虑草稿-理由对(α, β),并跳过繁琐和冗余的检索结果,利用通用语言模型的语言建模能力来对草稿-理由对进行排名和选择。

这个计算思路很有趣,可以想到是之前的置信度计算方式。

首先,通过确定给定问题下生成草稿-理由对的条件概率来计算自洽分数,记为ρSelf-contain = P(α, β|Q)。这个分数有助于评估草稿和理由在问题上下文中是否自洽。根据语言建模的特性,自洽的草稿-理由对预期会得到更高的概率。

此外,结合一个自我反思陈述R,提示MVerifier评估答案草稿的可靠性(例如,“你认为理由支持答案吗,是或否?”)。定义自我反思分数为ρSelf-reflect = P("Yes"|Q, α, β, R),计算针对自我反思陈述的积极回答("Yes")的条件概率。

在具体实现上,可以在MVerifier的一个前向传播过程中高效地计算自洽和自我反思分数。给定一个问题Q和一个草稿-理由对(α, β),构建一个提示[Q, α, β, R, "Yes"],其中R是自我反思陈述,然后使用MVerifier对提示进行编码,并获取每个令牌在之前令牌条件下的概率P(ti|t<i),利用自回归特性,并聚合相关令牌的概率来计算自洽分数ρSelf-contain和自我反思分数ρSelf-reflect。

最后,产生最终分数,ρj=ρ Draft,j⋅ρ SC,j⋅ρSR,j,然后选择最可靠的答案作为问题的最终答案。

5、几个结论

1)检索中多样性和减少冗余显著提高了草稿质量。

SPECULATIVE RAG将检索到的文档聚类成不同的视角,并从每个聚类中抽取一个文档以减少起草生成时的冗余。将此与两种替代抽样策略进行了比较:**(1) 不进行聚类的随机抽样,随机选择一个文档子集作为上下文;(2) 从同一聚类中抽样,从单一聚类中选择所有文档。**

结果表明,提出的抽样方法由于能够利用多样化的上下文而产生了最佳性能。虽然不进行聚类的随机抽样引入了多样性,但容易包含冗余文档,降低了草稿质量。从同一聚类中抽样由于缺乏多样化视角而表现显著较差。

2)自洽性和自我反思的评分方法有效提升了草稿质量。

轮流移除特定的置信分数,ρDraft、ρSelf-contain或ρSelf-reflect。当任何一个分数被移除时,都观察到性能下降。

总结

本文主要看了两个问题,一个是回顾了昨日的大模型进展,即大模型进展早报(社区每日例行事宜),主要涉及到RAG、GraphRAG相关以及老刘说NLP线上交流总结。

一个是,再看Speculative RAG框架思路,这种思路中对于置信度的计算方式尤其值得关注。

很多工作,都是放在具体的文档里,大家可以仔细的看,总会有一定的收获。

参考文献

1、https://arxiv.org/abs/2407.08223

2、https://arxiv.org/abs/2402.09642

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。


相关推荐

  • SpringBoot+XXL-JOB:高效定时任务管理
  • 微软发布 Visual Studio 17.10.2
  • 网易游戏如何基于 Apache Doris 构建全新湖仓一体架构
  • 软考,拿证了!| 极客时间
  • 大厂期权归属前遭暴力裁员,80 余万期权泡汤;去哪儿宣布每周两天“不坐班”;萝卜快跑是人类远程代驾?客服:无人操控 | Q资讯
  • React 中如何展示 XHR 和 Fetch 的请求响应进度?
  • 一大波,好评!
  • 前端如何用密文跟后端互通?原来那么简单!
  • 对话得物被裁员工:“35岁被暴力裁员”
  • SpringBoot+mail 轻松实现各类邮件自动推送
  • 大型视觉语言模型攻击综述:资源、进展与未来趋势
  • OpenAI 绝密项目「草莓」曝光,前身为Q*,能实现高级推理
  • [开源]一套SpringBoot低代码开发平台,注释完整全面,支持多数据源
  • Spring Boot集成easyposter快速入门Demo
  • 我们公司落地大模型的路径、方法和坑
  • LeaferJS 1.0重磅发布:强悍的前端Canvas渲染引擎
  • Go语言有个“好爹”反而被程序员讨厌?
  • 没听说过MODBUS TCP实时性可能差???
  • 带大家感受一下物种的多样性
  • 像拼搭积木一样同时管理30+数据库引擎