笔记:Neural Relation Extraction with Selective Attention over Instances
Neural Relation Extraction with Selective Attention over Instances
作者:Lin.Y et al.ACL 2016.
目录
- Introduction
- Method
- Experiments
- Conclusion
- 参考
1 Introduction
发现问题即针对的问题--出发点:为了解决如关系抽取任务数据少的问题,有一种方法distant supervised 远程监督方法,可以快速获取大量样本,但ds会带来一个问题,根据其原理:由已知关系的实体对,将所有包含该实体对的句子的关系都标注为此关系,这样必然会有标错的句子即噪声样本,而噪声样本对系统性能影响不小,所以本文针对带噪声样本提出了一种解决办法--句子级别的基于attention的模型,来降低噪声对模型性能的影响。
同时本文主要也是在zeng.D.2015的基础上做的改进。接下来对照paper和代码简要介绍模型方法。
2 Method
整体结构如下图Figure1所示。
大致流程可以分为两个部分即句子编码器+针对多实例选择性的注意力:输入为sentence,以bag为基本单位,每个bag包含n个语句即\(x_1,x_2,...,x_n\)。之后经过CNN sentence encoder对每个句子进行语义信息提取得到句子的分布式表示,再然后对其进行加权处理后得到最终的bag_rep,交给全连接层做分类。
2.1 Sentence Encoder
先看图主要结构如下图Figure2.
如图2所示,将每个句子都转换为它的分布式表示\(\mathbf{X}\)。
首先,做预处理,(本文)使用word2vec_50d.txt,得到word2id、word_vec即获取word embedding表(包括手动设置padding、UNK 、pos embedding),同时本文设置了一个vacab词汇表,即加载训练集中所有句子(词之间以空格分隔)中的词,统计词频,在load_embedding时词频低于阈值则舍弃;同时根据已知的relation.json数据得到relation2id、id2relation表;以及设置相关的配置config,详见原文。
其次,使用CNN/PCNN(zeng.2015)对句子进行语义等信息提取。具体实现,文中是针对muti-instances,以一个bag为基本单位,bag可以看作一个字典,key即为三元组--e1、e2、relation,value即为所有包含此实体对且关系也为此关系的句子,每个bag对应一个label--label[i],在做encoder时将每个batch中所有bag的句子整合(\(batchsize\ast{bagsize\ast{L\ast{D}}\rightarrow{B\ast{L\ast{D}}}})\)输入到CNN(文中卷积核window=3,且进行了上下的padding,filtersize=(window, embedding dim),卷积后得到每个句子:(self.maxlen, 1) ),之后经过maxpool/piece wise maxpool得到最终的句子表示\(\mathbf{X}\).
其中,piece wise maxpool,如下图(zeng.2015)。piecewise maxpool具体实现详见代码--经过mask embedding以及维度各种变换+max选择得到。
最后,经过tanh()非线性变换得到最终的句子表示,reps(多个句子)。
2.2 Selective Attention over Instances
此想法的提出,主要对比zeng.2015.中虽然也是多实例处理降低噪声影响,但他的方法时只选择bag所有句子中与标签值关系最匹配的那个句子作为最终的bag关系预测,但这样放弃bag中的其他句子,其实就并没有充分利用所有信息,因此本文作者提出selective attention over instances ,给bag中所有句子分配sentence-level的权重,与关系r匹配的权重大,噪声权重小,做加权处理,既减少了噪声的影响,又充分利用了所有的信息。
首先PCNN+ATT中,attention的处理,主要根据以下公式。
如下公式Eq(5), 对于set vector :s即bag中所有句子的加权:bag_rep,通过对每个句子分配权重求和。
如下公式Eq(6), 对于权重的计算通过对e做softmax处理。
如下公式Eq(8),e是衡量每个句子与关系r的匹配程度的函数,其中A为对角矩阵,具体实现就用创建一个(1, self.filter_num*self.piece)大小的矩阵(虽然维度不是对角矩阵但在运算上效果适合实际对角矩阵运算结果一致的,torch.mul(X,A)),nn.Parameter使其加入计算图,需要计算它的梯度,进行更新即随着训练不断更新此参数矩阵。\(x_i\)为句子的表示,\(r\)为一个query vector,即与关系r相关联的一个表示,具体实现就用最后全连接分类器的dense层权重矩阵作为r,其实这不就是attention 中相似度计算方式的一种么,score = KWQ。
最后将bag_reps喂给全连接分类器得到一个N*N矩阵之后经过sofrmax处理得到probs,可以看作是已知标签和预测标签之间的相似度矩阵,因此本次多分类不同于其他多分类,并不是根据softmax分类器得到的分类结果作为最终的预测,而是以一个bag的句子为单位,预测bag 的标签,最后采用probs[label[i]]作为bag的最后预测输出,进行交叉熵损失计算,反向传播更新参数。以及也用于evalute评价指标的计算等,详见代码。
3 Experiments
文中多组针对不同模型的实验:CNN/PCNN + ONE/AVG/ATT。这里主要说明PCNN+ATT,详见原文。
4 Conclusion
“这篇论文很好地利用Attention对噪声数据做了抑制,同时也借由此利用更多正样例的信息。但同时,这篇论文的test部分的复杂度过高,如何更好地减少噪声数据的影响同时减少模型的复杂度,将是这一领域的研究重点\(^{[3]}\)。”
未来工作:也可用在其他多实例mul-instance学习任务中;将sentence-level Selective Attention over Instances用在其他关系抽取模型中。
要是能对句子的语义更好的提取会不会好一些。本文作者针对multi-instances 句子级别的attention,但对每个句子没做什么处理,就直接扔给CNN处理了,要是先对句子进行词级别的语义提取得到句子的表示,再把一个个句子喂给CNN,之后再做针对multi-instances 句子级别的attention会不会更好一些,比如用Zhou.P 2016\(^{[6]}\)这篇里面的对句子的处理。但复杂度会不会太高了。
补充:主要对照paper和代码、博客等,可能有的细节没完全理解正确。
参考
[1] Yankai Lin, Shiqi Shen, Zhiyuan Liu, Huanbo Luan, Maosong Sun.Neural Relation Extraction with Selective Attention over Instances.ACL 2016.
[2] Daojian Zeng, Kang Liu, Yubo Chen and Jun Zhao.Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks.EMNLP 2015.
[3] DataArk.远程监督关系分类泛读系列(一)—— Neural Relation Extraction with Selective Attention over Instances论文笔记.简书 2019.https://www.jianshu.com/p/84d4de030a2c.
[4] 时光杂货店.论文阅读 - 《Neural Relation Extraction with Selective Attention over Instances》.CSDN 2016.https://blog.csdn.net/xg123321123/article/details/53218870.
[5] onehaitao.distant-supervised-relation-extraction.Github.https://github.com/onehaitao/distant-supervised-relation-extraction.
[6] Peng Zhou, Wei Shi, Jun Tian, Zhenyu Qi?, Bingchen Li, Hongwei Hao, Bo Xu.Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification.ACL 2016.