https://arxiv.org/pdf/2404.16130
往期的NaiveRAG基本都是显式检索,而GraphRAG通过知识图谱实现了总结能力。知识图谱通常是事先生成的,并存储在系统中,供用户查询和模型使用。
1 引入
通常意义上,RAG的作用是从外部知识源中检索相关信息,使LLM能够回答有关私有或以前未见过的文档集合的问题。对于显式的检索任务,RAG表现优异;但是对于例如“数据集中主要的主题是什么?”这类问题,由于这是一个全局性问题,一般的RAG通常表现不佳。
GraphRAG使用LLM在两个阶段构建基于图的文本索引:首先从源文档中提取实体知识图谱,然后使用社区检测方法为所有密切相关的实体群体预生成社区总结。
2 流程管道
面向领域的总结(Domain-tailored Summarization)指的是根据特定的领域的要求,使用适应该领域的提示词和方法,从文档中提取和生成高度相关且有意义的总结信息。协变量(Covariates)指的是协因变量变的量,在这里指的是实体节点或关系边相关联的额外属性,属于包含在摘要中的信息。
协变体现了子类的扩展性,允许子类型替换父类型,通常用于返回类型(A=B,G(A)=G(B));逆变体现了子类的继承性,允许父类型替换子类型,通常用于参数类型(A=B,G(B)=G(A))。
2.1 Source Documents → Text Chunks
一个基本的设计决策是确定从源文档提取的输入文本应以何种粒度分割为文本块以便处理。在接下来的步骤中,每个文本块将传递给一组LLM提示,用于提取图索引的各种元素。
这一步输入原文档,输出文本块。
2.2 Text Chunks → Element Instances
基本要求是识别并提取每个源文本块中的图节点和边的实例。作者使用一个多部分的LLM提示,首先识别文本中的所有实体,包括它们的名称、类型和描述,然后识别所有明确相关实体之间的关系,包括源实体和目标实体及其关系的描述。这两类元素实例都输出为一个包含分隔元组的列表。
这一步输入文本块,输出图节点和边的实例列表。
2.3 Element Instances → Element Summaries
对前一步列表中每个图元素(如实体节点、关系边和协变量)创建独立而有意义的摘要。
这一步输入实例列表,输出每个实例元素的摘要。
2.4 Element Summaries → Graph Communities
在前一步中创建的索引可以建模为一个同质无向加权图,其中实体节点通过关系边连接,边的权重表示检测到的关系实例的归一化计数。给定这样的图,可以使用各种社区检测算法将图划分为社区,这些社区中的节点彼此之间的连接比与图中其他节点的连接更强。作者使用Leiden算法,因为它能够高效地恢复大规模图的层次社区结构。这个层次结构的每个级别都提供了一个社区划分,以互斥且全面覆盖的方式覆盖图的所有节点,从而实现分而治之的全局总结。
这一步输入的是基于前一步创建的同质无向加权图,输出社区划分后的结构图。
2.5 Graph Communities → Community Summaries
下一步是为Leiden层次结构中的每个社区创建类似报告的摘要,这种方法设计用于扩展到非常大的数据集。这些摘要本身就有独立的价值,可以用于理解数据集的整体结构和语义,甚至可以在没有具体问题的情况下,用于解析语料库。例如,用户可以浏览某一层级的社区摘要以寻找感兴趣的主题,然后跟随链接查看更低层级的报告,以获取每个子主题的详细信息。然而,这里我们专注于它们作为基于图的索引的一部分,用于回答全局查询的实用性。
社区摘要的生成方式如下:
-
叶节点层级社区:叶节点层级社区的元素摘要(节点、边、协变量)按照优先级依次添加到LLM上下文窗口中,直到达到token限制。优先级如下:对于每个社区边缘,根据源节点和目标节点的综合度(即总体重要性)递减排序,依次添加源节点、目标节点、关联协变量和边缘本身的描述。
-
高层级社区:如果所有元素摘要都能在上下文窗口的token限制内,则按照叶节点层级社区的方式处理并总结社区内的所有元素摘要。否则,按照元素摘要token数量递减顺序对子社区进行排序,并迭代地用子社区摘要(较短)替换其关联的元素摘要(较长),直到符合上下文窗口的限制。
这一步输入的是社区结构图,输出各个层级的社区摘要。
2.6 Community Summaries → Community Answers → Global Answer
以上步骤以图结构事先存储,实际用户查询时只需要查询合适的(C0,C1,C2,C3层级,从抽象到具体)节点和关系,以及社区摘要。
步骤是随机打乱并分块前一步的社区摘要(原本同一个摘要被放进不同块中);为每个块生成中间答案,给出帮助评分;按评分排序中间答案,不断选取高评分答案加入用户输入,最终生成全局答案。
这一步输入的是用户提问和社区摘要,输出全局答案。
3 评价标准
作者使用LLM评估器进行的对头比较指标如下:
- 全面性(Comprehensiveness):答案在多大程度上提供了足够的细节来覆盖问题的所有方面和细节?
- 多样性(Diversity):答案在提供不同观点和见解方面有多丰富和多样?
- 赋能性(Empowerment):答案在多大程度上帮助读者理解主题并做出明智的判断?
- 直接性(Directness):答案在多大程度上具体而清晰地回答了问题?
实验结果如下(数字代表横行胜过纵列的百分比):
这里的TS指的是2.6节打乱分块用的不是社区摘要,而是源文本;SS指的是NaiveRAG。
需要注意的是,尽管如QFS的总结性问题使用GraphRAG效果远远胜过NaiveRAG,但是面对针对性查询仍然是NaiveRAG更好。