知识图谱技术综述

知识图谱最底层的构建就是实体抽取和关系抽取。实体抽取用的主要是命名实体识别的技术,但是由于实体的领域属性,所以很难有一个通用的模型找出所需要的领域实体,需要人为的结合实际情况构建。而关系抽取在实际任务中同样需要人为的定义出关系,之后在文本中去匹配。在做关系抽取的时候很多时候还需要做指代消解,对于代词的指代分析。下一步就是实体对齐。

1.NER

命名实体识别目前用的比较多的一般都是Bi-LSTM+CRF,但是我们还是从基本的说起,大体分为几类:

  • 基于规则的方法(如正则)

  • 投票模型

    这个一般可以用统计的方法,记录最大的可能的实体类型,或者增加一个阈值的判断等。例如Beijing在10个句子中有9个都是地名实体LOC,那么我们就认为是LOC。

  • 利用分类模型

    • 非时序模型(逻辑回归,SVM等)
    • 时序模型(HMM,CRF,LSTM+CRF等)

Tip:做实际任务的时候,有些任务听着不好处理,但是为了效果可以进行转化,例如问答的意图识别,直接做很不方便,但是人为定义类别,转化成分类问题就很好处理,还有很多问题都是这种思想。毕竟大部分任务就是回归和分类。

在实际过程中,投票决策这个算法在数据稍大一些的时候已经可以取得比较好的效果了,如果用一些分类算法如随机森林,需要我们进行特征工程,这个时候有可能一个复杂的算法还没有投票决策这个Baseline方法好,因此特征工程考虑的问题要多很多,当然它的能力也更强。如果忽略了一些重要的特征如上下文等,反而既复杂效果又不好。

补充

文本里的特征工程一般如何做?

  • Bag-of-words features
    • 当前词
    • 前后词(上下文)
    • Bi-gram(两个词作为特征而不是单个)
    • Tri-gram等
  • 词性 features
    • 当前词的词性
    • 前后词的词性等
  • 前缀和后缀
    • 英语中较多,也是当前词、前后词的来分析(Co,in,un,less,ty)
  • 当前词的特性
    • 词长、是否大写、是否大写开头、是否包含数字等等(需要想象力,能不能有作用可以在训练中使用一些特征选择的方法)

特征编码

  • Categorical Features

    一般这个指的是离散型的特征,一般用onehot编码,需要注意的一点是,如果类别很多导致onehot非常长的话或者很多项为0可以考虑压缩特征或向上抽取一层。比如按城市编码有很多0则可以改为按省份编码。

  • Continues Features

    • 直接用,但是需要做一些归一化的操作(限定到0-1或者用高斯–N(0, 1))
    • 连续特征离散化,如0-10用1表示,11-20用2表示等(例如在逻辑回归等线性模型时,可以增加一定的非线性性)
  • Ordinal Features(例如成绩的档次,ABCDE,是具有排序性质的)

    • 直接使用
    • 当作离散型特征(onehot编码)

2.关系抽取

目前对于关系抽取主要有这样的一些方法:

  • 基于规则

    虽然这个方法很简单,但是依然用在很多现有的系统上,并且能够取得还不错的效果。

  • 监督学习

  • 半监督学习 or 无监督学习

    半监督学习主要是考虑使用某些无标签数据来使得效果得以提升,无监督即使用无标签数据

    • Bootstrap

      这是个很常见的也是很有效的方法,可以在很多任务中使用,也就是不是所有的任务都是由人为的去定义,很多时候可以让机器自己学习到一些模板或者规律,从而进一步提升效果。

    • Distant Supervision

    • 无监督学习

      无监督在工业界当中效果难以保证,多以使用的更多的还是监督或半监督的算法。

(1)基于规则

通过使用规则集合来做一个关系的抽取。

(2)基于监督学习

  • 首先定义关系类型
  • 其次定义实体类型
  • 训练数据准备
    • 实体类型标记
    • 实体之间的关系标记

我觉得关系抽取可以由两部分组成,当我们找到两个实体之后,我们首先判断这两个实体有没有关系,如果有可能有关系,那么我们就仅使用一个分类模型来预测二者的关系。这个分类模型的特征需要我们去提取,如之前说过的n-gram的特征以及位置相关特征、句法特征等等都可以在这个模型中使用。

(3)Bootstraping

看到这个方法我就想起了孙泽群的BootEA,同样也是用的Bootstrap的思想,用在实体对齐的任务上。其实Bootstrap思算法可以简要概括为这样:根据seed(可以理解为已知数据或者模板数据或者训练数据),学习出一系列规则,从而可以将该规则找到更多的需要的数据或关系。

举个例子,在关系抽取时,如果我们已经有了一部分的三元组,我们可以通过从已有的三元组进行规则提取,用这些规则去发现更多的三元组,然后还可以继续迭代。当然这样也有一个很大的缺点,就是误差累计(Error propagation)。为了改进这个问题,人们提出了snowball算法。

