从非结构化文本到互动知识图谱的构建:使用大语言模型(LLMs)

引言

知识图谱提供了一种强大的方式来表示信息。它们由实体(节点)及其之间的关系(边)构成,使得信息的连接比单纯的非结构化文本更容易理解。

传统上,从原始文本构建知识图谱并不容易。它需要识别实体及其关系、手动编码的提取规则或专门的机器学习模型。然而,大语言模型(LLMs)非常灵活,可以用于这个目的。LLMs可以读取自由格式的文本并输出结构化的信息,因此,正如本文所示,我们可以将它们作为自动化管道的一部分,创建知识图谱。

本文将探讨我创建的一个学习项目,目标是创建一个由LLM驱动的管道,它可以接收非结构化文本并将其转化为一个互动知识图谱网页。该项目的所有代码都存储在AI-Knowledge-Graph[1]项目库中。

简单示例

以下是该项目执行的一个简单示例。当提供以下非结构化文本作为输入时:

文本输入:

Henry,来自加拿大的才华横溢的音乐家,最初在著名指挥家Maria Rodriguez的指导下接受了古典钢琴训练。后来,Henry与他的妹妹Lucy组成了一个名为The Maple Leaves的摇滚乐队,Lucy曾在多伦多大学学习音乐作曲。The Maple Leaves在2020年8月12日发行了他们的首张专辑《Polar Lights》,因其将古典与摇滚的元素相融合而获得了好评。Lucy还积极参与环保活动,并加入了Clean Earth,担任区域大使,提倡更严格的野生动物保护法律。Henry受到Lucy慈善事业热情的启发,因此开始在家乡的动物收容所做志愿者。尽管Henry和Lucy最初在创意上存在分歧,但他们最终找到了结合Lucy的古典作曲与Henry的摇滚吉他节奏的和谐方式。The Maple Leaves于2021年在欧洲巡演,在巴黎、柏林和罗马等大城市举办了满座的演出。在巡演期间,Henry对国际美食产生了浓厚的兴趣,并与当地厨师合作拍摄了一部关于地区烹饪技巧的短片。

ai-knowledge-graph 工具将使用您选择配置的LLM来从上述文本中提取知识,并生成一个HTML格式的知识图谱,输出的结果类似于以下图片所示:

img

高级工作原理描述

1.文本切块:自动将大型文档拆分成可管理的小块进行处理。2.知识提取:LLM随后会识别并提取每个块中的主题-谓词-宾语三元组(事实)。3.实体标准化:相同实体的不同提及(例如,“AI”和“人工智能”)会统一为单一名称。4.关系推断:通过简单的逻辑规则(例如,传递性)和LLM推理推断出额外的关系,以连接断开的子图。5.互动可视化:生成的图谱作为一个互动网络在浏览器中显示。

img

详细工作原理

文本切块

LLMs有一个上下文窗口限制(本地系统也有内存限制)。为了处理大型文档,该工具会自动将文本拆分成多个块(例如,每块500个单词,且有部分重叠)。重叠部分有助于保持边界句子之间的上下文。然后,每个块都会发送给LLM,并附带提示,指示LLM提取SPO三元组。

LLM驱动的提取

对于每个文本块,工具会要求LLM输出一个包含三元组的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.”,“人工智能”)。为了避免碎片化或重复的节点,工具提供了实体标准化步骤。

1.基本标准化:将文本转换为小写,去除空格等,以合并明显的重复项。2.标准化(可选):启用后,LLM会将不同的提及合并成可能指代相同实体的集群。例如,“New York”,“NYC”和“New York City”会合并成一个标准节点,“United States”,“U.S.”和“USA”则合并成另一个节点。

这种标准化能够改善图谱的一致性,通常是推荐的做法。如果需要严格的原始提取结果,可以在配置文件中禁用此功能。

推断隐藏连接以丰富图谱

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

基于规则的推断:

传递关系:如果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)知识提取。

提取系统提示:

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

提取用户提示:

你的任务:阅读下面的文本(由三个反引号分隔)并识别每个句子中的所有主题-谓词-宾语(S-P-O)关系。然后生成一个包含所有三元组的JSON数组,每个对象代表一个三元组。

请严格遵守以下规则:

实体一致性:在文档中使用一致的实体名称。例如,如果“John Smith”在不同地方提到为“John”,“Mr. Smith”和“John Smith”,则在所有三元组中使用一个一致的形式(最好是最完整的形式)。

原子化术语:识别独特的关键术语(如物体、地点、组织、缩写、人名、条件、概念、情感)。避免将多个想法合并为一个术语(它们应该尽可能地“原子化”)。•统一引用:将任何代词(如“他”,“她”,“它”,“他们”等)替换为实际的被引用实体(如果能识别)。•配对关系:如果多个术语在同一句话中同时出现(或在一段短文中使它们在上下文中相关),则为每一对具有有意义关系的术语创建一个三元组。•关键指令: 谓词必须最多为1-3个单词。永远不要超过3个单词。保持它们简洁明了。•确保识别文本中的所有可能关系,并将其捕获为S-P-O关系。•术语标准化:如果同一概念有轻微的变化(例如,“人工智能”和“AI”),则始终使用最常见或规范的形式。•将所有S-P-O文本的小写,包括人名和地名。•如果提到某个人名,则创建一个关于其地点、职业和他们所知的(发明、编写、创办、头衔等)的关系,如果已知且符合信息的上下文。

