在现代信息检索和生成应用中,图形增强的检索-生成(RAG)技术正在逐步成为主流,而 GraphRAG 则是其中的代表性应用之一。GraphRAG 通过将输入文本构建为知识图谱,不仅提高了信息的组织方式,还提升了检索与生成任务的质量。在这篇文章中,我们将详细解析 GraphRAG 的工作流程,并通过实例一步步展示其处理过程。

GraphRAG 工作流程概述

GraphRAG Indexer 
├── Loading Input (InputFileType.text)
├── create_base_text_units
├── create_base_extracted_entities
├── create_summarized_entities
├── create_base_entity_graph
├── create_final_entities
├── create_final_nodes
├── create_final_communities
├── create_final_relationships
├── create_final_text_units
├── create_final_community_reports
├── create_base_documents
└── create_final_documents

GraphRAG 的整个工作流程可以分为多个阶段,每个阶段都有着特定的任务,从数据的加载到构建一个完整的图结构。以下是这些步骤的详细解析:

  1. Loading Input - 加载输入数据
  2. create_base_text_units - 创建基础文本单元
  3. create_base_extracted_entities - 基础实体提取
  4. create_summarized_entities - 实体汇总
  5. create_base_entity_graph - 创建基础实体图
  6. create_final_entities - 创建最终实体集
  7. create_final_nodes - 创建最终节点
  8. create_final_communities - 创建最终社区
  9. create_final_relationships - 创建最终关系
  10. create_final_text_units - 创建最终文本单元
  11. create_final_community_reports - 创建最终社区报告
  12. create_base_documents - 创建基础文档
  13. create_final_documents - 创建最终文档

我们将通过以下示例文本,逐步了解 GraphRAG 如何处理这些步骤。

示例输入文本

谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将共享核心算法和人工智能技术,预计将在未来五年内取得突破性进展。

1. Loading Input - 加载输入数据

首先,GraphRAG 需要从外部输入中加载数据。在这个阶段,系统从指定路径加载了上述输入文本。这是最基础的准备步骤,系统在读取文本时,也会进行一些基础清理,如去除空白和规范标点符号。这一步的目的是确保输入文本是干净和一致的,适合后续的处理。

2. create_base_text_units - 创建基础文本单元

在这一阶段,GraphRAG 将文本划分为多个较小的文本单元(text units),以便于后续的处理。这些文本单元通常基于句子或段落进行划分,使得每个单元具有独立的语义信息。

示例划分:对于我们的示例文本,系统将其划分为两个文本单元:

  1. “谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。”
  2. “CEO桑达尔·皮查伊表示,双方将共享核心算法和人工智能技术,预计将在未来五年内取得突破性进展。”

目的

  • 细化文本,使得每个单元易于分析。
  • 减少复杂度,提高实体提取和关系分析的精度。

3. create_base_extracted_entities - 基础实体提取

系统对每个文本单元进行实体提取,识别出文本中的重要实体。这一步是通过自然语言处理(NLP)技术,例如命名实体识别(NER),从文本中提取出特定类型的信息,如人名、组织名、日期等。

示例实体提取

  • “谷歌公司”(组织)
  • “2023年”(日期)
  • “特斯拉”(组织)
  • “自动驾驶技术”(概念)
  • “桑达尔·皮查伊”(人名)
  • “核心算法”(概念)
  • “人工智能技术”(概念)
  • “五年”(时间段)

目的

  • 将文本中的关键元素提取出来,形成结构化的数据,便于后续的分析和图谱构建。

4. create_summarized_entities - 实体汇总

在实体提取之后,GraphRAG 需要对这些实体进行汇总和标准化。实体汇总的目的是合并重复的实体并消除歧义。例如,将“谷歌公司”统一为“Google”,以确保整个数据集中的实体一致。

示例实体汇总

  • “谷歌公司” 被统一为 “Google”
  • “桑达尔·皮查伊” 被标准化为 “Sundar Pichai”
  • 最终得到以下实体集合:
    • “Google”、“Tesla”、“Sundar Pichai”、“自动驾驶技术”、“核心算法”、“人工智能技术”、“2023年”、“五年”

