今天是2024年10月31日,星期四,北京,天气晴,2024年10月份的最后一天。
本文主要介绍3个工作,一个是SubgraphRAG:知识图谱与RAG结合,一个是AutoRAG优化思路,一个是计划指导的检索增强生成PlanxRAG,其中涉及到的一些技术知识点,对我们进一步认识RAG及其前沿进展,有直接收益;
供大家一起参考并思考。
一、AutoRAG优化思路
继续来看工作,《AutoRAG: Automated Framework for optimization of Retrieval Augmented Generation Pipeline》,https://arxiv.org/abs/2410.20878,https://github.com/Marker-Inc-Korea/AutoRAG_ARAGOG_Paper,这个工作提出的AutoRAG是一个自动化框架,通过系统评估不同的RAG设置来优化技术选择,该框架类似于传统机器学习中的AutoML实践,通过广泛实验来优化RAG技术的选择;AutoRAG通过模块化节点和定义策略来动态选择最有前途的节点,构建接近最优的pipeline,提高RAG系统的效率和可扩展性。
这个工作更适合作为一个技术的回顾来看,以及怎么找到的最佳的组合策略,其 探讨了多种RAG技术,包括查询扩展、检索、段落增强、段落重排和提示创建。
1、All RAG techniques used in this paper
2、查询扩展(Query Expansion)
改善检索性能,通过扩展用户查询来创建更好的搜索查询。
Query Decompose使用LLM将多个问题分解为单个问题;
HyDE(Hypothetical Document Embedding)利用LLM生成假设性段落,提高与实际相关段落的语义相似度。
3、段落增强(Passage Augmenter)
通过获取额外的相关段落来增强检索性能。可以使用Prev-Next Passage Augmenter,利用相邻段落的元数据进行二次搜索,以找到与初始检索集上下文相关的更多段落。
4、段落重排(Passage Reranker)
在初始检索阶段后,对段落进行重新排序以提高检索的准确性。
包括有:
LM-based Reranker使用微调的语言模型对查询-段落对的相关性进行评分;
LLM-based Reranker利用LLM通过提示工程来重新排序段落;
Embedding-based Reranker使用密集向量表示来捕捉查询和文档之间的语义相似性;
Log prob-based Reranker基于从给定段落生成查询的对数概率来评估相关性。
5、提示创建(Prompt Maker)
将检索到的段落包含在提供给LLM的提示中,以实现上下文学习。其中可以使用的是,f-string将用户查询、检索到的段落和指令连接起来;long context reorder:解决“迷失在中间”现象,确保最相关的段落同时出现在输入提示的开始和结束部分。
4、各个阶段的评估指标
这块的评估指标包括很多,如下
二、计划指导的检索增强生成PlanxRAG
现有的Retrieval Augmented Generation(RAG)框架在处理复杂查询时的性能和幻觉问题,以及缺乏归因的问题。最近的工作《PlanxRAG: Planning-guided Retrieval Augmented Generation》,https://arxiv.org/pdf/2410.20753,Plan×RAG通过将传统的“检索-推理”范式转变为“规划-检索”范式,提出了一种新的处理复杂查询的方法。
从名字上看,PlanxRAG包括Plan和RAG两个部分。
一个是推理计划的表示是一个核心,Plan×RAG将推理计划表示为一个有向无环图(DAG),将主查询分解为相互关联的原子子查询。这种结构化的方法允许高效的信息共享和并行化处理。
1、一个具像化的例子
Figure 3展示了一个由推理计划专家生成的推理有向无环图(DAG)的例子。
展示了一个关于“最后两届男子板球世界杯决赛举办地之间的距离”的查询。这个查询被分解为以下几个子查询:
Q1.1:上一届男子板球世界杯决赛在哪里举行?
Q1.2:上上届男子板球世界杯决赛在哪里举行?
Q2.1:Q1.1中的答案地点的坐标是什么?
Q2.2:Q1.2中的答案地点的坐标是什么?
Q3.1:Q2.1和Q2.2中的答案地点之间的距离是多少?
在这个DAG中,Q1.1和Q1.2可以独立处理,Q2.1和Q2.2也可以独立处理,而Q3.1依赖于Q2.1和Q2.2的结果。这种结构不仅允许并行处理,还使得每个子查询的归因变得直接和清晰。如果Q3.1的结果不正确,可以通过检查Q2.1和Q2.2的结果来确定问题所在,并进行相应的修正。
几个特点:
相关信息流: 一个查询被分解为多个子查询,每个子查询都与相关信息流相关联。这意味着每个子查询只处理与它直接相关的信息,从而提高了处理的效率和准确性;
并行执行: 在DAG中,同一深度的子查询可以并行执行。这是因为这些子查询是相互独立的,可以同时处理,从而减少了总体的响应时间。这种并行化处理是DAG结构的直接结果,因为它允许系统同时处理多个节点;
固有的归因: DAG的设计使得每个子查询的生成可以直接归因到一个特定的检索文档。这种归因是固有的,因为每个子查询通常只依赖于一个相关的文档。这有助于提高系统的可解释性和信任度,因为可以清楚地追踪每个生成的响应与其来源文档之间的关系;
调试和回溯: DAG结构允许系统进行调试和回溯。如果生成的最终答案不正确,可以通过DAG的结构从叶子节点回溯到根节点,识别出错的节点,并对其进行修正。这种能力提高了系统的可调试性,使得可以更容易地识别和纠正错误。
2、关于DAG的过程
图3展示了一个推理有向无环图(DAG)的例子。
每个节点都编号为⟨i.j⟩,其中i指的是节点距离根节点的深度,j指的是在同一深度的节点中的索引。推理DAG的一个显著特点是使用了一个特殊标签⟨AI.J⟩,它使得动态子查询的生成成为可能。在标签⟨AI.J⟩中,I和J是代表完成子查询所需的问题ID的整数值。例如,在图3中,子查询Q2.1依赖于子查询Q1.1的答案;特殊标签⟨A1.1⟩允许在运行时动态填充答案。
1) 查询分解:给定一个复杂查询,Plan×RAG首先将其分解为一系列更小、独立且相互关联的原子子查询。这些子查询是构成DAG的节点,每个节点代表一个需要回答的子问题。
2)构建DAG: DAG的构建遵循Markov假设,即一个子查询的答案仅依赖于其父节点的答案。 DAG的根节点是主查询,而叶节点是原子子查询,这些子查询可以直接通过单个文档回答。通过这种方式,DAG确保了查询的分解和组织,使得子查询之间没有循环依赖,并且所有节点都连接起来,形成一个有向的、无环的图结构。
3)查询DAG:在子查询中,使用特殊的标签来表示需要从父查询答案中动态填充的信息。这些标签在运行时被实际的答案替换,从而动态生成完整的子查询。
4)处理DAG:生成器(LM)按照拓扑顺序处理DAG中的每个节点。对于每个节点,都会调用一组插件式专家来控制生成过程,包括动态生成子查询、访问检索需求以及识别每个子查询的相关文档。此外,DAG的结构允许对同一深度的节点或DAG中独立路径上的节点进行并行处理,这显著减少了延迟,并提高上下文处理的效率。
3、关于多个专家
这个专家包括插件式专家(Plug-and-Play Experts):Plan×RAG集成了一组独立的插件式专家,如批评家专家(critic expert)和相关性专家(relevance expert),这些专家协同工作,提高LLM生成响应的准确性、可靠性和可解释性。
如上图所示,动态查询专家负责生成子查询,捕捉子查询之间的马尔可夫依赖关系,这个主要是根据prompt提示大模型生成;
批评家专家在生成过程中按需进行检索,评估何时需要额外的信息;
相关性专家精炼检索过程,确保选择最相关的文档;
聚合器专家将多个子查询的答案组合成对原始查询的综合响应;插拔式专家可以与任何预训练的LM集成。
三、SubgraphRAG:知识图谱与RAG结合
《Simple is Effective: The Roles of Graphs and Large Language Models in Knowledge-Graph-Based Retrieval-Augmented Generation》,https://arxiv.org/pdf/2410.20724,提出了一个名为SubgraphRAG的知识图谱(KG)增强型检索增强生成(RAG)框架。
SubgraphRAG旨在通过结合大模型(LLMs)和结构化的知识图谱(KGs)来解决LLMs在推理能力上的局限性,核心思想是先检索与查询相关的子图,然后利用LLMs进行推理和答案预测。
一个具像化的认识: 查询示例:图 1 中的查询是询问 “Which organizations have business partnerships with at least one company founded respectively by Elon Musk, Jeff Bezos, and Bill Gates - but weren't founded by any of them?”
子图检索:SubgraphRAG 会检索包含 Elon Musk、Jeff Bezos 和 Bill Gates 创立的公司以及与这些公司有商业合作关系的组织的三元组。
答案:在这个例子中,SubgraphRAG 返回的答案是 [Nvidia, Nasa]。Nvidia 与 Tesla(由 Elon Musk 创立)、Amazon(由 Jeff Bezos 创立)和 Microsoft(由 Bill Gates 创立)都有商业合作关系,而 Nvidia 本身并非由这三人中的任何一个创立。
可以看下其核心步骤:
SubgraphRAG的实现步骤可以分为以下几个关键阶段:
1、查询解析和实体提取(Query Analysis and Entity Extraction):
首先,SubgraphRAG从用户查询中识别出主题实体(Topic Entities)。这些实体是查询中直接提及的或者与查询紧密相关的知识图谱中的节点。
2、子图提取(Subgraph Extraction):
子图提取过程包括两个主要部分:
结构特征构建(Structural Feature Construction):这一步骤中,SubgraphRAG 会计算查询中的实体与知识图谱中实体之间的结构距离,使用方向性距离编码(DDE)来表示这些距离。
并行提取相关三元组(Extract Relevant Triples in Parallel):在这一步骤中,SubgraphRAG 并行地从知识图谱中提取与主题实体相关的三元组。
具体的,使用一个轻量级的多层感知器(MLP)模型来编码和评估潜在子图的相关性。然后,基于MLP的评分,从知识图谱中检索最相关的子图。
3、LLM推理(LLM Reasoning):
最后是,设计了专门的提示模板,这些模板指导LLM如何利用检索到的子图信息来生成答案。
总结
本文主要介绍了3个工作,一个是SubgraphRAG:知识图谱与RAG结合,一个是AutoRAG优化思路,一个是计划指导的检索增强生成PlanxRAG,其中涉及到的一些技术知识点,对我们进一步认识RAG及其前沿进展,有直接收益;
10月份就这么过了,时间真的过的很快,我们11月见;
参考文献
1、https://arxiv.org/abs/2410.20878
2、https://arxiv.org/pdf/2410.20753
3、https://arxiv.org/pdf/2410.20724
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入