当前位置: 首页 > news >正文

从非结构化文本到基于LLM的交互式知识图谱

专注于知识图谱构建与应用开发,提供一站式定制服务。

涵盖数据采集、实体与关系抽取、图谱建模及优化,支持科研与企业场景。

可开发智能问答、语义查询与推荐系统,并提供可视化分析与Neo4j图数据库搭建,助力高效挖掘知识价值,实现智能决策与业务落地。

引言

知识图谱提供了一种强大的信息表示方式。它由实体(节点)以及它们之间的关系(边)组成,相比仅以非结构化文本的形式查看,这种方式更容易理解事物之间的连接关系。

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

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

ai-knowledge-graph工具将使用你所配置的大语言模型,从上述文本中提取知识,并生成一个知识图谱HTML作为输出,其效果类似于下图所示:

工作原理的高级描述:

  1. 文本分块:自动将大型文档拆分为可处理的较小文本块。
  2. 知识提取:随后由大语言模型识别并提取每个文本块中的“主语–谓语–宾语”三元组(事实)。
  3. 实体标准化:将对同一实体的不同表述(例如“AI”和“artificial intelligence”)统一为一个名称。
  4. 关系推理:通过简单的逻辑规则(例如传递性)以及大语言模型的推理能力,推断出额外的关系,从而连接原本不相连的子图。
  5. 交互式可视化:最终生成的图谱将在浏览器中以交互式网络的形式展示。
    按回车键或点击以查看完整尺寸图片。

工作原理详解

文本分块

大语言模型(LLMs)存在上下文窗口限制(本地系统也有内存限制)。为了处理大型文档,该工具会自动将文本拆分为多个片段(例如每段500个词,并带有一定重叠)。这种重叠有助于在边界句子处保持上下文连贯性。随后,每个文本片段都会连同提示词一起发送给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.”、“artificial intelligence”)。为了避免节点碎片化或重复,该工具提供了实体标准化步骤。

  1. 基础规范化:通过小写化、去除多余空格等方式合并明显重复的实体。
  2. 标准化(可选):启用后,LLM会对可能指向同一实体的不同表述进行聚类。例如,“New York”、“NYC”和“New York City”会合并为一个标准节点,而“United States”、“US”和“USA”会合并为另一个节点。

这有助于提升图谱的一致性,通常建议启用。如果你需要严格的原始提取结果,也可以在配置文件中将其关闭。

推断隐藏关系以丰富图谱
即使对文本进行了充分解析,也可能无法捕捉到隐含的关系。该工具通过以下两种方式来解决这一问题:

基于规则的推理:

  • 传递关系:如果A促成B,且B推动C,系统可以推断出A影响C。
  • 词汇相似性:名称相似的实体可能会通过一个通用的“related to(相关)”关系进行连接。

基于LLM的推理:

  • 该工具可以提示LLM在原本不相连的子图之间建立联系。例如,如果一个子图涉及工业革命,另一个涉及人工智能,LLM可能会推断出历史或概念上的联系(例如:“人工智能是始于工业革命的技术创新的延伸”)。
  • 这些关系会以不同方式标记(例如使用虚线),以区别于文本中明确表达的事实关系。

这一推理步骤通常会增加大量新的关系,大大减少孤立的子网络。如果你只希望得到完全基于原文的图谱,也可以在配置文件中将其关闭。与使用文本块编号不同,推断得到的关系会包含一个标识其为“推断关系”的属性。这个属性在可视化时非常重要,因为它会用于将这些关系以虚线边的形式展示。示例结构如下:

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

提取系统提示词:

你是一个专注于知识提取和知识图谱生成的高级人工智能系统。 你的专长包括在文本中识别一致的实体指代以及有意义的关系。 关键指令:所有关系(谓词)长度必须不超过3个词,理想情况下为1–2个词。这是一个硬性限制。

提取用户提示词:

