1. seq2seq
- 模型结构
seq2seq是一个“编码解码器”结构,编码器处理输入序列中的每个元素,将捕获的信息编译成上下文内容向量 (context vector)。在处理整个输入序列之后,编码器将context vector发送到解码器,解码器逐项开始产生输出序列。如下图所示:

encoder和decoder会借助于循环神经网络(RNN)这类神经网络进行计算。举一个机器翻译的例子如下所示:

但是,考虑到提升效果,不会寄希望于把所有的内容都放到一个上下文向量中,而是会采用注意力机制来进行处理。
2. 注意力机制 (Attention)
参考:https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/
https://zhuanlan.zhihu.com/p/40920384
- 注意力机制是一个很神奇地可以学习源语言和目标语言之间词和词对齐关系的方式。
- 对Attention一种直观的感受见下图:

- 更加详细的过程参考:https://zhuanlan.zhihu.com/p/40920384
3. Feed-Forward Attention机制
参考:
- 提出注意力的论文:
(1) Neural Machine Translation by Jointly Learning to Align and Translate(最先提出)
(2) Feed-Forward Networks with Attention Can Solve Some Long-Term Memory Problems(以下主要参考这篇论文,简称为feed forward attention)- https://zhuanlan.zhihu.com/p/37601161
https://zhuanlan.zhihu.com/p/53036028
- 网络结构图:feed forward attention机制的网络结构图如下所示,

- 原理:feed forward attention机制可以形式化为,
e t = a ( h t ) , α t = e x p ( e t ) ∑ k = 1 T e x p ( e k ) , c = ∑ t = 1 T α t h t e_t=a(h_t),\quad \alpha_t=\frac{exp(e_t)}{\sum_{k=1}^{T}exp(e_k)},\quad c=\sum_{t=1}^T\alpha_th_t et=a(ht),αt=∑k=1Texp(ek)exp(et),c=t=1∑Tαtht
其中 a ( h t ) a(h_t) a(ht) 是一个训练函数,可以看作是一个前馈网络。 - 应用于文本分类:将向量 c c c输入到一个全连接层并进行softmax。
4. HAN层叠注意力机制
参考
(1) 论文:Hierarchical Attention Networks for Document Classification
(2) 以上论文笔记
- HAN:Hierarchical Attention Networks,层叠注意力。
- 所谓层次:文档具有层次结构特性,文档由句子组成,句子由单词组成。那么可以考虑使用单词的词向量表示句子,在此基础上再用句子的向量构建文档的信息表示。
- 所谓注意力:句子中不同的单词对句子的重要性不同,同样一篇文档中不同的句子对文档的贡献程度也不一样。而单词和句子的重要程度不是固定的,是由上下文环境所决定的,因此需要引入注意力机制来学习这种重要程度。
- 层次与注意力珠联璧合:先在单词层次构建注意力机制,使其能够表达不同单词的重要程度,再在句子层次构建注意力机制,使其能够表达不同句子的重要程度。
4.1 网络结构
- 网络结构:层次注意力的网络结构如下图所示,