bootstrap的流程是这样的:根据已有数据生成规则,利用规则找到新的三元组(数据),再利用这些三元组生成新的规则,如此反复。但是snowball算法每次生成新的规则和数据后要进行规则的评估以及数据(三元组)的过滤操作,可以很大程度上降低了误差的累计。下面具体记录一下snowball算法。

(4)snowball算法

还是用关系识别来说。在一句话中,假设我们使用命名实体识别找到了两个实体。这样两个实体将这句话分为了5部分,这就是snowball算法中规则的表示。除了两个实体,其他三个部分我门可以使用向量的方式表示这样就表示成了一个五元组的形式。我们在匹配的过程中可以使用相似度的算法来判断三元组或关系是否符合这个五元组。

这就是生成模板的过程:

可以使用表示学习的方法来表示每一个模板,这样每一个模板都会是一个向量。但是抽取完所有的模板之后,我们还需要去掉冗余的模板,可以使用聚类的方法(K-means,spectral clustering,hierarchical clusting)等。有了这些规则模板,我们就可以生成新的三元组了,我们遍历首先找到含有模板中相同实体类别的句子,如模板是ORG和LOC,那么找到这两个实体的句子就可以得到其向量与模板的向量求相似度,注意,这个时候哪怕是只有ORG和LOC两种实体的模板也应该有很多个,我们和每一个模板计算相似度,最大相似度大于某一个阈值就将该三元组加入到抽取的三元组集合当中。那如何评估某一个模板的置信度呢,我们在利用这些模板加入很多的三元组之后,这些三元组其实每一个都是由最好的模板匹配后加入的,那我们如果只有其中一种模板,并将只用这一种模板抽取,并观察结果的准确率即可。

好了,简单梳理一下,首先模板本身有置信度,这是由结果来计算的准确率,其次,某一个三元组可能只由其中一个模板生成,也可能由多个模板生成(多个模板与其计算的相似度都大于阈值),那么在筛选三元组的时候,主要有两个原则:由置信度较高的模板生成的三元组更可靠,由更多的模板生成的三元组更可靠。到此,我感觉就是snowball算法的核心了。有兴趣的可以参考论文,github直接搜索就能搜到。

3.实体消歧

实体消歧任务本质上可以理解为分类问题,查询某一个词在词库中可能的含义,并使用这个词在句子中的特征计算和词库中含义句子的相似度。找到最大的可能性即为这个实体的含义。

4.实体对齐

比较常用的方法主要是基于表示学习,基于文本的方法主要是使用向量(tfidf,word2vec等)对实体进行表示,得到两个向量之后,实际就转化成了二分类问题,即对齐或者不对齐。可以进行求取相似度+一个逻辑回归,也可以将两个向量拼接之后接一个二分类模型。

还可以基于图来进行实体对齐,现在的GCN,表示学习等方法再搭上好的词向量等已经可以取得比较好的效果了,稍微传统一点的基于图的方法也是通过图的特征以及性质,一方面是自身的特征表示,另一方面利用图的性质(度,邻居节点,邻居的邻居节点)等得到关系特征,将其拼接得到整个实体的特征,下一步再根据相似度进行对齐。

5.指代消解

指代消解就是对于一些代词如他她它,it等表明指向某个实体。这个问题简单的可以通过定义规则的方法例如找到最近的实体、同一句话的第一个实体等等,但是这样显然是不准确的。更好一点的方法,可以通过监督学习的方法,同样和实体对齐一样,可以转化为二分类的问题,但是需要找好有标签的训练数据。例如我们有训练数据(张三,他)=1,(李四,他)=0,那么如何定义特征呢,还是用特征工程,找到张三周围的词,他周围的词,构建向量,拼接等等。就可以进行训练了。其实说深度学习自己学习特征,但是其实还是人为的寻找特征并赋值。


  转载请注明: April 知识图谱技术综述

 上一篇
Docker安装Mongodb及使用 Docker安装Mongodb及使用
最近有点偷懒,没有好好学习。因为预计接下来用mongodb会比较多,做一个简单的总结。 Docker + Mongodbdocker是真的好用,谁用谁知道,因为抖音的评论数据字段是在太多了,不知道哪些以后可能用得着,而返回的本身又是json
2020-03-30
下一篇 
依存句法分析简介 依存句法分析简介
依存句法我们人在理解一个句子的时候,一般有两种方式,一种是句法分析,主谓宾啊等等等,另一种就是凭感觉,说起来可能有点搞笑,但却是大部分都是凭感觉。凭感觉在NLP里面就是语言模型,一个词搭配什么词比较连贯,接下来是什么,这就是语言模型建模的依
2020-03-18
  目录