本文内容预告
上节我们讲到 RDF 既是一门语言,也是一个数据模型,它是一个数据抽象表示,定义数据元素如何组织在一起。这期就来聊聊表示知识图谱的背后用来表示图数据的图数据模型:Directed Edge-labeled Graph
, Heterogeneous Graph
, Property Graph
。
为什么要介绍图数据模型:因为在学术和工业界都使用这几个主流的图数据模型,而不同的图数据模型有不同的表示能力和搜索效率。比较常用的图数据库软件比如 Virtuoso
和 GraphDB
是基于 Directed Edge-labeled Graph 实现的,而工业界很火的 Neo4j
图数据库软件是基于 Property Graph
实现的。
Directed Edge-labeled Graph
我没找到它的对应的中文术语。令 C o n \mathbf{Con} Con 为一个可数无穷的常数集合,一个 Directed Edge-labeled Graph
可以表示为一个三元组 G = ( V , E , L ) G=(V,E,L) G=(V,E,L),其中 V ⊆ C o n V\subseteq \mathbf{Con} V⊆Con 是一个节点的集合, L ⊆ C o n L\subseteq \mathbf{Con} L⊆Con 是一个边标签的集合, E ⊆ V × L × V E\subseteq V\times L\times V E⊆V×L×V 是一个边的集合。这里的 ×
是指笛卡尔积 (这个可以自行bing.com)。
W3C 推荐的 RDF 模型就是一个 Directed Edge-labeled Graph
,它的定义如下:
给定可数无穷集合 R ⊂ C o n \mathbf{R}\subset\mathbf{Con} R⊂Con (URI 集合), B ⊂ C o n \mathbf{B}\subset\mathbf{Con} B⊂Con (Blank Node 集合), L ⊂ C o n \mathbf{L}\subset\mathbf{Con} L⊂Con (Literal 集合),一个 RDF 图被定义为 G = ( V , E ) G=(V,E) G=(V,E),其中 V ⊆ R ∪ B ∪ L V\subseteq \mathbf{R}\cup\mathbf{B}\cup\mathbf{L} V⊆R∪B∪L 表示一个节点集合, E ⊆ ( R ∪ B ) × ( R ) × ( R ∪ B ∪ L ) E\subseteq (\mathbf{R}\cup\mathbf{B})\times(\mathbf{R})\times(\mathbf{R}\cup\mathbf{B}\cup\mathbf{L}) E⊆(R∪B)×(R)×(R∪B∪L) 表示一个 RDF 三元组结合。
下面是一个 Directed Edge-labeled Graph
的例子,而对应的 RDF Graph
只需要把节点和边上的字符填上必要的前缀和类型即可,比如 Liu_Bei
替换为 dbr:Liu_Bei
,type
替换为 rdf:type
,label
替换为 rdfs:label
(RDFS 是以外一个语义网络通用的命名空间),161
替换为 "161"^^xsd:integer
等。
其中 V {V} V={
Liu_Bei
, Liu_Shan
, King
, "man"
, 161
, Role
}, L {L} L={
child
, successor
, label
, gender
, birthday
, type
}, E {E} E={(Liu_Bei
, child
, Liu_Shan
), (Liu_Bei
, successor
, Liu_Shan
), (Liu_Bei
, label
, King
), (Liu_Bei
, gender
, "man"
), (Liu_Bei
, birthday
, 161
), (Liu_Bei
, type
, Role
), (Liu_Shan
, type
, Role
)}。
Heterogeneous Graph
一个异构图被定义为一个四元组 G = ( V , E , L , l ) G=(V,E,L,l) G=(V,E,L,l),其中 V ⊆ C o n V\subseteq \mathbf{Con} V⊆Con 是一个节点的集合, L ⊆ C o n L\subseteq \mathbf{Con} L⊆Con 是一个标签(顶点或边的标签)的集合, E ⊆ V × L × V E\subseteq V\times L\times V E⊆V×L×V 是一个边的集合, l : V → L l:V\rightarrow L l:V→L 是一个映射(对于每个 V V V 中的顶点,它有一个来自来自 L L L 的标签)。
以前面的刘备的例子,它对应的 Heterogeneous Graph
如下:
其中的 V V V, E E E, L L L 与前面的一样。
Property Graph
一个属性图被定义为一个八元组 G = ( V , E , L , P , U , e , l , p ) G=(V,E,L,P,U,e,l,p) G=(V,E,L,P,U,e,l,p),其中 V ⊆ C o n V\subseteq \mathbf{Con} V⊆Con 是一个节点 ID 的集合, L ⊆ C o n L\subseteq \mathbf{Con} L⊆Con 是一个标签的集合, E ⊆ C o n E\subseteq \mathbf{Con} E⊆Con 是一个边 ID 的集合, P ⊆ C o n P\subseteq \mathbf{Con} P⊆Con 是一个属性集合, U ⊆ C o n U\subseteq \mathbf{Con} U⊆Con 是一个值的集合。
e : E → V × V e:E\rightarrow V\times V e:E→V×V 是一个从边 ID 到节点集合的映射;讲人话就是说给每个边比如 edge1
分配一个节点对比如说 (刘备ID
, 刘婵ID
)。
l : V ∪ E → 2 L l:V\cup E\rightarrow 2^L l:V∪E→2L 是一个从节点或边 ID 到一个标签集合的 power set
的映射,这里 2 L 2^L 2L 值的是 L L L 的 power set
( L L L 的所有非空子集);讲人话就是说给每个节点或者边 ID 分配一堆标签。比如给 edge1
这个边 ID 分配两个标签 {child,successor}
。
p : V ∪ E → 2 P × U p:V\cup E\rightarrow 2^{P\times U} p:V∪E→2P×U 是一个从节点或边 ID 到一个 属性-值 集合的 power set
的映射。讲人话的意思就是给每个节点或者边 ID 分配一堆属性值。比如给 刘备ID
这个节点分配性别和生日属性 {gender: “man”, birthday: 161}
。
下面是刘备的例子在 Property Graph
中对等的表示:
其中 V V V={
Liu_Bei
, Liu_Shan
}, E E E={
child
, successor
}, L L L={
Role
, King
}, P P P={
gender
, birthday
}。
三个图数据模型对比
Heterogeneous Graph
相比 Directed Edge-labeled Graph
允许为顶点分配标签。而 Property Graph
在 Heterogeneous Graph
基础上进一步扩展,允许节点和边使用多个标签,并且允许节点和标签有多个属性-值对。
RDF Graph
虽然是一种 Directed Edge-labeled Graph
,但是由于它有很多保留的字可以表示丰富的语义,比如在 Property Graph
中可以有多个标签,但是机器无法区分哪个是表示类,哪个表示一般标签。而 RDF 使用 rdfs:label
专门指定标签,使用 rdf:type
指定类。此外 RDF 也可以实现实体 (类比Property Graph
中的节点) 的多个属性表示,以及一个边的多个标签和属性表示。但是相对而言 RDF 的表示会占用更多的存储,效率会更低。
关注不走丢,欢迎反馈、点赞、加星
参考
- Scientific Data Management & Knowledge Graph, by Maria-Esther Vidal
- HOGAN A, BLOMQVIST E, COCHEZ M, et.al. Knowledge Graphs[J]. arXiv:2003.02320 [cs], 2020.
- https://zhuanlan.zhihu.com/p/260430189