type
status
date
slug
summary
tags
category
icon
password
GraphRAG 是微软开源的一个基于大模型+知识图谱回答用户问题的开源项目。相同传统的RAG,它的创新点主要有两个:
  1. 提出了一套完整的利用大模型生成知识图谱的方案。
  1. 基于map-reduce的思路支持对数据集全局类型的问答。
  1. 非常贵,贵就对了!
GraphRAG包括以下几个主要步骤
  1. 实体知识图谱生成:首先使用大语言模型(LLM)从源文档中提取实体及其相互关系,创建实体知识图谱。
  1. 社区总结:进一步将紧密相关的实体划分为社区,并为每个社区生成总结。这些总结在查询时用作部分回答。
  1. 最终回答生成:针对用户的问题,从各个社区总结中提取部分回答,并将这些部分回答再次总结形成最终回答。

实体知识图谱生成

notion image
  • Document
系统中的输入文档。这些文档要么代表 CSV 中的单独行,要么代表单独的 .txt 文件。
  • TextUnit
要分析的文本块。这些块的大小、重叠以及它们是否遵守任何数据边界可以在下面配置。一个常见的用例是设置CHUNK_BY_COLUMNS为id,以便文档和 TextUnits 之间存在一对多关系,而不是多对多关系。
  • Entity
从 TextUnit 中提取的实体。这些实体代表人物、地点、事件或您提供的其他实体模型。
  • Relationship-
两个实体之间的关系。这些关系由协变量生成。
  • Covariate
提取的声明信息,其中包含有关可能受时间限制的实体的陈述。
  • Community Report
一旦生成实体,我们就对它们执行分层社区检测,并为该层次结构中的每个社区生成报告。
  • Node
该表包含已嵌入和聚集的实体和文档的呈现图形视图的布局信息。
 

第一阶段:文本分块TextUnit

notion image
 
在默认配置工作流程的第一阶段,输入文档被转换为TextUnits,这些是用于图提取技术的文本块,并作为提取知识项的源引用,以支持追溯到原始文本的来源。TextUnit的大小(以标记计)是用户可配置的,默认设置为300个标记,但使用1200个标记的单个“glean”步骤也取得了积极效果。较大的块可能导致输出保真度降低和参考文本意义减弱,但能加快处理速度。分组配置也是用户可配置的,默认情况下,块与文档边界对齐,即文档与TextUnits之间是1对多的关系,但在某些情况下可以变为多对多的关系,这在处理非常短的文档(如推文或聊天记录)时很有用。每个TextUnit都会被文本嵌入并传递到管道中的下一阶段。
 
文本分块主要是将一个大的文本分割成多个小的段落,这个跟常见RAG的方法一样。这些分块的段落是后续用来生成图谱的最小单元,并且也会关联到后面提取出来的文本上面。这个文本拆分的逻辑很简单,就是按照文本长度,这里的文本长度单位是用token来计算的。
 

第二阶段:知识图谱生成

首先,通过大型语言模型(LLM)从原始文本中提取实体和关系,生成每个文本单元的子图,包含实体的名称、类型、描述以及关系的源、目标和描述。接着,合并这些子图,相同名称和类型的实体以及相同源和目标的关系通过创建描述数组合并。然后,对每个实体和关系的描述列表进行总结,生成单一的简洁描述。此外,讨论了实体解析的当前实现和未来改进方向,旨在解决同一现实实体的不同名称问题。最后,独立地从源文本单元中提取声明,这些声明是具有评估状态和时间限制的正面事实陈述,并作为主要成果输出。
notion image
  1. 实体关系提取
    1. 知识图谱最基本的单位就是实体和关系,下面是实体关系提取的Prompt,每个文本块都会用下面的Prompt做一遍实体关系的提取。
  1. 实体合并
    1. 当对所有文本块都处理了一边之后,因为是对单个文本块提取实体,不同文本块肯定会出现重复的实体,所以就需要对多个相同实体进行合并。比如上面例子中的Alex就出现了两次。所以需要将两个Alex合并成一个,合并的方式就是大模型将两个实体的不同描述合并成一个。
  1. 实体归一化
    1. 图提取的最后一个步骤是解决那些代表相同现实世界实体但名称不同的实体问题。比如大模型提取了:“LLM”和“大模型”这两个实体,实际上这两个在现实世界是同一个含义,应该要把它归一成一个。目前GraphRag是用大模型来完成这个归一化的。由于这是通过大语言模型(LLM)完成的,这种归一化效果当前并不是很好,所以默认这个阶段是跳过的。
  1. 实体声明提取
    1. 除了上面的图谱提取,文本中还可以提取到一些跟实体相关的信息。

第三阶段:图谱增强

notion image
 
