知识图谱学习与实践(2)——知识图谱数据模型的构建

时间:2024-02-01 22:06:59

数据模型就是数据组织方式,是构建知识图谱首要解决的问题,无论是开放域的知识图谱还是行业的知识图谱,都需要收集大量的数据,这些数据的收集是有选择性的,这个选择的依据就是数据模型。数据模型,也可以称为知识表达模型,解决知识图谱如何组织数据的问题,是数据的底层架构,是一个知识体系框架,能够涵盖住知识图谱所有的数据,决定了数据收集的范围。

1 数据的分类问题。

通用知识图谱,它收集的数据比较全,涉及到各种各样的知识。我们可以把通用知识图谱认为是一个大而全的知识图谱,它基本能涵盖所有的知识,当然,这类通用知识图谱,由于涵盖的知识范围广,所有对于某一个知识点,可能不会说的特别细,也就是深度不够。行业知识图谱和通用知识图谱,正好是一个互补的关系,行业知识图谱是对某一个行业的知识,组织的很专业,研究的很深入。

无论是通用知识图谱还是行业知识图谱,都存在数据的组织问题,首要的就是数据如何分类,可以画一个树状图,根节点为物体或者对象,就是包含万物,然后再一层层的进行分类,知识图谱中的所有知识都可以在树状图中找到对应的节点。

下面我们以百科数据为例,介绍一下知识图谱的分类问题。其它通用知识图谱,也有自己的分类体系,和百科的分类大同小异,但也有自己的一些特点。

百科知识的组织,第一层分类为艺术、科学、自然、文化、地理、生活、社会、人物、经济、体育、历史等。

 

选择一个分类,比如科学分类,就能看到第二层分类科学的分类体系,包括健康医疗、航空航天、天文学、环境生态、农业科学、生命科学、数理科学、心理学、信息科学、工程技术、化学、地球科学、其它等。

 

再继续选择,比如健康医疗,就可以看到第三层的分类,医学知识库的知识分类情况,从医疗症状、药物、中医药、诊断技术等几个维度来组织医学知识。

 

通过这种分类体系,就会发现,无论收集什么知识,我们都可以在体系中找到对应的分类,这样有利于大家在这个知识图谱中查找知识,也有利于添加知识,扩展知识图谱的数据内容。

2 数据的属性

对于数据组织体系,在分类到末端节点,也就是叶子节点,就需要对这个叶子节点(具体知识点)进行描述,如何将一个知识点描述清楚,在知识图谱中,需要使用属性来描述知识点。这些属性可以从多个方面,多个层次来描述事物。

我们还是以百科数据为例,在医学知识库中,找到叶子知识点,比如糖尿病, 词条中最重要的一个是定义或者叫做简介,说明什么是糖尿病,然后是几个主要属性,英文名称、常见症状、就诊科室、传染性等。把这些属性放到最开始的位置,人们看到后,就可以对糖尿病有一个大致的了解,这些属性也能够简单反映糖尿病这个知识点的基本情况。

 

除了基本的属性,对于糖尿病这个知识点,还有更多的描述,百科是从病因、检查、鉴别诊断、临床表现、诊断、治疗这几个维度,来阐述糖尿病,通过这些更进一步的属性,人们就会对糖尿病有一个更深入的了解。

 

下面我们再继续来看一下,检查这个属性,都包括哪些内容。百科中列出了比较多的检查项目或者称为检查内容,血糖、尿糖、尿酮体、糖基化血红蛋白(HbA1c)、糖化血清蛋白等等,而且对于每一项检查内容,都有一个简短的说明。

 

上面的属性,就是百科对于疾病症状的知识组织方式,我们可以看一下其他的疾病症状,基本上都是按照这个方式,来组织属性数据。糖尿病这个疾病症状,通过一些属性,还可以关联到其它词条,比如检查内容中的血糖。这样就可以在知识点之间建立关联,形成一个网状的知识图谱。

 

3 数据模型的构建过程

在构建数据模型的实践中,基本上都会找一个类似的知识体系,或者粗略的数据分类体系,然后以其为基础,再进行扩展。当然,在收集数据的过程中,也可能会收集到大量脱离数据模型的数据,这时候,就可以根据这些数据进行数据模型的修改和完善。

构建数据模型的初始阶段,可以找一个知识图谱的中心数据,比如构建一个音乐知识图谱,可以以歌曲为中心,先考虑歌曲的属性,比如演唱者、作词、作曲、分类、歌词、乐谱等等,对于这些属性,一方面是考虑在知识图谱中是否合适,需要不断地斟酌,修改、增加或者删除一些属性,从而达到完善属性的目的。另一方面,还要确定这些属性对应的属性值,比如演唱者、作词、作曲都是对应的人,人也是一种实体,也会有很多属性,比如出生日期、性别、姓名、籍贯、主要事迹、作品等等,对于人的属性,又可以开启属性论证工作,确定使用哪些属性,属性值的范围等。

在不断确定属性和属性值范围的过程中,我们还要明确一个边界。因为对于这种关联关系,可以一直做下去,最后都会变成一个万物互联的通用知识图谱。我们有的时候,可能是构建一个行业知识图谱,这时候,边界的确定就很重要,比如出生日期,对于古代人,就不能写成年月日的形式,可能就是一个朝代,这个朝代也是一个实体,我们就没有必要再对朝代进行属性和属性值的确定。因为朝代对于我们知识图谱来说,已经是相关性很小的知识了。对于朝代这类和知识图谱相关性比较弱的知识实体来说,我们才觉得办法,最简单的处理就是直接写一个名称,将它看作一个字符串或者是一个枚举值,作为枚举值的话,需要罗列出所有的朝代。另外一种处理方法就是将包含的朝代链接到通用知识图谱,比如百度百科或者dbPedia等公认的通用知识图谱。我们专注于行业知识图谱中,关联性比较强的数据。

4 数据模型需要注意的问题

我们最终构建的数据模型,需要注意两个方面的问题。

一个是体系的完备性。有类、子类这样的层次关系,实体都能划分到这个层次关系中。类的属性,子属性,每个类都有什么属性,属性之间存在什么样的关系,对于一个属性来说,它可以看作是谓语,主语和宾语的范围如何界定。将类、子类、属性、子属性之间的关系描述清楚,能够把知识图谱中的相关实体都纳入到这个体系中,并且通过属性叙述清楚实体,就表示这个数据模型满足了知识图谱的完备性要求。

另一个需要注意的是数据模型度的把握。虽然有完备性的要求,但也不能将所有的内容都罗列到数据模型中。对于数据模型中的类和属性,要有所取舍,只选取那些和知识图谱相关性强的类和属性,一开始可以选的粗一些,然后再逐渐细化。也可以一开始就做的比较细致,后面再进行删减,最后形成一个内容适当的数据模型。

5 结语

现在构建知识图谱数据模型,都有一定的依据,一般不会从零开始,有一个雏形作为数据模型的基础,再进行完善。基本模式是以自顶向下为主,再根据收集的数据,对数据模型进行修正,也就是自底向上为辅,这样的构建方式比较普遍。