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

张开发
2026/4/17 2:18:13 15 分钟阅读

分享文章

从非结构化文本到基于LLM的交互式知识图谱
专注于知识图谱构建与应用开发提供一站式定制服务。涵盖数据采集、实体与关系抽取、图谱建模及优化支持科研与企业场景。可开发智能问答、语义查询与推荐系统并提供可视化分析与Neo4j图数据库搭建助力高效挖掘知识价值实现智能决策与业务落地。引言知识图谱提供了一种强大的信息表示方式。它由实体节点以及它们之间的关系边组成相比仅以非结构化文本的形式查看这种方式更容易理解事物之间的连接关系。传统上从原始文本构建知识图谱并不容易。这需要识别实体及其关系编写手工提取规则或使用专门的机器学习模型。然而大语言模型LLMs非常灵活可以用于这一目的。LLMs能够读取自由形式的文本并输出结构化信息因此正如本文将展示的我们可以将其作为自动化流程的一部分用于创建知识图谱。简单示例以下是该项目功能的一个简单示例。当提供如下非结构化文本作为输入时ai-knowledge-graph工具将使用你所配置的大语言模型从上述文本中提取知识并生成一个知识图谱HTML作为输出其效果类似于下图所示工作原理的高级描述文本分块自动将大型文档拆分为可处理的较小文本块。知识提取随后由大语言模型识别并提取每个文本块中的“主语–谓语–宾语”三元组事实。实体标准化将对同一实体的不同表述例如“AI”和“artificial intelligence”统一为一个名称。关系推理通过简单的逻辑规则例如传递性以及大语言模型的推理能力推断出额外的关系从而连接原本不相连的子图。交互式可视化最终生成的图谱将在浏览器中以交互式网络的形式展示。按回车键或点击以查看完整尺寸图片。工作原理详解文本分块大语言模型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”。为了避免节点碎片化或重复该工具提供了实体标准化步骤。基础规范化通过小写化、去除多余空格等方式合并明显重复的实体。标准化可选启用后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已安装 Python3.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%免费】

更多文章