知识图谱是一种有向图结构,描述了现实世界存在的实体、事件或者概念以及它们之间的关系,为自动问答、信息检索等应用提供支撑。其中,图中的节点表示实体、事件或概念,图中的边表示相邻节点间的关系,如下图所示。
知识图谱中的知识是通过RDF进行表示的,其基本构成单元是事实。每个事实是一个三元组 (S, P, O)
知识表示的三元组列表 示例如下:
RDF数据
<费米, 主要成就, 93号元素>
<费米, 出生日期, 1901/09/29>
<费米, 类型, 物理学家>
<费米, 国籍, 美国>
<费米, 出生地, 罗马>
<费米, 老师, 玻尔>
<玻恩, 主要成就, 玻恩近似>
<玻恩, 类型, 物理学家>
<玻恩, 类型, 数学家>
... ... ...
按照存储方式的不同,可分为:基于表结构的存储 和 基于图结构的存储
利用二维数据表对知识图谱中的数据进行存储,常见的设计方法有:三元组表、类型表、关系数据库等
成熟产品:Jena、Oracle、Sesame、3store、SOR、Rstar 和 Virtuoso。
优点:简单直接、易于理解;
缺点:
为每种类型构建一张表,同一类型的实例存放在相同的表中。表中的每一列表示该类实体的一个属性,每一行存储该类实体的一个实例。
示例:
主体对象 | 面积 | 平均海拔 | 邮编 |
---|---|---|---|
罗马 | 1285 k m 2 km^2 km2 | 37m | 00185 |
主体对象 | 主要成就 | 国籍 | 出生日期 | 出生地 |
---|---|---|---|---|
费米 | 93号元素 | 美国 | 1901/09/29 | 罗马 |
奥本海默 | 曼哈顿计划 | 美国 | 1904/04/22 | |
玻恩 | 玻恩近似 | 英国 | 1882/12/11 |
主体对象 | 主要成就 | 国籍 | 出生日期 |
---|---|---|---|
费米 | 93号元素 | 美国 | 1901/09/29 |
奥本海默 | 曼哈顿计划 | 美国 | 1904/04/22 |
玻恩 | 玻恩近似 | 英国 | 1882/12/11 |
主体对象 | 主要成就 | 国籍 | 出生日期 |
---|---|---|---|
费米 | 93号元素 | 美国 | 1901/09/29 |
缺点:(然后克服三元组表的不足)
解决方法:将知识图谱的类别体系考虑进来。
关系数据库通过 属性 对现实世界中的事物进行描述。
属性按照各自特点可分为:
常见可用于KG的关系数据库:DB2、Oracle、Microsoft SQL Sever、PostgreSQL、MySQL等
基于图结构的存储,可直接准确地反映KG的内部结构,有利用对知识的查询,可借鉴图论算法,有利于对知识深度挖掘及推理。
基于图结构的存储,从实体出发,不同实体对应的节点可定义不同的属
图数据库的理论基础是图论,通过节点、边 和 属性对数据进行表示和存储,具体来说,图数据库基于有向图,其中节点、边、属性是图数据库的核心概念。
常见图数据库:Neo4j、OrientDB、InfoGrid、HyperGraphDB、InfiniteGraph(分布式)等
KG是通过数据库进行存储的,大部分数据库系统通过形式化的查询语言为用户提供访问数据的接口,关系型数据库的标准查询语言是SQL,图数据库的标准查询语言是SPARQL。
主要功能:对数据的插入、修改、删除、查询四种操作。
示例:Triples表
S | P | O |
---|---|---|
费米 | 类型 | 物理学家 |
费米 | 出生日期 | 1902/09/29 |
费米 | 搭档 | 奥本海默 |
奥本海默 | 搭档 | 费米 |
奥本海默 | 出生日期 | 1904/04/22 |
奥本海默 | 毕业院校 | 阿根廷大学 |
费米 | 出生地 | 罗马 |
罗马 | 海拔 | 37m |
INSERT INTO 表名 VALUES (值1,值2,...) [,值1,值2,...], ...
:值1,值2…分别对应数据表中第一列、第二列,VALUES对应的值的顺序和数量有严格的要求。INSERT INTO 表名 (列1,列2,...) VALUES (值1,值2,...) [,值1,值2,...], ...
:指明插入数据的列(S:费米,P:老师,O:玻恩)
INSERT INTO Triples VALUES ('费米','老师','玻恩'),('玻恩','类型','数学家'),('玻恩','类型','物理学家')
INSERT INTO Triples (S,P,O) VALUES ('费米','老师','玻恩'),('玻恩','类型','数学家'),('玻恩','类型','物理学家')
UPDATE 表名 SET 列1=值1,列2=值2,... WHERE 条件
其中’条件’指明需修改的数据记录,若不指定,则整个表的数据都被修改。UPDATE Triples SET O='1901/09/29' WHERE S='费米' and P='出生日期'
DELETE FROM 表名 WHERE 条件
其中’条件’指明需修改的数据记录,若不指定,则整个表的数据都被修改。DELETE FROM Triples WHERE S='奥本海默' or O='奥本海默'
SELECT 列1, 列2, ... FROM 表名 WHERE 条件
、 SELECT * FROM 表名 WHERE 条件
SELECT S FROM Triples WHERE P='类型' and O='数学家'
SPARQL是由W3C为RDF数据开发的一种查询语言和数据获取协议,被广泛应用于图数据库。
INSERT DATA 三元组数据
,其中三元组数据可以是多条三元组,不同的三元组通过 ‘.’ 分割,用 ‘;’ 可以分割连续插入语前一个三元组的头实体相同的三元组。若待插入的三元组在RDF中已存在,则忽略该三元组。ns:费米 ns:老师 ns:玻恩.
ns:玻恩 ns:类型 ns:数学家.
ns:玻恩 ns:类型 ns:物理学家.
==》对应的 SPARQL 语句
prefix ns:
INSERT DATA {
ns:费米 ns:老师 ns:玻恩 .
ns:玻恩 ns:类型 ns:数学家 ;
ns:类型 ns:物理学家 .
}
DELETE DATA 三元组数据
,其中三元组数据可以是多个三元组。对于给定的每个三元组,若其在RDF图中,则删除,否则忽略该三元组。(ns:奥本海默 ns:类型 ns:物理学家)
,注意删除单个三元组prefix ns:
DELETE DATA {
ns:奥本海默 ns:类型 ns:物理学家 .
}
prefix ns:
DELETE WHERE {
ns:奥本海默 ?p ?o .
?s ?p ns:奥本海默 .
}
数据更新是指更新RDF图中三元组的值,SPARQL通过组合 INSERT DATA 语句和 DELETE DATA 语句来实现数据更新的功能。
eg:修改三元组(ns:费米 ns:出生日期 "1902/09/29")
修改为(ns:费米 ns:出生日期 "1901/09/29")
prefix ns:
DELETE DATA {ns:费米 ns:出生日期 "1902/09/29" .};
INSERT DATA {ns:费米 ns:出生日期 "1901/09/29" .}
四种形式:SELECT、ASK、DESCRIBE 和 CONSTRUCT。
SELECT:从KG中获取满足条件的数据;
SELECT 变量1 变量2 ... WHERE 图模式 [修饰符]
SELECT 变量1 变量2 ...
:表示要查询的目标。WHERE 图模式
:为SELECT子句中的变量提供约束,查询结果必须完全匹配该子句给出的图模式。
?x a Person
表示变量?x必须是Person的一个实例。另一类是通过FILTER关键字给出的条件限制,包括数字大小的限制、字符串格式的限制等。[修饰符]
:用于对查询结果做一些特殊处理,例如:ORDER子句、LIMIT子句(限制结果数量)等。prefix ns:
SELECT ?s
WHERE {
?s ns:类型 ns:数学家 .
?s ns:类型 ns:物理学家 .
}
查询结果
S |
---|
玻恩 |
ASK:用于测试KG中是hi否存在满足给定条件的数据
ASK 图模式
,其中图模式与 SELECT 相同。prefix ns:
ASK { ns:费米 ns:老师 ?o .}
该语句返回的结果是“yes”,若数据中不存在“费米”的老师节点(即“玻恩”)则返回“no”
DESCRIBE:用于获取与给定资源相关的数据
DESCRIBE 资源或变量 [WHERE 图模式]
prefix ns:
DESCRIBE ?s WHERE {?s ns:老师 ns:玻恩 .}
执行结果如下:
@prefix ns:
ns:费米 ns:类型 ns:物理学家
ns:费米 ns:出生日期 "1901/09/29"
ns:费米 ns:老师 ns:玻恩
CONSTRUCT:用于生成满足图模式的RDF图
CONSTRUCT 图模板 WHERE 图模式
prefix ns:
CONSTRUCT {
?s ns:搭档 ns:奥本海默 .
ns:奥本海默 ns:搭档 ?s .
}
WHERE {
?s ns:老师 ns:玻恩 .
}
执行结果为:
@prefix ns:
ns:费米 ns:搭档 ns:奥本海默 .
ns:奥本海默 ns:搭档 ns:费米 .
问题的提出:基于图结构的存储方式能够直观灵活地对知识进行表示和存储,而标准的图查询算法复杂度较高,何如提高图查询的效率成为KG研究的重要问题。
定义(即子图匹配问题):NP完全问题(目前尚不存在多项式时间复杂度内可解决的算法)
图索引技术是实现子图筛选的有效方法。在数据预处理阶段进行。
基本原理:首先根据图上的特征信息建立索引,在进行子图匹配时,根据查询图上的特征能够快速地从图数据库中检索得到满足条件的候选子图,避免在全部子图上进行匹配。
常用图索引方法
常用算法:Ullmann算法(也称枚举算法)——能够枚举出所有的同构子图