本文主要针对语义解析类方法探讨三个问题:
- 构造语义解析类标注数据成本较高,如何低成本的构建推理过程的标注数据?
- 在某个领域上获得的标注数据,是否可以帮助其他领域的学习?比如金融领域构建的数据能不能迁移到医疗领域?
- 假如在没有标注数据的情况下,是否可以自动学习推理过程?
--
02
构造推理过程数据
首先考虑第一个问题,如何构造推理过程数据?
1. 推理过程描述语言——KoPL

SPARQL是一种非常经典的知识图谱逻辑语言,能够进行复杂问答的查询,但它更偏向于对图结构进行查询,无法获取查询的中间过程,也不符合人类思维的过程,不易于理解。
因此我们提出一种推理过程描述语言:Knowledge-oriented Programming Language,简称KoPL。通过这种语言来帮助我们构造推理过程数据。举个例子,对于问题“勒布朗·詹姆斯和他儿子谁更高?”,KoPL会将这个问题的推理过程分解为如上图右侧,首先在知识图谱中找到实体“勒布朗·詹姆斯”,再通过关系“儿子”找到对应的实体,然后对这两个实体进行一个比较操作,从中选取属性“高度”更大的实体,最终得到问题的答案。
可以看出,KoPL拆解问题更加注重过程,符合人类思维,更容易理解。

KoPL是一种强类型语言,它包含7种知识类型、实体、实体概念,比如中国就是一个实体概念、实体属性、实体之间的关系、属性型三元组、关系型三元组,以及一种更加高阶的修饰型知识。对于属性型三元组或关系型三元组,存在一种新的针对三元组的知识,比如说“勒布朗·詹姆斯参加选秀,被某个队选中”,而“被选中”这个事件的时间,就是一种高阶的修饰型知识,它是用于修饰一个已有的三元组。KoPL支持以上7种知识类型,并且在表达过程中,KoPL对这些类型进行了显式约束。

KoPL中包含了14个针对知识图谱元素的操作,比如找到知识图谱中某个实体或概念,根据属性值作为过滤条件找到对应的实体,也包括了13个查询操作,比如查询某个实体的名字。