2018-01-25 | Knowledge Graph | UNLOCK

识图谱构建困惑之模式层

从Ontology 到Schema

Ontology定义

Ontolgy翻译为本体,它是共享概念模型的明确的形式化规范说明。这其中四个层面的那还有,1)是共享,说明Ontology描述的是群组行为而不是个体特性,2)概念模型(Conceptualization),概念是指对现实世界中物体的抽象而成的描述,比如歌曲,它是对很多歌比如“黄河大合唱”、“北京欢迎你”等歌的一个抽象描述,3)明确的,是指所使用的概念和概念约束都有具体的定义,4)形式化,是指能被计算机处理[1].综上所述,Ontoloy所研究的本质就是概念及概念间的各种关系。

知识图谱Schema

知识图谱中所讨论的模式层即Schema,它其实就是用来描述Ontololy层,描述概念及概念关系、属性的。为什么需要设计模式层(Schema)?因为它规范了知识图谱的领域或描述的对象有哪些,起到管理整个数据库的作用,它的功能有点类似于传统数据库中的schema,可以类比这去分析,但不同点是概念之间存在关系比如父子类关系,互斥关系,同时这些概念可能会有一些基本属性。当发现某个概念对应的实例(实体)时,概念本身的属性可以直接传递到实例上面,而不需要为实体重新定义属性。需要说明的一点是模式层的属性,实例不一定全有,比如“公司”这个概念,会有一个属性“成立时间”,但是具体到某个实例“盛大”可以没有这个属性,但如果“盛大”有“成立日期”这个属性,则直接可以用概念“公司”中的“成立时间”作为属性名。

模式层构建及存储、使用

前面解释了模式层相关的一些概念,那么核心问题来了,如何去构建这样的一个模式层。概念层描述Ontology知识,通常比较小,一般是采用自顶向下(top-donw)编辑而成,采用的工具可以是Protege,这是最原始的方式,一般还可以借助现有图谱的schema来构建自己的模式层,比如参考cnSchema百度知识图谱Schema,这些都是通用领域的schema,一般公司只需要构建自己领域内的知识图谱,因此具体获取方式会有哦区别。在构建时,我们通常是编辑一部分schema实例化数据,然后对数据进行规约,当发现一些共性后,将其加入到schema层中。如果手工构建模式层,要考虑这几个方面问题,类(概念)层级结构,是设置多级还是只有两级,我们在构建图谱时只采用两级结构,一个根节点,其他的都作为叶子节点;第二个问题是类间的关系定义,是主关系和逆关系,比如“英雄联盟”的运营商是“腾讯”,逆关系是,“被运营”;第三个问题是类域定义,我们场景里面有“游戏”,“影视”,影视下面又有“电影”、“导演”、“演员”等;第四个问题是类属性定义,选取一些公共属性作为类属性。
通常来说,schema数据比较小,用来做推理,一般会和数据层分开存储,比如可以存储在MySQL中,在系统启动时加载到内存,并提供查询改写等操作。

参考

[1] 邓志鸿等 Onlotogy研究综述
[2] 小象问答
[3] 王阳明知乎专栏

评论加载中