(转)关系抽取之远程监督算法

天涯浪子 提交于 2019-12-01 10:08:12

一、 关系抽取综述 

二、 远程监督关系抽取算法的滥觞 

三、 多实例学习和分段最大池化 

四、 句子级别的注意力机制 

 

一、关系抽取综述

  信息抽取是自然语言处理中非常重要的一块内容,包括实体抽取(命名实体识别,Named Entity Recognition)、关系抽取(Relation Extraction)和事件抽取(Event Extraction)。

  这次介绍的关系抽取属于自然语言理解(NLU)的范畴,也是构建和扩展知识图谱的一种方法。

  关系抽取理解起来也比较简单,比如下面图片中的第一句话:

  He was in Tennessee.

  首先做命名实体识别,识别出He(PER)和Tennessee(GPE)两个实体,然后找出两个实体之间的关系为:Physical-Located,最后可以把抽取出来的关系表示为三元组的形式:(HePER, Physical-Located, TennesseeGPE),或者Physical-Located(HePER, TennesseeGPE)。

  可见关系抽取包含命名实体识别在内,在技术实现上更复杂。

  关系抽取从流程上,可以分为流水线式抽取(Pipline)和联合抽取(Joint Extraction)两种,流水线式抽取就是把关系抽取的任务分为两个步骤:首先做实体识别,再抽取出两个实体的关系;而联合抽取的方式就是一步到位,同时做好了实体和关系的抽取。流水线式抽取会导致误差在各流程中传递和累加,而联合抽取的方式则实现难度更大。

  关系抽取从实现的算法来看,主要分为四种:

  1、手写规则(Hand-Written Patterns);

  2、监督学习算法(Supervised Machine Learning);

  3、半监督学习算法(Semi-Supervised Learning,比如Bootstrapping和Distant Supervision);

  4、无监督算法。

  本文的主人公是远程监督算法(Distant Supervision),这是一种半监督学习算法。其他的方法大致了解一下,有助于理解,为什么相对而言,远程监督做关系抽取是一种比较可行的方法。

  (一)手写规则模板的方法

  1、例子:

  有种关系叫做上下位关系,比如hyponym(France; European countries)。从下面两个句子中都可以抽取出这种关系:

  European countries, especially France, England, and Spain...

  European countries, such as France, England, and Spain...

  两个实体之间的especially和such as可以看做这种关系的特征。观察更多表达这种关系的句子,我们就可以构造如下的规则模板,来抽取构成上下位关系的实体,从而发现新的三元组。

 

  2、优点和缺点:

  优点是抽取的三元组查准率(Precision)高,尤其适合做特定领域的关系抽取;缺点是查全率(Recall)很低,也就是说查得准,但是查不全,而且针对每一种关系都需要手写大量的规则,比较惨。

  (二)监督学习的方法

  监督学习的方法也就是给训练语料中的实体和关系打上标签,构造训练集和测试集,再用传统机器学习的算法(LR,SVM和随机森林等)或神经网络训练分类器。

  1、机器学习和深度学习方法

  对于传统的机器学习方法,最重要的步骤是构造特征。可以使用的特征有:

  (1)词特征:实体1与实体2之间的词、前后的词,词向量可以用Bag-of-Words结合Bigrams等。

  (2)实体标签特征:实体的标签。

  (3)依存句法特征:分析句子的依存句法结构,构造特征。这个不懂怎么弄。

  人工构造特征非常麻烦,而且某些特征比如依存句法分析,依赖于NLP工具库,比如HanLP,工具带来的误差不可避免会影响特征的准确性。

  用端到端的深度学习方法就没这么费劲了。比如使用CNN或BI-LSTM作为句子编码器,把一个句子的词嵌入(Word Embedding)作为输入,用CNN或LSTM做特征的抽取器,最后经过softmax层得到N种关系的概率。这样省略了特征构造这一步,自然不会在特征构造这里引入误差。

  2、监督学习的优缺点

  监督学习的优点是,如果标注好的训练语料足够大,那么分类器的效果是比较好的,可问题是标注的成本太大了。

  (三)半监督

  鉴于监督学习的成本太大,所以用半监督学习做关系抽取是一个很值得研究的方向。

  半监督学习的算法主要有两种:Bootstrapping和Distant Supervision。Bootstrapping不需要标注好实体和关系的句子作为训练集,不用训练分类器;而Distant Supervision可以看做是Bootstrapping和Supervise Learning的结合,需要训练分类器。

  这里介绍Bootstrapping的思想,Distant Supervision作为主人公,在后面的部分详细介绍。

  1、例子

  Bootstrapping算法的输入是拥有某种关系的少量实体对,作为种子,输出是更多拥有这种关系的实体对。敲黑板!不是找到更多的关系,而是发现拥有某种关系的更多新实体对。

  怎么做的呢?举个栗子,“创始人”是一种关系,如果我们已经有了一个小型知识图谱,里面有3个表达这种关系的实体对:(严定贵,你我贷),(马云,阿里巴巴),(雷军,小米)。

  第一步:在一个大型的语料集中去找包含某一实体对(3个中的任意1个)的句子,全部挑出来。比如:严定贵于2011年创立了你我贷;严定贵是你我贷的创始人;在严定贵董事长的带领下,嘉银金科赴美上市成功。

  第二步:归纳实体对的前后或中间的词语,构造特征模板。比如:A 创立了 B;A 是 B 的创始人;A 的带领下,B。

  第三步:用特征模板去语料集中寻找更多的实体对,然后给所有找到的实体对打分排序,高于阈值的实体对就加入到知识图谱中,扩展现有的实体对。

  第四步:回到第一步,进行迭代,得到更多模板,发现更多拥有该关系的实体对。

  细心的小伙伴会发现,不是所有包含“严定贵”和“你我贷”的句子都表达了“创始人”这种关系啊,比如:“在严定贵董事长的带领下,嘉银金科赴美上市成功”——这句话就不是表达“创始人”这个关系的。某个实体对之间可能有很多种关系,哪能一口咬定就是知识图谱中已有的这种关系呢?这不是会得到错误的模板,然后在不断的迭代中放大错误吗?

  没错,这个问题叫做语义漂移(Semantic Draft),一般有两种解决办法:

  一是人工校验,在每一轮迭代中观察挑出来的句子,把不包含这种关系的句子剔除掉。

  二是Bootstrapping算法本身有给新发现的模板和实体对打分,然后设定阈值,筛选出高质量的模板和实体对。具体的公式可以看《Speech and Language Processing》(第3版)第17章。

  2、Bootstrapping的优缺点

  Bootstrapping的缺点一是上面提到的语义漂移问题,二是查准率会不断降低而且查全率太低,因为这是一种迭代算法,每次迭代准确率都不可避免会降低,80%---->60%---->40%---->20%...。所以最后发现的新实体对,还需要人工校验。

  (四)无监督

  半监督的办法效果已经勉强,无监督的效果就更差强人意了,这里就不介绍了。

