1. 背景
① 人类在各领域的进步需要阅读、推理大量文本,最终得出的结论往往超出文本内容本身
② LLMs 的出现后,在复杂领域已开展部分尝试工作,让 LLMs 执行类似人类的理解活动
“理解活动”:一个有动机、持续的发展,以理解连接(可以是人、地点、事件之间的连接),预测其轨迹并有效进行行动
③ 然而在整个文本库支持以人类为中心的理解活动,需要完成工作:a.基于原始文本检索(已完成,传统 RAG)、b.完善模型对于数据的心智模型(未完成)
传统的 RAG 方法擅长检索和生成局部查询答案,但在回答相对高级的抽象或总结性问题(如“数据集中的主题是什么?”)等问题时往往表现不佳。这类问题的本质是以查询为中心的查询聚焦的摘要 QFS(Query-Focused Summary)任务,而不是一个明确的检索任务,所以单纯只做数据检索是无法解决的。
对整个语料库进行 QFS 存在难题:大量文本超出 LLMs 的上下文窗口限制,而且即使拓展窗口大小也不足以应对更长上下文丢失的情况。
GraphRAG 基于由 LLMs 推导出的知识图谱进行。与利用图索引结构化检索和遍历的特性的相关工作相比,作者更关注图的另一个特性:图中固有的模块性以及社区检测算法将图划分为模块化社区的能力。(社区由紧密相连的节点组成)
2. GraphRAG 的原理及工作流
GraphRAG 的整个 pipeline 可以划分为索引和查询两个阶段。
- 索引阶段:利用 LLM 提取出节点(实体)、边(关系)、协变量(claim),然后利用社区检测技术对整个知识图谱进行划分,再利用 LLM 进一步总结。
- 查询阶段:本地搜索、全局搜索
3. GraphRAG 的流程
3.1 源文件 -> 文本块
设计策略:以何种粒度将源文件切分成文本块
后续步骤 chunk 块会被传递到一组 LLM Prompt 中,抽取图索引中的各个元素
较长的文本块在抽取时需要较少的 LLM 调用,但会受到上下文窗口较长导致召回率下降。(实验表明:600tokens 长度的文本块提取实体引用数量大约是 2400tokens 长度文本块的 2 倍,但调用 LLM 次数增多)
论文中提到,在单轮提取的大部分情况下, 每个文本块的长度越小、文本块数量越多、调用LLM的次数越多,则能够提取出来的信息越丰富,效果也越好,当然需要消耗的时间和计算成本也更大。需要统筹考虑召回效率和精度。
3.2 文本块 -> 元素实例
工作:从每个 chunk 块中识别和提取图节点和边实例。
通过一个多阶段 LLM Prompt 进行,prompt 会引导模型在文本中识别所有实体(名称、类型、描述),识别所有有明显关联的实体之间的关系(源实体、目标实体、两者之间的关系描述)。最终两种元素实例都被输出为一个由分隔符划分的元素列表。(为了平衡效率和质量,建议采用多轮“收集”)
后续社区检测和摘要生成的基础信息。
3.3 元素实例 -> 元素摘要
使用 LLM 抽取到的实体、关系和声明的描述实际上是一种抽象式的摘要形式。
它依赖于LLM来创建可能隐含但文本本身并未说明的概念和总结(例如,隐含关系的存在)。
- 实体级别摘要是指从具体文本实例中提取信息
- 元素级别摘要则是对实例进一步汇总,形成对图中各个元素(实体节点、关系边、声明属性)综合描述
论文中提到,在这一过程中,LLM 可能会以不同格式识别出同一个实体,存在大量重复,后续步骤检测和汇总可解决这个问题。
3.4 元素摘要 -> 图社区
之前索引可以被建模成一个同质的无向加权图。
【实体 - 边 - 实体】,边的权重:关系实例的标准化计数。
图通过社区检测算法构建社区,在社区中,节点之间的连接比图中其他节点之间的连接更强。
Leiden 算法:有效恢复大规模图的层次化社区结构。这种层次化结构每一级都提供了一个社区划分,以一种互斥且全面的方式覆盖图中所有节点,实现了分而治之的全局摘要。
Leiden算法是一种基于分层的方法,通过以下步骤实现社区发现:
3.5 图社区 -> 社区摘要
对于海量数据集,为了避免图社区的数据过于庞大而影响查找效率和精度。论文中采用 Leiden 算法的分层社区结构(对于关系密切的低层级图社区,可以合并为一个更高层级的图社区)。
摘要作为理解数据集的全局结构和语义的一种方式,用来理解社区语料库。例如:用户通过社区摘要理解社区内容,可通过进入下一层,选择更贴近主题的子摘要,层层递推。
社区摘要生成方式:
● Leaf-level 社区:元素摘要按照优先级处理社区,依次加入 LLM 中,直到 token 超出限制
● Higher-level 社区:如果 LLM token 够长则与Leaf-level 社区的处理方法一致,否则对社区排序,按序处理。
社区摘要 -> 社区答案 -> 全局答案
根据用户查询,使用社区摘要生成答案,这是一个多阶段的过程,社区的层次化意味着可以使用不同层次的社区摘要来回答该问题。
整体过程:
a. 准备社区摘要:社区摘要会被随机打乱并划分为预定 token 大小的块,以确保信息在相关块中均匀分布,而非在单一的上下文窗口中。
b. 映射社区答案(Map):并行生成每个块的中间答案,LLM 会对这个答案打分(0~100,0 分直接被舍弃),分数定义每一个答案的目标程度
c. 归纳为全局答案(Reduce):根据分数向 LLM 输入中间答案(直到超出 tokenz),LLM 归纳中间答案生成最终答案
4. LLM 评估器
● 全面性:细节
● 多样性:多视角
● 赋权性:答案在多大程度上帮助读者理解并做出有根据的判断
● 直接性
结果: 与传统RAG方法对比,GraphRAG在全面性和多样性上优势明显,尤其是在使用8k tokens上下文窗口时,测试的最小上下文窗口大小(8k)在所有比较中普遍表现更好。同时,在赋能上的表现也较优。但是,在直接性上,尽管GraphRAG也达到了预期效果,但传统的RAG方法表现确实更加出色。