知识图谱中,社区概念指的是一组相互关联的实体和关系的子图,社区内的实体之间有较强的关联性,而社区之间的关联性较弱。社区检测有助于发现知识图谱中的结构化信息,识别出不同的主题或领域。
比如在社交网络分析中:可以用来识别社交圈,基于用户之间的互动关系,发现社交圈或兴趣小组,分析社交网络的结构。可以看下面的图谱,通过社区发现算法可以将左边的图谱划分成三个社区(子图)。
notion image
在构建了一个包含实体和关系的可用图之后,接下来就是理解这个图的社区结构,并通过额外信息来增强这个图。这通过两个步骤来完成:社区检测(Community Detection)和图嵌入(Graph Embedding)。这两个步骤为我们提供了两种方式来理解图的拓扑结构:显式的(社区)和隐式的(嵌入)。
  • 社区检测(Community Detection) :这一步的目的是发现图中的社区结构,即图中紧密相连的节点群体。这有助于我们理解图中不同部分的组织和分组方式。社区检测通常使用算法来识别这些节点群体,主要用到的算法是Hierarchical Leiden Algorithm,它递归地将图分割成社区,直到达到某个社区大小的阈值。
  • 图嵌入(Graph Embedding) :这一步涉及使用算法(如Node2Vec)来为图中的节点生成向量表示。这些向量捕捉了节点之间的隐含关系,允许我们在向量空间中搜索相关概念。图嵌入提供了一种在高维空间中理解图结构的方法,有助于揭示节点间的复杂关系。
  • 发射图表(Graph Tables Emission):一旦我们的图增强步骤完成,最终的实体人际关系表格的文本字段嵌入文本后发出。
通过这两个步骤,我们不仅能够明确地识别出图中的社区结构,还能够隐式地理解节点间的相互作用和关系,从而更全面地把握整个图的拓扑结构。这对于进一步的分析、查询和可视化都是非常有用的
篇幅所限,这部分内容本文暂不展开。大概知道就是将一个图聚类成更小的图就行,这块涉及图相关的算法。在完成图谱增强之后,会将实体和关系都embedding一下然后存到数据表中。

第四阶段:社区摘要

notion image
到这一步,我们拥有了一个实体和关系图,实体的社区层级,以及 node2vec 嵌入。
现在我们想要在社区数据的基础上,为每个社区生成报告。这为我们提供了对图的几个粒度点的高层次理解。例如,如果社区A是最高层级的社区,我们将得到一个关于整个图的报告。如果社区是低层级的,我们将得到一个关于局部集群的报告。
主要分为四个步骤:
  1. 生成社区报告: 使用大语言模型(LLM)为每个社区生成摘要。这将使我们能够理解每个社区内包含的独特信息,并提供对图的限定理解,无论是从高层次还是低层次的角度。这些报告包含一个执行概览,并引用社区子结构中的关键实体、关系和声明。
  1. 社区报告摘要: 每个社区报告然后通过大语言模型进行摘要,以便简短使用。
  1. 社区嵌入: 我们通过生成社区报告、社区报告摘要和社区报告标题的文本嵌入来生成社区的向量表示。
  1. 社区表记录: 将社区报告数据记录到数据表中
最后看一下生成社区报告的Prompt:
 

第五阶段:文档处理

notion image
这一步是针对原始文档做一下后置处理:
  1. CSV扩展:因为图谱的结果最后都是存储在CSV格式的表中,所以可以在这一步配置自定义的字段。
  1. 文档链接到文本单元:将每个文档与第一阶段创建的文本单元相关联。这使我们能够理解哪些文档与哪些文本单元相关,反之亦然。
  1. 文档嵌入:使用文档切片的平均嵌入来生成文档的向量表示。我们重新分块文档,不重叠块,然后为每个块生成嵌入。我们创建这些块的平均值,按令牌计数加权,并将其用作文档嵌入。这将使我们能够理解文档之间的隐含关系,并帮助我们生成文档的网络表示。
  1. 文档表格存储:将文档表格存起来
 

第六阶段:网络可视化

notion image
notion image
对于每个逻辑图,我们执行UMAP降维以生成图的2D表示。这样就可以在2D空间中可视化图并理解图中节点之间的关系。比如下面这张图就是基于知识图谱的生成的。
在这个阶段,我们执行一些步骤来支持在现有图中可视化我们的高维向量空间。此时有两个逻辑图在起作用:实体-关系图和文档图。
 

总结

GraphRag提供了一套完整可落地的知识图谱生成方案,除了常规的实体和关系抽取,它还加入了社区识别的逻辑,将一个大的图谱分解为了多个小的子图,分解的层次需要根据图谱的大小来确定。从某种意义上来说,普通RAG的索引只是简单的将文档拆分成多个平级的块,块与块之间是没有层级和联系。而GraphRag的数据索引是结合知识图谱思路构建的,文档的块经过了知识加工的过程,数据是结构化的。
 
The Last Emperor服务器从零到 personal workspace
Loading...
SimonSun
SimonSun
Internet Malou, LLM Rookie, Bug Maker🤧
最新发布
相机入门记录(1)购物篇
2025-3-14
实用网站-工作提速大礼包
2025-3-14
conda poetry 全面迁移到 uv
2025-3-14
郁闷记
2025-3-13
LLM训练数据格式
2025-3-13
PPO(1)算法详解
2025-3-13
公告
🙌README🙌
🤯There is nothing left
in my right brain,
🤯and there is nothing right
in my left brain...
⭐I wish you every success⭐