graphRAG的原理及代码实战(1)基本原理介绍(上)

1、基本介绍

GraphRAG通过利用大模型从原始文本数据中提取知识图谱来满足跨上下文检索的需求。该知识图将信息表示为互连实体和关系的网络,与简单的文本片段相比,提供了更丰富的数据表示。这种结构化表示使 GraphRAG 能够擅长回答需要推理和连接不同信息的复杂问题。具体来看,GraphRAG 定义了一个标准化数据模型,整体框架由几个关键组件组成,分别用于表示文档、TextUnit、实体、关系和社区报告等实体。像传统RAG一样,GraphRAG 过程也涉及两个主要阶段:索引和查询。我们依次展开来进行讨论。
  在索引(Indexing)过程中,输入的文本被分为可管理的块,称为TextUnits 。然后大模型从这些文本单元中提取实体、关系和声明,形成知识图。完整的Indexing流程如下图所示:

在这里插入图片描述

2、流程及原理解析

Step 1. 文本切分(Text Unit Splitting)

  • GraphRAG 需要处理的是一大篇文档或语料库。首先,它会将这些文档切分为 Text Units(文本单元),这些 Text Units 是对输入文档的细分,通常是按照段落、句子或固定长度的文本块来进行切分。
  • 这样做的目的是为了便于对文本内容进行分析,尤其是当需要进行 实体识别 和 关系抽取 时,能够精准地关联到文档中的具体上下文。

Step 2. 实体识别(Entity Extraction)

  • 在文本切分之后,GraphRAG 会使用 大模型(如 OpenAI GPT 或其他 LLM) 对每个 Text Unit 进行处理,提取其中的 实体。这些实体通常是指文档中出现的人物、地点、组织、概念等信息。
  • 实体识别的目的是构建 实体图谱(Entity Graph),将所有实体提取出来并为后续的关系挖掘和查询做准备。

Step 3. 关系挖掘(Relationship Extraction)

  • 关系挖掘是从文本中识别出实体之间的 关系,例如:谁与谁有关联、某个实体与另一个实体之间的关系是“属于”、“合作”、“对立”等。
  • 通过这种关系提取,GraphRAG 可以构建 关系图谱(Relationship Graph),这些关系将有助于后续的 查询引擎 理解和推理。

Step 4. 文本嵌入(Text Embedding)

  • 在识别了文本中的实体和关系之后,GraphRAG 会利用 嵌入模型(如 OpenAI 的 Embedding 模型)将文本和实体表示为向量(vectors)。这些向量不仅包括了文本的语义信息,还能为后续的检索和查询提供高效的表示。
  • 这些嵌入向量将存储在 向量数据库(如 LanceDB)中,为查询时提供快速的相似度搜索。

Step 5. 构建社区和层级结构(Community and Hierarchical Clustering)

  • 通过使用 图谱聚类算法(如 Leiden 算法),GraphRAG 会将不同的实体和关系分组,形成多个 社区(Community)。这些社区是根据实体之间的相似度或关系的密切程度进行划分的。
  • 这种分组帮助 GraphRAG 更好地理解不同知识领域的结构,为查询时提供更具层次性的上下文信息。

Step 6. 生成索引文件(Indexing)

  • 完成上述步骤后,所有的 实体、关系、社区报告、文本单元等信息都会存储在磁盘上的 Parquet 文件中。
  • 这些索引文件实际上就是构建好的 知识图谱,包括了文本内容、文本中涉及的实体和关系的结构化表示,并且这些文件是为后续的查询引擎和推理过程提供基础。

总的来说GraphRAG 的 索引阶段 是一个 多步骤 的过程,基本流程是:

  1. 文本切分(Text Units)
  2. 实体识别(Entity Extraction)
  3. 关系挖掘(Relationship Extraction)
  4. 文本嵌入(Text Embedding)
  5. 社区划分和层级结构(Clustering)
  6. 生成索引文件(Indexing)

整个过程的目的是将文档中的原始文本转化为可以进行检索和推理的结构化知识图谱。而 实体识别 和 关系挖掘 通常是在文本切分之后进行的,因为需要先确保文本已经切分成足够小的单元才能进行更精细的分析和抽取。

3、本地实现

3.1 使用pip安装graphrag

pip install graphrag

测试的graphrag版本为1.1.0

(graphrag) [root@local- graphrag]# pip show graphrag
Name: graphrag
Version: 1.1.0
Summary: GraphRAG: A graph-based retrieval-augmented generation (RAG) system.
Home-page: 
Author: Alonso Guevara Fernández
Author-email: alonsog@microsoft.com
License: MIT
Location: /root/anaconda3/envs/graphrag/lib/python3.11/site-packages
Requires: aiofiles, azure-cosmos, azure-identity, azure-search-documents, azure-storage-blob, devtools, environs, fnllm, future, graspologic, httpx, json-repair, lancedb, matplotlib, networkx, nltk, numpy, openai, pandas, pyaml-env, pyarrow, pydantic, python-dotenv, pyyaml, rich, tenacity, tiktoken, tqdm, typer, typing-extensions, umap-learn
Required-by: 

