一、Background
在学习单个词的语义上有意义的分布式表示方面已经取得了很大进展,比如word emebddings。另外,要获得满意的短语和句子表示仍然有很多的工作要做。这些方法通常可以分为两大类:通用的embedding,无监督学习训练得到,包括SkipThought vectors、ParagraphVector等等。另外一种是特定任务监督训练得到的,通常与下游应用相关。一般来说,经过特定训练的embedding优于通用的embedding,尽管通用的embedding可以在半监督环境中使用并且可以利用大量的无标签数据。沿着这条线提出了几个模型,通过使用循环神经网络、递归神经网络和卷积神经网络作为中间步骤提取句子表示,以此解决各种任务。为了形成一个简单的向量表示,之前模型普遍的做法是RNN的最后一个隐藏层状态、RNN后接池化层或者n-gram卷积。另外也有利用语法结构比如语法树和依存树来增强句子的表示。
二、Motivation
- 引入额外的信息的attention并不适用一些任务。
- 为了得到简单的句子表示,之前模型的普遍做法是取RNN的最后一个隐藏层状态、RNN后接池化层或者n-gram卷积。作者推测在循环模型的所有时间步骤中携带语义信息是相对困难的并且不是必需的。
作者提出self-attention代替池化层。与之前提出的方法不同,self-attention机制允许抽取句子不同层面的表示,通常加在LSTM层后。self-attention可以在不需要额外输入的情况下运用。另外,由于它直接利用之前时间步的隐藏层表示,减少了LSTM的一些长期记忆负担。并且可视化提取的embedding变得简单直观。
三、Approach
3.1 Model
作者提出的模型包含两部分:第一部分是双向LSTM,第二部分是self-attention,它为LSTM隐藏状态提供了一组求和权重向量。权重向量与LSTM的隐藏层状态点积得到的向量作为句子表示。如图一所示。
具体来说,假设有一个句子,包含n个单词,每个单词用词向量表示。
S
=
(
w
1
,
w
2
,
.
,
w
n
)
S=(w_1,w_2,.,w_n)
S=(w1,w2,.,wn)
w
i
w_i
wi表示第i个单词的词向量,维度大小为d。那么S表示2-D的词向量矩阵,维度为(n,d)。词向量矩阵S中的每项都是互相独立的,为了获得单词之间的依赖信息,通过双向LSTM处理句子:
h
t
→
=
L
S
T
M
→
(
w
t
,
h
t
−
1
→
)
\overrightarrow {h_t}=\overrightarrow {LSTM}(w_t,\overrightarrow {h_{t-1}})
ht=LSTM(wt,ht−1)
h
t
←
=
L
S
T
M
←
(
w
t
,
h
t
+
1
←
)
\overleftarrow {h_t}=\overleftarrow {LSTM}(w_t,\overleftarrow {h_{t+1}})
ht=LSTM(wt,ht+1)
拼接
h
t
→
\overrightarrow {h_t}
ht和
h
t
←
\overleftarrow {h_t}
ht得到隐藏层状态
h
t
h_t
ht。每个单向的LSTM的隐藏层单元数为u,那么H的维度为(n,2u)。
H
=
(
h
1
,
h
2
,
.
.
.
,
h
n
)
H=(h_1,h_2,...,h_n)
H=(h1,h2,...,hn)
我们的目标是将变长的句子编码为固定大小的向量。attention机制以LSTM的隐藏层状态为输入,输出权重向量a:
a
=
s
o
f
t
m
a
x
(
w
s
2
t
a
n
h
(
W
s
1
H
T
)
)
a=softmax(w_{s2}tanh(W_{s1}H^T))
a=softmax(ws2tanh(Ws1HT))
然后隐藏层状态H与权重向量a进行加权求和得到输入句子的向量表示m。这种向量表示通常关注于句子的特定部分,比如一组特殊的相关单词或短语。因此,期望它可以反映句子中语义一个方面或组成部分。然而,句子中有很多方面的信息,特别是长句子,结合在一起形成整个句子的语义表示。因此,为了表示句子的整体语义,我们需要多个m来关注句子的不同部分。形式与第一attention相似,只不过权重向量a变为权重矩阵A:
A
=
s
o
f
t
m
a
x
(
W
s
2
t
a
n
h
(
W
s
1
H
T
)
)
A=softmax(W_{s2}tanh(W_{s1}H^T))
A=softmax(Ws2tanh(Ws1HT))
最终得到的句子表示:
M
=
A
H
M=AH
M=AH
3.2 Penalization term
作者认为矩阵M存在冗余的问题,如果attention对于r hops总是提供相近的权重。因此我们需要一个惩罚项来增加权重的diversity。评估diversity的最好方法是KL散度。但是作者发现不是很稳定。因此作者引入了惩罚项。
P
=
∣
∣
(
A
A
T
−
I
)
∣
∣
F
2
P=||(AA^T-I)||_F^2
P=∣∣(AAT−I)∣∣F2
四、Experiment
五、Conclusion
作者在论文中介绍了self-attention。self-attention机制允许最终的句子表示直接利用之前LSTM的隐藏层状态,减少了LSTM的一些长期记忆负担。模型可以将任意变长序列编码为固定大小的向量,解决了长期依赖的问题。作为我们提出的模型的缺点,当前的训练方法严重依赖于下游应用,因此我们无法以无监督的方式训练它。在该模型中实现无监督学习的主要障碍是在解码期间,我们不知道如何嵌入和重组嵌入中的不同行。通过使用神经网络探索所有可能的划分可能很容易导致过度拟合。