网络由5层组成,从下到上为是词向量编码层BiGRU、单词级别的Attention层、句子编码层BiGRU、句子级别的Attention层和全连接层。
- 注意力部件:层次注意力中计算不同单词和句子注意力的方法是feed-forward attention方法。
4.2 学习原理
4.2.1 Word Encoder
- 首先,令第 i i i个句子 s i s_i si中第 t t t个单词的one-hot编码为 w i t w_{it} wit,对其进行embedding得到该单词的词向量: x i t = W e w i t , t ∈ [ 1 , T ] x_{it}=W_ew_{it},\quad t\in [1,T] xit=Wewit,t∈[1,T]
- 使用双向GRU分别计算单词
w
i
t
w_{it}
wit的forward hidden state
h
→
i
t
\overrightarrow{h}_{it}
hit 与backward hidden state
h
←
i
t
\overleftarrow{h}_{it}
hit:
h → i t = G R U → ( x i t ) , t ∈ [ 1 , T ] \overrightarrow{h}_{it}=\overrightarrow{GRU}(x_{it}),\quad t\in[1,T] hit=GRU(xit),t∈[1,T] h ← i t = G R U ← ( x i t ) , t ∈ [ T , 1 ] \overleftarrow{h}_{it}=\overleftarrow{GRU}(x_{it}),\quad t\in[T,1] hit=GRU(xit),t∈[T,1] h i t = [ h → i t , h ← i t ] , t ∈ [ 1 , T ] h_{it}=[\overrightarrow{h}_{it},\overleftarrow{h}_{it}],\quad t\in[1,T] hit=[hit,hit],t∈[1,T]
h i t h_{it} hit表示以单词 w i t w_{it} wit为中心的句子相关信息。
4.2.2 Word Attention
u
i
t
=
t
a
n
h
(
W
w
h
i
t
+
b
w
)
,
t
∈
[
1
,
T
]
u_{it}=tanh(W_wh_{it}+b_w),\quad t\in[1,T]
uit=tanh(Wwhit+bw),t∈[1,T]
α
i
t
=
e
x
p
(
u
i
t
T
u
w
)
∑
t
e
x
p
(
u
i
t
T
u
w
)
,
t
∈
[
1
,
T
]
\alpha_{it}=\frac{exp(u_{it}^Tu_w)}{\sum_{t}exp(u_it^Tu_w)},\quad t\in[1,T]
αit=∑texp(uitTuw)exp(uitTuw),t∈[1,T]
s
e
n
t
e
n
c
e
v
e
c
t
o
r
:
s
i
=
∑
t
α
i
t
h
i
t
sentence\ vector:\quad s_i=\sum_t \alpha_{it}h_{it}
sentence vector:si=t∑αithit
u
w
u_w
uw: word level context vector,在训练过程中与其他参数一起学习,初始值是随机初始化的。
4.2.3 Sentence Encoder
同样将句子向量
s
i
s_i
si输入到双向GRU中:
h
→
i
=
G
R
U
→
(
s
i
)
,
i
∈
[
1
,
L
]
\overrightarrow{h}_{i}=\overrightarrow{GRU}(s_{i}),\quad i\in[1,L]
hi=GRU(si),i∈[1,L]
h
←
i
=
G
R
U
←
(
s
i
)
,
i
∈
[
L
,
1
]
\overleftarrow{h}_{i}=\overleftarrow{GRU}(s_{i}),\quad i\in[L,1]
hi=GRU(si),i∈[L,1]
h
i
=
[
h
→
i
,
h
←
i
]
,
i
∈
[
1
,
L
]
h_i=[\overrightarrow{h}_{i},\overleftarrow{h}_{i}],\quad i\in[1,L]
hi=[hi,hi],i∈[1,L]
4.2.4 Sentence Attention
u
i
=
t
a
n
h
(
W
s
h
i
+
b
s
)
,
i
∈
[
1
,
L
]
u_{i}=tanh(W_sh_{i}+b_s),\quad i\in[1,L]
ui=tanh(Wshi+bs),i∈[1,L]
α
i
=
e
x
p
(
u
i
T
u
s
)
∑
i
e
x
p
(
u
i
T
u
s
)
,
i
∈
[
1
,
L
]
\alpha_{i}=\frac{exp(u_{i}^Tu_s)}{\sum_{i}exp(u_i^Tu_s)},\quad i\in[1,L]
αi=∑iexp(uiTus)exp(uiTus),i∈[1,L]
d
o
c
u
m
e
n
t
v
e
c
t
o
r
:
v
=
∑
i
α
i
h
i
document\ vector:\quad v=\sum_i \alpha_{i}h_{i}
document vector:v=i∑αihi
u
s
u_s
us:sentence level context vector。
4.2.5 Document Classification (全连接层)
p = s o f t m a x ( W c v + b c ) p=softmax(W_cv+b_c) p=softmax(Wcv+bc)
4.3 总结
- 优点:(1) 相对于论文中所比较的几种方法(见下图),分类性能有所提升。
(2) 可以识别不同单词和句子的重要程度。
