在本文中,笔者主要想分享一下自底向上构建知识图谱的全过程,抛砖引玉,欢迎大家交流。
“The world is not made of strings , but is made of things.”
——辛格博士,from Google.
知识图谱,是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系,通过将数据粒度从document级别降到data级别,聚合大量知识,从而实现知识的快速响应和推理。
当下知识图谱已在工业领域得到了广泛应用,如搜索领域的Google搜索、百度搜索,社交领域的领英经济图谱,企业信息领域的天眼查企业图谱等。
在知识图谱技术发展初期,多数参与企业和科研机构主要采用自顶向下的方式构建基础知识库,如Freebase。随着自动知识抽取与加工技术的不断成熟,当前的知识图谱大多采用自底向上的方式构建,如Google的Knowledge Vault和微软的Satori知识库。
1、定义
俗话说:“看人先看脸。”在我们深入了解知识图谱之前,让我们先来看一下它长什么样子!
如图所示,你可以看到,如果两个节点之间存在关系,他们就会被一条无向边连接在一起,那么这个节点,我们就称为实体(Entity),它们之间的这条边,我们就称为关系(Relationship)。
知识图谱的基本单位,便是“实体(Entity)-关系(Relationship)-实体(Entity)”构成的三元组,这也是知识图谱的核心。
2、数据类型和存储方式
知识图谱的原始数据类型一般来说有三类(也是互联网上的三类原始数据):
结构化数据(Structed Data),如关系数据库
非结构化数据,如图片、音频、视频
半结构化数据 如XML、JSON、百科
如何存储上面这三类数据类型呢?一般有两种选择,一个是通过RDF(资源描述框架)这样的规范存储格式来进行存储,比较常用的有Jena等。
还有一种方法,就是使用图数据库来进行存储,常用的有Neo4j等。
那你可能会问我了,你不就是一大堆的三元组吗,用关系数据库来存储不也一样嘛。
是的,用关系数据库来存储,尤其是存储简单的知识图谱,从技术上来说是完全没问题的。
但需要注意的是,一旦知识图谱变复杂,图数据库在关联查询的效率上会比传统的关系数据存储方式有显著的提高。当我们涉及到2,3度的关联查询,基于知识图谱的查询效率会高出几千倍甚至几百万倍。
除此之外,基于图的存储在设计上会非常灵活,一般只需要局部的改动即可。
因此如果你的数据量较大,还是建议直接用图数据库来进行存储的。
3、知识图谱的架构
知识图谱的架构主要可以被分为:
逻辑架构
技术架构
3.1 逻辑架构<