目的

  • 消除重复实体,确保数据的一致性。
  • 使得后续图谱构建中的实体节点更加准确和规范。

5. create_base_entity_graph - 创建基础实体图

在这个步骤中,系统基于提取的实体构建一个基础的实体图。每个实体作为图中的一个节点,节点之间的边表示实体之间的关系。

示例图构建

  • “Google” ↔ “Tesla”(合作伙伴关系)
  • “Google” ↔ “自动驾驶技术”(研发关系)
  • “Sundar Pichai” ↔ “Google”(从属关系)

目的

  • 创建初步的图结构,展示实体之间的联系。
  • 这一图结构为后续的社区检测和关系进一步细化提供基础。

6. create_final_entities - 创建最终实体集

在这一阶段,GraphRAG 对之前的实体集进行进一步处理,以确保所有实体在不同上下文中具有唯一性并且高质量。系统会对实体进行消歧,确保每个实体的含义明确且不重复。

示例处理

  • 进一步确认 “Google” 仅指代公司,而不是其他可能的含义。
  • 确保 “Sundar Pichai” 明确指代谷歌公司的 CEO。
  • 最终实体集包括:“Google”、“Tesla”、“Sundar Pichai”、“自动驾驶技术”、“核心算法”、“人工智能技术”、“2023年”、“五年”。

目的

  • 提高实体的准确性,减少误解或错误。

7. create_final_nodes - 创建最终节点

基于最终的实体集,GraphRAG 创建图谱中的节点。每个节点不仅代表一个实体,还包含该实体的属性(如名称、类型)以及它在文本中的位置等详细信息。

示例节点创建

  • “Google”(类型:组织,出现位置:文本单元 1)
  • “Tesla”(类型:组织,出现位置:文本单元 1)
  • “Sundar Pichai”(类型:人名,出现位置:文本单元 2)

目的

  • 确保每个节点都包含丰富的上下文信息,便于图谱的进一步分析和操作。

8. create_final_communities - 创建最终社区

社区检测通过分析节点之间的关系,将紧密联系的实体组合在一起,形成社区。社区的形成可以帮助识别文本中的不同主题或子主题。

示例社区检测

  • 社区1:包含 Google、Tesla、自动驾驶技术、核心算法、人工智能技术,反映出合作研发的技术主题。
  • 社区2:包含 Google、Sundar Pichai,代表公司与 CEO 之间的从属关系。

目的

  • 将相关的实体聚集在一起,便于理解文本的主题结构。
  • 社区的形成有助于后续的信息检索和问答生成。

9. create_final_relationships - 创建最终关系

在这一阶段,GraphRAG 会分析每个社区中的节点,系统创建节点之间的最终关系,并对每个关系进行标注,说明关系的类型和性质。

示例关系创建

  • “Google” 和 “Tesla” 之间标注为合作关系。
  • “Sundar Pichai” 和 “Google” 之间标注为从属关系(CEO)。
  • “Google” 和 “自动驾驶技术” 之间标注为研发关系。

目的

  • 明确实体之间的具体关系,为后续的推理和回答生成提供支持。

10. create_final_text_units - 创建最终文本单元

每个文本单元在此阶段得到进一步增强,不仅包含原始内容,还附加了对应的实体和关系信息。这些增强的信息使得每个文本单元更加语义丰富。

示例文本增强

  • “谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。”(实体:Google, Tesla, 自动驾驶技术;关系:合作, 研发)

目的

  • 为后续的生成任务提供更全面的上下文支持。

11. create_final_community_reports - 创建最终社区报告

系统为每个社区生成详细的报告,报告中包含社区内所有的实体和关系,以及它们之间的联系。这些报告能够帮助总结每个社区的内容和主题。

示例社区报告

  • 社区 1 报告
    • 实体:Google, Tesla, 自动驾驶技术, 核心算法, 人工智能技术。
    • 主要关系:Google 和 Tesla 的合作关系,共同研发自动驾驶技术。
    • 主题描述:该社区围绕 Google 和 Tesla 之间的合作研发展开,主要涉及自动驾驶领域的技术共享和研发。

目的

  • 提供对每个社区的总结,以支持用户理解每个社区的主题和内容。