你的任务:阅读下面由三个反引号(```)分隔的文本,并识别每个句子中的所有“主语-谓语-宾语”(S-P-O)关系。然后生成一个JSON数组,其中每个对象表示一个三元组。 请严格遵循以下规则: 实体一致性:在整个文档中对实体使用一致的名称。例如,如果“John Smith”在不同地方被称为“John”、“Mr. Smith”和“John Smith”,请在所有三元组中使用一个统一的名称(优先使用最完整的形式)。 原子化术语:识别独立的关键术语(例如:对象、地点、组织、缩写、人、条件、概念、情感)。避免将多个概念合并为一个术语(应尽可能“原子化”)。 统一指代:将所有代词(例如“he”、“she”、“it”、“they”等)替换为其对应的实际实体(如果可以识别)。 成对关系:如果多个术语在同一句子中同时出现(或在一个短段落中具有上下文关联),为每一对具有实际关系的术语创建一个三元组。 关键指令:谓词必须限制在1–3个词以内,绝不能超过3个词,且应尽可能简洁。 确保识别文本中的所有可能关系,并将其表示为S-P-O三元组。 术语标准化:如果同一概念存在不同表达形式(例如“artificial intelligence”和“AI”),请统一使用最常见或规范的表达。 所有S-P-O中的文本必须使用小写,包括人名和地名。 如果文本中提到某个人名,应在可能且符合上下文的情况下,创建其与地点、职业以及其成就(如发明、撰写、创立、头衔等)的关系。 重要注意事项: 在实体命名时尽量精确,使用能够区分相似但不同实体的具体形式 在整个文档中使用相同的实体名称,以最大化图谱的连通性 在识别实体指代时考虑整体上下文 所有谓词必须不超过3个词——这是硬性要求 输出要求: 不要包含JSON之外的任何文本或说明 仅返回JSON数组,每个三元组应包含“subject”、“predicate”和“object”字段 确保JSON格式正确且有效

还有另外三个未在此列出的提示词,用于指导LLM进行实体标准化和关系推理。

交互式图谱可视化

在获得完整的SPO三元组列表(包括原始提取和推理得到的关系)后,该工具会使用 PyVis(一个基于 Vis.js 的 Python 接口)生成一个交互式HTML可视化结果。在浏览器中打开生成的文件后,你将看到:

  • 颜色编码的社区:同一聚类中的节点具有相同颜色,这些聚类通常对应文本中的子主题或话题。
  • 基于重要性的节点大小:连接较多(或中心性较高)的节点会显示得更大。
  • 边的样式:实线表示从文本中直接提取的关系,虚线表示推理得到的关系。
  • 交互式控制:支持平移、缩放、拖动节点、切换物理引擎、切换明暗模式以及筛选视图。

这使得用户能够以一种直观且美观的方式探索各类关系。

程序流程
下面是该程序的基本流程:

安装 AI-Knowledge-Graph

要在你的电脑上运行该项目,你需要满足以下要求:

系统要求:

  • 一台可运行的电脑(Windows、Linux 或 MacOS)
  • 已安装 Python(3.12 或更高版本,推荐使用 uv)
  • 可访问 OpenAI 兼容的 API 接口(例如 Ollama、LiteLLM、LM Studio、OpenAI 订阅等)
  • 已安装 Git,用于克隆代码仓库

下载并安装依赖:

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

git clone https://github.com/robert-mcdermott/ai-knowledge-graph.git cd ai-knowledge-graph

使用 uv 安装依赖:

uv sync

或者使用 pip 安装:

pip install -r requirements.txt

配置 AI-Knowledge-Graph

编辑 config.toml 文件以适配你的环境。这是你用来配置 LLM 模型、接口端点(URL)、上下文窗口最大长度以及温度参数的地方。下面的示例中,我使用的是 Google 的开源 Gemma 3 模型,并通过 Ollama 在本地电脑上运行。

在这里,你也可以调整文档分块大小和重叠长度,同时还可以选择是否启用实体标准化以及是否使用推理来生成更多关系:

[llm] model = "gemma3" api_key = "sk-1234" base_url = "http://localhost:11434/v1/chat/completions" max_tokens = 8192 temperature = 0.2 [chunking] chunk_size = 200 # Number of words per chunk overlap = 20 # Number of words to overlap between chunks [standardization] enabled = true # Whether to enable entity standardization use_llm_for_entities = true # Whether to use LLM for additional entity resolution [inference] enabled = true # Whether to enable relationship inference use_llm_for_inference = true # Whether to use LLM for relationship inference apply_transitive = true # Whether to apply transitive inference rules [visualization] edge_smooth = false # Smooth edge lines true or 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] Knowledge Graph Generator and Visualizer options: -h, --help show this help message and exit --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.html Using input text from file: mydocument.txt ================================================== PHASE 1: INITIAL TRIPLE EXTRACTION ================================================== Processing text in 3 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 ================================================== Starting with 73 triples and 106 unique entities Standardizing entity names across all triples... Applied LLM-based entity standardization for 15 entity groups Removed 8 self-referencing triples Standardized 106 entities into 101 standard forms After standardization: 65 triples and 72 unique entities ================================================== PHASE 3: RELATIONSHIP INFERENCE ================================================== Starting with 65 triples Top 5 relationship types before inference: - pioneered: 9 occurrences - invented: 7 occurrences - developed: 6 occurrences - develops: 6 occurrences - was: 4 occurrences Inferring additional relationships between entities... Identified 18 disconnected communities in the graph Inferred 27 new relationships between communities Inferred 30 new relationships between communities Inferred 6 new relationships within communities Inferred 8 relationships based on lexical similarity Added 51 inferred relationships Top 5 relationship types after inference: - invented: 7 occurrences - pioneered: 6 occurrences - developed: 6 occurrences - develops: 6 occurrences - related to: 6 occurrences Added 57 inferred relationships Final knowledge graph: 116 triples Saved raw knowledge graph data to mydocument.json Processing 116 triples for visualization Found 72 unique nodes Found 55 inferred relationships Detected 12 communities using Louvain method Knowledge graph visualization saved to mydocument.html Knowledge Graph Statistics: Nodes: 72 Edges: 116 (55 inferred) Communities: 12 To view the visualization, open the following file in your browser: file:///Users/robertm/mycode/ai-knowledge-graph/mydocument.html

现在,在你的网页浏览器中打开生成的 HTML 文件,即可探索该知识图谱。如果你只是阅读本文,并且想在不自己创建的情况下查看并交互一个由该系统生成的知识图谱,

你随后可以使用页面顶部的菜单展开控制面板,用于调整布局的物理参数、隐藏或显示节点/边标签、查看图谱统计信息,或选择/筛选节点与边。此外,还提供深色模式,如下例所示:

尝试不同配置非常重要

建议你尝试不同的分块(chunk)和重叠(overlap)大小,以及不同的LLM模型,来观察它们对结果的影响。我通常将重叠设置为分块大小的10%。较小的文本分块(100–200)似乎能够提取出更多的关系,但这也可能导致不同概念或社区之间的关系变少,因为它们被分散在较小的片段中。

你需要通过实验来找到最合适的分块大小和模型。此外,我也很确定,通过调整提示词(prompts),仍然有很多优化空间可以进一步提升效果。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

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

http://www.jsqmd.com/news/653157/

相关文章:

  • 1、Docker概述与安装
  • PHP反序列化漏洞实战:从CVE-2016-7124绕过到字符串逃逸利用
  • 2026中国GEO行业生态友好发展白皮书
  • MySQL 主从复制延迟问题
  • JavaScript 微任务与宏任务完全指南
  • 敏捷开发失效了?2026年新方法论探索
  • 做中后台业务,为什么我不建议你用 Tailwind CSS?
  • 初次使用降AI工具的完整入门教程:从零开始用嘎嘎降AI达标
  • Android应用如何精准识别并屏蔽主流模拟器运行环境
  • 哔哩下载姬DownKyi:如何免费解锁B站全画质视频下载的终极方案
  • AI客服机器人爆发前夜,你还在用2023版对话引擎?——2026奇点大会6项强制合规新规倒计时47天
  • 下一代软件:告别 GUI,CLI 底层革命
  • 图解 RAG:为什么大模型需要外挂知识库
  • 【JVM深度解析】第01篇:JVM前世今生与技术架构全景
  • 5G NR调度器:从帧结构到资源分配的实战解析
  • Cadence Virtuoso导入TSMC 65nm PDK保姆级避坑指南:从解压到仿真成功全流程
  • 2026 年两款服务器面板内存占用测试:宝塔面板和 1Panel 表现如何
  • GB/T 13123-2026 竹胶合板检测
  • 免费论文AIGC检测使用指南:原理实操全攻略
  • 扫普通链接二维码打开小程序页面参数获取
  • 开发者面试内卷:突出重围的差异化战术
  • 实战解析 | Workbench多单元混合建模在静力学分析中的高效应用
  • 当AI学会害怕和好奇——V4认知与情绪
  • 五大Web GIS地图框架深度对比:Leaflet、OpenLayers、Mapbox、Cesium与ArcGIS for JavaScript
  • 多益网络笔试里的Python哲学题怎么答?‘Explicit is better than implicit’对新手程序员意味着什么?
  • Cursor Pro激活技术深度解析:3大核心技术实现与实战指南
  • 如何用Jasminum插件3分钟搞定中文文献管理:Zotero终极效率提升指南
  • 【JVM深度解析】第02篇:类加载机制深度解析
  • DelphiZXingQRCode 实战:从零到一构建企业级二维码生成模块
  • OpenClaw Windows 一键部署全流程|解压即装+环境免配置,龙虾AI智能体本地快速落地