关于知识图谱:如何高效地存储与检索大规模的图谱数据

7次阅读

共计 4388 个字符,预计需要花费 11 分钟才能阅读完成。

摘要:本文简要介绍常识图谱的存储与检索相干的常识。

本文分享自华为云社区《常识图谱的存储与检索》,原文作者:JuTzungKuei。

1、概述

背景:随着互联网的倒退与遍及,一个万物互联的世界正在成型。与此同时,数据呈现出爆炸式的指数级增长,咱们正处于一个数字洪流波澜壮阔的新时代。

咱们每天产生多少数据?据统计每天:

  • 发送 5 亿条推文博客;
  • 发送 2940 亿封邮件;
  • 全世界每天有 50 亿次在线搜寻;
  • 一辆联网汽车会产生 4TB 的数据;
  • Facebook 每天产生 4PB 的数据,其中蕴含 3.5 亿的照片以及 1 亿小时的视频。

常识越来越多,目前常见的常识图谱都是以三元组的数据模式形成。

  • DBpedia 有近 8 千万条三元组;
  • YAGO 有超过 1.2 亿三元组;
  • Wikidata 有近 4.1 亿三元组;
  • Freebase 有超过 30 亿三元组;
  • 中文百科有约 1.4 亿三元组。

所以,咱们该如何高效地存储与检索大规模的图谱数据???

常识图谱是一个有向图构造,形容了事实世界中存在的实体、事件或者概念以及它们之间的关系。其中,有向图中的节点示意实体、事件或者概念,图中的边示意相邻节点之间的关系。

图中展现了对于刘德华的常识图谱部分示意图。图中红色字体示意概念,矩形框示意实体,蓝色字体示意属性,椭圆示意属性值,橙色字体示意关系。

  • 概念:人物、国家、电影等
  • 实体:刘德华、朱丽倩、中国、天下无贼等
  • 属性:身高、体重、性别、首都、简称、上映工夫、豆瓣评分等
  • 关系:妻子、女儿、国籍、主演等

2、常识图谱的存储

常识图谱中的常识是通过 RDF 构造进行示意的,其根本形成单元是事实。

每个事实是一个三元组:< 主语 S, 谓语 P, 宾语 O>,其中:

  • 主语 S:能够是实体、事件、概念
  • 谓语 P:能够是关系、属性
  • 宾语 O:能够是实体、事件、概念、一般值

上面展现了常识图谱中常识示意的三元组列表。

<S, P, O>

< 刘德华, 生日, 1961 年 9 月 27 日 >

< 刘德华, 血型, AB 型 >

< 刘德华, 妻子, 朱丽倩 >

< 刘德华, 女儿, 刘向蕙 >

< 刘德华, 国籍, 中国 >

< 中国, 首都, 北京 >

。。。。。。

为了对常识图谱数据进行高效查问和治理,须要在存储介质上正当地组织这些数据。依照存储形式的不同,规范常识存储办法能够分为基于表构造的存储和基于图构造的存储。

2.1、基于表构造的存储

基于表构造的存储利用二维的数据表对常识图谱中的数据进行存储。依据不同的设计准则,常识图谱能够具备不同的表构造,目前能够分为五类:三元组表、属性表、程度表、垂直表和全索引。

2.1.1 三元组表

常识图谱中的事实是一个个的三元组,一种简略间接地存储形式是设计一张表用于存储常识图谱中所有的事实,就是在关系数据库中建一张具备三列的表,该表的模式为:< 主语,谓语,宾语 >。将常识图谱中的每条三元组存储为三元组表中的一行记录。

这种存储形式简答间接,易于了解,然而将整个常识图谱都存储在一张表中,会导致单表的规模太大,在简单查问,或者增删改查时会有十分大的开销。

计划代表:RDF 数据库系统 3store、Virtuoso

2.1.2 属性表

属性表,又称类型表,即为每种类型构建一张表,同一类型的实例放在雷同的表中。表的每一列示意该类实体的一个属性,每一行存储该类实体的一个实例。

这种存储形式尽管客服了三元组表的有余,然而也造成了新的问题,大量数据字段反复,局部数据的属性值存在空值,均会造成冗余存储。

计划代表:RDF 三元组库 Jena

人物

国家


电影

2.1.3 程度表

程度表每行记录存储一个常识图谱中一个主语的所有谓语和宾语。实际上,程度表相当于常识图谱的邻接表。程度表的列数是常识图谱中不同谓语的数量,行数是常识图谱中不同主语的数量。

实在常识图谱中,不同谓语数量可能成千上万个,会超出数据库下限;存在大量空值。

计划代表:晚期的 RDF 数据库系统 DLDB

2.1.4 垂直表

垂直表是一种以三元组的谓语作为划分维度的办法,将 RDF 常识图谱依照谓语划分为若干张只蕴含主语和宾语两列的表,表的总数量即常识图谱中不同谓语的数量,也就是说,为每种谓语建设一张表,表中寄存常识图谱中由该谓语连贯的主语和宾语值。

这种办法用不同表之间的连贯代替自连贯,防止了自连贯操作。然而它无奈很好地反对谓语是变量的查问操作。

计划代表:SW-Store

性别

主演

首都

2.1.5 全索引

全索引,又称六重索引,是针对常识图谱数据和运算的特点提出的一种优化技术,利用常识图谱三元组的特点来构建索引。将三元组中主语、谓语、宾语的各种排列状况都枚举进去,而后为它们一一构建索引。主语、谓语和宾语的排列状况共计六种。这些索引内容正好对应常识图谱运算中带变量的三元组模式的各种可能,是一种典型的“空间换工夫”策略。

这种办法不仅缓解了三元组表的单表自连贯问题,而且减速了图谱的查问效率。然而也减少了更新和保护老本。