3.2 创建检索项目文件夹

mkdir -p ./sushi/input

在input文件夹中上传一个txt文件,该文件为需要创建知识图谱问答的文本文件。
这里以苏轼的百度百科的介绍内容为例,创建图谱问答。

3.3 初始化项目文件

(graphrag) [root@local-7 graphrag]# graphrag init --root ./sushi
Initializing project at /root/szl/project/graphrag/sushi

初始化后,会在创建的检索项目文件夹下出现两个文件,一个是.env文件,和一个settings.yaml文件,是环境变量的设置文件:

  • 打开.env文件,填写openai API-KEY在这里插入图片描述

  • 打开setting.yaml文件,填写模型名称和反向代理地址在这里插入图片描述

3.4 GraphRAG索引Indexing过程执行

(graphrag) [root@local-7 graphrag]# graphrag index --root ./sushi

运行过程如下
在这里插入图片描述
整个过程会比较长,与input里面的文件大小有关
输出:

All workflows completed successfully.

表示创建完成

3.5 输出结果信息

GraphRAG在索引阶段构建的知识图谱的确是以 Parquet 格式保存的!索引阶段的输出文件中,Parquet 文件存储了知识图谱的各个核心组成部分,例如实体、关系、社区信息以及文本单元等。这些文件共同组成了一个完整的知识图谱。
在这里插入图片描述
索引阶段的主要输出内容如下:

  1. 实体表(Nodes Table)
  • 文件名:create_final_nodes.parquet
  • 内容:知识图谱中的实体节点(例如:人、地点、组织)。
  • 包含信息:
    • 实体的名称(如 “John Doe”)。
    • 实体的类别(如 “PERSON”, “ORGANIZATION”, “LOCATION”)。
    • 与社区相关的信息(如实体所属的社区)。
    • 实体的度数(degree),表示该实体在图谱中的连接数。
  1. 关系表(Relationships Table)
  • 文件名:create_final_relationships.parquet
  • 内容:知识图谱中实体之间的关系(即图谱的边)。
  • 包含信息:
    • 两个实体之间的关系描述(例如 “works for”, “lives in”)。
    • 关系的强度(数值化,用于衡量关系的显著性或重要性)。
  1. 嵌入向量表(Entity Embedding Table)
  • 文件名:create_final_entities.parquet
  • 内容:实体的语义嵌入,用于表示实体的语义信息。
  • 用途:支持语义搜索(通过嵌入计算实体之间的相似性)。
  1. 社区报告表(Community Reports Table)
  • 文件名:create_final_community_reports.parquet
  • 内容:社区的摘要信息。
  • 用途:支持全局搜索(通过社区信息回答关于数据集整体的问题)。
  1. 文本单元表(Text Units Table)
  • 文件名:create_final_text_units.parquet
  • 内容:被切分的原始文本单元(TextUnits)。
  • 用途:将知识图谱和原始文本结合,为 LLM 提供上下文支持。
  1. 社区表(Community Table)
  • 文件名:create_final_Communities.parquet
  • 内容:每个社区基本情况。
  1. 文件表(Documents Table)
  • 文件名:create_final_documents.parquet
  • 内容:用于记录所有参与知识图谱构建的文件情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文翻译学习:《DeepSeek-R1: 通过强化学习激励大型语言模型的推理能力》

摘要 我们介绍了我们的第一代推理模型 DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个通过大规模强化学习(RL)训练的模型,没有经过监督微调(SFT)作为初步步骤,展示了卓越的推理能力。通过强化…

使用 Ollama 在腾讯云服务器环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…

DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求

DeepSeek 的 LLM 推理新方法 DeepSeek 推出了一种创新方法,通过强化学习 (RL) 来提高大型语言模型 (LLM) 的推理能力,其最新论文 DeepSeek-R1 对此进行了详细介绍。这项研究代表了我们如何通过纯强化学习来增强 LLM 解决复杂问题的能力,而无…

【现代深度学习技术】深度学习计算 | 读写文件

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…

退格法记单词(类似甘特图)

退格法记单词,根据记忆次数或熟练程度退格,以示区分,该方法用于短时高频大量记单词: explosion爆炸,激增 mosquito蚊子granary粮仓,谷仓 offhand漫不经心的 transient短暂的slob懒惰而邋遢的…

深入理解 DeepSeek MOE(Mixture of Experts)

1. 什么是 MOE? MOE(Mixture of Experts,专家混合)是一种模型架构,旨在通过多个专家(Experts)模型的协同工作来提高计算效率和模型性能。在 MOE 结构中,不是所有的专家都参与计算&a…

MySQL数据库基础(创建/删除 数据库/表)

一、数据库的操作 1.1 显示当前数据库 语法&#xff1a;show databases&#xff1b; <1>show 是一个关键字&#xff0c;表示要执行的操作类型 <2>databases 是复数&#xff0c;表示显示所有数据库 上面的数据库中&#xff0c;除了java113&#xff0c;其它的数据库…