二、远程监督关系抽取算法的滥觞

  第一篇要介绍的论文是《Distant supervision for relation extraction without labeled data》,斯坦福大学出品,把远程监督的方法用于关系抽取。研究关系抽取的远程监督算法,不得不提这篇论文。

  (一)远程监督的思想

  这篇论文首先回顾了关系抽取的监督学习、无监督学习和Bootstrapping算法的优缺点,进而结合监督学习和Bootstrapping的优点,提出了用远程监督做关系抽取的算法。

  远程监督算法有一个非常重要的假设:对于一个已有的知识图谱(论文用的Freebase)中的一个三元组(由一对实体和一个关系构成),假设外部文档库(论文用的Wikipedia)中任何包含这对实体的句子,在一定程度上都反映了这种关系。基于这个假设,远程监督算法可以基于一个标注好的小型知识图谱,给外部文档库中的句子标注关系标签,相当于做了样本的自动标注,因此是一种半监督的算法

  具体来说,在训练阶段,用命名实体识别工具,把训练语料库中句子的实体识别出来。如果多个句子包含了两个特定实体,而且这两个实体是Freebase中的实体对(对应有一种关系),那么基于远程监督的假设,认为这些句子都表达了这种关系。于是从这几个句子中提取文本特征,拼接成一个向量,作为这种关系的一个样本的特征向量,用于训练分类器。

  论文中把Freebase的数据进行了处理,筛选出了94万个实体、102种关系和180万实体对。下面是实体对数量最多的23种关系。

  关系种类相当于分类的类别,那么有102类;每种关系对应的所有实体对就是样本;从Wikipedia中所有包含某实体对的句子中抽取特征,拼接成这个样本的特征向量。最后训练LR多分类器,用One-vs-Rest,而不是softmax,也就是训练102个LR二分类器——把某种关系视为正类,把其他所有的关系视为负类。

  因为远程监督算法可以使用大量无标签的数据,Freebase中的每一对实体在文档库中可能出现在多个句子中。从多个句子中抽出特征进行拼接,作为某个样本(实体对)的特征向量,有两个好处:

  一是单独的某个句子可能仅仅包含了这个实体对,并没有表达Freebase中的关系,那么综合多个句子的信息,就可以消除噪音数据的影响。

  二是可以从海量无标签的数据中获取更丰富的信息,提高分类器的准确率。

  但是问题也来了,这个假设一听就不靠谱!哪能说一个实体对在Freebase中,然后只要句子中出现了这个实体对,就假定关系为Freebase中的这种关系呢?一个实体对之间的关系可能有很多啊,比如马云和阿里巴巴的关系,就有“董事长”、“工作”等关系,哪能断定就是“创始人”的关系呢?

  这确实是个大问题,在本篇论文中也没有提出解决办法。

  (二)分类器的特征

  论文中使用了三种特征:词法特征(Lexical features)、句法特征(Syntactic features)和实体标签特征(Named entity tag features)。

  1、词法特征

  词法特征描述的是实体对中间或两端的特定词汇相关的信息。比如有:

  • 两个实体中间的词语和词性
  • 实体1左边的k个词语和词性,k取{0,1,2}
  • 实体2右边的k个词语和词性,k取{0,1,2}

  然后把这些特征表示成向量再拼接起来。比如用词袋模型,把词语和词性都表示为向量。

  2、句法特征

  论文中的句法特征就是对句子进行依存句法分析(分析词汇间的依存关系,如并列、从属、递进等),得到一条依存句法路径,再把依存句法路径中的各成分作为向量,拼接起来。

  如下为一个句子的依存句法路径,我不太懂,不多说。

  3、命名实体标签特征

  论文中做命名实体识别用的是斯坦福的NER工具包。把两个实体的标签也作为特征,拼接起来。

  总结一下,论文中使用的特征不是单个特征,而是多种特征拼接起来的。有多个句子包含某实体对,可以从每个句子中抽取出词法特征、句法特征和实体特征,拼接起来,得到一个句子的特征向量,最后把多个句子的特征向量再拼接起来,得到某实体对(一个样本)的特征向量。

  不过作者为了比较词法特征和句法特征的有效性,把特征向量分为了3种情况:只使用词法特征,只使用句法特征,词法特征与句法特征拼接。

   (三)实验细节

  1、数据集说明

  知识图谱或者说标注数据为Freebase,非结构化文本库则是Wikipedia中的文章。

  论文中把Freebase的三元组进行了筛选,筛选出了94万个实体、102种关系和相应的180万实体对。用留出法进行自动模型评估时,一半的实体对用于训练,一半的实体对用于模型评估。

  同样对Wikipedia中的文章进行筛选,得到了180万篇文章,平均每篇文章包含约14.3个句子。从中选择80万条句子作为训练集,40万条作为测试集。

  2、构造负样本

  由于对于每种关系,都要训练一个LR二分类器,所以需要构造负样本。这里的负样本不是其他101种关系的训练样本,而是这样的句子:从训练集中的句子中抽取实体对,如果实体对不在Freebase中,那么就随机挑选这样的句子就作为负样本。

  3、训练过程

  LR分类器以实体对的特征向量为输入,输出关系名和概率值。每种关系训练一个二分类器,一共训练102个分类器。

  训练好分类器后,对测试集中的所有实体对的关系进行预测,并得到概率值。然后对所有实体对按概率值进行降序排列,从中挑选出概率最高的N个实体对(概率值大于0.5),作为发现的新实体对。

  4、测试方法和结论

  测试的指标采用查准率,方法采用了留出法(自动评估)和人工评估两种方法。留出法的做法是,把Freebase中的180万实体对的一半作为测试集(另一半用于训练)。新发现的N个实体对中,如果有n个实体对在Freebase的测试集中,那么查准率为n/N。人工评估则采用多数投票的方法。

  模型评估的结果表明,远程监督是一种较好的关系抽取算法。在文本特征的比较上,词法特征和句法特征拼接而成的特征向量,优于单独使用其中一种特征的情况。此外,句法特征在远程监督中比词法特征更有效,尤其对于依存句法结构比较短而实体对之间的词语非常多的句子。

  (四)评价

  这篇论文把远程监督的思想引入了关系抽取中,充分利用未标注的非结构化文本,从词法、句法和实体三方面构造特征,最后用留出法和人工校验两种方法进行模型评估,是一种非常完整规范的关系抽取范式。 

  不足之处有两点:

  第一个是前面所提到的问题,那就是远程监督所基于的假设是一个非常强的假设。哪能说一个实体对在Freebase中存在一种关系,那么只要外部语料库中的句子中出现了这个实体对,就假定关系为Freebase中的关系呢?还可能是其他关系啊?

  Bootstrapping中也有这个问题,称为语义漂移问题,但Bootstrapping本身通过给新发现的规则模板和实体对打分,在一定程度上缓解了这个问题,而这篇论文并没有提到这个问题,更没有涉及到解决办法。我猜这是因为Freebase中的实体对和关系主要就是从Wikipedia中抽取出来的,而且关系属于比较典型的关系。

  这点就成了后续远程监督关系抽取算法的一个改进方向,后面的研究人员提出了利用多实例学习和句子级别的注意力机制来解决这个问题。

  第二个是论文中用到了三种特征,貌似一顿操作猛如虎,但实际上构造这些特征非常繁琐,而且词性标注和依存句法分析依赖于NLP工具库,因此工具库在标注和解析中所产生的误差,自然会影响到文本特征的准确性。

  这点也是后续研究的一个改进方向,后面的研究人员用神经网络作为特征提取器,代替人工提取的特征,并用词嵌入作为文本特征。