重要注意事项:

•旨在精确命名实体——使用区分相似但不同实体的具体形式。•通过在文档中使用相同的实体名称来最大化连接性。•在识别实体引用时要考虑整个上下文。•所有谓词必须不超过3个单词——这是严格要求。

输出要求:

•不要包括任何文本或评论,只返回JSON。•只返回JSON数组,每个三元组作为一个对象,其中包含“subject”,“predicate”和“object”。•确保JSON有效并正确格式化。

这里列出了三个未在上面列出的提示,它们引导LLM进行标准化和关系推断。您可以在src/knowledge_graph/prompts.py[2]源文件中查看(并调整)所有的提示。

互动图谱可视化

通过生成完整的SPO三元组列表(包括原始和推断的),该工具使用PyVis(Vis.js的Python接口)生成互动的HTML可视化。打开生成的文件时,您将在浏览器中看到:

颜色编码的社区:同一集群中的节点共享相同的颜色。集群通常映射到文本中的子主题或主题。•按重要性调整节点大小:具有多个连接(或较高中心性的)节点会显示得更大。•边样式:实线表示从文本中提取的关系,虚线表示推断出的关系。•互动控制:平移、缩放、拖动节点、切换物理引擎、切换明暗模式和过滤视图。

这种可视化方式使得探索关系变得更加直观和有吸引力。

程序流程

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

img

安装 AI-Knowledge-Graph

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

要求:

•一台可以运行它的计算机(支持Windows、Linux或MacOS)•安装了Python(3.12或更高版本)(推荐使用uv)•访问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模型、端点(URL)、最大内容窗口长度以及LLM的温度。在下面的示例中,我使用了Google的Gemma 3模型,该模型托管在我本地计算机上,并通过Ollama提供服务。在这个配置文件中,您还可以调整文档的切块大小和重叠部分。如果需要,您还可以选择标准化实体并使用推断来建立更多的关系。

[llm]model ="gemma3"api_key ="sk-1234"base_url ="http://localhost:11434/v1/chat/completions"max_tokens =8192temperature =0.2
[chunking]chunk_size =200# Number of words per chunkoverlap =20# Number of words to overlap between chunks
[standardization]enabled =true# Whether to enable entity standardizationuse_llm_for_entities =true# Whether to use LLM for additional entity resolution
[inference]enabled =true# Whether to enable relationship inferenceuse_llm_for_inference =true# Whether to use LLM for relationship inferenceapply_transitive =true# Whether to apply transitive inference rules
[visualization]edge_smooth =false# Smooth edge lines true or false

注意

对于本地LLM使用,您可以使用Ollama或LM Studio API端点。如果需要访问任何商业LLM提供商(如AWS Bedrock、Azure、Anthropic、OpenAI等),可以使用LiteLLM。如果您需要帮助运行Ollama本地服务,或使用LiteLLM访问其他LLM服务,请查看我之前的文章:《LLM从零到英雄使用Ollama》或《使用LiteLLM代理集中管理多个AI服务》。

创建知识图谱

现在您已经安装并配置好了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        show this help message andexit--test            Generate a test visualization with sample data--config CONFIG   Path to configuration file--output OUTPUT   Output HTML file path--input INPUT     Path to input text file (required unless--test is used)--debug           Enable debug output (raw LLM responses and extracted JSON)--no-standardize  Disable entity standardization--no-inference    Disable relationship 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
KnowledgeGraphStatistics:Nodes:72Edges:116(55 inferred)Communities:12
To view the visualization, open the following file in your

现在,您可以在网页浏览器中打开生成的 HTML 文件,来探索您的知识图谱。如果您只是想阅读并想查看和交互一个由该系统创建的知识图谱,而不自己创建,可以点击以下链接,查看一个由有关工业革命的文档创建的示例可视化图:

Industrial-Revolutions.html[3]

在页面顶部,您可以使用菜单来展开控制面板,调整布局物理引擎,隐藏或显示节点/边标签,查看图谱统计信息,或选择/过滤节点和边。您还可以启用暗黑模式,如下所示:

img

通过这些功能,您可以更方便地探索知识图谱,并与其进行互动。

尝试不同的设置非常重要

实验不同的切块大小/重叠大小以及LLM模型的组合是一个好主意,以便了解它们对结果的影响。我通常将重叠设置为切块大小的10%。较小的文档切块大小(100–200)似乎能提取更多的关系,但这可能导致其他事物和概念/社区之间的关系较少,因为它们被分散在较小的切块中。您需要进行实验,找到合适的切块大小和模型。我也相信,通过调整提示语,可能还会有很多优化可以进行。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值