目录
关系抽取之远程监督算法 - Luv_GEM - 博客园 (cnblogs.com)
前言
远程监督本质上是一种自动标注样本的方法。 远程监督方法缺少人工标注数据集, 因此, 远程监督方法比有监督多一步远程对齐知识库给无标签数据打标的过程,而构建关系抽取模型的部分, 与有监督领域的流水线方法差别不大。
本文总结关系抽取中的远程监督方法,解读三篇重要论文。第一篇是开山之作,第二篇解决了第一篇中的数据标注错误问题,第三篇解决了第二篇中的特征遗失问题。但是从最终的测试结果来看,论文的效果离落地实用还相差太远。
1. 远程监督关系抽取开山之作
论文:Distant supervision for relation extraction without labeled data. ACL 2009.
1.1 介绍
关系抽取模型的目的是从关系集合中挑选一个关系分配给未知实体对,实际上就是分类任务。所以模型训练时需要学习每类关系所对应的特征(注意不是学习实体对的特征),满足这些特征的实体对就属于该类关系。训练监督学习模型需要标注数据,人工标注这些数据耗费大量时间,因此人们提出远程监督学习。
远程监督的假设:如果两个实体有关系,那么任何包含这两个实体的句子都可以表达这种关系。
假设实体e1和e2具有关系Ra,可表示为Ra{e1, e2}。若数据集中存在一个句子包含e1和e2,则说明该句子表达了关系Ra,将该句子标注为关系Ra的一个样本。使用这种方法,便可以从未标注数据集中得到标注的训练集。这就是远程监督的核心思想。
1.2 训练过程
1.2.1 数据标注方法
使用NER模型标记句子中的实体,例如标记人名、组织、位置等实体,关系抽取就是去抽取这类实体之间的关系。实体的类型依据自己需求而定。如果一个句子包含知识图谱中的两个实体,并且这两个实体在知识图谱中具有某种关系,那么就将该句子标注为该关系。
例如,在知识图谱中有 股东{马云,阿里巴巴}。句子“马云于今日卸任阿里巴巴董事职位。”,该句子中同时含有马云和阿里巴巴,那么就将该句子标注为具有股东关系,于是得到一条训练样本:
句子:马云于今日卸任阿里巴巴董事职位。 label:股东
使用这种方法可以为每个类别生成很多个标注样本,有了标注样本就可以训练分类模型。
1.2.2 训练方法
参考:关系抽取之远程监督算法 - Luv_GEM - 博客园 (cnblogs.com)
首先为每类关系创建一个特征向量。创建方法很简单,直接提取句子的特征,提取方法不限,可使用深度学习模型,或者传统的特征工程:
论文中使用了三种特征:词法特征(Lexical features)、句法特征(Syntactic features)和实体标签特征(Named entity tag features)。
- 若有10个句子包含该关系,每个句子能提取3个特征,那么该关系的特征向量中就包含30个特征。
- 即使有些提取的特征并不能表达出该关系,但特征向量中包含众多特征,也许大部分特征或者部分特征联合起来,还是能有效表达该关系的,这是远程监督有效性的保证。
得到关系的特征向量后,便可训练一个分类模型,分类模型有很多,可自行选择。
1.3 测试过程
首先使用NER标识句子中的实体。这一次,只要一对实体同时出现在一个句子中,都被认为这一对实体含有一个潜在的关系。
抽取句子中的特征,并添加到该实体对的特征向量中。例如,如果测试集中有10个句子出现了这对实体,从每个句子中提取3个特征,那么这对实体就会有30个相关特征。
分类模型根据该实体对的特征向量预测一个关系类别。
1.4 思考
为什么训练集中要用NER去识别词的类型呢?在训练过程中这个并没有用处。这是因为在测试集中没有标注好的实体,实体都不知道更无从判断关系。使用NER识别后即认为这两种实体之间可能存在关系,此时并不关心这些实体具体是什么,只需抽取这句话的特征,放入关系分类器中分类即可。
要注意训练过程和测试过程中,模型输入的特征向量不同。训练过程中是关系的特征向量,测试过程中是实体对的特征向量。训练时我们想让模型知道含有关系Ra的句子都有哪些特征,所以我们将所有含有关系Ra的句子的特征组合成一个特征向量,这便是关系Ra的特征向量。测试时我们想知道这对实体的关系类别,所以我们将所有含有这对实体的句子的特征组合成一个特征向量,这便是这对实体的特征向量。特征向量本质都是句子特征。
论文的特征提取过程不再讲述,因为不适用于深度学习模型中,没有借鉴意义。
1.5 总结
这篇论文提出的远程监督方法,无需人工标注数据也能训练监督模型,是关系抽取领域的重大突破。但是,该方法在提出之初显然也存在诸多问题。最大的问题就是标注的数据不一定蕴含对应的关系。例如,在1.2.1节举的例子,该句子就无法显示该类关系。因此,训练集中实际存在大量标注错误的句子。为解决这个问题,有学者就提出了PCNN模型。
不足之处有两点:
远程监督学习是关系抽取的重要方法,但是远程监督有两个缺点:
问题1:语义漂移问题,即标注错误问题。远程监督所基于的假设是一个非常强的假设,实体A和B在知识图谱中的关系为R,远程监督认为所有同时包含实体A和B的句子都具有R关系,显然会造成标注错误。
Bootstrapping中也有这个问题,称为语义漂移问题,但Bootstrapping本身通过给新发现的规则模板和实体对打分,在一定程度上缓解了这个问题,而这篇论文并没有提到这个问题,更没有涉及到解决办法。我猜这是因为Freebase中的实体对和关系主要就是从Wikipedia中抽取出来的,而且关系属于比较典型的关系。
这点就成了后续远程监督关系抽取算法的一个改进方向,后面的研究人员提出了利用多实例学习和句子级别的注意力机制来解决这个问题。
问题2:特征工程构建,论文中用到了三种特征,貌似一顿操作猛如虎,但实际上构造这些特征非常繁琐,而且词性标注和依存句法分析依赖于NLP工具库,因此工具库在标注和解析中所产生的误差,自然会影响到文本特征的准确性,这种错误会传播到关系抽取模型中,错误的传播和积累降低模型性能。
这点也是后续研究的一个改进方向,后面的研究人员用神经网络作为特征提取器,代替人工提取的特征,并用词嵌入作为文本特征。
2. PCNN
论文:《Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks》
2.1 介绍
模型PCNN(Piecewise Convolutional Neural Networks),是用神经网络结合远程监督做关系抽取的扛鼎之作,可以解决上述两个问题:
- 本文将远程监督学习看作是一个多实例学习问题,用于解决第一个问题。
- 然后使用CNN模型自动学习文本特征,从而解决第二个问题。
(1)用PCNNs的神经网络结构自动学习文本特征,代替复杂的人工构造特征和特征处理流程。
PCNNs全名为Piecewise Convolutional Neural Networks,包含两层含义:Piecewise max pooling layer和Convolutional Neural Networds,对应到最大池化层和卷积层。用卷积神经网络强大的特征提取功能,能自动抽取丰富的特征,并且减少人工设计特征和NLP工具库抽取特征带来的误差。省时省力又能减少误差,何乐不为。
(2)设计了分段最大池化层(三段,Piecewise max pooling layer)代替一般的最大池化层,提取更丰富的文本结构特征。
一般的最大池化层直接从多个特征中选出一个最重要的特征,实际上是对卷积层的输出进行降维,但问题是维度降低过快,无法获取实体对在句子中所拥有的结构信息。
如下图,把一个句子按两个实体的位置切分为前、中、后三部分的词语,然后将一般的最大池化层相应地划分为三段最大池化层,从而获取句子的结构信息。
将句子划分为三部分:左边部分包含了左边实体信息,中间部分包含了两个实体信息,右边部分包含了右边实体信息。对全局进行池化操作无法捕获这种结构信息,因此作者分别对三部分进行池化操作。
(3)用多实例学习(Multi-Instances Learning)解决远程监督做自动标注的错误标注问题。
远程监督本质上是一种自动标注样本的方法,但是它的假设太强了,会导致错误标注样本的问题。
论文认为远程监督做关系抽取类似于多实例问题(Multi-Instances Problem)。知识图谱中一个实体对(论文中的Bag)的关系是已知的,而外部语料库中包含该实体对的多个句子(Instances of Bag),表达的关系是未知的(自动标注的结果未知真假),那么多实例学习的假设是:这些句子中至少有一个句子表达了已知的关系。于是从多个句子中只挑出最重要的一个句子,作为这个实体对的样本加入到训练中。
本篇论文设计了一个目标函数,在学习过程中,把句子关系标签的不确定性考虑进去,从而缓解错误标注的问题。
总结一下,本文的亮点在于把多实例学习、卷积神经网络和分段最大池化结合起来,用于缓解句子的错误标注问题和人工设计特征的误差问题,提升关系抽取的效果。
2.2 模型结构
本文提出的PCNN模型如下图所示:
模型包含四部分:Vector representation,Convolution,Piecewise maxpooling,softmax classifier。
Vector representation将词转化为词向量,并添加位置向量,图中position表示位置向量。这里的位置是每个词相对两个实体的相对位置。例如,下图中son相对两个实体的位置分别为p1=3和p2=-2。位置向量随机初始化,拼接[p1, p2]作为son的位置向量。
2.2.1 文本特征表示
使用词嵌入(Word Embeddings)和位置特征嵌入(Position Embeddings),然后把句子中每个词的这两种特征拼接起来。
词嵌入使用的是预训练的Word2Vec词向量,用Skip-Gram模型来训练。
位置特征是某个词与两个实体的相对距离,位置特征嵌入就是把两个相对距离转化为向量,再拼接起来。
比如下面这个句子中,单词son和实体Kojo Annan的相对距离为3,和实体Kofi Annan的相对距离为-2。
假设词嵌入的维度是dw,位置特征嵌入的维度是dp,那么每个词的特征向量的维度就是:d=dw+2*dp。假设句子长度为s,那么神经网络的输入就是s×d维的矩阵。
2.2.2 卷积
假设卷积核的宽为w(滑动窗口),长为d(词的特征向量维度),那么卷积核的大小为W=w * d。步长为1。
输入层为q = s×d维的矩阵,卷积操作就是每滑动一次,就用卷积核W与q的w-gram做点积,得到一个数值。
卷积完成后会得到(s+w-1)个数值,也就是长度为(s+w-1)的向量c。文本的卷积和图像的卷积不同,只能沿着句子的长度方向滑动,所以得到的是一个向量而不是矩阵。
为了得到更丰富的特征,使用了n个卷积核W={W1, W2, ... Wn},第i个卷积核滑动一次得到的数值为:
最终,卷积操作完成后会输出一个矩阵C:
2.2.3 分段最大池化
把每个卷积核得到的向量ci按两个实体划分为三部分{ci1, ci2, ci3},分段最大池化也就是分别取每个部分的最大值:
那么对于每个卷积核得到的向量ci,我们都能得到一个3维的向量pi。为了便于下一步输入到softmax层,把n个卷积核经过池化后的向量pi拼接成一个向量p1:n,长度为3n。
最后用tanh激活函数进行非线性处理,得到最终的输出:
2.2.4 softmax多分类
把池化层得到的g输入到softmax层,计算属于每种关系的概率值。论文中使用了Dropout正则化,把池化层的输出g以r的概率随机丢弃,得到的softmax层的输出为:
输出的向量是关系的概率分布,长度为关系的种类(n1)。概率值最大的关系就是句子中的实体对被预测的关系。
2.3 多实例学习的过程
我们知道一般神经网络模型的套路是,batch-size个句子经过神经网络的sotfmax层后,得到batch-size个概率分布,然后与关系标签的one-hot向量相比较,计算交叉熵损失,最后进行反向传播。因此上述PCNN 网络结构的处理流程仅是一次正向传播的过程。
PCNN 结合多实例学习的做法则有些差别,目标函数仍然是交叉熵损失函数,但是基于实体对级别(论文中的bags)去计算损失,而不是基于句子级别(论文中的instances)。这是什么意思呢?
对照上面的图,计算交叉熵损失分为两步:
第一步,对于每个实体对,会有很多包含该实体对的句子(qi个),每个句子经过softmax层都可以得到一个概率分布,进而得到预测的关系标签和概率值。为了消除错误标注样本的影响,从这些句子中仅挑出一个概率值最大的句子和它的预测结果,作为这个实体对的预测结果,用于计算交叉熵损失。比如上面的例子中,挑出了第二个句子。公式为:
第二步,如果一个batch-size有T个实体对,那么用第一步挑选出来的T个句子,计算交叉熵损失:
最后用梯度下降法求出梯度,并进行误差反向传播。
如下是算法的伪代码,θ是PCNN的参数,Eq.(9)是第一步中的公式。
2.3 实验细节
2.3.1 数据集和评估方法
知识图谱为Freebase,外部文档库为NYT。把NYT文档库中2005-2006年的句子作为训练集,2007年的句子作为测试集。
评估方法沿用第一篇论文中的方法,留出法和人工校验相结合。
2.3.2 词嵌入和调参
(1)预训练的词向量方面,本文用Skip-Gram模型和NYT文档库训练了50维的词向量。
(2)位置特征嵌入使用随机初始化的向量,维度为5。
(3)调参方面,PCNN网络结构中有两个参数比较重要:卷积核的滑动窗口大小和卷积核的个数。本文使用网格搜索,最终确定滑动窗口为3,卷积核个数为230。
模型的其他参数如下:
2.3.3 模型评估结果
(1)对留出法和人工校验法的说明
使用留出法和人工校验法来评估模型的效果。
留出法:做法是把Freebase中一半的实体对用于训练,一半的实体对用于测试。多分类模型训练好之后,对外部文档库NYT中的测试集进行预测,得到测试集中实体对的关系标签。从新发现的实体中选择概率最大的N个,如果其中有n个出现在Freebase的held-out集中,那么准确率为n/N,而不在Freebase的held-out集中的实体对就视为不存在关系。
可是由于Freebase中的实体对太少了,新发现的、不在Freebase里的实体对并非真的不存在关系,这就会出现假负例(False Negatives)的问题,低估了准确率。
所以人工校验的方法是对留出法的一个补充:
人工校验法:对于那些新发现的、不在Freebase测试集中的实体对(一个实体不在或者两个实体都不在)进行检查,计算查准率。所以留出法和人工校验要评估的两个新实体对集合是没有交集的。具体做法是从这些新实体对中选择概率值最高的前N个,然后人工检查其中关系标签正确的实体对,如果有n个,那么查准率为n/N。(???)
(2)卷积神经网络与人工构造特征的对比
首先把PCNNs结合多实例学习的远程监督模型(记为PCNNs+MIL),与人工构造特征的远程监督算法(记为Mintz)和多实例学习的算法(记为MultiR和MIML)进行比较。
从下面的实验结果中可以看到,无论是查准率还是查全率,PCNNs+MIL模型都显著优于其他模型,这说明用卷积神经网络作为自动特征抽取器,可以有效降低人工构造特征和NLP工具提取特征带来的误差。
(3)分段最大池化和多实例学习的有效性
将分段最大池化和普通的最大池化的效果进行对比(PCNNs VS CNNs),将结合多实例学习的卷积网络与单纯的卷积网络进行对比(PCNNs+MIL VS PCNNs)。
可以看到,分段最大池化比普通的最大池化效果更好,表明分段最大池化可以抽取更丰富的结构特征。把多实例学习加入到卷积网络中,效果也有一定的提升,表明多实例学习可以缓解样本标注错误的问题。
2.4 评价
这篇论文中,分段最大池化的奇思妙想来自于传统人工构造特征的思想,而多实例学习的引入缓解了第一篇论文中的样本错误标注问题。这篇论文出来以后是当时的SOTA。
不足之处在于,多实例学习仅从包含某个实体对的多个句子中,挑出一个最可能的句子来训练,这必然会损失大量的信息。所以有学者提出用句子级别的注意力机制来解决这个问题。
3. 句子级别注意力
论文:《Neural Relation Extraction with Selective Attention over Instances》
第三篇论文是《Neural Relation Extraction with Selective Attention over Instances》,这篇论文首次把注意力机制引入到了关系抽取的远程监督算法中,刷新了当时的SOTA。论文作者中有知乎网红刘知远老师。
3.1 论文简介
这篇论文要解决的问题,就是多实例学习会遗漏大量信息的问题。所以这篇论文用句子级别的注意力机制代替多实例学习,对于包含某实体对的所有句子,给每一个句子计算一个注意力得分,动态地降低标注错误的样本的得分,再进行加权求和,从而充分利用所有句子的信息。
多实例学习相当于硬注意力机制(Hard Attention),而我们耳熟能详的以及论文中用到的注意力机制是选择性注意力机制(Selective Attention)或者说软注意力机制(Soft Attention),所以多实例学习其实是选择性注意力机制的特殊情况(只有一个句子的权重为1,其他全为0)。
3.2 模型介绍
模型主要分为两个部分:句子编码器和注意力层。
1、句子编码器
句子编码器就是上一篇论文中的PCNN或CNN网络结构,由卷积神经网络的输入层、卷积层、池化层、非线性映射层(或者说激活函数)构成。
文本特征同样用词嵌入和位置特征嵌入,池化层用普通的最大池化或者分段最大池化。
因此,本文的句子编码器部分输出的是一个句子经过最大池化并且非线性激活后的特征向量,用于输入到注意力层。这部分和上一篇论文基本相同,无须赘述。
2、注意力层
句子编码器的作用是抽取一个句子的特征,得到一个特征向量。如果外部文档库中包含某实体对的句子有n条,那么经过句子编码器的处理后,可以得到n个特征向量:x1, x2, ..., xn。在句子编码器和softmax层之间加一个选择性注意力层,那么处理的步骤如下:
第一步:计算句子的特征向量xi和关系标签r的匹配度ei,并计算注意力得分αi。公式中的r是关系标签的向量表示。
第二步:计算该实体对的特征向量s。该实体对的特征向量是所有句子的特征向量xi的加权之和,权重为每个句子的注意力得分αi。
第三步:经过softmax层得到该实体对关于所有关系的概率分布,概率值最大的关系为预测的关系标签。
3、误差反向传播
如果一个batch-size有s个实体对,那么用s个实体对的概率分布,计算交叉熵损失:
最后用梯度下降法求出梯度,并进行误差反向传播。
3.3 实验细节
1、数据集和评估方法
数据集和上一篇论文一样,知识图谱是Freebase,外部的文档库是NYT(New York Times corpus)。划分数据集的做法也一致。
评估方法采用留出法,不再赘述。
2、词嵌入和参数设置
用NYT数据集训练Word2Vec,用网格搜索(Grid Search)确定参数。
3、选择性注意力机制的效果
句子编码器分别采用CNN和PCNN的网络结构,PCNN+ONE表示PCNN结合多实例学习的模型,PCNN+ATT表示论文中的选择性注意力模型,PCNN+AVE表示对各句子求算术平均的模型(每个句子的注意力得分相同)。
实验结果表明,无论是CNN还是PCNN,加入注意力机制的模型在查准率和查全率上,都显著优于其他模型。
论文还有其他更细致的实验,欲知详情,请自行翻看论文。
3.4 评价
这篇论文把注意力机制和CNN句子编码器结合,用来解决多实例学习存在的遗漏信息问题,更好地缓解了远程监督算法中的样本错误标注问题。
注意力机制在NLP任务中的效果是有目共睹的,PCNN+ATT的模型看起来非常漂亮,那么有什么改进方向呢?
4. 总结
关系抽取可以分为流水线式抽取(Pipline)和联合抽取(Joint Extraction)两种,流水线式抽取就是把关系抽取的任务分为两个步骤:首先做实体识别,再抽取出两个实体的关系;而联合抽取的方式就是一步到位,同时抽取出实体和关系。
因此上面介绍的三篇论文中的模型都属于流水线式抽取的方法,实体识别和关系抽取的模型是分开的,那么实体识别中的误差会影响到关系抽取的效果。而联合抽取用一个模型直接做到了实体识别和关系抽取,是一个值得研究的方向。
关系抽取系列文章: