免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


我要投稿

再聊一聊怎么将非结构化文本转换为可交互知识图谱

发布日期:2025-11-25 12:17:07 浏览次数: 1531
作者:三人行AI

微信搜一搜,关注“三人行AI”

推荐语

用大语言模型轻松构建知识图谱,让非结构化文本秒变可视化网络!

核心内容:
1. 大语言模型如何简化知识图谱构建流程
2. 从文本切分到关系推断的完整技术实现路径
3. 开源工具AI-Knowledge-Graph的实际应用案例

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

引言

说明一下:我并不是这一主题的专家,我选择它作为一个学习项目,希望通过实践深入了解。

图片大家都知道知识图谱是一种非常强大的信息表达方式。相比阅读无结构文本,知识图谱能更直观地展示信息之间的联系。

过去,从原始文本构建知识图谱并不容易。这项工作需要识别实体与关系、编写抽取规则,甚至训练专业的机器学习模型,整个过程复杂又耗时。而大语言模型(LLM)的出现让这一切变得灵活得多。LLM 能够阅读自然语言文本,并将其转换成结构化数据,因此完全可以作为自动化流程的一部分,用于生成知识图谱

这篇文章将介绍我构建的一个学习项目:
利用 LLM,将非结构化文本转化为一个可交互的知识图谱网页。
项目完整代码已发布在 AI-Knowledge-Graph[1] 仓库中。

简单示例

下面通过一个简单示例展示这个项目的效果。当我们输入如下这段无结构的文本时:

Henry是来自加拿大的才华音乐家,最初在著名指挥家MariaRodriguez指导下接受古典钢琴训练。之后,他与妹妹Lucy组建了一支名为TheMapleLeaves的摇滚乐队,Lucy曾在多伦多大学学习作曲。TheMapleLeaves于2020年8月12日发布首张专辑《PolarLights》,因融合古典与摇滚的音乐风格而备受赞誉。Lucy还投身环保行动,加入CleanEarth担任区域大使,推动更严格的野生动物保护法律。受到Lucy的公益精神影响,Henry也开始在家乡的动物收容所做志愿者。虽然兄妹俩在创作上曾有分歧,但最终成功将Lucy的古典作曲与Henry的摇滚吉他融合。2021年,TheMapleLeaves在欧洲巡演,在巴黎、柏林、罗马等城市的演出全部售罄。巡演期间,Henry对国际美食产生浓厚兴趣,并与当地厨师合作拍摄了一部关于区域料理技法的短纪录片。

AI-Knowledge-Graph 工具会调用你配置的 LLM,从上述文本中提取知识,并生成一个知识图谱的 HTML 页面,效果示例如下:


 由 AI-Knowledge-Graph 生成的知识图谱

工作流程概览

文本切分:将大型文档自动拆分成可处理的小段落。知识抽取:LLM 从每个文本块中识别并抽取 “主语–谓语–宾语(SPO)” 三元组。实体标准化:将同一实体的不同表达方式(如 “AI” 与 “人工智能”)统一成一个名称。关系推断:通过逻辑规则(如传递性)和 LLM 推理补全隐含的关系,连接原本分散的子图。交互式可视化:最终生成的知识图谱会以可交互网络的形式呈现在浏览器中。

文本到知识图谱处理流程的高层示意图

详细工作原理

1. 文本切分

由于 LLM 存在上下文窗口限制(本地环境也受内存限制),当需要处理大文档时,工具会自动将文本切分成多个小块(例如每 500 个词一块,并带有适当重叠)。
重叠的作用是保持块与块之间的语义连续性,避免句子被分割后丢失语境。

每个文本块随后会被发送给 LLM,并附上专门的提示词,请它从中抽取 SPO 三元组。


2. LLM 驱动的知识抽取

对于每一个文本块,工具都会让 LLM 输出一个包含三元组的 JSON 数组,并注明这些信息来源于哪个文本块。

