一天一个开源项目(第61篇):knowledge_graph - 把任意文本转成知识图谱

引言

"Convert any text to a graph of knowledge. Graph Retrieval Augmented Generation (GRAG) --- a new and improved version of RAG."

这是「一天一个开源项目」系列的第 61 篇文章。今天介绍的项目是 knowledge_graphGitHub)。

想把文档、PDF 转成可查询、可可视化的知识图谱?knowledge_graphLLM 提取概念 (非实体)、构建节点与边 ,支持 GRAG(图检索增强生成) 、中心性分析、社区发现。采用 no-GPT 方案 :本地 Mistral 7B + Ollama,零 API 成本,Docker 一键运行。

你将学到什么

  • 知识图谱的构建流程
  • 概念 vs 实体的区别
  • W1(语义关系)与 W2(上下文邻近)双权重
  • GRAG 与 RAG 的对比
  • 本地 Ollama + Docker 快速开始

前置知识

  • 对 RAG、知识图谱有基本了解
  • 有 Docker 或本地 Ollama 环境(可选)

项目背景

项目简介

knowledge_graph 是 rahulnyk 开源的文本转知识图谱 项目。从 PDF 等文本语料中,用 LLM 提取概念(concepts)而非实体(entities),例如「班加罗尔」是实体,「班加罗尔宜人天气」是概念;概念在同一文本块中共现则视为相关。构建出的图谱可用于 GRAG、中心性计算、社区聚类等。

作者

  • 作者:rahulnyk
  • 理念:概念比实体更有意义;本地 LLM 零成本;可扩展为图数据库

项目数据


主要功能

核心流程

  1. 分块:将文本语料切分为 chunks,分配 chunk_id
  2. 提取概念与关系:用 LLM 从每个 chunk 提取概念及其语义关系,权重 W1
  3. 上下文邻近:同一 chunk 内共现的概念视为相关,权重 W2
  4. 合并边:对相同概念对合并权重、拼接关系,得到唯一边
  5. 计算度与社区:节点度(用于 sizing)、社区(用于 coloring)

概念 vs 实体

类型 示例 说明
实体 Bangalore、医生 具体对象、人名、地名
概念 Pleasant weather in Bangalore、医生与患者关系 情境、关系、抽象概念
本项目 提取概念 作者经验:概念比实体更有意义的 KG

使用场景

  1. GRAG:用图谱作为检索器,与文档进行更深层对话
  2. 中心性分析:识别文本中最重要的概念
  3. 社区发现:将概念聚类,分析主题结构
  4. 可视化:用 Pyvis 生成可托管到网页的交互图

快速开始

Docker(推荐)

bash 复制代码
git clone https://github.com/rahulnyk/knowledge_graph.git
cd knowledge_graph
docker build -t knowledge-graph .
docker run -p 8888:8888 knowledge-graph

访问 Jupyter(端口 8888)。

本地 Ollama

  1. 安装 Ollama
  2. 运行 ollama run zephyr(或 Mistral 7B OpenOrca)
  3. 修改 extract_graph.ipynb 中的输入文本/PDF 路径,运行 notebook

核心 Notebookextract_graph.ipynb

技术栈

组件 说明
Mistral 7B OpenOrca 提取概念的 LLM,通过 Ollama 本地运行
Ollama 本地托管模型,零 API 成本
Pandas 图 schema 的 dataframe(可后续换图数据库)
NetworkX 图结构与算法
Pyvis 生成可网页托管的 JS 图可视化

项目优势

对比项 knowledge_graph 传统 NER + 关系抽取 纯向量 RAG
提取对象 概念 实体 无显式结构
关系 语义 + 上下文邻近 预定义关系类型
成本 本地 LLM,零 API 视实现而定 向量化有成本
检索方式 图检索(GRAG) 图查询 向量相似度
可解释性 高,可追溯边与 chunk

项目详细剖析

双权重设计

  • W1:LLM 提取的语义关系,同一概念对可有多种关系
  • W2:同一 chunk 内共现的上下文邻近关系
  • 合并:相同概念对合并,权重相加,关系列表拼接

待改进方向(社区建议)

后端

  • 用 embedding 去重语义相似概念(如 "doctor" 与 "doctors")
  • 过滤冗余、离群概念
  • 优化上下文邻近,避免高频概念过重

前端

  • 按兴趣/主题展开子概念
  • 更实用的图谱浏览与导航

目录结构

bash 复制代码
knowledge_graph/
├── extract_graph.ipynb   # 核心提取 notebook
├── ner.ipynb             # NER 相关
├── data_input/           # 输入数据
├── data_output/          # 输出
├── helpers/              # 辅助函数
├── ollama/               # Ollama 相关
├── dockerfile
└── pyproject.toml

项目地址与资源

官方资源

适用人群

  • 需要从文档构建知识图谱的开发者
  • 探索 GRAG、图检索增强的团队
  • 希望零 API 成本、本地运行的 RAG/GRAG 用户
  • 对概念抽取、图可视化感兴趣的研究者

欢迎来我中的个人主页找到更多有用的知识和有趣的产品

相关推荐
Jmayday29 分钟前
机器学习基本理论
人工智能·机器学习
ZhengEnCi30 分钟前
01b-上下文向量与信息瓶颈
人工智能
王_teacher30 分钟前
机器学习 矩阵求导 完整公式+严谨推导
人工智能·线性代数·考研·机器学习·矩阵·线性回归
码以致用1 小时前
DeerFlow Memory架构
人工智能·ai·架构·agent
ting94520001 小时前
从零构建大模型实战:数据处理与 GPT-2 完整实现
人工智能
学点程序1 小时前
Manifest:帮个人 AI Agent 降低模型成本的开源路由器
人工智能·开源
可观测性用观测云1 小时前
观测云 x AI Agent:运维智能化的范式跃迁实践
人工智能
数数科技的数据干货1 小时前
ThinkingAI携手华为云,共建企业级AI Agent平台Agentic Engine
人工智能·ai·华为云·agent
人工智能AI技术1 小时前
春招急救:7天面试突击方案
人工智能
2603_954708311 小时前
如何确保微电网标准化架构设计流程的完整性?
网络·人工智能·物联网·架构·系统架构