📑 查看全课大纲(第 3 / 26 节)
- 1.知识图谱和语音技术概述
- 2.典型知识库项目简介
- 3.知识图谱技术概览
- 4.典型应用案例
- 5.早期知识表示简介
- 6.基于语义网的知识表示框架
- 7.典型知识库项目的知识表示
- 8.基于本体工具的知识建模实践
- 9.面向非结构化数据的知识抽取
- 10.面向结构化数据的知识抽取
- 11.面向半结构化数据的知识抽取
- 12.实践:基于百科数据的知识抽取
- 13.面向文本的知识抽取
- 14.知识挖掘
- 15.从一个例子开始
- 16.图数据库介绍
- 17.什么是知识融合
- 18.知识融合的基本技术流程
- 19.典型知识融合工具简介
- 20.典型案例简介
- 21.LIMES实战演练
- 22.知识推理
- 23.语义搜索
- 24.知识问答
- 25.IBM watson Lite
- 26.行业知识图谱应用
知识图谱技术概览
约 41 分钟
小象实战讲义 · 知识图谱
欢迎来到知识图谱技术概览部分。本节我们将鸟瞰构建和应用知识图谱所需的全套技术体系,从数据的源头到最终的应用。学完本节,你将能清晰地勾勒出知识图谱从“数据”到“知识”再到“智能应用”的全景技术地图,理解每一环节的核心任务与主流方法。
💡 核心导读
- 技术全景:了解知识图谱从多源数据(文本、结构化数据、多媒体等)到最终应用(搜索、问答、推理)的完整技术链条。
- 知识表示基石:掌握以 RDF、RDFS、OWL 为核心的语义网知识表示框架,理解三元组、本体等核心概念。
- 关键技术环节:概览知识抽取、存储、融合、推理、问答等关键环节的核心任务与主流方法。
- 现代实践导向:了解如何用现代 Python 工具链(如
rdflib)来实践核心的表示与查询操作。
知识图谱的技术体系
知识图谱的构建并非一蹴而就,它是一个系统工程,涉及从原始数据到智能应用的全生命周期。其技术体系可以概括为下图所示的流程:
[多源数据] → [知识抽取/众包] → [知识表示与存储] → [知识融合与推理] → [上层应用]数据来源是起点,包括:
- 文本数据:新闻、报告、网页等非结构化信息。
- 结构化数据:关系型数据库、CSV 表格等。
- 多媒体数据:图像、视频及其元数据。
- 传感器数据:物联网设备产生的时序数据。
- 众包数据:由社区协作产生的数据,如 Wikidata。
我们的目标是,通过各种技术手段,将这些异构、粗糙的数据,转化为更加规范化、具有更强语义关联的知识,最终形成知识图谱。
为了达成这个目标,我们需要一系列核心技术:
- 知识表示 (Knowledge Representation): 如何用计算机可理解的形式(如 RDF)来描述知识。
- 知识抽取 (Knowledge Extraction): 如何从各种数据源中自动或半自动地抽取出结构化的知识。
- 知识融合 (Knowledge Fusion): 如何将来自不同来源的、描述同一实体的知识进行合并与对齐。
- 知识众包 (Knowledge Crowdsourcing): 如何利用社区协作(如 Wikidata)或网页标注(如 Schema.org)来构建和丰富知识。
- 知识推理 (Knowledge Reasoning): 如何基于已有知识推断出隐含的新知识。
- 知识问答 (Knowledge-Based Question Answering, KBQA): 如何让用户用自然语言直接查询知识图谱。
- 语义搜索 (Semantic Search): 如何实现基于实体和关系,而非关键词的精准搜索。
- 可视化 (Visualization): 如何直观地展示复杂的知识图谱结构。
针对不同的数据源,我们采用不同的技术进行知识抽取:
- 文本数据:主要采用 KBP (Knowledge Base Population) 技术,即从非结构化文本中抽取实体和关系来填充知识库。
- 结构化数据:主要采用 D2R (Database to RDF) 技术,将关系数据库的内容映射为 RDF 格式。
- 多媒体数据:可以对其元数据下功夫,进行链接(Linked Media),或者通过项目如 Visual Genome 来建立图像内容与语义描述之间的关联。
- 传感器数据:可以采用如 oneM2M 这样的物联网标准规范来统一描述和接入。
- 众包数据:以 Wikidata 为代表,通过社区协作构建大规模知识库。
知识表示:从符号到向量
知识表示研究如何用计算机符号来表示人脑中的知识,以及如何通过符号运算来模拟人脑的推理过程。其发展经历了从早期基于数理逻辑的符号表示,到如今基于向量空间学习的分布式表示(Embedding)的演进。
语义网知识表示框架
万维网联盟(W3C)制定了一套完整的语义网技术栈标准,构成了现代知识图谱表示的理论基础。其核心层次包括:
- 底层:标识符(URI)、字符编码等。
- 数据交换层:XML、RDF 序列化格式(如 Turtle, JSON-LD)。
- 知识表示层:RDF 数据模型、RDFS 和 OWL 本体语言。
- 查询层:SPARQL 查询语言。
- 推理与信任层:基于逻辑的推理、证明、信任机制等。
我们课程的核心将聚焦于知识表示(RDF/RDFS/OWL)、知识查询(SPARQL)以及上层的交互与应用(如问答、搜索)。
RDF:基于三元组的断言模型
RDF(Resource Description Framework)是知识图谱最基础的数据模型。其核心思想是用 三元组 (Triple) 来表达一个关于世界的简单断言(Assertion)。
一个三元组由三部分构成:
- 主体 (Subject): 被描述的资源,通常是一个实体或概念。
- 谓词 (Predicate): 描述主体与客体之间的关系或属性。
- 客体 (Object): 关系的目标,可以是一个实体、概念或字面量(如字符串、数字)。
用自然语言举例:“人工智能之父是图灵”。可以表示为三元组:
- 主体:
人工智能 - 谓词:
之父是 - 客体:
图灵
从图的角度看,主体和客体是节点,谓词是连接它们的带有标签的边。因此,RDF 数据天然地可以表示为一个有向标记图 (Directed Labeled Graph)。
# 使用 rdflib 构建一个简单的 RDF 图示例
from rdflib import Graph, URIRef, Literal, Namespace
from rdflib.namespace import RDF, RDFS
# 创建图
g = Graph()
# 定义命名空间(类似于编程中的包名,避免URI冲突)
EX = Namespace("http://example.org/")
# 添加三元组:人工智能 是一种 计算机技术
g.add((EX.AI, RDF.type, EX.ComputerTechnology))
# 添加三元组:图灵 研究领域是 人工智能
g.add((EX.Turing, EX.researchField, EX.AI))
# 序列化为 Turtle 格式查看
print(g.serialize(format='turtle'))RDFS:简单的词汇表与模式
RDF 本身只定义了数据模型,但没有规定该用什么“词”来描述事物以及这些词之间的约束关系。RDFS (RDF Schema) 在 RDF 之上,定义了一个小而核心的词汇集,用于构建简单的本体(模式),主要包括:
rdfs:Class: 定义类(概念)。rdfs:subClassOf: 定义类之间的上下位(父子)关系。rdf:type: 声明一个资源是某个类的实例。rdf:Property: 定义属性(关系)。rdfs:subPropertyOf: 定义属性之间的细化关系。rdfs:domain: 声明一个属性的主体(domain)应该属于哪个类。rdfs:range: 声明一个属性的客体(range)应该属于哪个类或数据类型。
例如,我们可以用 RDFS 来规范前面的例子:
计算机技术是信息技术的一个子类 (rdfs:subClassOf)。人工智能是一个计算机技术的实例 (rdf:type)。研究领域这个属性的主体 (rdfs:domain) 应该是科学家,客体 (rdfs:range) 应该是信息技术。
# 在同一个 RDF 图上继续添加 RDFS 模式约束(可独立运行)
from rdflib import Graph, URIRef, Literal, Namespace
from rdflib.namespace import RDF, RDFS
g = Graph()
EX = Namespace("http://example.org/")
# 先复用上例中的事实三元组
g.add((EX.AI, RDF.type, EX.ComputerTechnology))
g.add((EX.Turing, EX.researchField, EX.AI))
# 定义类
g.add((EX.ComputerTechnology, RDF.type, RDFS.Class))
g.add((EX.InformationTechnology, RDF.type, RDFS.Class))
g.add((EX.Scientist, RDF.type, RDFS.Class))
# 定义子类关系
g.add((EX.ComputerTechnology, RDFS.subClassOf, EX.InformationTechnology))
# 定义属性的定义域和值域
g.add((EX.researchField, RDF.type, RDF.Property))
g.add((EX.researchField, RDFS.domain, EX.Scientist))
g.add((EX.researchField, RDFS.range, EX.InformationTechnology))
print("--- 包含 RDFS 的图 ---")
print(g.serialize(format='turtle'))OWL:更强大的网络本体语言
OWL (Web Ontology Language) 在 RDFS 的基础上,提供了更丰富、更强大的建模能力,用于构建复杂的本体。
本体在计算机科学中,是对某个领域中概念及概念间关系的形式化描述。它就像为一个城市绘制一份精确的地图,定义了有哪些地标(概念)、道路(关系)以及交通规则(约束),使得人或机器(Agent)能够达成共同的理解。
OWL 基于描述逻辑(Description Logic),扩展了 RDFS 的词汇,支持:
- 复杂类定义:类的交 (
owl:intersectionOf)、并 (owl:unionOf)、补 (owl:complementOf)。- 例:
母亲类 =父母类 ∩女性类。
- 例:
- 属性约束:存在量词 (
owl:someValuesFrom)、全称量词 (owl:allValuesFrom)、值约束 (owl:hasValue)。- 例:
父母类定义为:至少有一个 (someValuesFrom) 孩子,且孩子是人。
- 例:
- 基数约束:最大基数 (
owl:maxQualifiedCardinality)、最小基数 (owl:minQualifiedCardinality)。 - 属性特征:对称性 (
owl:SymmetricProperty)、传递性 (owl:TransitiveProperty)、函数性 (owl:FunctionalProperty)、逆属性 (owl:inverseOf)。- 例:
配偶关系是对称的;祖先关系是传递的。
- 例:
- 属性链 (
owl:propertyChainAxiom):可以通过属性链推导出新关系。- 例:
hasParent◦hasParent(即父母的父母) 可以推导出hasGrandparent。
- 例:
知识表示的序列化与嵌入
序列化格式:RDF 作为一种抽象数据模型,有多种具体的文本表示格式,便于存储和交换:
- RDF/XML:早期的 XML 格式。
- Turtle/N-Triples:更简洁易读的纯文本格式。
- JSON-LD:基于 JSON 的链接数据格式,易于 Web 开发集成。
- RDFa / HTML5 Microdata:将语义数据直接嵌入到网页 HTML 中的方法,用于搜索引擎优化。
分布式表示 (Knowledge Graph Embedding):将知识图谱中的实体和关系映射到连续的、稠密的低维向量空间。它保留了语义信息,同时将离散的符号转化为连续的向量,便于机器学习模型处理。主流方法包括:
- 基于张量分解的方法:如 RESCAL。
- 基于神经网络的方法:如 Neural Tensor Network (NTN)。
- 基于翻译模型的方法:如 TransE,其核心思想是使头实体向量加上关系向量后,尽可能接近尾实体向量 (
h + r ≈ t)。这类方法在链接预测等任务上表现出色。
关键技术环节概览
知识抽取:从非结构化文本到结构化知识
知识抽取是自然语言处理(NLP)与知识表示(KR)的交叉领域。其典型流程如下:
原始文本 → 预处理(分词、词性标注、句法分析)→ 命名实体识别(NER)→ 实体链接 → 关系抽取/事件抽取 → 结构化知识(三元组等)主要方法:
- 基于知识工程:手工编写正则表达式或模板规则。
- 自举法 (Bootstrapping):从少量种子实例出发,迭代发现新的抽取模式和实例。
- 基于机器学习模型:
- 传统模型:SVM、逻辑回归、条件随机场(CRF,用于序列标注)。
- 深度学习模型:LSTM 等循环神经网络。
- 训练范式:有监督学习、无监督聚类、远程监督(利用现有知识库自动生成训练数据)。
知识存储:图数据的持久化
知识的结构比传统数据更复杂,存储引擎需要针对图的特点进行优化,支持高效的图遍历、子图匹配和复杂查询(可能包含推理)。
典型存储方案:
- 基于关系数据库:将三元组存储在一张宽表(三元组表)中,或进行垂直分区、属性表等设计。查询时通过大量的自连接(self-join)实现,性能是挑战。
- 基于原生图数据库:专为图数据模型设计,如 Neo4j(属性图模型)、RDF 三元组库(如 Jena TDB, Virtuoso, Stardog)。它们将图结构作为一等公民,提供高效的邻接查询和路径遍历。
- 混合存储:在实践中,常根据数据特点和访问模式混合使用多种存储引擎。
查询语言:对于 RDF 数据,标准查询语言是 SPARQL。它是一种类 SQL 的声明式查询语言,支持图模式匹配、连接、过滤、聚合等操作。
# SPARQL 查询示例:查找所有由谷歌提出的技术
PREFIX ex: <http://example.org/>
SELECT ?tech
WHERE {
?tech ex:proposedBy ex:Google .
}知识融合:识别与合并同一实体
知识融合旨在解决多源数据中同一实体的描述不一致、不完整或冲突的问题。相关术语包括实体对齐、实体消歧、记录链接等。
典型工具:
- Dedupe:一个 Python 工具包,适用于两个结构相似的数据集。它先通过聚类/分块将记录分组,再在组内使用机器学习模型判断记录是否指向同一实体。
- LIMES:专为链接数据设计,不要求两个数据集结构相似。它允许灵活配置匹配规则和距离计算函数,并支持主动学习来优化匹配效果。
知识问答:用自然语言查询知识库
KBQA 的目标是直接、准确地回答用户的自然语言问题。例如,问“姚明的身高?”,系统应返回“226”。
基本流程:
- 问题理解:对自然语言问句进行语义解析。
- 语义表示:将解析结果转换为知识库可查询的语义表示形式(如 SPARQL 查询、逻辑表达式、子图模式)。
- 查询执行:在知识库中执行查询。
- 答案生成:将查询结果转化为自然语言答案。
语义表示方法多样,可以是基于符号的、基于模板的、基于子图的或基于分布式向量的。
知识推理:推导隐含知识
推理是基于已有知识(显式知识)推导出新知识(隐式知识)的过程。现代搜索引擎已具备一定的推理能力,例如能理解“姚明的女儿的妈妈的老公”指的就是姚明本人。
推理方法分类:
- 基于描述逻辑的推理:利用 OWL 本体的公理进行逻辑推导,如分类推理、一致性检测。工具包括 Pellet、HermiT、RDFox 等。
- 基于规则挖掘的推理:从知识图谱中自动学习出概率或逻辑规则(如
已婚于(X,Y) => 已婚于(Y,X)),然后应用这些规则。方法包括路径排序算法(PRA)、关联规则挖掘(AMIE)。 - 基于表示学习的推理:利用知识图谱嵌入(如 TransE),通过向量计算来预测可能存在的关系(链接预测),这本身也是一种推理。
- 按推理类型:还包括缺省推理、空间推理、因果推理等。
知识众包与社区构建
除了自动化技术,社区协作也是构建大规模高质量知识图谱的重要力量。
- Wikidata / Wikibase:维基媒体基金会旗下的开放知识库,采用众包模式编辑。其底层软件 Wikibase 也可用于搭建企业内部的协同知识平台。
- Schema.org:由谷歌、微软、雅虎等公司发起的项目,定义了一套标准的词汇表,供网站管理员在网页中嵌入语义数据(通过 JSON-LD, RDFa, Microdata)。这不仅能优化搜索引擎结果(SEO),也为构建开放域知识图谱提供了海量结构化数据源。
📝 动手练一练
- 概念辨析:请简要说明 RDFS 中的
rdfs:domain和rdfs:range分别约束了什么?并举例说明。 - SPARQL 实践:假设有一个描述电影的知识片段如下(Turtle格式):
请编写一条 SPARQL 查询,找出所有导演的出生地所在的国家。@prefix ex: <http://example.org/> . ex:Inception ex:director ex:ChristopherNolan . ex:ChristopherNolan ex:bornIn ex:London . ex:London ex:locatedIn ex:UK .
👉 点击查看参考答案
概念辨析:
rdfs:domain:一条 RDFS 推理规则,而不是“必须属于某类”的硬性约束。如果某个资源用作属性p的主语(即图中出现?s p ?o),推理引擎就会据此推理出?s rdf:type c(c是p声明的 domain 类)。它不要求主语事先就属于该类,而是事后自动补上类型断言。rdfs:range:同样是一条 RDFS 推理规则,而非“宾语必须是某类型”的硬性约束。如果某个资源用作属性p的宾语(即出现?s p ?o),推理引擎就会据此推理出?o rdf:type c(c是p声明的 range 类)。它不禁止“不像该类型”的数据存在,而是自动推断出宾语的类型。- 举例:定义属性
:hasAuthor,并声明:hasAuthor rdfs:domain :Book、:hasAuthor rdfs:range :Person。此后只要出现一条x :hasAuthor y,RDFS 推理就会自动推出x rdf:type :Book、y rdf:type :Person——即使原数据里根本没显式写这两个类型;它也不会因为x表面上不像一本书就拒绝该三元组。
SPARQL 实践:
PREFIX ex: <http://example.org/> SELECT ?director ?country WHERE { ?movie ex:director ?director . ?director ex:bornIn ?city . ?city ex:locatedIn ?country . }这条查询会匹配出
?director是ex:ChristopherNolan,?country是ex:UK。
本章小结
本节我们全景式地扫描了知识图谱的技术体系。我们看到,知识图谱的构建是一个融合了知识表示、自然语言处理、数据库、机器学习等多个领域的系统工程。从 RDF/RDFS/OWL 的表示基础,到知识抽取、融合、推理的关键技术,再到问答、搜索等上层应用,每一环都不可或缺。
📋 行动清单
学完本节,你可以立即开始:
- 动手写一个 RDF 三元组:用 Turtle 格式描述一个你熟悉的事实(例如:
<http://example.org/Paris> <http://example.org/capitalOf> <http://example.org/France> .)。 - 体验 SPARQL 查询:访问 DBpedia 的 SPARQL 端点,尝试写一个简单的查询,例如查找所有中国的城市。
- 思考一个融合场景:想象你有两个来自不同网站的商品数据集,它们的字段略有不同,你会从哪些方面判断两条记录是否指向同一商品?
—— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问