微信扫码
添加专属顾问
我要投稿
用大语言模型轻松构建知识图谱,让非结构化文本秒变可视化网络! 核心内容: 1. 大语言模型如何简化知识图谱构建流程 2. 从文本切分到关系推断的完整技术实现路径 3. 开源工具AI-Knowledge-Graph的实际应用案例
大家都知道知识图谱是一种非常强大的信息表达方式。相比阅读无结构文本,知识图谱能更直观地展示信息之间的联系。
过去,从原始文本构建知识图谱并不容易。这项工作需要识别实体与关系、编写抽取规则,甚至训练专业的机器学习模型,整个过程复杂又耗时。而大语言模型(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 推理补全隐含的关系,连接原本分散的子图。•交互式可视化:最终生成的知识图谱会以可交互网络的形式呈现在浏览器中。
文本到知识图谱处理流程的高层示意图
由于 LLM 存在上下文窗口限制(本地环境也受内存限制),当需要处理大文档时,工具会自动将文本切分成多个小块(例如每 500 个词一块,并带有适当重叠)。
重叠的作用是保持块与块之间的语义连续性,避免句子被分割后丢失语境。
每个文本块随后会被发送给 LLM,并附上专门的提示词,请它从中抽取 SPO 三元组。
对于每一个文本块,工具都会让 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个词),并避免使用代词引用。
从所有文本块中提取的三元组将被组合成初步的原始知识图谱。
在抽取后,通常会发现同一实体有多个变体(例如,“AI”,“A.I.”,“人工智能”)。为了避免图谱中出现重复或分散的节点,工具提供了实体标准化步骤。
•基本规范化:将实体名称统一为小写、去除多余空格等,合并明显的重复项。•标准化(可选):启用后,LLM 会将可能指代同一实体的不同表述进行聚类。例如,“New York”,“NYC” 和 “New York City” 会合并为一个标准节点,“United States”,“U.S.” 和 “USA” 会成为另一个节点。
此步骤提高了图谱的一致性,通常建议启用。如果需要原始的抽取数据,可以在配置文件中禁用此功能。
即使彻底阅读文本,也可能无法捕捉到隐含的关系。该工具通过两种方式解决这一问题:
•传递关系:如果 A 使得 B 成立,且 B 推动 C,系统可以推断出 A 影响 C。•词汇相似性:具有相似名称的实体可能会被链接为“相关”的关系。
•该工具可以提示 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 发送四个提示语。首先是初始的主语-谓语-宾语(SPO)知识抽取:
你是一个专门从事知识抽取和知识图谱生成的高级 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 中有更详细的流程图):
要在计算机上运行此工具,您需要满足以下要求:
•一台计算机(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
uv sync
pip install -r requirements.txt
编辑 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
现在你已经安装并配置好了 AI-Knowledge-Graph,指向你的 LLM,接下来就可以创建你的第一个知识图谱了。获取一份纯文本文档(当前只支持文本格式),该文档将用于创建知识图谱。
接下来,你需要运行 generate-graph.py 脚本。以下是该脚本的帮助信息:
usage: generate-graph.py [-h][--test][--config CONFIG][--output OUTPUT][--input INPUT][--debug][--no-standardize][--no-inference]KnowledgeGraphGeneratorandVisualizeroptions:-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 occurrencesInferring 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 relationshipsTop5 relationship types after inference:- invented:7 occurrences- pioneered:6 occurrences- developed:6 occurrences- develops:6 occurrences- related to:6 occurrencesAdded57 inferred relationshipsFinal knowledge graph:116 triplesSaved raw knowledge graph data to mydocument.jsonProcessing116 triples for visualizationFound72 unique nodesFound55 inferred relationshipsDetected12 communities usingLouvain methodKnowledge graph visualization saved to mydocument.html
现在,在你的浏览器中打开生成的 HTML 文件,探索知识图谱。如果你只是跟随阅读并希望看到由该系统创建的知识图谱,可以看一个关于工业革命的文档生成的示例可视化:
你可以使用页面顶部的菜单扩展控制面板,调整布局物理效果、隐藏或显示节点/边缘标签、查看图谱统计信息或选择/过滤节点和边缘。页面还提供了暗黑模式,如下图所示:
实验不同的块大小、重叠大小以及 LLM 模型是很重要的。通常,我会将重叠设置为块大小的 10%。较小的文档切块大小(100-200)似乎能够提取更多关系,但这可能会导致其他事物和概念/社区之间的关系较少,因为它们分散在小块之间。你需要通过实验找到合适的块大小和模型。我也相信通过调整提示语,还可以做出许多优化。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-11-24
让企业级大模型落地:每个企业 AI项目都需要的知识图谱KG基础
2025-11-23
详解Palantir本体中的地理位置数据
2025-11-20
Context Engineering:Weaviate构建智能体系统的完整指南
2025-11-17
基于递归抽象树检索技术构建反洗钱知识库的探索与实践
2025-11-14
本地知识库搭建(Mia VS cheer studio VS AnythingLLM)
2025-11-13
用 Cognee 构建端到端知识图谱,实现当前效果最好的AI Agent记忆层
2025-11-13
如何使用 Knowledge Graph 和 LLM 构建构建问答系统
2025-11-05
企业级AI独角兽Glean揭秘知识图谱增强大模型:企业AI的关键基石,重新定义智能系统的上下文理解
2025-09-02
2025-08-28
2025-08-30
2025-08-28
2025-09-17
2025-09-03
2025-09-02
2025-09-01
2025-08-28
2025-10-19