计划代表:RDF-3X、Hexastore

六张表:SPO、SOP、PSO、POS、OSP、OPS

2.2、基于图构造的存储

基于图构造的存储是利用图的形式对常识图谱中的数据进行存储。将实体看作节点,关系看作带有标签的边,那么常识图谱的数据很天然地满足图模型的构造。基于图构造的存储形式可能间接精确地反映常识图谱的内部结构,目前次要有两种图存储模式:邻接表和邻接矩阵。对应的数据库是图数据库,数据模型是属性图。

2.2.1、邻接表

所谓的邻接表,就是常识图谱中的每个节点(实体)对应一个列表,列表中存储与该实体相干的信息。在利用图构造治理常识图谱数据的时候,一个关键问题是如何在基于图构造的指数候选空间中对查问操作无效剪枝。

2.2.2、邻接矩阵

所谓的邻接矩阵,就是在计算机中保护多个 n x n 维的矩阵,其中 n 为常识图谱中节点的数量。每个矩阵对应一个谓语,其中每一行或每一列都对应常识图谱中的一个节点。若谓语 p 所对应的矩阵中第 i 行第 j 列为 1,则示意常识图谱中第 i 个节点到第 j 个节点有一条谓语为 p 的边。

三维矩阵 M:|S| x |P| x |O|,别离示意主谓宾的数量,如果 <s, p, o> 存在于常识图谱中,则 Mi[k]=1,否则设置为 0。

2.2.3、图数据库

图数据库的实践根底是图论,通过节点、边和属性对数据进行示意和存储。具体来说,图数据库基于有向图,其中节点、边、属性是图数据库的外围概念。

节点:示意实体、事件等对象。

边:指图中连贯节点的有向线条,用于示意不同节点之间的关系。

属性:形容节点或边的个性。

常见图数据库:Neo4J、JanusGraph、OrientDB 等;

3、常识图谱的检索

常识图谱的常识实际上是通过数据库系统进行存储的,大部分数据库系统通过形式化的查询语言为用户提供拜访数据的接口。

3.1 SQL

Structured Query Language 结构化查询语言,用于治理关系型数据库。

四种操作

  • 增:insert into 表名 (列 1, 列 2, …) values(值 1, 值 2, …)
  • 删:delete from 表名 where 条件
  • 改:update 表名 set 列 1= 值 1 where 条件
  • 查:select 列 1, 列 2, … from 表名 where 条件

3.2 SPARQL

SPARQL 是由 W3C 为 RDF 数据开发的一种查询语言和数据获取协定,是被图数据库广泛支持的查询语言。

三种操作:

  • 增:insert data 三元组数据
  • 删:delete data 三元组数据
  • 改:无,增删联合
  • 查:select 变量 1, 变量 2, … where 图模式
select ?x, ?y
where {
    天下无贼 主演 ?x .
    无间道 主演 ?x .
    ?x 生日 ?y .
}

3.3 Gremlim

Gremlin 是 Apache Tinkerpop 框架中应用的图遍历语言,应用 Gremlin 能够很不便的对图数据进行查问,进行图的批改、部分遍历和属性过滤等。

三种操作

  • 增:g.addV(‘ 人物 ’).property(id,’007′).property(‘ 生日 ’,’1962 年 6 月 22 日 ’)、g.addE(‘ 丈夫 ’).property(‘xxx’, ‘yyy’).from(g.V(‘001’)).to(g.V(‘002’))
  • 删:g.V(‘007’).drop()
  • 查:g.V().hasLabel(‘ 人物 ’)、g.E().label()、g.V().valueMap()

3.4 Cypher

Cypher 是一个描述性的图形查询语言,容许不用编写图形构造的遍历代码对图形存储有表现力和效率的查问。是一种被宽泛应用的申明式图数据库查询语言。

四种操作

  • 增:create(n: 人物 {name: ‘ 周星驰 ’, 生日: ‘1962 年 6 月 22 日 ’}) return n;
  • 删:match(s:Student{id: 1}) detach delete s;
  • 改:match(n) where id(n)=7 set n.name = ‘neo’ return n;
  • 查:match(n{name:” 刘德华 ”}) return n、match(a: 人物 {name:” 刘德华 ”})-[b:Relation {{name:” 国籍 ”}]->(c) return c;

参考

  • 赵军:《常识图谱》
  • 肖仰华:《常识图谱 概念与技术》
  • 王昊奋:《常识图谱 办法、实际与利用》
  • [常识图谱 综述,构建,存储与利用] (https://segmentfault.com/a/1190000023366451)
  • [常识图谱学习笔记(九)——常识图谱的存储与检索] (https://www.jianshu.com/p/4484981a01df)
  • [常识图谱 04:常识图谱的存储与检索] (https://blog.csdn.net/u013230189/article/details/108959770)
  • [常识图谱的存储于检索] (https://zhuanlan.zhihu.com/p/54916712)
  • [Gremlin 查问] (https://support.huaweicloud.com/usermanual-ges/ges_01_0024.html)
  • [深刻学习图语言 Gremlin | 图数据库入门] (https://zhuanlan.zhihu.com/p/115098569)
  • [Neo4j Cypher 查询语言详解] (http://www.ttlsa.com/nosql/how-to-neo4j-cypher-query-language/)
  • [Neo4j 系列 - Cypher 入门(四)] (https://www.jianshu.com/p/53e2a67e9f40)
  • [neo4j 数据库之节点与关系的增删改查] (https://blog.csdn.net/weixin_38927376/article/details/104806662)
  • [常识图谱(四):Neo4j 查问语法] (https://blog.csdn.net/ai_1046067944/article/details/85342567)

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0