2026年7月16日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

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

发布日期:2025-11-25 12:17:07 浏览次数: 2214
作者:三人行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

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