三、多实例学习和分段最大池化

  第二篇论文是《Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks》,是用神经网络结合远程监督做关系抽取的扛鼎之作。

  (一)论文的贡献

  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),表达的关系是未知的(自动标注的结果未知真假),那么多实例学习的假设是:这些句子中至少有一个句子表达了已知的关系。于是从多个句子中只挑出最重要的一个句子,作为这个实体对的样本加入到训练中。

  本篇论文设计了一个目标函数,在学习过程中,把句子关系标签的不确定性考虑进去,从而缓解错误标注的问题。

  总结一下,本文的亮点在于把多实例学习、卷积神经网络和分段最大池化结合起来,用于缓解句子的错误标注问题和人工设计特征的误差问题,提升关系抽取的效果。

  (二)研究方法

  本文把PCNNs的神经网络结构和多实例学习结合,完成关系抽取的任务。

  1、PCNNs网络的处理流程

  PCNNs网络结构处理一个句子的流程分为四步:特征表示、卷积、分段最大池化和softmax分类。具体如下图所示。

(1)文本特征表示

  (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)卷积

  假设卷积核的宽为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:

  (3)分段最大池化

  把每个卷积核得到的向量ci按两个实体划分为三部分{ci1, ci2, ..., ci3},分段最大池化也就是分别取每个部分的最大值:

  那么对于每个卷积核得到的向量ci,我们都能得到一个3维的向量pi。为了便于下一步输入到softmax层,把n个卷积核经过池化后的向量pi拼接成一个向量p1:n,长度为3n。

  最后用tanh激活函数进行非线性处理,得到最终的输出:

  (4)softmax多分类

  把池化层得到的g输入到softmax层,计算属于每种关系的概率值。论文中使用了Dropout正则化,把池化层的输出g以r的概率随机丢弃,得到的softmax层的输出为:

 

  输出的向量是关系的概率分布,长度为关系的种类(n1)。概率值最大的关系就是句子中的实体对被预测的关系。

  2、多实例学习的过程

  我们知道一般神经网络模型的套路是,batch-size个句子经过神经网络的sotfmax层后,得到batch-size个概率分布,然后与关系标签的one-hot向量相比较,计算交叉熵损失,最后进行反向传播。因此上述PCNNs网络结构的处理流程仅是一次正向传播的过程。

  PCNNs结合多实例学习的做法则有些差别,目标函数仍然是交叉熵损失函数,但是基于实体对级别(论文中的bags)去计算损失,而不是基于句子级别(论文中的instances)。这是什么意思呢?

  对照上面的图,计算交叉熵损失分为两步:

  第一步,对于每个实体对,会有很多包含该实体对的句子(qi个),每个句子经过softmax层都可以得到一个概率分布,进而得到预测的关系标签和概率值。为了消除错误标注样本的影响,从这些句子中仅挑出一个概率值最大的句子和它的预测结果,作为这个实体对的预测结果,用于计算交叉熵损失。比如上面的例子中,挑出了第二个句子。公式为:

  第二步,如果一个batch-size有T个实体对,那么用第一步挑选出来的T个句子,计算交叉熵损失:

  最后用梯度下降法求出梯度,并进行误差反向传播。

  如下是算法的伪代码,θ是PCNNs的参数,Eq.(9)是第一步中的公式。

 

  (四)实验细节

  1、数据集和评估方法

  知识图谱为Freebase,外部文档库为NYT。把NYT文档库中2005-2006年的句子作为训练集,2007年的句子作为测试集。

  评估方法沿用第一篇论文中的方法,留出法和人工校验相结合。

  2、词嵌入和调参

  预训练的词向量方面,本文用Skip-Gram模型和NYT文档库训练了50维的词向量。

  位置特征嵌入使用随机初始化的向量,维度为5。

  调参方面,PCNNs网络结构中有两个参数比较重要:卷积核的滑动窗口大小和卷积核的个数。本文使用网格搜索,最终确定滑动窗口为3,卷积核个数为230。

  模型的其他参数如下:

  3、模型评估结果

  (1)对留出法和人工校验法的说明

  使用留出法和人工校验法来评估模型的效果。这里对这两种评估方法进行补充说明:

  留出法的做法是把Freebase中一半的实体对用于训练,一半的实体对用于测试。多分类模型训练好之后,对外部文档库NYT中的测试集进行预测,得到测试集中实体对的关系标签。如果新发现的实体对有N个,其中有n个出现在Freebase的测试集中,那么准确率为n/N,而不在Freebase测试集中的实体对就视为不存在关系。可是由于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)。

  可以看到,分段最大池化比普通的最大池化效果更好,表明分段最大池化可以抽取更丰富的结构特征。把多实例学习加入到卷积网络中,效果也有一定的提升,表明多实例学习可以缓解样本标注错误的问题。

  (四)评价

  这篇论文中,分段最大池化的奇思妙想来自于传统人工构造特征的思想,而多实例学习的引入缓解了第一篇论文中的样本错误标注问题。这篇论文出来以后是当时的SOTA。

  不足之处在于,多实例学习仅从包含某个实体对的多个句子中,挑出一个最可能的句子来训练,这必然会损失大量的信息。所以有学者提出用句子级别的注意力机制来解决这个问题。