12. create_base_documents - 创建基础文档

基于文本单元和实体关系信息,GraphRAG 创建基础文档。这些文档将文本的内容结构化地呈现出来,便于后续的检索和生成。

示例基础文档

Google 和 Tesla 宣布在 2023 年合作研发自动驾驶技术,双方将共享核心算法和人工智能技术。CEO Sundar Pichai 表示,这一合作预计将在未来五年内取得突破性进展。
(附加信息:Google ↔ Tesla [合作]; Sundar Pichai ↔ Google [从属])

目的

  • 生成结构化的文本,帮助系统更好地进行信息的检索和生成。

13. create_final_documents - 创建最终文档

在最后一步,GraphRAG 整合所有信息,生成最终文档。最终文档包含了所有的文本、实体、关系和社区信息,形成了一个完整的知识库,供后续的检索和增强生成(RAG)任务使用。

示例最终文档

社区 1 - Google 和 Tesla 的合作社区:
Google 和 Tesla 在 2023 年宣布合作,共同研发自动驾驶技术。Sundar Pichai 表示,该合作包括核心算法和人工智能技术的共享,预计五年内取得突破性进展。
(社区关系:Google ↔ Tesla [合作]; Google ↔ 自动驾驶技术 [研发]; Sundar Pichai ↔ Google [CEO])

目的

  • 整合所有的处理结果,形成完整、结构化的文档,供后续的 RAG 模型使用。

总结

GraphRAG 通过多步骤将原始文本转化为结构化的知识图谱,为信息检索和生成提供了丰富的上下文支持。从文本的基础划分、实体提取到图谱的社区构建,每一步都在增加文本的语义深度和组织程度。这些最终生成的文档和图谱能够显著提高 RAG 模型的检索与回答质量,例如,当用户询问“谷歌与特斯拉的合作情况”时,GraphRAG 可以快速定位相关节点及其关系,并生成准确的回答。

如果你正在开发类似的系统或对 RAG 技术感兴趣,希望这篇详细的解析能帮助你理解 GraphRAG 的工作原理。欢迎在评论区交流你的想法或分享你的经验!

附录

执行日志:

$ python -m graphrag.index --root ./ragtest_test
Logging enabled at /Users/xxx/Documents/RAG/GraphRAG/ragtest_test/output/indexing-engine.log
🚀 create_base_text_units
                                 id                                              chunk                          chunk_id                        document_ids  n_tokens
0  3bc34cda152c2cd07dc2a3c3a59d8a5b  谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将...  3bc34cda152c2cd07dc2a3c3a59d8a5b  
[4fe1675455c7c894551a951ae99a075a]        89
🚀 create_base_extracted_entities
                                        entity_graph
0  <graphml xmlns="http://graphml.graphdrawing.or..."
🚀 create_summarized_entities
                                        entity_graph
0  <graphml xmlns="http://graphml.graphdrawing.or..."
🚀 create_base_entity_graph
   level                                    clustered_graph
0      0  <graphml xmlns="http://graphml.graphdrawing.or..."
🚀 create_final_entities
                                 id     name          type  ... graph_embedding                       text_unit_ids                              description_embedding
