基于transformers的自然语言处理(NLP)入门
1 Seq2Seq
【论文】Sequence to Sequence Learning with Neural Networks【2014】、Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation【2014】 【参考】Seq2Seq模型概述
- seq2seq属于encoder-decoder结构的一种
- 基本思想就是利用两个RNN,一个RNN作为encoder,另一个RNN作为decoder
- 输入序列和输出序列长度可以不同
2 attention
【论文】Neural Machine Translation by Jointly Learning to Align and Translate【2014】、Effective Approaches to Attention-based Neural Machine Translation【2015】 【参考】Attention和Transformer、一文看懂attention
-
attention思想:查字典,根据查得的各key和query的相关性计算value的加权和 -
因为性能更优越,现在提到的seq2seq一般都指加入了attention机制的模型 -
双向RNN的encoder -
h
h
h 代表encoder的隐藏层(在这里又作为value),
s
s
s 代表decoder的隐藏层 -
红框是attention,计算上下文(context)
-
c
t
=
∑
i
=
1
T
α
t
i
h
i
c_t=\sum_{i=1}^{T}\alpha_{ti}h_i
ct?=∑i=1T?αti?hi?,第
t
t
t 个decoder,第
i
i
i 个encoder隐藏层,对各encoder隐层进行加权求和,权重越大在context的占比就越多,decoder时就越重视它(attention思想)
-
α
t
i
=
e
x
p
(
e
t
i
)
∑
i
=
1
T
e
x
p
(
e
t
i
)
\alpha_{ti}=\frac{exp(e_{ti})}{\sum_{i=1}^Texp(e_{ti})}
αti?=∑i=1T?exp(eti?)exp(eti?)?,叫做alignment,其中
e
t
i
=
a
(
s
t
?
1
,
h
i
)
e_{ti}=a(s_{t-1},h_i)
eti?=a(st?1?,hi?),用以计算上一时刻的输出
s
t
?
1
s_{t-1}
st?1? 和所有encoder输出的相关程度,并用softmax归一化
-
a
(
?
)
a(\cdot)
a(?) 计算相关程度,一个加性attention的计算方法如下:query、key
- 乘性attention可以通过query和key直接向量乘法得到标量;local sensitive attention,思想是相邻
α
t
i
\alpha_{ti}
αti? 之间的关系会相对较大,因此为了捕捉这种关系对alignment进行卷积
- 关于query:上个decoder的隐层
s
t
?
1
s_{t-1}
st?1?、当前decoder的隐层
s
t
s_{t}
st?、
s
t
?
1
s_{t-1}
st?1? 和
y
t
?
1
y_{t-1}
yt?1? concat起来用,具体情况具体分析
-
总结:seq2seq中的attention,就是计算一个encoder所有隐层的加权和,结果即为context(各权重是query和各key的相关程度,再归一化)
3 transformer
Transformer就是一个升级版的seq2seq,也是由一个encoder和一个decoder组成的;但其encoder和decoder都不用RNN,而是换成了多个attention
3.1整体框架
3.2 单层编码器/编码器
- 单层编码器:self-attention + 前馈神经网络(FFNN)
- 单层解码器:self-attention + encoder-decoder attention + FFNN
- encoder-decoder attention:类似于seq2seq中的attention,帮助解码层聚焦于输入句子的各部分
- self-attention:key=query=value,在原文中的每个词可以跟该句子中的所有词进行Attention计算,相当于寻找原文内部的关系
3.3 self-attention
4 代码实现矩阵计算的attention
|