摘要
通过采用检索增强生成(RAG)技术,我们能够让大型语言模型(LLMs)从外部知识库中检索相关信息,从而有效回答来自私有或未曾见过的文档集合的问题。然而,当面对诸如“该数据集涵盖了哪些核心主题?”这样的全局性问题时,RAG就显得力不从心了,因为这类问题本质上是以查询为中心的摘要(QFS)任务,而非简单的检索任务。与此同时,现有的QFS方法在处理RAG系统所能索引的海量文本时,却显得捉襟见肘(算法效率和计算效率)。为了融合这两种方法的优势,我们创新性地提出了图RAG(Graph RAG)方法,专为解答关于私有文本语料库的问题而设计,它不仅适用于各种类型的用户提问,还能轻松应对庞大的文本索引需求:该方法巧妙地利用LLM构建基于图的文本索引,过程分为两个阶段:首先,从源文档中提炼出实体知识图谱;随后,为所有紧密关联的实体群组预先生成社区摘要。在收到用户提问后,系统会利用每个社区摘要生成初步的回答片段,并最终将这些片段汇总成对用户问题的全面而精炼的解答。针对包含数百万个词汇的数据集上的全局性问题,实验结果表明,与传统的RAG方法相比,图RAG在答案的全面性和多样性方面均实现了显著提升。我们即将开源一个基于Python的图RAG实现方案,该方案同时支持全局和局部两种模式。1 引言
首先,人类在阅读和理解文档集合时,不仅仅停留在文本表面所陈述的内容上,而是能够从中提炼出更深层次的意义和结论。这种能力是我们进行科学研究、情报分析等领域工作的基础。我们能够通过分析文本中的信息、关系和模式,来预测未来的趋势、制定策略或做出决策。然而,随着大数据时代的到来,文本语料库的规模急剧增加,人工阅读和理解所有文档变得不现实。因此,我们需要借助先进的技术手段来辅助这一过程。大型语言模型(LLMs)的出现为我们提供了一种可能,它们能够模拟人类的自然语言处理能力,对文本进行理解和分析。在复杂领域中,如科学发现和情报分析,人们开始尝试利用LLMs来自动化类似人类的“意义构建”过程。这里的“意义构建”是指一种有动机的、持续的努力,旨在理解不同元素(如人、地点、事件)之间的联系,以便预测它们的未来轨迹并采取有效行动。通过LLMs,我们可以更高效地处理和分析大量文本数据,从中发现潜在的模式和关系,进而支持我们的决策和行动。但是,仅仅依靠LLMs进行自动化分析是不够的。人类主导的意义构建过程需要一种方法,让人们既能应用LLMs的结果,又能通过提出全局性的问题来精炼他们对数据的心理模型。这意味着我们需要将LLMs的自动化分析能力与人类的直觉、判断力和创造力相结合,共同推动意义构建过程的深入发展(Klein等人,2006b)。检索增强生成(RAG,Lewis等人,2020)是一种已确立的方法,用于在整个数据集上回答用户问题。但该方法是为这样一种情况设计的:答案局部存在于文本区域内,且这些文本的检索能够为生成任务提供充分的基础。然而,RAG方法有其局限性。它更适用于那些答案可以直接从文本中检索或局部提取出来的情况,而对于需要更高层次抽象和概括的问题,RAG可能表现不佳。一个更为合适的任务框架是以查询为中心的摘要(QFS,Dang,2006),特别是以查询为中心的抽象式摘要,它生成的是自然语言摘要,而不仅仅是拼接摘录(Baumel等人,2018;Laskar等人,2020;Yao等人,2017)。然而,近年来,摘要任务之间的区别——如抽象式与抽取式、通用式与查询为中心式、单文档与多文档——已变得不那么重要。尽管Transformer架构的早期应用在这些摘要任务上均显著提升了当时的技术水平(Goodwin等人,2020;Laskar等人,2022;Liu和Lapata,2019),但这些任务现在已被现代大型语言模型(LLMs)所简化,包括GPT系列(Achiam等人,2023;Brown等人,2020)、Llama(Touvron等人,2023)和Gemini(Anil等人,2023)等。这些模型都能利用上下文学习来概括其上下文窗口中提供的任何内容。然而,针对整个语料库的以查询为中心的抽象式摘要仍面临挑战。如此大量的文本可能远远超出大型语言模型(LLMs)上下文窗口的限制,而扩大这些窗口可能仍不足以应对问题,因为信息可能会在更长的上下文中“丢失在中间”(Kuratov等人,2024;Liu等人,2023)。此外,尽管在简单的RAG中直接检索文本片段可能不足以完成QFS任务,但另一种形式的预索引可能支持一种新的RAG方法,专门针对全局摘要进行优化。在本文中,我们提出了一种 基于大型语言模型(LLM)生成知识图谱全局摘要的 图检索增强生成(Graph RAG)方法(见图1)。与以往利用图索引进行结构化检索和遍历的研究不同,我们聚焦于一个独特且未被探索的特性:其固有的模块化特性(Newman, 2006)以及社区检测算法将图划分为紧密相关节点模块化社区的能力(如Louvain算法,Blondel等人,2008;Leiden算法,Traag等人,2019)。
我们利用LLM为这些文档生成摘要,随后,通过一种映射归约方法实现了对整个语料库的查询聚焦摘要:首先,独立且并行地使用每个社区摘要来回答查询;然后,将所有相关的部分答案汇总成最终的全局答案。
为了评估该方法,我们使用LLM从两个具有代表性的真实世界数据集(分别包含播客转录和新闻文章)的简短描述中生成了一系列以活动为中心的意义构建问题。针对全面性、多样性和赋能性这三个目标特性,这些特性有助于理解广泛的问题和主题,我们研究了不同层级的社区摘要在回答查询时的影响,并与简单的RAG方法和源文本的全局映射归约摘要进行了比较。结果表明,所有全局方法在全面性和多样性方面均优于简单的RAG,而采用中级和低级社区摘要的Graph RAG在相同指标上表现出优于源文本摘要的性能,同时降低了标记成本。
2.Graph RAG 方法与流程
2.1 源文档 → 文本块
一个基本的设计决策是,从源文档中提取的输入文本应以何种粒度分割成文本块进行处理。在后续步骤中,这些文本块将传递给一组用于提取各种图索引元素的大型语言模型(LLM)提示。较长的文本块在提取过程中需要的LLM调用次数较少,但会遭受LLM长上下文窗口召回率下降的影响(Kuratov等人,2024;Liu等人,2023)。
如图2,在HotPotQA样本数据集上的实验显示,使用较短文本块(如600个标记)进行提取时,尽管LLM调用次数更多,但能够提取到的实体引用数量几乎是使用较长文本块(如2400个标记)的两倍。这表明,在某些情况下,较短的文本块可能更有利于提高信息提取的召回率。尽管提取到更多的实体引用通常是有益的,但这也需要考虑到精确率(即提取的信息中有多少是正确的)。在实际应用中,需要找到一个平衡点,使得在保持较高精确率的同时,尽可能提高召回率。
2.2文本块 → 元素实例
这一步的基本要求是从每个源文本块中识别和提取图节点和边的实例。我们使用一个多部分大型语言模型(LLM)提示(指令、上下文、输入、输出提示)来实现这一点,该提示首先识别文本中的所有实体,包括它们的名称、类型和描述,然后识别明确相关实体之间的所有关系,包括源实体、目标实体以及它们之间关系的描述。这两种类型的元素实例都以一个由分隔符分隔的元组列表的形式输出。在将大型语言模型(LLM)应用于文档语料库领域时,定制提示(Prompt)来优化LLM的性能主要机会在于为LLM提供用于上下文学习的少量示例(few-shot examples)(Brown等人,2020)。例如,虽然我们默认的提示能够提取像人、地点和组织这样的“命名实体”的广泛类别,这在一般情况下是适用的,但具有专业知识的领域(如科学、医学、法律)将从针对这些领域的特定少量示例中受益。我们还支持一个次要的提取提示,用于提取我们希望与提取的节点实例相关联的任何额外协变量。我们的默认协变量提示旨在提取与检测到的实体相关联的主张,包括主语、宾语、类型、描述、源文本跨度以及开始和结束日期。为了平衡效率和质量的需求,我们使用多轮“挖掘”,直到达到指定的最大轮数,以鼓励LLM检测出在前几轮提取中可能遗漏的任何额外实体。这是一个多阶段过程,我们首先要求LLM评估是否已提取所有实体,通过设置一个100的logit偏置来强制LLM做出是或否的决定。如果LLM回应说遗漏了实体,那么后续会继续提示“上一轮提取中遗漏了许多实体”,以鼓励LLM挖掘这些遗漏的实体。这种方法使我们能够使用较大的文本块大小,而不会降低质量(如图2所示)或被迫引入噪声。2.3 元素实例 → 元素摘要
利用LLM从源文本中“提取”实体、关系和主张的描述,这本身已经是一种抽象式摘要的形式,它依赖于LLM为文本本身可能暗示但未明确表述的概念创建独立且有意义的摘要(例如,隐含关系的存在)。为了将这些实例级别的摘要转换为每个图元素(即实体节点、关系边和主张协变量)的单块描述性文本,我们需要对匹配的实例组进行另一轮LLM摘要处理。在这一阶段,一个潜在的问题是LLM可能无法以相同的文本格式一致地提取对同一实体的引用,这会导致实体元素的重复,从而在实体图中出现重复的节点。然而,由于所有密切相关的实体“群体”都将在下一步中被检测和摘要,并且考虑到LLM可以理解多个名称变化背后的共同实体,只要所有变化都与一组密切相关的共享实体集有足够的连接性,我们的整体方法就能够应对这种变化。总体而言,我们在可能包含噪声的图结构中为同构节点使用丰富的描述性文本,这与LLM的能力和全局、查询导向型摘要的需求相一致。这些特点也使我们的图索引与典型的知识图谱区分开来,后者依赖于简洁且一致的知识三元组(主语、谓语、宾语)来执行下游推理任务。2.4 元素摘要 → 图社区
在上一步中创建的索引可以被建模为一个同构无向加权图,其中实体节点通过关系边相连,边的权重表示检测到的关系实例的归一化计数。给定这样的图,可以使用多种社区检测算法将图划分为节点社区,这些节点社区内部的连接强度高于它们与图中其他节点的连接强度(例如,参见Fortunato, 2010和Jin等人的综述,2021)。在我们的流程中,我们选择了Leiden算法(Traag等人,2019),因为它能够高效地恢复大规模图的层次社区结构(如图3所示)。
这个层次结构的每一层都提供了一个社区划分,它以互斥且集体穷尽的方式覆盖图的节点,从而实现了分而治之的全局摘要。
2.5 图社区 → 社区摘要
下一步是为Leiden层次结构中的每个社区创建类似报告的摘要,使用一种能够扩展到非常大数据集的方法。这些摘要本身非常有用,因为它们提供了一种理解数据集全局结构和语义的方式,并且即使在没有问题的情况下,也可以用来理解整个语料库。例如,用户可以浏览某一层级的社区摘要,寻找感兴趣的一般主题,然后点击链接查看下一层级的报告,这些报告为每个子主题提供了更多细节。然而,在这里,我们重点关注它们作为基于图的索引的一部分,用于回答全局查询的实用性。- 叶子层级社区。首先根据优先级将叶子层级社区的元素摘要(节点、边、协变量)添加到LLM的上下文窗口中,直到达到令牌限制。优先级排序如下:对于每个社区边,按照源节点和目标节点度(即整体重要性)之和的降序排列,添加源节点、目标节点、链接的协变量以及边本身的描述。
- 更高层级的社区。如果所有元素摘要都能适应上下文窗口的令牌限制,则按照叶子层级社区的方式进行处理,并总结社区内的所有元素摘要。否则,按照元素摘要令牌的降序对子社区进行排序,并迭代地用子社区摘要(较短)替换其相关的元素摘要(较长),直到适应上下文窗口为止。
2.6 社区摘要 → 社区答案 → 全局答案
在给定用户查询的情况下,前一步生成的社区摘要可以通过一个多阶段过程来生成最终答案。社区结构的层次性也意味着可以使用来自不同层级的社区摘要来回答问题,这引出了一个问题:在层次社区结构中,是否有一个特定层级能够在一般意义上的问题理解中提供最佳的摘要细节和范围的平衡。对于给定的社区层级,用户查询的全局答案生成过程如下:- 准备社区摘要:将社区摘要随机打乱并分成预定令牌大小的块。这确保了相关信息被分配到各个块中,而不是集中在(并可能丢失在)单个上下文窗口中。
- 映射社区答案:并行生成中间答案,每个块一个。同时要求LLM(大型语言模型)为生成的答案生成一个0-100之间的分数,表示该答案在回答目标问题时的有用程度。分数为0的答案将被过滤掉。
- 合并成全局答案:将中间社区答案按照有用性分数降序排列,并迭代地添加到新的上下文窗口中,直到达到令牌限制。使用这个最终的上下文来生成返回给用户的全局答案。
3 相关工作
3.1 RAG方法和系统
在使用大型语言模型(LLMs)时,检索增强生成(RAG)首先会从外部数据源中检索相关信息,然后将这些信息与原始查询一起添加到LLM的上下文窗口中(Ram等人,2023)。朴素的RAG方法(Gao等人,2023)通过以下步骤实现:首先将文档转换为文本,然后将文本分割成多个块,并将这些块嵌入到一个向量空间中,其中相似的位置代表相似的语义。接下来,将查询也嵌入到相同的向量空间中,并使用最接近的k个向量的文本块作为上下文。虽然存在更高级的变体,但所有这些方法都旨在解决一个共同的问题,即当外部感兴趣的数据集超出LLM的上下文窗口大小时,应该如何处理。先进的RAG系统包括预检索、检索和后检索策略,旨在克服朴素RAG的缺点,而模块化RAG系统则包括迭代和动态循环的交错检索和生成模式(Gao等人,2023)。我们实现的Graph RAG融合了与其他系统相关的多个概念。例如,我们的社区摘要是一种自我记忆(Selfmem,Cheng等人,2024),用于生成增强的检索(GAR,Mao等人,2020),以促进未来的生成循环,而我们从这些摘要中并行生成的社区答案则是一种迭代(Iter-RetGen,Shao等人,2023)或联邦(FeB4RAG,Wang等人,2024)检索生成策略。其他系统也结合了这些概念用于多文档摘要(CAiRE-COVID,Su等人,2020)和多跳问答(ITRG,Feng等人,2023;IR-CoT,Trivedi等人,2022;DSP,Khattab等人,2022)。我们使用的层次化索引和摘要也与其他方法相似,例如通过聚类文本嵌入的向量来生成文本块的层次化索引(RAPTOR,Sarthi等人,2024),或生成“澄清树”来回答模糊问题的多种解释(Kim等人,2023)。然而,这些迭代或层次化方法都没有使用Graph RAG所使用的那种自我生成的图索引。3.2 图与大型语言模型(LLMs)
将图与大型语言模型(LLMs)和检索增强生成(RAG)相结合是一个不断发展的研究领域,已经确立了多个研究方向。这些方向包括使用LLMs进行知识图的创建(Trajanoska等人,2023)和补全(Yao等人,2023),以及从源文本中提取因果图(Ban等人,2023;Zhang等人,2024)。此外,还包括高级RAG的形式(Gao等人,2023),其中索引是知识图(如KAPING,Baek等人,2023),查询的对象是图结构的子集(如G-Retriever,He等人,2024)或派生的图度量(如GraphToolFormer,Zhang,2023),以及将叙述输出紧密地基于检索到的子图事实(如SURGE,Kang等人,2023),使用叙述模板序列化检索到的事件情节子图(如FABULA,Ranade和Joshi,2023),以及支持文本关系图的创建和遍历以进行多跳问答的系统(如Wang等人,2023b)。
在开源软件方面,LangChain(LangChain,2024)和LlamaIndex(LlamaIndex,2024)库都支持多种图数据库,同时也在出现一类更通用的基于图的RAG应用,包括能够在Neo4J(如NaLLM,Neo4J,2024)和NebulaGraph(如GraphRAG,NebulaGraph,2024)格式中创建和推理知识图的系统。然而,与我们的Graph RAG方法不同,这些系统都没有利用图的自然模块性来对数据进行分区以实现全局摘要。
4 讨论
评估方法的局限性:截至目前,我们的评估仅针对约一百万词汇量的两个语料库中的某一类理解性问题进行了考察。为了更全面地理解性能在不同类型问题、数据类型和数据集大小上的变化,以及验证我们的理解性问题和目标指标与用户需求的契合度,还需要进一步的研究。此外,通过采用如SelfCheckGPT(Manakul等人,2023)等方法来比较生成内容的真实性,也将有助于改进当前的分析。
构建图索引的权衡:我们始终观察到,与其他方法相比,Graph RAG(基于图的检索增强生成)在直接对比中取得了最佳结果。然而,在许多情况下,无图的全局源文本摘要方法也表现出很强的竞争力。在实际应用中,是否投入资源构建图索引取决于多种因素,包括计算预算、每个数据集预期的生命周期查询次数,以及从图索引中获取的其他方面的价值(包括通用的社区摘要和其他基于图的RAG方法的应用)。
未来工作:当前Graph RAG方法所依赖的图索引、丰富的文本注释和层次化的社区结构为进一步的优化和适应提供了多种可能性。这包括通过用户查询和图注释的嵌入式匹配,以更局部化的方式运行的RAG方法;以及结合基于嵌入的社区报告匹配与我们的map-reduce摘要机制的混合RAG方案。此外,“汇总”操作可以扩展到社区层次的更多级别,也可以实现为一种更具探索性的“深入挖掘”机制,该机制遵循高级别社区摘要中包含的信息线索。
5 总结
我们提出了一种针对图关系增强生成(Graph RAG)的全局方法,该方法融合了知识图生成、检索增强生成(RAG)和查询聚焦摘要(QFS),旨在帮助人类对整个文本语料库进行理解和分析。初步评估结果显示,与朴素的RAG基线相比,该方法在答案的全面性和多样性方面均取得了显著改进,并且与使用MapReduce源文本摘要的全局但无图的方法相比也表现优异。
对于需要在同一数据集上进行大量全局查询的场景,基于实体的图索引中根级社区的摘要提供了一种数据索引方式,这种方式不仅优于朴素的RAG,而且以极低的令牌成本实现了与其他全局方法相媲美的性能。