0  7116acb486744b61a7b5c4703afec26f     谷歌公司  ORGANIZATION  ...            None  [3bc34cda152c2cd07dc2a3c3a59d8a5b]  [-1.640625, -2.203125, -4.09375, 0.41015625, 
-...
1  aaa9bcb2e9d94f9e833f1f9107e37712      特斯拉  ORGANIZATION  ...            None  [3bc34cda152c2cd07dc2a3c3a59d8a5b]  [-1.6796875, -3.109375, -6.40625, -2.359375, -...
2  6f90552bec1040adb3ef97b74dedfd1d  桑达尔·皮查伊        PERSON  ...            None  [3bc34cda152c2cd07dc2a3c3a59d8a5b]  [-0.890625, -2.984375, -9.6875, -3.71875, 
-1.4...
3  0b3d7c778438407282ee56e2e25d38b6   自动驾驶技术                ...            None  [3bc34cda152c2cd07dc2a3c3a59d8a5b]  [1.0625, -1.515625, -4.625, -3.078125, 
1.26562...

[4 rows x 8 columns]
🚀 create_final_nodes
   level    title          type                             description                         source_id  ... size  graph_embedding                 top_level_node_id  x
y
0      0     谷歌公司  ORGANIZATION  谷歌公司是一家全球知名的科技公司,主要从事互联网搜索、广告技术、云计算等业务  3bc34cda152c2cd07dc2a3c3a59d8a5b  ...    3            
None  7116acb486744b61a7b5c4703afec26f  0  0
1      0      特斯拉  ORGANIZATION      特斯拉是一家美国电动汽车及能源公司,产销电动汽车、太阳能板及储能设备  3bc34cda152c2cd07dc2a3c3a59d8a5b  ...    2             None
aaa9bcb2e9d94f9e833f1f9107e37712  0  0
2      0  桑达尔·皮查伊        PERSON                       桑达尔·皮查伊是谷歌公司的 CEO  3bc34cda152c2cd07dc2a3c3a59d8a5b  ...    1             None  
6f90552bec1040adb3ef97b74dedfd1d  0  0
3      0   自动驾驶技术                                                        3bc34cda152c2cd07dc2a3c3a59d8a5b  ...    2             None  
0b3d7c778438407282ee56e2e25d38b6  0  0

[4 rows x 14 columns]
🚀 create_final_communities
  id        title  level                                   relationship_ids                       text_unit_ids
0  0  Community 0      0  [67a62ebf4b74461db29102e42e4a52a0, 18b9ef185fb...  [3bc34cda152c2cd07dc2a3c3a59d8a5b]
🚀 create_final_relationships
  source   target  weight              description  ... human_readable_id source_degree target_degree  rank
0   谷歌公司      特斯拉     8.0  谷歌公司宣布与特斯拉合作,共同研发自动驾驶技术  ...                 0             3             2     5
1   谷歌公司  桑达尔·皮查伊     5.0        桑达尔·皮查伊是谷歌公司的 CEO  ...                 1             3             1     4
2   谷歌公司   自动驾驶技术     8.0     自动驾驶技术是谷歌公司和特斯拉合作研发的  ...                 2             3             2     5
3    特斯拉   自动驾驶技术     1.0     自动驾驶技术是谷歌公司和特斯拉合作研发的  ...                 3             2             2     4

[4 rows x 10 columns]
🚀 create_final_text_units
                                 id  ...                                   relationship_ids
0  3bc34cda152c2cd07dc2a3c3a59d8a5b  ...  [67a62ebf4b74461db29102e42e4a52a0, 18b9ef185fb...

[1 rows x 6 columns]
🚀 create_final_community_reports
  community                                       full_content  ...                                  full_content_json                                    id
0         0  # 谷歌公司、特斯拉和自动驾驶技术\n\n该社区主要由谷歌公司、特斯拉和自动驾驶技术组成,其...  ...  {\n    "title": "谷歌公司、特斯拉和自动驾驶技术",\n    
"summa...  a03df35b-b42b-4f40-8771-8c60e18f15b1"

[1 rows x 10 columns]
🚀 create_base_documents
                                 id                          text_units                                        raw_content      title
0  4fe1675455c7c894551a951ae99a075a  [3bc34cda152c2cd07dc2a3c3a59d8a5b]  谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将...  
test1.txt
🚀 create_final_documents
                                 id                       text_unit_ids                                        raw_content      title
0  4fe1675455c7c894551a951ae99a075a  [3bc34cda152c2cd07dc2a3c3a59d8a5b]  谷歌公司在2023年宣布与特斯拉合作,共同研发自动驾驶技术。CEO桑达尔·皮查伊表示,双方将...  
test1.txt
⠙ GraphRAG Indexer 
├── Loading Input (InputFileType.text) - 1 files loaded (0 filtered) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 0:00:00
├── create_base_text_units
├── create_base_extracted_entities
├── create_summarized_entities
├── create_base_entity_graph
├── create_final_entities
├── create_final_nodes
├── create_final_communities
├── create_final_relationships
├── create_final_text_units
├── create_final_community_reports
├── create_base_documents
└── create_final_documents
🚀 All workflows completed successfully.
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