Git 常用命令汇总

# 推荐一个十分好用的git插件---->GitLens 其实很多命令操作完全界面化了&#xff0c;鼠标点点就可以实现但是命令是必要的&#xff0c;用多了你就知道了 Git 常用命令汇总 1. Git 基础操作 命令作用git init初始化本地仓库git clone <repo-url>克隆远程仓库到本地g…

数据分析系列--⑦RapidMiner模型评价(基于泰坦尼克号案例含数据集)

一、前提 二、模型评估 1.改造⑥ 2.Cross Validation算子说明 2.1Cross Validation 的作用 2.1.1 模型评估 2.1.2 减少过拟合 2.1.3 数据利用 2.2 Cross Validation 的工作原理 2.2.1 数据分割 2.2.2 迭代训练与测试 ​​​​​​​ 2.2.3 结果汇总 ​​​​​​​ …

Deepseek-v3 / Dify api接入飞书机器人go程序

准备工作 开通了接收消息权限的飞书机器人&#xff0c;例如我希望用户跟飞书机器人私聊&#xff0c;就需要开通这个权限&#xff1a;读取用户发给机器人的单聊消息 im:message.p2p_msg:readonly准备好飞书机器人的API key 和Secretdeepseek-v3的api keysecret&#xff1a;http…

红黑树原理及C语言实现

目录 一、原理 二、操作示例 三、应用场景 四、C语言实现红黑树 五、代码说明 六、红黑树和AVL树对比 一、原理 熟悉红黑树之前&#xff0c;我们需要了解二叉树与二叉查找树概念&#xff0c;参见前述相关文章&#xff1a;二叉查找树BST详解及其C语言实现-CSDN博客 红黑…

DeepSeek V2报告阅读

概况 MoE架构&#xff0c;236B参数&#xff0c;每个token激活参数21B&#xff0c;支持128K上下文。采用了包括多头潜在注意力&#xff08;MLA&#xff09;和DeepSeekMoE在内的创新架构。MLA通过将KV缓存显著压缩成潜在向量来保证高效的推理&#xff0c;而DeepSeekMoE通过稀疏计…

TCP服务器与客户端搭建

一、思维导图 二、给代码添加链表 【server.c】 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.…

【自动化测试】使用Python selenium类库模拟手人工操作网页

使用Python selenium类库模拟手人工操作网页 背景准备工作安装Python版本安装selenium类库下载selenium驱动配置本地环境变量 自动化脚本输出页面表单自动化填充相关代码 背景 待操作网页必须使用IE浏览器登录访问用户本地只有edge浏览器&#xff0c;通过edge浏览器IE模式访问…

如何通过Davinci Configurator来新增一个BswM仲裁规则

本文框架 前言1.增加一个Mode Declaration Group2.增加一个Mode Request RPorts3.与操作Port的SWC连线4.新建一个Expression5.新建ActionList6.将表达式新建或加进现有Rule内7.生成BswM及Rte模块代码8.在代码中调用RTE接口前言 在Autosar模式管理系列介绍01-BswM文章中,我们对…

智慧交通:如何通过数据可视化提升城市交通效率

随着城市化进程的加速&#xff0c;交通管理面临着前所未有的挑战。为了应对日益复杂的交通状况&#xff0c;智慧交通系统应运而生&#xff0c;其中数据可视化技术成为了提升交通管理效率的关键一环。本文将探讨如何利用山海鲸可视化软件来优化交通管理&#xff0c;并展示其在智…

Android Studio:如何利用Application操作全局变量

目录 一、全局变量是什么 二、如何把输入的信息存储到全局变量 2.1 MainApplication类 2.2 XML文件 三、全局变量读取 四、修改manifest ​编辑 五、效果展示 一、全局变量是什么 全局变量是指在程序的整个生命周期内都可访问的变量&#xff0c;它的作用范围不限于某个…

Kafka 可靠性探究—副本刨析

Kafka 的多副本机制提升了数据容灾能力。 副本通常分为数据副本与服务副本。数据副本是指在不同的节点上持久化同一份数据&#xff1b;服务副本指多个节点提供同样的服务&#xff0c;每个节点都有能力接收来自外部的请求并进行相应的处理。 1 副本刨析 1.1 相关概念 AR&…

Unity Dots学习

ISystem和SystemBase的区别 Archetype和Chunk 相同组件的实体放在一起&#xff0c;也就是我们所说的内存块&#xff08;Chunk&#xff09; Chunk有一个大小 https://blog.csdn.net/weixin_40124181/article/details/103716338 如果批量操作的entity都是同一个chunk下的效率会更…

Oracle(windows安装遇到的ORA-12545、ORA-12154、ORA-12541、ORA-12514等问题)

其实出现该问题就是监听或者服务没有配好。 G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMINlistener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME CLRExtProc)(ORACLE_HOME G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\d…