四、句子级别的注意力机制

  第三篇论文是《Neural Relation Extraction with Selective Attention over Instances》,这篇论文首次把注意力机制引入到了关系抽取的远程监督算法中,刷新了当时的SOTA。论文作者中有知乎网红刘知远老师。

  (一)论文的贡献

  这篇论文要解决的问题,就是多实例学习会遗漏大量信息的问题。所以这篇论文用句子级别的注意力机制代替多实例学习,对于包含某实体对的所有句子,给每一个句子计算一个注意力得分,动态地降低标注错误的样本的得分,再进行加权求和,从而充分利用所有句子的信息。

  多实例学习相当于硬注意力机制(Hard Attention),而我们耳熟能详的以及论文中用到的注意力机制是选择性注意力机制(Selective Attention)或者说软注意力机制(Soft Attention),所以多实例学习其实是选择性注意力机制的特殊情况(只有一个句子的权重为1,其他全为0)。

  (二)模型介绍

  模型主要分为两个部分:句子编码器和注意力层。

  1、句子编码器

  句子编码器就是上一篇论文中的PCNN或CNN网络结构,由卷积神经网络的输入层、卷积层、池化层、非线性映射层(或者说激活函数)构成。

  文本特征同样用词嵌入和位置特征嵌入,池化层用普通的最大池化或者分段最大池化。

  因此,本文的句子编码器部分输出的是一个句子经过最大池化并且非线性激活后的特征向量,用于输入到注意力层。这部分和上一篇论文基本相同,无须赘述。

  2、注意力层

  句子编码器的作用是抽取一个句子的特征,得到一个特征向量。如果外部文档库中包含某实体对的句子有n条,那么经过句子编码器的处理后,可以得到n个特征向量:x1, x2, ..., xn。在句子编码器和softmax层之间加一个选择性注意力层,那么处理的步骤如下:

  第一步:计算句子的特征向量xi和关系标签r的匹配度ei,并计算注意力得分αi。公式中的r是关系标签的向量表示。

 

  第二步:计算该实体对的特征向量s。该实体对的特征向量是所有句子的特征向量xi的加权之和,权重为每个句子的注意力得分αi

 

  第三步:经过softmax层得到该实体对关于所有关系的概率分布,概率值最大的关系为预测的关系标签。

 

  3、误差反向传播

  如果一个batch-size有s个实体对,那么用s个实体对的概率分布,计算交叉熵损失:

  最后用梯度下降法求出梯度,并进行误差反向传播。

  (三)实验细节

  1、数据集和评估方法

  数据集和上一篇论文一样,知识图谱是Freebase,外部的文档库是NYT(New York Times corpus)。划分数据集的做法也一致。

  评估方法采用留出法,不再赘述。

  2、词嵌入和参数设置

  用NYT数据集训练Word2Vec,用网格搜索(Grid Search)确定参数。

  3、选择性注意力机制的效果

  句子编码器分别采用CNN和PCNN的网络结构,PCNN+ONE表示PCNN结合多实例学习的模型,PCNN+ATT表示论文中的选择性注意力模型,PCNN+AVE表示对各句子求算术平均的模型(每个句子的注意力得分相同)。

  实验结果表明,无论是CNN还是PCNN,加入注意力机制的模型在查准率和查全率上,都显著优于其他模型。

   论文还有其他更细致的实验,欲知详情,请自行翻看论文。

  (四)评价

  这篇论文把注意力机制和CNN句子编码器结合,用来解决多实例学习存在的遗漏信息问题,更好地缓解了远程监督算法中的样本错误标注问题。

  注意力机制在NLP任务中的效果是有目共睹的,PCNN+ATT的模型看起来非常漂亮,那么有什么改进方向呢?

  开头我们说了,关系抽取可以分为流水线式抽取(Pipline)和联合抽取(Joint Extraction)两种,流水线式抽取就是把关系抽取的任务分为两个步骤:首先做实体识别,再抽取出两个实体的关系;而联合抽取的方式就是一步到位,同时抽取出实体和关系。

  因此上面介绍的三篇论文中的模型都属于流水线式抽取的方法,实体识别和关系抽取的模型是分开的,那么实体识别中的误差会影响到关系抽取的效果。而联合抽取用一个模型直接做到了实体识别和关系抽取,是一个值得研究的方向。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!