知识图谱主要有两块重点,一块是知识图谱的构建,一块是知识图谱的挖掘应用。本文详细讲解一下构建知识图谱的几个关键流程。
一、梳理业务,构建本体
根据业务需求,我们需要回答几个问题:
1、是否需要用知识图谱?成本怎么样,能达到怎么的效果?
2、是否有能力构建知识图谱?数据、团队等情况是否能支撑?
3、如果有必要,如何根据业务梳理一套本体框架?
这里假设梳理出了如下的一套概念体系,给出了主要的类别和关系:
二、编辑本体,给出业务知识表示框架
利用Protege进行本体编辑,获得一个用OWL表示的知识表示文件。
Protege 是一个图形界面的本体开发工具,它支持丰富的知识模型
Protege 是开源的,并且可以免费获取
三、给本体补充实例数据
1、结构化数据处理
对于结构化数据,一般是把一个表、一个类别的去对应,一行数据相当于一个类的实例,每个字段就相当于类的属性,利用相关的转化工具可以把这个过程进行转化,比如D2RQ,可以把表数据转化成虚拟的RDF数据,使数据在RDF层面实现数据格式的统一。
2、非结构化数据(主要是文本数据)
这里假设数据库中已经存在如下的如下的单实体以及三元组数据,目前的主要任务就是从文中抽取相关的数据,来补充现有的知识库。
假设这里有两篇文章,文章1和文章2,:
从文章1中,我们可以实现如下的实体抽取和识别:
从文章2中,我们可以实现如下的实体抽取和识别:
那么存在的问题是如何把识别出来的a1/b1/d1,a2/b2/d2插入到现有的数据库中?这里要解决的问题就是实体消歧,如何判别a1,a2以及知识库中现有的a3,a4是不是表示的同一个实体?(后面再讨论)
以上我们考虑的是单实体入库的情形,对于三元组入库,我们还需要有三元组的抽取方法和实体的消歧。
下面我们用几个图,详细的描述一下这个过程:
(1)现有的知识库中仅存在一个单实体a3,两对三元组(a4,r1,b4),(d3,r2,b3),如下图:
(2)假设我们在文章2中抽取了一个三元组(a2,r1,b2),当这个三元组入库的时候,我们需要进行实体的消歧,判断一下a2与a4/a3以及b2与b4/b3是否可能重复,通过检测,发现b2与b4相似的概率为90%超过我们设定的相关阈值,所以有理由认为b2/b4可能是同一实体,故下图中示意就把b2/b4合二为一(或者添加一个链接)。
(3)知识库中并不是所有有关系的实体都通过三元组连接起来了,最直接的是知识库中的单实体比如上图中的a3,与其它三元组暂时没有建立联系,但是不是a3与其它实体真的没有关系呢?并不是,有些隐性的关系,我们可能并没有那么容易发现。那么如何去断定这个单实体或者其它实体之间的关系呢?这就涉及到前面提到的关系推理《
基于知识图谱推理的关系推演
》,最终我们发现a3和b2(b4)存在关系r1,如下图红虚线所示。
四、关键问题
从上面的三个步骤大致可以看到知识图谱的主要构建流程,看起来很简单,但实则是非常繁琐的数据归一化工作,而且存在一些关键问题,并没有统一的、标准化的工具或方法能够一次性解决:实体识别、三元组抽取、实体消歧、知识补全。
1、实体识别
所谓实体识别,简单的说,就是给定一个实体集合X,然后根据一个类别集合P,实现一对一的集合划分Y。比如实体集合X=,集合P=,通过集合划分后得到集合Y={,,},其中和男人对应,和女人对应,和物品对应。当然,要实现这个划分,我们需要利用实体的各种特征,比如上下文特征。在深度学习之前,应用最多的算法就是条件随机场CRF,对一个单词序列进行标注。
深度学习推广后,尝试RNN、LSTM的序列标注,最近出现的BiRNN-CRF好像效果不错(广义的思路:深度学习获得相关特征,送入传统机器学习)。
针对具体的人名、地名、机构名、时间等的识别,已经有一些包可以直接实现,但是具体到相关业务时,这些包能力有限,根本不能直接拿来就用,还需要自己实现相关的算。
2、三元组抽取
三元组抽取也可以在实体抽取的基础上进行关系的推理,给关系的成立打个评分。总之,有监督的算法一般是把关系的抽取转换成一个分类问题。具体还可以使用一些远程监督+注意力机制等方法,包括单词级别的向量表示、句子级别的向量表示等。
3、实体消歧
对于实体消歧,其主要的思路就是计算实体之间的相似度,通过相似度的排名来判断实体是否可能重合。具体的方法,比如,向量空间法(VSM: Vector Space Model)把每个实体表示成一个低维、稠密的向量,通过向量的余弦相似度来计算相似度距离。至于如何把一个实体表示成一个向量,可以利用实体的上下文信息、描述信息等,利用word2vector等方法把实体表示成一个向量
4、知识补全
对于知识补全,其主要思路其实也可以利用表示学习的方法,把头尾实体以及关系表示成低维、稠密的向量,然后再通过相关的评分函数进行排名。具体可以参考《基于知识图谱推理的关系推演》
五、解决问题的基本思路
从以上几个问题的基本思路和解决方法来看,目前解决这块问题核心的思路是:利用深度学习做表示学习或利用深度学习提取特征,具体就是把相关的特征输入深度神经网络,输出特征向量(一般为低维、稠密向量),然后通过对特征向量进行计算或者加载传统机器学习算法。目前来看,有单词的表示学习、句子的表示学习、实体的表示学习、关系的表示学习等。所以,解决这类问题的关键,可能在于:
(1)理解如何利用深度神经网络做表示学习,比如Word2Vector;
(2)与传统机器学习方法或者规则的结合;
(3)常用的相似度、排名算法;
领取专属 10元无门槛券
私享最新 技术干货