[NLP论文阅读] A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING
论文原文:A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING
引言
这篇文章提出了使用self-attention技术来生成可解释句子向量的模型。通常我们使用向量(vector)来表示单词、短语或者句子向量,在这篇文章中,作者提出可以使用二维句子来表示句子,矩阵的每一行表示句子的不同部分。作者在3个不同的数据集上进行了3种不同的task,分别是author profiling,sentiment classification以及textual entailment,都取得了不错的效果。
模型
作者提出的模型主要由2部分组成。第1部分是一个双向LSTM,第2部分是self-attention mechanism,该机制提供了对LSTM的隐藏层状态进行加和的权重。
模型结构图如下a:
模型的输入:
输入的S进入一个双向LSTM,第t个单词对应的前向和后向隐藏状态计算方法如下:
然后将前向和后向的隐藏状态进行连接得到用于后续计算的
至此,BiLSTM的使命结束了。
上图中b部分就是用于生成self-attention的简单前馈神经网络:
其中,
至此,self-attention机制介绍完毕。
然后就可以得到句子表示
作者认为常见的向量表示只能表示句子中的某个特定component,那么如何全面的把句子的大部分甚至所有component都表现出来呢,那么一个很自然的想法就是把向量扩展成矩阵。所以我们不能只用单个attention,我们需要对每个component都提供一个attention,所以就要将a变成A。
如果我们需要对句子的r个component进行建模,那么只需要提供r个a,即一个r*2u的矩阵。为了得到这个矩阵,作者将参数
最终句子表示也从向量
至此,我们得到了矩阵级别的句子表示。
PENALIZATION TERM
作者在实验中发现,如果计算得到的attention句子A中有部分行的值相似的话,最终得到的句子表示矩阵中也会出现一些行的值是相似的,这样就让M变得冗余了。所以在设计网络的损失函数时,需要考虑加入penalization term来让模型得到的A的每一行的差别明显。
作者的设计是在loss加入这么一项:
其中,
设A是mxn的矩阵,其F范数定义为:
||A||F=∑i=1m∑j−1n|aij|2−−−−−−−−−−⎷
所以在模型中,最终的损失函数为cost=交叉熵+
实验结果
作者使用了三个不同的数据集:
the Age dataset:一个推特的推文数据集,推文中有对用户年龄的描述,作者将其分为了5个年龄段,该数据上进行的任务是根据推文判断用户年龄段。分类问题。
the Yelp dataset:一个用于情感分类任务的数据集,包含2.7M个评论,分类任务是根据输入的评论推测出评论对应的星数(从1星到5星)。
the Stanford Natural Language Inference(SNLI) Corpus:一个用于关系推理的数据集,其实也是一个分类任务,根据输入的句子对,推测出对应的关系。
实验结果如下:
Models | Yelp | Age |
---|---|---|
BiLSTM+Max Pooling+MLP | 61.99% | 77.40% |
CNN+Max Pooling+MLP | 62.05% | 78.15% |
Our Model | 64.21% | 80.45% |
推理任务的实验结果:
Model | Test Accuracy(%) |
---|---|
300D LSTM encoders (Bowman et al., 2016) | 80.6 |
600D (300+300) BiLSTM encoders (Liu et al., 2016b) | 83.3 |
300D Tree-based CNN encoders (Mou et al., 2015a) | 82.1 |
300D SPINN-PI encoders (Bowman et al., 2016) | 83.2 |
300D NTI-SLSTM-LSTM encoders (Munkhdalai & Yu, 2016a) | 83.4 |
1024D GRU encoders with SkipThoughts pre-training (Vendrov et al., 2015) | 81.4 |
300D NSE encoders (Munkhdalai & Yu, 2016b) | 84.6 |
Our Method | 84.4 |
探索型的实验
在这个模块主要对penalization term和r的参数设置进行了探索,不多说直接上图。
1. penalization term系数的影响
Penalization coefficient | Yelp | Age |
---|---|---|
1.0 | 64.21% | 80.45% |
0.0 | 61.74% | 79.27% |
2. r的大小(1-30)选择
另外,这篇论文有开源的代码,明天学习一下。
我的开源实现:A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING
2017.10.25 上海。