详细的知识图谱构建流程

知识图谱主要有两块重点,一块是知识图谱的构建,一块是知识图谱的挖掘应用。本文详细讲解一下构建知识图谱的几个关键流程。

一、梳理业务,构建本体

根据业务需求,我们需要回答几个问题:

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)常用的相似度、排名算法;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180909A14C7Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券