知识存储和检索
知识图谱是一种有向图结构,描述了现实世界中存在的实体、事件或者概念以及他们之间的关系。图中的节点表示实体、事件或者概念,图中的边表示相邻节点的关系。
知识图谱的存储
- 基于表结构的存储
利用二维的数据表对知识图谱中的数据进行存储。根据不同的设计原则,可以具有不同的表结构,比如
- 三元组表
如jena等,优点是简单直接,易于理解,
缺点是:- 整个知识图谱都存储在一张表中,导致单表的规模太大。
相应的插入,删除,查询,修改的操作开销也大。对实用性大打折扣。 - 复杂查询在这种存储结构上的开销巨大
复杂查询拆分成若干个简单查询的操作,降低了查询的效率。
- 整个知识图谱都存储在一张表中,导致单表的规模太大。
- 类型表
为每个类型构建一张表,同一类型的实例放在相同的表中。每一行存实例,每一列代表实体的一个属性。
缺点:- 大量数据字段的冗余存储
假如实例又是物理学家又是数学学家,那么同属于这两个类别的实例会同时存储在这两个表中,共有属性会重复存储。 - 大量的数据列为空值
解决的方法可以是特有属性拿出来,保存在上一级类型对应的数据表中,下级表继承上级表的所有属性。
缺点: - 查询时必须指明属性或者关系,无法做到不确定属性或关系查询
- 表和具体类型对应,不同类型的数据具有不同的结构,查询时也要知道目标对象的类型才能确定查找的数据表。
- 查询不同类型的实体,需要多表的链接,开销巨大
- 丰富实体类型的,要建大量的数据表。
- 大量数据字段的冗余存储
- 关系数据库
关系数据库通过属性对现实世界中的事物进行描述。一行一个记录,一列表示一个属性。- 候选集
能够唯一标识一条记录的最少的属性集合 - 主键
一个数据库包含多个候选集,从中任意选取一个为主键。 - 外键
数据表中的某个属性或属性组是其他表的候选集,那么为该表的外键。 - 主属性与非主属性
包含在任何候选键中的属性为主属性,不包含在任何候选键中的属性为非主属性。
对知识图谱的操作要转为SQL语句执行。
- 候选集
- 基于图结构的存储
基于图的能直接反应图谱的内部结构,有利于知识的查询。也可以借鉴图的算法,有利于知识的深度挖掘与推理。
- 基于图结构的存储模型
从实体出发
优点- 利用有向图对知识图谱的数据进行建模
- 不仅可以为节点定义属性,还可以为边定义属性
- 常用图数据库
neo4j:开源、高性能,轻量
orientDB
infogrid
hypergraphdb
infiniteGraph
知识图谱的检索
常见形式化查询语言
关系库:SQL
图数据库:SPARQL
- SQL语言
- 数据插入
insert into 表名 values (值1,值2,…)[,(值1,值2,…),…]
值可以为多个
如:
insert into Triples Values (‘费米’,‘老师’,‘伯恩’),(‘伯恩’,‘类型’,‘数学家’) - 数据修改
update 表名 set 列1=值1,列2=值2,…where 条件
where指定需要修改的记录,不然所有的都被修改
update triples set O=‘1901’ where s=‘费米’ and P=‘出生日期’ - 数据删除
delete from 表名 where 条件
delete from triples where s=‘奥本’ or o=‘奥本’ - 数据查询
查询结果存在一个临时的表中
select 列1 ,列2 … from 表名 where 条件
select S from P =‘类型’ and O =‘数学家’
- 数据插入
- SPARQL语言
为RDF数据开发的一种查询语言和数据获取协议- 数据插入
insert data 三元组数据
多条三元组用.分隔,已存在则忽略
头实体相同的可用;分隔
insert data {
ns:伯恩 ns:类型 ns:数学家;
ns:类型 ns:物理学家.
} - 数据删除
delete data 三元组数据
删除三元组:
delete data {
ns:奥本 ns:类型 ns:物理学家.
}
删除奥本节点:
delete where {
ns:奥本 ?p ?o.
?s ?p ns:奥本.
} - 数据更新
更新RDF三元组中的值,只能删除在插入 - 数据查询
丰富的数据查询功能
包括select、ask、describe、construct
select:查询
ask:测试是否存在
describe:详尽资源的描述
construct:生成RDF- select
select 变量1 变量2 where 图模式 select ?s
where {
?s ns:类型 ns:数学家.
} - ask:
ask 图模式
ask {ns:伯恩 ns:类型 ?o.} - describe
describe 资源或变量[where 图模式]
describe ?s where {?s ns:类型 ns:数学家.} - construct
针对每个变量取值,替换RDF图模板中的变量,生成三元组
construct {
?s ns:搭档 ns:奥本.
}
where {
?s ns:老师 ns:伯恩 .
}
- select
- 数据插入
图检索技术
1.子图筛选
图索引技术是实现子图筛选的有效方法。
- 基于路径索引
基于路径索引是把图上所有长度小于某特定值的路径收集起来,并根据这些路径建立倒排索引. - 基于子图的索引方法
频繁项集
频繁度是子图出现的次数
2.子图同构判定
枚举所有的同构子图