深度图学习与大模型LLM(小编):
大家好,今天与
大家分享一篇最新发布的研究论文。
这篇论文提出了一种基于图的Retrieval-Augmented Generation (RAG)方法,用于对整个文本语料库进行Query-Focused Summarization (QFS)。该方法很好地结合了知识图谱生成、RAG和QFS技术,为理解文本语料库的整体层面的意思提供了新思路。
1. 基本信息
-
论文题目:From Local to Global: A Graph RAG Approach to Query-Focused Summarization
-
作者:Darren Edge, Ha Trinh, Newman Cheng, Joshua Bradley, Alex Chao, Apurva Mody, Steven Truitt, Jonathan Larson
-
作者研究单位:Microsoft Research, Microsoft Strategic Missions and Technologies, Microsoft Office of the CTO
-
代码链接:https://aka.ms/graphrag
2. 介绍
现有的Retrieval-Augmented Generation (RAG)方法能够从外部知识源中检索相关信息,使Large Language Models (LLMs)能够回答关于私有或未见过的文档集合的问题。
但是,当回答全局性问题时,比如"数据集的主要主题是什么?",RAG方法往往无法给出满意的答案,因为这本质上是一个Query-Focused Summarization (QFS)任务,而非单纯的信息检索任务
。另一方面,现有的QFS方法也难以扩展到典型RAG系统所索引的海量文本。为了结合这两类方法的优势,作者提出了Graph RAG方法,用于私有文本语料库的问答,该方法能够适应不同普适性的用户问题和不同规模的源文本数据。
3. 方法
Graph RAG方法利用LLM分两个阶段构建基于图的文本索引:
-
-
为相关的实体组预生成Community Summaries
给定一个问题,每个Community Summary被用来生成一个局部答案,然后所有局部答案再次被汇总为给用户的最终答案。
Graph RAG的主要流程包括以下步骤(见Figure 1):
-
从源文档中提取文本块(左第一行)。作者讨论了文本块粒度的选择对后续图索引质量的影响。较长的文本块需要更少的调用,
但由于LLM上下文窗口的限制,可能导致信息丢失和召回率下降
。因此,需要在召回率和精确率之间进行权衡。
-
使用LLM提示从文本块中提取图元素实例(节点、边、协变量)
(
左第2/3
行
)
。作者设计了多部分LLM提示,先识别文本中的所有实体,包括实体名称、类型和描述,然后识别相关实体之间的关系,包括源实体、目标实体和关系描述。Prompt可以根据领域进行定制,例如针对科学、医学、法律等专业领域,可以使用特定的few-shot示例来提高提取质量。
作者还引入了"gleaning"的概念,通过多轮提取来提高召回率,同时避免引入噪声。
-
使用LLM汇总图元素实例
(
左第4
行
)
,生成图元素摘要。在这一步,LLM已经提取出了隐含在源文本中的知识(如隐含关系),形成了独立的概念摘要。接下来,需要对所有指向同一图元素(实体、关系、协变量)的实例进行汇总,生成统一的描述性文本。
值得注意的是,由于LLM提取的实体引用可能存在不一致的情况,导致图中出现重复节点。
但只要所有变体与一组共同的密切相关实体有足够的连接,Graph RAG的整体方法就具有较强的鲁棒性。
-
使用社区检测算法(如Leiden)对图索引进行分区,得到图社区(
右第4
行
)。图索引可以建模为无向加权图,边表示检测到的关系实例数的数量。在这种图上,可以使用各种社区检测算法进行分区,得到节点间连接更紧密的社区。
Leiden算法能够有效地检测大规模图的层次社区结构,每一层社区划分都以互斥且完全穷尽的方式覆盖了图的节点,从而支持分治的全局摘要。
-
使用LLM生成Community Summaries
(
右第3
行
)
。Community Summaries本身就是对数据全局结构和语义的高度概括,即使没有问题,用户也可以通过浏览不同层次的Community Summaries来理解语料库。Community Summaries的生成方式需要能够扩展到非常大的数据集。子社区的summaries通过优先级将社区元素摘要(节点、边、协变量)迭代添加到LLM上下文窗口中,直到达到token限制。
更高级别的社区摘要则迭代用子社区摘要替换元素摘要来压缩上下文,直到适合上下文窗口。
-
对于给定的查询,使用Community Summaries生成Community Answers
(
右第2
行)
。根据社区在层次结构中的级别,Community Summaries用于以不同的方式生成最终答案。无论使用哪个级别,基本思路都是随机打乱Community Summaries并划分为指定大小的块,确保相关信息分布在不同的上下文窗口中。然后并行地从每个块中生成中间答案,并附上一个指示其对目标问题有多大帮助的打分。
-
使用查询相关的摘要对Community Answers进行汇总,生成最终答案
(
右第1
行)
。中间Community Answers按照相关性打分降序排列,迭代添加到一个新的上下文窗口中,直到达到token限制。
这个最终上下文用于生成返回给用户的全局答案。