AI入门------什么是知识图谱?
1. 什么是知识图谱
知识图谱(Knowledge Graph)是一种用图结构表达现实世界知识 的方法。它把客观世界中的对象抽象为实体(Entity) ,把实体之间的联系抽象为关系(Relation),并通过**属性(Property)**补充实体或关系的细节信息。
如果用一句话概括,知识图谱就是:
用节点和边来组织知识,让机器不仅能"存数据",还能"理解对象之间的关联"。
与传统二维表相比,知识图谱更擅长回答下面这类问题:
- 某个人与哪些机构、技术领域有关联?
- 两个对象之间是如何间接连接起来的?
- 某项技术背后有哪些研究者、组织和应用场景?
这也是知识图谱在搜索、推荐、风控、问答系统、企业知识管理等场景中非常有价值的原因。
2. 知识图谱的基础概念
2.1 实体
实体是现实世界中可以被唯一识别的对象,例如:
- 人物:
Andrew Ng - 组织:
DeepLearning.AI - 技术:
深度学习 - 课程:
Machine Learning
在图数据库中,实体通常表现为节点(Node)。
2.2 关系
关系表示实体之间的联系,例如:
Andrew NgWORKS_ATDeepLearning.AIAndrew NgRESEARCHES机器学习DeepLearning.AIFOCUSES_ON深度学习
在图数据库中,关系通常表现为边(Relationship)。
2.3 属性
属性用于描述实体或关系的附加信息,例如:
- 人物节点属性:
name、title - 组织节点属性:
name、type - 技术节点属性:
name、category
例如:
text
(:Person {name: "Andrew Ng", title: "AI Educator"})
2.4 三元组
知识图谱常用三元组表示知识:
text
(头实体, 关系, 尾实体)
例如:
text
(Andrew Ng, RESEARCHES, 机器学习)
三元组是知识图谱最基础的表达形式。大量三元组连接起来,就形成了一个完整的知识网络。
2.5 本体与模式
如果把知识图谱理解为数据库,那么本体(Ontology) 或 模式(Schema) 就相当于建模规则,用来规定:
- 允许有哪些实体类型
- 允许有哪些关系类型
- 不同类型之间如何连接
例如,在一个 AI 领域的小型知识图谱中,可以定义:
PersonOrganizationTechnologyCourse
以及关系:
WORKS_ATRESEARCHESFOCUSES_ONTEACHES
良好的模式设计可以让图谱更规范,也更容易查询和扩展。
3. 知识图谱与传统关系数据库的区别
传统关系数据库(如 MySQL、PostgreSQL)擅长处理结构稳定、事务明确的数据,例如订单、账户、库存等。它们用表、主键、外键来表示数据之间的关系。
而知识图谱更适合处理下面这些特点明显的场景:
- 关系复杂,且层级深
- 数据之间存在大量多跳关联
- 经常需要探索"路径"和"网络"
- 实体和关系类型可能不断扩展
例如,在关系型数据库里,要回答"谁与某项技术有关,并且这些人所在机构也关注这项技术"这样的问题,通常需要多表连接;而在图数据库中,这类问题天然就是沿着图上的边做遍历。
简而言之:
- 关系数据库更适合面向事务与结构化表存储
- 知识图谱/图数据库更适合面向关联分析与语义连接
4. 知识图谱的常见构建流程
一个完整的知识图谱项目通常包括以下几个环节:
4.1 知识建模
先确定领域边界,定义实体、关系和属性。例如在教育领域,可以建模为:
- 教师
- 学生
- 课程
- 学校
以及:
TEACHESSTUDIESBELONGS_TO
4.2 数据采集
数据可以来自:
- 业务数据库
- Excel/CSV 文件
- 网页
- API
- 文档与论文
- 日志或知识库系统
4.3 信息抽取
对于非结构化文本,需要借助自然语言处理技术抽取:
- 实体识别(NER)
- 关系抽取(RE)
- 事件抽取
这一步是机器学习和 AI 在知识图谱中最核心的应用点之一。
4.4 知识融合
不同来源的数据可能存在重复或歧义,例如:
OpenAI Inc.OpenAI
需要通过实体对齐、去重、消歧等方法,把它们统一为同一个实体。
4.5 存储与查询
构建好的知识可以存入:
- RDF 三元组库
- 图数据库,例如
Neo4j
随后通过查询语言进行检索、统计、路径分析和可视化。
4.6 推理与应用
在图谱基础上,可以继续做:
- 规则推理
- 相似实体发现
- 问答系统
- 推荐系统
- 风险传播分析
5. 常见应用场景
知识图谱的应用非常广泛,常见场景包括:
- 搜索引擎:增强搜索结果的语义理解
- 智能问答:将自然语言问题映射为图查询
- 推荐系统:根据用户、物品、属性和行为构建关联网络
- 金融风控:识别企业、账户、人员之间的风险关联
- 企业知识管理:统一组织内部系统、文档和流程知识
- 医疗与科研:组织疾病、药物、症状、论文、实验数据之间的关联
6. 为什么选择 Neo4j
Neo4j 是目前最常见的图数据库之一,采用的是属性图(Property Graph)模型,它非常适合做中小型知识图谱原型、教学演示和业务级图关系分析。
它的主要特点包括:
- 图模型直观,容易理解
- 支持节点、关系和属性
- 查询语言
Cypher可读性强 - 适合做关系遍历、路径发现和可视化展示
- 社区资料丰富,入门成本相对较低
在 Neo4j 中:
- 实体通常是节点
- 节点可以带标签,例如
:Person - 关系有类型,例如
:WORKS_AT - 节点和关系都可以带属性
例如:
text
(:Person {name: "Andrew Ng"})-[:RESEARCHES]->(:Technology {name: "机器学习"})
7. 使用 Neo4j 组织一个简单知识图谱
下面以一个 AI 领域知识图谱 为例,演示如何用 Neo4j 组织数据。
7.1 场景设计
我们希望描述以下知识:
- 哪些人物在研究哪些技术
- 哪些人物在哪些组织工作
- 哪些组织重点关注哪些技术
- 哪些人物教授哪些课程
7.2 实体设计
我们定义 4 类节点:
PersonOrganizationTechnologyCourse
其中可使用的关键属性如下:
| 节点类型 | 关键属性 |
|---|---|
Person |
name, title |
Organization |
name, type |
Technology |
name, category |
Course |
name, level |
7.3 关系设计
我们定义 4 类关系:
| 关系类型 | 含义 |
|---|---|
WORKS_AT |
人物就职于某组织 |
RESEARCHES |
人物研究某技术 |
FOCUSES_ON |
组织重点关注某技术 |
TEACHES |
人物教授某课程 |
7.4 图谱结构示意
可以把这个图谱理解为下面这样的关系网络:
text
(Person)-[:WORKS_AT]->(Organization)
(Person)-[:RESEARCHES]->(Technology)
(Organization)-[:FOCUSES_ON]->(Technology)
(Person)-[:TEACHES]->(Course)
8. Neo4j 实操示例
8.1 环境准备
你可以通过以下任一方式启动 Neo4j:
- 安装
Neo4j Desktop - 使用 Docker 启动
Neo4j - 使用远程
Neo4j AuraDB
如果本地使用 Docker,一个典型命令如下:
bash
docker run ^
--name neo4j-kg ^
-p 7474:7474 -p 7687:7687 ^
-e NEO4J_AUTH=neo4j/password123 ^
-d neo4j:latest
启动后,可通过浏览器访问:
http://localhost:7474
8.2 创建约束
为了避免重复节点,建议先为不同标签创建唯一性约束:
cypher
CREATE CONSTRAINT person_name_unique IF NOT EXISTS
FOR (p:Person) REQUIRE p.name IS UNIQUE;
CREATE CONSTRAINT org_name_unique IF NOT EXISTS
FOR (o:Organization) REQUIRE o.name IS UNIQUE;
CREATE CONSTRAINT tech_name_unique IF NOT EXISTS
FOR (t:Technology) REQUIRE t.name IS UNIQUE;
CREATE CONSTRAINT course_name_unique IF NOT EXISTS
FOR (c:Course) REQUIRE c.name IS UNIQUE;
8.3 写入示例数据
下面的 Cypher 脚本可以直接创建一个简单的 AI 知识图谱:
cypher
MERGE (andrew:Person {name: "Andrew Ng"})
SET andrew.title = "AI Educator"
MERGE (hinton:Person {name: "Geoffrey Hinton"})
SET hinton.title = "Deep Learning Pioneer"
MERGE (lecun:Person {name: "Yann LeCun"})
SET lecun.title = "Chief AI Scientist"
MERGE (dla:Organization {name: "DeepLearning.AI"})
SET dla.type = "Education Company"
MERGE (utoronto:Organization {name: "University of Toronto"})
SET utoronto.type = "University"
MERGE (meta:Organization {name: "Meta"})
SET meta.type = "Technology Company"
MERGE (ml:Technology {name: "机器学习"})
SET ml.category = "AI Core"
MERGE (dl:Technology {name: "深度学习"})
SET dl.category = "AI Core"
MERGE (cv:Technology {name: "计算机视觉"})
SET cv.category = "AI Application"
MERGE (course1:Course {name: "Machine Learning"})
SET course1.level = "Beginner"
MERGE (course2:Course {name: "Deep Learning Specialization"})
SET course2.level = "Intermediate"
MERGE (andrew)-[:WORKS_AT]->(dla)
MERGE (hinton)-[:WORKS_AT]->(utoronto)
MERGE (lecun)-[:WORKS_AT]->(meta)
MERGE (andrew)-[:RESEARCHES]->(ml)
MERGE (andrew)-[:RESEARCHES]->(dl)
MERGE (hinton)-[:RESEARCHES]->(dl)
MERGE (lecun)-[:RESEARCHES]->(dl)
MERGE (lecun)-[:RESEARCHES]->(cv)
MERGE (dla)-[:FOCUSES_ON]->(ml)
MERGE (dla)-[:FOCUSES_ON]->(dl)
MERGE (utoronto)-[:FOCUSES_ON]->(dl)
MERGE (meta)-[:FOCUSES_ON]->(dl)
MERGE (meta)-[:FOCUSES_ON]->(cv)
MERGE (andrew)-[:TEACHES]->(course1)
MERGE (andrew)-[:TEACHES]->(course2);
执行后,你将得到一个包含人物、组织、技术和课程关系的小型知识图谱。
8.4 基本查询示例
查询 1:查看所有人物节点
cypher
MATCH (p:Person)
RETURN p;
查询 2:查找研究"深度学习"的人物
cypher
MATCH (p:Person)-[:RESEARCHES]->(t:Technology {name: "深度学习"})
RETURN p.name AS person, p.title AS title;
查询 3:查找某个人所在组织及研究方向
cypher
MATCH (p:Person {name: "Yann LeCun"})-[:WORKS_AT]->(o:Organization)
MATCH (p)-[:RESEARCHES]->(t:Technology)
RETURN p.name AS person, o.name AS organization, collect(t.name) AS technologies;
查询 4:查找关注"计算机视觉"的组织
cypher
MATCH (o:Organization)-[:FOCUSES_ON]->(t:Technology {name: "计算机视觉"})
RETURN o.name AS organization;
查询 5:发现"人物 - 组织 - 技术"的关联路径
cypher
MATCH (p:Person)-[:WORKS_AT]->(o:Organization)-[:FOCUSES_ON]->(t:Technology)
RETURN p.name AS person, o.name AS organization, t.name AS technology;
这类查询在关系数据库中往往需要多表连接,而在图数据库中表达非常自然。
9. 结果解读
通过上面的图谱,我们可以快速回答很多问题,例如:
Andrew Ng研究哪些技术?- 哪些组织在关注
深度学习? - 哪些人既与某组织相关,又与某技术相关?
- 哪门课程与哪个专家有关?
这说明知识图谱的价值不只在"存储数据",而在于把知识组织成一个可遍历、可分析、可扩展的网络。
10. 从简单案例走向真实项目
如果要把这个示例升级为一个更贴近实际业务的知识图谱系统,可以继续扩展以下能力:
10.1 扩展实体类型
例如新增:
PaperDatasetModelCompanyProduct
10.2 扩展关系类型
例如新增:
AUTHOREDUSESCITESDEPLOYSCOLLABORATES_WITH
10.3 接入真实数据源
例如从以下来源自动构建图谱:
- CSV 文件导入
- 爬虫抓取网页数据
- 调用开放 API
- 从文档中做实体识别和关系抽取
10.4 引入 AI 能力
在真实项目中,AI 往往会参与知识图谱的多个阶段:
- 用大语言模型做实体抽取和关系抽取
- 用向量检索辅助实体对齐
- 用图谱 + 大模型实现增强问答
- 利用图算法做社区发现、路径推荐和相似节点分析
因此,知识图谱并不是和 AI 对立的技术,相反,它经常作为 AI 系统中非常关键的结构化知识底座。
11. 总结
知识图谱的核心思想是把现实世界中的对象、关系和属性组织为一个图结构,以支持更强的语义关联、路径分析和知识发现。
从工程实现角度看:
- 知识图谱解决的是"知识如何组织"
- Neo4j解决的是"图结构如何高效存储与查询"
- AI / NLP / 大模型解决的是"知识如何从数据中自动抽取和增强"
如果把三者结合起来,就可以构建出面向搜索、推荐、问答、风控、科研管理等场景的智能系统。
对于初学者来说,一个很好的起点是:
- 先理解实体、关系、属性和三元组
- 再用
Neo4j手工构建一个小型图谱 - 最后逐步接入真实业务数据和自动抽取能力
这样可以从概念、建模、存储到查询,完整走通知识图谱的基础链路。