知识图谱数据的存储与检索
知识图谱大数据
- 语言与图谱都是知识的载体,前者由人理解,后者供机器理解
- 知识图谱:有向图结构,描述现实世界中存在的实体、事件或者概念以及他们之间的关系
- 描述结果:RDF结构——事实三元组<S, P, O>
- 图数据
- 属性——自身性质——节点
- 拓扑结构——相互关系——图结构
- 大规模图数据特点
- 4V特性(Volume、Velocity、Variety、Veracity)
- 倾斜的度分布(大部分网络受少数边控制)
- 小世界现象(网络结构的集团化)
- 不清晰的社区结构
- 大图数据新型特点
- 局部特征多样性
- 关联数据复杂新
- 拓扑结构时变性
- 数据管理:持久化存储 + 高效检索
知识图谱数据模型
- 数据模型
- 逻辑组织结构
- 操作——行为
- 约束——制约、关系、规则
- 知识图谱数据模型
- RDF图模型
- 属性图模型
- RDF图模型
- RDF三元组 : < S , P , O > ∈ ( U ∪ B ) × U × ( U ∪ B ∪ L ) <S, P, O> \in (U \cup B) \times U \times (U \cup B \cup L) <S,P,O>∈(U∪B)×U×(U∪B∪L)
- B B B为实体集合, U U U为属性、关系集合, L L L为文字性现象
- RDF图:RDF三元组的有限集合
- 没有对顶点和边上属性的内置支持——具体化CVT
- 使用虚拟节点描述边上关系事实
- 3均匀超图
- 示例:FreeBase
- 属性图模型
- 五元组 G = ( V , E , ρ , λ , σ ) G=(V, E, \rho, \lambda, \sigma) G=(V,E,ρ,λ,σ)
- V V V:顶点有限集合
- E E E:边有限集合
- ρ \rho ρ: E → ( V × V ) E \to (V \times V) E→(V×V)边关联到定点对
- λ \lambda λ: ( V ∪ E ) → L a b (V \cup E) \to Lab (V∪E)→Lab顶点或边赋予标签(类型、概念)
- σ \sigma σ: ( V ∪ E ) × P r o p → V a l (V \cup E) \times Prop \to Val (V∪E)×Prop→Val顶点或边关联属性
- 示例:WikiData
知识图谱数据的存储
- 存储方式
- 以类别为中心:基于表的存储(关系数据库)
- 以实体为中心:基于图的存储(RDF语义网络)
- 可以相互转换
基于表结构的存储
- 三元组表
- 事实——三元组——一张三元组表存储所有事实
- Pros:简单直接,易于理解
- Cons
- 每个字段包含不同类型、不同结构的数据
- 增删改查开销大,实用性差
- 复杂查询开销很大
- 六重索引
- SPO 、 SOP 、 PSO 、 POS 、 OSP 、 OPS
- Pros
- 实现三元组模式的高效查询
- 任意两三元组模式的高效归并链接
- Cons
- 6倍空间开销
- 更新维护代价
- 类型表
- 每种类型构建一张表,同类型实例存放相同表中
- 一列为一个属性,一行为一个实例
- 不足
- 大量数据字段的冗余存储
- 大量数据为空值
- 多值属性不便于存储
- 层级关系类型表
- 公共属性从上级类型表继承
- 相比于三元组表的不足
- 不同数据表的数据类型不同,查询前需要确定目标对象的类型
- 多表连接查询开销巨大
- 知识图谱实体类型丰富,需要创建大量类型表
- 关系数据库
- 二维表结构
- 属性:表中的每一列称,取值范围成为域
- 元组:表中的每一行,完整描述一个实体,一个属性成为分量
- 限制
- 所有属性必须为基本的
- 属性所有制必须同类型、同语义
- 属性值只能为域中的值
- 属性必须具有唯一的名字
- 任意两元组的值不能完全相同
- 候选码:能够唯一标识元组的最小属性集合
- 唯一性
- 最小性
- 主码:多个候选码中的特定一个,便于操作
- 外码:表中某属性为其他表候选码,其为当前表的外码,保证不同表之间的数据一致性
- 主属性与非主属性:包含在任何候选码中的属性称为主属 性,不包含在任何候选码中的属性称为非主属性
- 关系完整性约束条件
- 保证数据的正确性和一致性
- 域完整性规则:用户指定域的详细内容,属性取值必须在值域内
- 实体完整性规则:主码属性不可为空,不能相同
- 参照完整性规则:外表外码取值必须其主表主码的存在值或空值
- 操作语言:SQL
- INSERT
- UPDATE
- DELETE
- SELECT
基于图结构的存储
- 实体——节点,关系——带标签的边
- 知识图谱的数据很自然地满足图模型结构
- 图数据库基于有向图,其理论基础是图论
- 核心概念
- 节点:实体、事件
- 边:节点之间的关系
- 属性:描述节点或边的属性
- 存储
- 节点存储
- 关系存储
- 属性存储
- 问题:单机可扩展性不足,查询复杂度高
知识图谱数据的检索
- 查询语言
- RDF图:SPARQL(声明式)
- 属性图:Cypher(声明式)、PGQL(声明式)、G-CORE(声明式)、Gremlin(过程式)
- SPARQL
- 为RDF数据开发的查询语言和数据获取协议
- 数据插入
- 插入到已有RDF图中
INSERT DATA 三元组数据
- 多条三元组使用
;
分隔,共享头实体可以使用,
分隔
- 数据删除
- 从RDF图中删除一些三元组
DELETE DATA 三元组数据
- 同样可以使用
;
分隔多个三元组,忽略不存在的选项
- 数据更新
- 没有直接更新命令
- 需要先删除并重新插入更新结果
- 数据查询
SELECT
:最常用,和SQL中的SELECT
类似SELECT 变量1 变量2 ··· WHERE 图模式 [修饰符]
- 变量:类似列
- 图模式:三元组或者
FILTER
关键字 - 修饰符:可选项,特殊处理
ASK
:测试是否存在满足条件的数据,存在返回yes
,否则返回no
ASK 图模式
DESCRIBE
:用于查询和指定资源相关的RDF数据,进行详细描述DESCRIBE 资源或变量 [WHERE 图模式]
CONSTRUCT
:根据查询图的结果生成RDFCONSTRUCT RDF图模板 WHERE 图模式
- 图模板:包含三元组类型,可包含变量,也可只包含事实
- 图模式:和上述相同
- 先执行
WHERE
子句,获取满足图模式的变量取值,然后针对变量取值,由模板生成三元组
- 查询模式
- 三元组模式
- 基本图模式
- 复杂图模式
- Cypher
- 标准化:OpenCypher
MATCH
+RETURN
- 支持单个边上的闭包
- Gremlin
- 过程性语言:图遍历、导航式游走
- 类似函数式编程语言接口
- PGQL
- 完整支持正则路径查询语义
- 路径模式
- 表达能力更强
- G-CORE
- 充分借鉴和融合各种已有图查询语言的优点,在查询表达力和求值复杂度之间寻求最佳平衡
- 查询的输入输出均是图 ,彻底实现了图查询语言的可组合性
- 将路径作为与顶点和边同等重要的图查询处理基本元素