以下为一个示例(原文后续内容中会展示具体的 JSON 结构):

[{"subject":"eli whitney","predicate":"invented","object":"cotton gin","chunk":1},{"subject":"Industrial Revolution","predicate":"reshapes","object":"economic systems","chunk":1},{"subject":"amazon","predicate":"transformed","object":"retail","chunk":3}]

提示语鼓励一致的实体命名、简短的关系短语(1-3个词),并避免使用代词引用。
从所有文本块中提取的三元组将被组合成初步的原始知识图谱。

3.统一实体命名

在抽取后,通常会发现同一实体有多个变体(例如,“AI”,“A.I.”,“人工智能”)。为了避免图谱中出现重复或分散的节点,工具提供了实体标准化步骤。

基本规范化:将实体名称统一为小写、去除多余空格等,合并明显的重复项。标准化(可选):启用后,LLM 会将可能指代同一实体的不同表述进行聚类。例如,“New York”,“NYC” 和 “New York City” 会合并为一个标准节点,“United States”,“U.S.” 和 “USA” 会成为另一个节点。

此步骤提高了图谱的一致性,通常建议启用。如果需要原始的抽取数据,可以在配置文件中禁用此功能。

4.推断隐藏关系以丰富图谱

即使彻底阅读文本,也可能无法捕捉到隐含的关系。该工具通过两种方式解决这一问题:

基于规则的推断:

传递关系:如果 A 使得 B 成立,且 B 推动 C,系统可以推断出 A 影响 C。词汇相似性:具有相似名称的实体可能会被链接为“相关”的关系。

LLM 驱动的推断:

该工具可以提示 LLM 提出可能存在的关系连接,否则这些子图将是独立的。例如,如果一个子图是关于工业革命的,另一个子图是关于 AI 的,LLM 可能推断出二者之间的历史或概念性关系(例如:“AI 是工业革命时期技术创新的产物”)。

这些推断的关系会以不同的方式标记(例如,用虚线表示),以便与显式声明的事实区分开来。

此推断步骤通常会增加大量新的关系,极大地减少孤立的子网络。如果您希望仅保留从文本中抽取的关系,可以在配置文件中禁用此功能。与块编号不同,推断关系会包括一个属性,标明该关系是推断得出的。此属性在可视化时非常重要,它将用于标识虚线边缘关系。

示例结构:

[{"subject":"electrification","predicate":"enables","object":"Manufacturing Automation","inferred":true},{"subject":"tim berners-lee","predicate":"expanded via internet","object":"information sharing","inferred":true}]

LLM 提示语

当启用所有选项时,将会向 LLM 发送四个提示语。首先是初始的主语-谓语-宾语(SPO)知识抽取:

Become a member

知识抽取系统提示语:

你是一个专门从事知识抽取和知识图谱生成的高级 AI 系统。你的专长包括在文本中识别一致的实体引用和有意义的关系。重要指令:所有关系(谓语)必须限制在最多3个单词以内。理想情况下是1-2个单词。这是硬性限制。

知识抽取用户提示语:

任务:阅读下面的文本(由三个反引号分隔),并识别每个句子中的所有主语-谓语-宾语(S-P-O)关系。然后生成一个包含对象的 JSON 数组,每个对象代表一个三元组。
请严格遵守以下规则:
-实体一致性:在整个文档中使用一致的实体名称。例如,如果"John Smith"被提及为"John"、"Mr. Smith"和"John Smith",请在所有三元组中使用单一一致的形式(最好是最完整的形式)。-原子化术语:识别不同的关键术语(如对象、地点、组织、缩略词、人名、状况、概念、感情等)。避免将多个想法合并为一个术语(它们应该尽可能原子化)。-统一引用:将任何代词(例如“he”,“she”,“it”,“they”等)替换为实际引用的实体(如果可以识别)。-配对关系:如果多个术语在同一句话中共现(或者在使它们具有上下文关系的短段落中),为每对有意义的关系创建一个三元组。-重要指令:谓语必须最多3个单词。绝不超过3个单词。保持极其简洁。-确保文本中识别到的所有可能关系都被捕捉,并形成 S-P-O 关系。-标准化术语:如果同一概念出现轻微变化(例如,“artificial intelligence”和“AI”),请一致地使用最常见或规范的形式。-将所有 S-P-O 文本转换为小写,包括人名和地名。-如果提到了某人名字,则创建与其所在位置、职业及其所知内容(如发明、著作、创办、头衔等)的关系(如果适合并且符合上下文)。
重要注意事项:
-**实体命名精确性**:使用特定的形式区分相似但不同的实体。-**最大化连接性**:通过为文档中的相同概念使用相同的实体名称来提高连接性。-**考虑整个上下文**:在识别实体引用时考虑整个上下文。-**所有谓语必须是3个单词或更少**-这是一个硬性要求。
### 输出要求:
-不要包含任何文本或评论,除 JSON 外的内容都不允许。-仅返回 JSON 数组,每个三元组作为包含“subject”、“predicate”和“object”的对象。-确保 JSON 格式有效且格式正确。

除了上面的知识抽取系统提示语和用户提示语外,还有三个未列出的提示语,它们用于实体标准化和关系推断。这些提示语可以在 src/knowledge_graph/prompts.py[2] 文件中查看(并进行调整)。

交互式图形可视化

通过生成全面的 SPO 三元组(包括原始和推断的三元组),该工具利用 PyVis(一个 Vis.js 的 Python 接口)生成交互式 HTML 可视化。在浏览器中打开生成的文件后,您将看到:

颜色编码的社区:同一聚类中的节点共享相同的颜色。聚类通常映射到文本中的子主题或主题。节点大小按重要性:与其他节点有许多连接(或高中心性的节点)将显示为更大。边缘样式:实线表示文本导出的关系,虚线表示推断的关系。交互式控制:平移、缩放、拖动节点、切换物理效果、切换明暗模式和过滤视图。

这种方式使得在视觉上非常吸引人的格式中,探索关系变得更加简便。


程序流程

以下是程序的基本流程(代码仓库的 README.md 中有更详细的流程图):



安装 AI-Knowledge-Graph

要在计算机上运行此工具,您需要满足以下要求:

系统要求:

一台计算机(Windows、Linux 或 MacOS)安装 Python(版本 3.12 或更高)访问兼容 OpenAI 的 API 端点(如 Ollama、LiteLLM、LM Studio、OpenAI 订阅等)安装 Git 以克隆代码仓库

下载并安装依赖:

1.克隆代码仓库到您将要运行的系统,并切换到该目录:

 git clone https://github.com/robert-mcdermott/ai-knowledge-graph.git cd ai-knowledge-graph
2.使用 uv 安装依赖:
 uv sync
或者使用 pip 安装:
 pip install -r requirements.txt


配置 AI-Knowledge-Graph

编辑 config.toml 文件以根据你的实际情况进行配置。此文件中可以配置 LLM 模型、API 端点(URL)、最大内容窗口长度以及 LLM 的温度等参数。以下是一个示例配置,我在本地使用 Ollama 托管的 Google Gemma 3 模型:

[llm]model ="gemma3"api_key ="sk-1234"base_url ="http://localhost:11434/v1/chat/completions"max_tokens =8192temperature =0.2
[chunking]chunk_size =200# 每个块的字数overlap =20# 块之间的重叠字数
[standardization]enabled =true# 是否启用实体标准化use_llm_for_entities =true# 是否使用 LLM 进行额外的实体解析
[inference]enabled =true# 是否启用关系推断use_llm_for_inference =true# 是否使用 LLM 进行关系推断apply_transitive =true# 是否应用传递推断规则
[visualization]edge_smooth =false# 是否平滑边缘线,true 或 false

