前两次介绍了知识图谱的基本概念和知识图谱的构建方式,这次介绍一下知识图谱系统的构建过程。
1 知识图谱的总体构建思路
如图所示,从原始的数据到形成知识图谱,经历了知识抽取、知识融合(实体对齐)、数据模型构建、质量评估等步骤。
原始的数据,按照数据的结构化程度来分,可以分为结构化数据、半结构化数据和非结构化数据,根据数据的不同的结构化形式,采用不同的方法,将数据转换为三元组的形式,然后对三元组的数据进行知识融合,主要是实体对齐,以及和数据模型进行结合,经过融合之后,会形成标准的数据表示,为了发现新知识,可以依据一定的推理规则,产生隐含的知识,所有形成的知识经过一定的质量评估,最终进入知识图谱,依据知识图谱这个数据平台,可以实现语义搜索,智能问答,推荐系统等一些应用。
以下对知识图谱构建中的步骤进行详细的介绍。
2 知识抽取
我们将原始数据分为结构化数据、半结构化数据和非结构化数据,根据不同的数据类型,我们采用不同的方法进行处理。
2.1 结构化数据处理
针对结构化数据,通常是关系型数据库的数据,数据结构清晰,把关系型数据库中的数据转换为RDF数据(linked data),普遍采用的技术是D2R技术。D2R主要包括D2R Server,D2RQ Engine和D2RRQ Mapping语言。
D2R Server 是一个 HTTP Server,它的主要功能提供对RDF数据的查询访问接口,以供上层的RDF浏览器、SPARQL查询客户端以及传统的 HTML 浏览器调用。 D2RQ Engine的主要功能是使用一个可定制的 D2RQ Mapping 文件将关系型数据库中的数据换成 RDF 格式。D2RQ engine 并没有将关系型数据库发布成真实的 RDF 数据,而是使用 D2RQ Mapping 文件将其映射成虚拟的 RDF 格式。该文件的作用是在访问关系型数据时将 RDF 数据的查询语言 SPARQL 转换为 RDB 数据的查询语言 SQL,并将 SQL 查询结果转换为 RDF 三元组或者 SPARQL 查询结果。D2RQ Engine 是建立在 Jena(Jena 是一个创建 Semantic Web 应用的 Java 平台,它提供了基于 RDF,SPARQL 等的编程环境)的接口之上。 D2RQ Mapping 语言的主要功能是定义将关系型数据转换成 RDF 格式的 Mapping 规则。
2.2 半结构化数据处理
半结构化数据,主要是指那些具有一定的数据结构,但需要进一步提取整理的数据。比如百科的数据,网页中的数据等。对于这类数据,主要采用包装器的方式进行处理。
包装器是一个能够将数据从HTML网页中抽取出来,并且将它们还原为结构化的数据的软件程序。网页数据输入到包装器中,通过包装器的处理,输出为我们需要的信息。
对于一般的有规律的页面,我们可以使用正则表达式的方式写出XPath和CSS选择器表达式来提取网页中的元素。但这样的通用性很差,因此也可以通过包装器归纳这种基于有监督学习的方法,自动的从标注好的训练样例集合中学习数据抽取规则,用于从其他相同标记或相同网页模板抽取目标数据。
2.3 非结构化数据处理
对于非结构化的文本数据,我们抽取的知识包括实体、关系、属性。对应的研究问题就有三个,一是实体抽取,也称为命名实体识别,此处的实体包括概念,人物,组织,地名,时间等等。二是关系抽取,也就是实体和实体之间的关系,也是文本中的重要知识,需要采用一定的技术手段将关系信息提取出来。三是属性抽取,也就是实体的属性信息,和关系比较类似,关系反映实体的外部联系,属性体现实体的内部特征。
非结构化数据的抽取问题,研究的人比较多,对于具体的语料环境,采取的技术也不尽相同。举个例子,比如关系抽取,有的人采用深度学习的方法,将两个实体,他们的关系,以及出处的句子作为训练数据,训练出一个模型,然后对于测试数据进行关系抽取,测试数据需要提供两个实体和出处的句子,模型在训练得到的已知关系中查找,得出测试数据中两个实体之间的关系。这是一种关系抽取的方法。还有人用句法依存特征,来获取关系,这种方法认为,实体和实体之间的关系可以组成主谓宾结构,在一个句子中,找出主谓关系和动宾关系,其中的谓词和动词如果是一个词,那么这个词就是一个关系。比如说“小明吃了一个苹果”,主谓关系是“小明吃”,动宾关系是“吃苹果”,那么就认为“吃”是一个关系。
当然,还有其它很多方法,可以在一定程度上实现实体抽取,关系抽取和属性抽取,效果可能会有差异,这需要在实践中测试和完善。
3 知识融合
知识融合,简单理解,就是将多个知识库中的知识进行整合,形成一个知识库的过程,在这个过程中,主要需要解决的问题就是实体对齐。不同的知识库,收集知识的侧重点不同,对于同一个实体,有知识库的可能侧重于其本身某个方面的描述,有的知识库可能侧重于描述实体与其它实体的关系,知识融合的目的就是将不同知识库对实体的描述进行整合,从而获得实体的完整描述。
比如,对于历史人物曹操的描述,在百度百科、互动百科、维基百科等不同的知识库中,描述有一些差别,曹操所属时代,百度百科为东汉,互动百科为东汉末年,维基百科为东汉末期;曹操的主要成就,百度百科为“实行屯田制,安抚流民消灭群雄,统一北方,奠定曹魏政权的基础,开创建安文学,提倡薄葬”,互动百科为“统一北方”,维基百科为“统一了东汉帝国核心地区”。
由此可以看出,不同的知识库对于同一个实体的描述,还是有一些差异,所属时代的描述差别在于年代的具体程度,主要成就的差别在于成就的范围不同,等等,通过知识融合,可以将不同知识库中的知识进行互补融合,形成全面、准确、完整的实体描述。 知识融合过程中,主要涉及到的工作就是实体对齐,也包括关系对齐,属性对齐,可以通过相似度计算,聚合,聚类等技术来实现。
4 数据模型构建
上一篇文章,我们阐述过知识图谱的构建方法,提到知识图谱的数据整体上可以分为数据模型和具体数据,数据模型就是知识图谱的数据组织框架,不同的知识图谱,会采用不同的数据模型。对于行业知识图谱来说,行业术语、行业数据都相对比较清晰,可以采用自顶向下的方式来建设知识图谱,也就是先确定知识图谱的数据模型,然后,根据数据模型约定的框架,再补充数据,完成知识图谱的建设。 数据模型的构建,一般都会找一个基础的参考模型,这个参考模型,可以参照行业的相关数据标准,整合标准中对数据的要求,慢慢形成一个基础的数据模型,再根据实际收集的数据情况,来完善数据模型。也可以从公共知识图谱数据模型中抽取,将与行业有关的数据模型从公共知识图谱数据模型中提取出来,然后结合行业知识进行完善。
5 知识推理
知识推理,就是根据已有的数据模型和数据,依据推理规则,获取新的知识或者结论,新的知识或结论应该是满足语义的。知识推理,依据描述逻辑系统实现。描述逻辑(Description Logic)是基于对象的知识表示的形式化,也叫概念表示语言或术语逻辑,是一阶谓词逻辑的一个可判定子集。
一个描述逻辑系统由四个基本部分组成: 最基本的元素:概念、关系、个体;TBox术语集:概念术语的公理集合; Abox断言集:个体的断言集合;TBox 和 ABox上的推理机制。
描述逻辑涉及到的内容也比较多,此处举几个例子,比如实体的分类包含关系,一个电脑椅是椅子,椅子是家具,可以说,一个电脑椅是家具。常识规则的推理,一个男人的孩子是A,一个女人的孩子是A,可以知道,这个男人和女人是配偶。
通过推理发现新的知识,应用比较多,说明知识图谱的时候也经常不自觉的会应用推理,比如前两年比较受人关注的王宝强离婚案,为什么会聘用张起淮做律师,通过知识图谱可以很清楚知道,王宝强和冯小刚关系比较密切,冯小刚聘用张起淮作为律师顾问,所以王宝强很容易和张起淮建立关系,这也可以看作是知识推理的范畴。当然,更确切地说,应该是规则的范畴。推理更强调的是固有的逻辑,规则一般是和业务相关的自定义逻辑,但推理和规则都是通过逻辑准则,获取新的知识或发现,在这里先不做区分。
6 质量评估
质量评估,就是对最后的结果数据进行评估,将合格的数据放入知识图谱中。质量评估的方法,根据所构建的知识图谱的不同,对数据要求的差异而有所差别。总的目的是要获得合乎要求的知识图谱数据,要求的标准根据具体情况确定。 比如对于公共领域的知识图谱,知识的获取采用了众包的方法,对于同一个知识点,可能会有很多人来完成,如果这个知识点只有一个答案,可以采用的一种策略是,将多人的标注结果进行比较,取投票多的结果作为最终的结果。当然,这是不严谨的,因为真理往往掌握在少数人的手里,特别是针对一些行业的知识图谱,表现尤为突出。行业内的一条知识,可能只有行业专家能够给出权威正确的答案,如果让大众投票来决定,可能会得到一条错误的知识。所以,针对行业知识图谱,可能会采用不同于公共知识图谱的策略,来进行知识的质量评估。
以上零零散散的将知识图谱的构建过程,大体做了一个描述,知识图谱的构建是一个复杂的系统工程,涉及到的知识和技术都很多,肯定会有很多知识或技术没有说到,或者是描述的比较浅显,没有把握住一些构建方法的本质,希望大家补充,我会在后面做项目的过程中,不断细化构建过程,将构建中碰到的具体问题,再进行详细的描述说明。