Hierarchical Attention Network
《Hierarchical Attention Network》一文提出了一种层次化的注意力网络。在Seq2Seq里的注意力机制,我们其实做的是word-level的attention,而这篇文章的亮点在于它提出双层attention,即word-level和token-level。
Model Structure
整个HAN其实主要包含三大部分:
- Word Encoder
- Word-level Attention
- Sentence-level Attention
模型结构如下:
我们分别来解析
Word Encoder
HAN模型的Word Encoder采用的是双向GRU(当然我觉得用LSTM问题也不大)。先来回顾一下GRU的基本原理,GRU是RNN的带有门控机制的变体之一,GRU在将原先LSTM的三个门浓缩为两个门:update gate
z
t
z_t
zt 和 reset gate
r
t
r_t
rt。
z
t
=
σ
(
W
z
x
t
+
U
z
h
t
+
b
z
)
r
t
=
σ
(
W
r
x
t
+
U
r
h
t
+
b
r
)
z_t\ =\ \sigma(W_zx_t+U_zh_t+b_z)\\ r_t\ =\ \sigma(W_rx_t+U_rh_t+b_r)
zt = σ(Wzxt+Uzht+bz)rt = σ(Wrxt+Urht+br)
GRU的流程如下:
- 获得当前输入的信息: h t ~ = t a n h ( W r x t + r t ⨀ ( U r h t − 1 ) + b r ) \widetilde {h_t}\ =\ tanh(W_rx_t+r_t\bigodot (U_rh_{t-1})+b_r) ht = tanh(Wrxt+rt⨀(Urht−1)+br),简单说就是上一层的隐状态和重置门做一个element wise的相乘,结果再和 t t t时刻输入信息拼接,最后用 t a n h tanh tanh激活。
- 获得当前时刻的隐状态: h t = ( 1 − z t ) ⨀ h t − 1 + z t ⨀ h t ~ h_t\ =\ (1-z_t) \bigodot h_{t-1}+z_t\bigodot \widetilde {h_t} ht = (1−zt)⨀ht−1+zt⨀ht ,这里更新门控同时实现了遗忘和记忆两个工作
由于是双向的GRU,因此我们会获得forward、backward两个方向的隐状态
h
i
t
f
h^{f}_{it}
hitf和
h
i
t
b
h^{b}_{it}
hitb,我们将这两个concatenate到一起作为
t
t
t时刻的隐状态
h
i
t
=
[
h
i
t
f
,
h
i
t
b
]
h_{it}\ =\ [h^{f}_{it},\ h^{b}_{it}]
hit = [hitf, hitb]
这里
i
i
i表示的是第
i
i
i个句子。
Word-level Attention
Word Encoding完成后,接下来首先是Word-level Attention。这一部分与我们在Seq2Seq里的Attention是一样的
u
i
t
=
t
a
n
h
(
W
w
h
i
t
+
b
w
)
α
i
t
=
e
x
p
(
u
i
t
T
u
w
)
∑
t
e
x
p
(
u
i
t
T
u
w
)
s
i
=
∑
t
α
i
t
h
i
t
u_{it}\ =\ tanh(W_wh_{it}+b_w)\\ \alpha_{it}\ =\ \frac{exp(u^{T}_{it} u_w)}{\sum_{t}exp(u^T_{it}u_w)}\\ s_i\ =\ \sum_{t}\alpha_{it}h_{it}
uit = tanh(Wwhit+bw)αit = ∑texp(uitTuw)exp(uitTuw)si = t∑αithit
最后我们得到的
s
i
s_i
si就作为下一层Attention的每个句子向量表征
Sentence-level Attention
Word-level的Attention完成后,我们获得了每个句子的特征向量
s
i
s_i
si,接下来的工作就是本文的创新点,对句子再做一次Attention,流程其实还是一样的:
u
i
=
t
a
n
h
(
W
s
h
i
+
b
s
)
α
i
=
e
x
p
(
u
i
T
u
s
)
∑
i
e
x
p
(
u
i
T
u
s
)
v
=
∑
i
α
i
h
i
u_{i}\ =\ tanh(W_sh_{i}+b_s)\\ \alpha_{i}\ =\ \frac{exp(u^{T}_{i} u_s)}{\sum_{i}exp(u^T_{i}u_s)}\\ v\ =\ \sum_{i}\alpha_{i}h_{i}
ui = tanh(Wshi+bs)αi = ∑iexp(uiTus)exp(uiTus)v = i∑αihi
最终我们得到的向量
v
v
v就是整个document的向量表示,我们再用一个分类器进行分类即可
Experiment
本文作者在六个大型数据集上进行了实验,相较于一些baseline(n-gram、CNN、RNN等),HAN在各个数据集上均取得了令人满意的效果
Analysis
Context dependent attention weights
作者提到HAN模型很好的提取到了文本中的上下文关系。比如在电影评论中,出现good不一定就是正面评论,因为可能是not good或者只是某一方面good。因此作者绘制了good和bad这两个词的attention weight的distribution
Visualization of attention
作者还将attention做了可视化用于证明HAN模型较好的提取到了一些比较重要的信息
Figure 5是sentiment analysis任务,可以看到像terrible、delicious、amazing这种情感比较强烈的词语,HAN都很好的捕捉到了并且attention weight很高。Figure 6展示了对于topic prediction任务,HAN也能很好的捕捉到相关信息,比如zebras、web、browser等等。
Reflection
这篇文章的创新性在于对句子的attention,其实模型的结构并不复杂,attention机制也是最原始的attention机制,但作为一篇5年前的SOTA,这篇文章给了我一些关于文本处理的启发。
ention,其实模型的结构并不复杂,attention机制也是最原始的attention机制,但作为一篇5年前的SOTA,这篇文章给了我一些关于文本处理的启发。
但是有一点质疑在于,文中对于句子向量的attention是否是多余的?attention的目的是计算某种重要性,那么句子的重要性是否是由其中的单词所决定的?可以考虑只用word-level attention与HAN做一个对比,比较一下效果差异。