注意:对于本地使用的 LLM,你可以使用 Ollama 或 LM Studio 的 API 端点;对于访问任何商业 LLM 提供商(如 AWS Bedrock、Azure、Anthropic、OpenAI 等),你可以使用 LiteLLM。

创建知识图谱

现在你已经安装并配置好了 AI-Knowledge-Graph,指向你的 LLM,接下来就可以创建你的第一个知识图谱了。获取一份纯文本文档(当前只支持文本格式),该文档将用于创建知识图谱。

接下来,你需要运行 generate-graph.py 脚本。以下是该脚本的帮助信息:

usage: generate-graph.py [-h][--test][--config CONFIG][--output OUTPUT][--input INPUT][--debug][--no-standardize][--no-inference]
KnowledgeGraphGeneratorandVisualizer
options:-h,--help        显示此帮助信息并退出--test            使用示例数据生成测试可视化--config CONFIG   配置文件路径--output OUTPUT   输出的 HTML 文件路径--input INPUT     输入文本文件路径(如果不使用--test,则为必需)--debug           启用调试输出(原始 LLM 响应和抽取的 JSON)--no-standardize  禁用实体标准化--no-inference    禁用关系推断

以下是一个创建知识图谱的示例,假设当前目录下有一个名为 mydocument.txt 的文本文件(如果你使用的是 uv,请将 python 替换为 uv run):

python generate-graph.py --input mydocument.txt --output mydocument.html

执行上述命令时,控制台输出将如下所示:

python generate-graph.py --input mydocument.txt --output mydocument.htmlUsing input text from file: mydocument.txt==================================================PHASE 1: INITIAL TRIPLE EXTRACTION==================================================Processing text in3 chunks (size:500 words, overlap:50 words)Processing chunk 1/3(500 words)Processing chunk 2/3(500 words)Processing chunk 3/3(66 words)
Extracted a total of 73 triples from all chunks
==================================================PHASE 2: ENTITY STANDARDIZATION==================================================Startingwith73 triples and106 unique entitiesStandardizing entity names across all triples...Applied LLM-based entity standardization for15 entity groupsRemoved8self-referencing triplesStandardized106 entities into101 standard formsAfter standardization:65 triples and72 unique entities
==================================================PHASE 3: RELATIONSHIP INFERENCE==================================================Startingwith65 triplesTop5 relationship types before inference:- pioneered:9 occurrences- invented:7 occurrences- developed:6 occurrences- develops:6 occurrences- was:4 occurrences
Inferring additional relationships between entities...Identified18 disconnected communities in the graphInferred27new relationships between communitiesInferred30new relationships between communitiesInferred6new relationships within communitiesInferred8 relationships based on lexical similarityAdded51 inferred relationships
Top5 relationship types after inference:- invented:7 occurrences- pioneered:6 occurrences- developed:6 occurrences- develops:6 occurrences- related to:6 occurrences
Added57 inferred relationshipsFinal knowledge graph:116 triplesSaved raw knowledge graph data to mydocument.jsonProcessing116 triples for visualizationFound72 unique nodesFound55 inferred relationshipsDetected12 communities usingLouvain method
Knowledge graph visualization saved to mydocument.html

现在,在你的浏览器中打开生成的 HTML 文件,探索知识图谱。如果你只是跟随阅读并希望看到由该系统创建的知识图谱,可以看一个关于工业革命的文档生成的示例可视化:


你可以使用页面顶部的菜单扩展控制面板,调整布局物理效果、隐藏或显示节点/边缘标签、查看图谱统计信息或选择/过滤节点和边缘。页面还提供了暗黑模式,如下图所示:

实验不同的设置

实验不同的块大小、重叠大小以及 LLM 模型是很重要的。通常,我会将重叠设置为块大小的 10%。较小的文档切块大小(100-200)似乎能够提取更多关系,但这可能会导致其他事物和概念/社区之间的关系较少,因为它们分散在小块之间。你需要通过实验找到合适的块大小和模型。我也相信通过调整提示语,还可以做出许多优化。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询