论文原文:A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING
文章来源:ICLR 2017
学术机构:IBM Watson / Montreal Institute for Learning Algorithms (MILA), Universite de Montr ´ eal
[图片上传失败...(image-5466aa-1511364279565)]\ldots(n-k+1)}{k!})
[图片上传失败...(image-dc72b9-1511364279565)]\left(u+1\right)}+a\right]^{3/2}\right)])
摘要
目前对于一句话encoder时候往往是通过对所有的隐状态的n-gram进行average或max pooling或者是取最后时刻的隐状态作为一句话的表示,但是要使得模型从全部的隐状态中获取语义讯息很难并且是没有必要的。
本文提出一种self-attention机制來代替上述操作,用一个matrix表示一个句子,并且matrix中的每一个vector都是句子语义某一方面的表示,增强了sentence embedding的可解释性。同时也提出了对模型的一种特殊的正则化项,使得每一行的attention分布尽量集中在某些方面,同时行与行之间的分布尽可能差异化。
除此之外作者还展示将这些attention进行了可视化展示。我们评估我们的模型在3个不同的任务:笔者分析,情感分类,和文本蕴涵。结果表明,比起其他句子嵌入方法在所有的3个任务上的表现我们的模型产生了显着的性能增益。
相关工作
本部分主要讲了从词到段落嵌入式表达的发展及重要的方法
Word Embedding
- word embedding是一种单个词的分布式表达,可以表示词的语义信息。通常有通常有N-gram和CBOW两种方法。
Phrase/Sentence/Paragraph embeddings
-
可以很好获得短语和句子的包含语义的分布式表达的方法主要分为两类:
通过监督学习,为某个明确的任务训练得到的句子表达。通常与接下来的任务有关。
通过无监督学习获得的全局句子嵌入表达:SkipThought vectors和DBOW模型。全局训
练可以利用大量的不标记的语料。通常,特定训练的句子表达性能优于全局表达。
-
通过自预测进行句子嵌入式表达(Sentence Embedding via Self-Prediction):类似于自编码的思想,即通过预测自己来嵌入式表达句子。
- ParagraphVector:优化句子嵌入式表达来预测句子中的以词袋模型表达的句子。
- Sequential Denoising Autoen-coders (SDAE):应用基于LSTM的编码解码框架。通过>将句子中词的顺序考虑进来,编码器把句子表示为一个嵌入表达,解码器用来预测这个句子。
- recursive auto-encoder:学习一个句子的句法树的每个节点的嵌入表达,通过预测这
个节点的子节点来优化嵌入表达。
-
通过预测临近句子的句子嵌入式表达(Sentence Embeddings via Predicting Adjacent Sentences):充分利用句子的上下文信息。
- SkipThought and FastSent:通过预测临近句子来训练句子嵌入表达。一个特殊情况就
是利用编码-解码器通过预测双语平行句来训练句子的嵌入表达。
- SkipThought and FastSent:通过预测临近句子来训练句子嵌入表达。一个特殊情况就
-
总结:
- 所有的以前的在半监督句子嵌入结构的工作要不是通过在句子中词的嵌入表达上做max/average pooling,要么是直接提取LSTM的最后一层作为嵌入式表达。
- 这些方法限制了嵌入表达——单个向量不能覆盖和区别在同一个句子的不同方面。
本文工作:通过结合自注意力机制和矩阵表达,解决了上述问题。
其他工作:通过利用外部语言结构如分词和依赖树提高句子的表达。但是本文没有
利用语言结构来指导句子表达模型。
模型
[图片上传失败...(image-a65e82-1511363807983)]
作者提出的模型主要由2部分组成。第1部分是一个双向LSTM,第2部分是self-attention mechanism,该机制提供了对LSTM的隐藏层状态进行加和的权重。
Bi-LSTM
模型的输入:$S=\left ( w_1,w_2,...,w_n \right )\epsilon R^{n*d}$,一个含有n个token的序列,w_i表示序列中第i个token对应的word embedding。
输入的S进入一个双向LSTM,第t个单词对应的前向和后向隐藏状态计算方法如下:
![][http://latex.codecogs.com/svg.latex?\vec{h_t}=\vec{LSTM}\left( w_t\vec{h_{t-1}}\right)]
![][http://latex.codecogs.com/svg.latex?\bar{h_t}= \bar{LSTM} \left ( w_t, \bar{h_{t-1}}\right ) ]
然后将前向和后向的隐藏状态进行连接得到用于后续计算的$h_t$,如果LSTM的隐藏单元数为u,则$h_t \epsilon R^{2u}$。文中用句子$H\epsilon R^{n*2u}$表示所有隐藏状态h的集合:
![][http://latex.codecogs.com/svg.latex?H=\left(h_1,h_2,...,h_n\right )]
自注意力机制
上图中b部分就是用于生成self-attention的简单前馈神经网络:
![][http://latex.codecogs.com/svg.latex?a=softmax(W_{s2}tanh(W_{s1}H^T))]
其中,$W_{s1}\epsilon R{d_a*2u}$,$HT\epsilon R^{2un}$,$H\epsilon R^{n2u}$,$W_{s1}\epsilon R{1*d_a}$,所以最终a的形状为$R{1∗n}$,并且由于使用了softmax函数进行了归一化,a的每一维度可以认为是对应位置单词的attention。 至此,self-attention机制介绍完毕。
然后就可以得到句子表示$m=a·H\epsilon R^{1∗2u}$。但是这不是引言中提到的二维矩阵句子表示.作者认为常见的向量表示只能表示句子中的某个特定component,那么如何全面的把句子的大部分甚至所有component都表现出来呢,那么一个很自然的想法就是把向量扩展成矩阵。所以我们不能只用单个attention,我们需要对每个component都提供一个attention,所以就要将a变成A。
如果我们需要对句子的r个component进行建模,那么只需要提供r个a,即一个r2u的矩阵。为了得到这个矩阵,作者将参数$W_{s2}$的形状从$R{1∗2u}$调整成了$R{r∗2u}$,那么$a\epsilon R^{1∗n}$也就变成了$A\epsilon R^{r∗n}$.*
最终句子表示也从向量$m=a·H\epsilon R^{1∗2u}$变成了$M=A·H\epsilon R^{r∗2u}$
至此,我们得到了矩阵级别的句子表示。
惩罚项(PENSLIZATION TEAM)
作者在实验中发现,如果计算得到的attention句子A中有部分行的值相似的话,最终得到的句子表示矩阵中也会出现一些行的值是相似的,这样就让M变得冗余了。所以在设计网络的损失函数时,需要考虑加入penalization term来让模型得到的A的每一行的差别明显。
- Kullback Leibler divergence:权重向量中的任意两个的KL距离是评价多样性的最好的方法。(据说计算成本非常大,所以不用这个方法)
- 作者的设计是在loss加入这么一项:
![][http://latex.codecogs.com/svg.latex?P=\left | \left ( AA^T-I \right ) \right |]
其中,$\left | . \right |_F$表示的矩阵的Frobenius范数,I是单位矩阵,A是自注意力产生的权重矩阵。之后求Frobenius范数。类似于L2正则项,惩罚项P将被一个系数相乘,然后之前的loss一起被最小化(这个loss取决于之后的>应用)。
可视化
用户画像
用户画像数据集采用包含英语、西班牙语、荷兰语的推特数据,基于这些数据预测用户的年龄。具体结果如下。
[图片上传失败...(image-a43b58-1511363807983)]
情感分类
此项任务采用Yelp数据集,输入为用户评论,输出为用户对商户的评分,分数为1-5。在此项任务中作者将attention矩阵化成了热力图,以观察句子的重要部分,具体如下.
[图片上传失败...(image-bd3b7d-1511363807983)]
文本蕴含
在此任务中模型虽未取得最好的结果,但与最好模型相比只差0.2%。具体结果如下:
[图片上传失败...(image-a1ba88-1511363807983)]
[图片上传失败...(image-fa7ea1-1511363807983)]
如上图所示,左图没有惩罚项,右图有惩罚项,通过左图,我们可以看出没有惩罚项的attention矩阵其行与行之间的差异性较差,每一行聚集的词由很大相似性,而右边的差异性则较好。
(a)和(b)显示了矩阵嵌入的30行中的6行所引起的详细注意,而(c)和(d)通过总计所有30个注意力向量来显示总体关注。
而加入惩罚项的的用户画像任务,其准确率也有所提升。具体如下图所示:
[图片上传失败...(image-ad0cef-1511363807983)]
实验
作者使用了三个不同的数据集:
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的参数设置进行了探索,不多说直接上图。
- penalization term系数的影响
Penalization coefficient | Yelp | Age |
---|---|---|
1.0 | 64.21% | 80.45% |
0.0 | 61.74% | 79.27% |
- r的大小(1-30)选择
开源实现:A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING
总结
以往论文中常用的句子表示为一维向量,但是这只能表达句子的一部分信息,为此作者提处一种self-attentive机制,并基于此机制,将句子表示为一个2维矩阵,使得句子的信息尽可能多的得到保留,同时为了使得句子的信息尽可能多的保留,即行与行之间尽可能差异化,作者使用了Frobenius范数惩罚项。