文章目录
一、Attention机制
在机器翻译或者文本翻译的背景下,使用Attention机制的最主要解决的问题是Seq2Seq对于长距离信息的丢失。使用Attention机制和不使用Attention机制的Seq2Seq的区别在于: 前者会使用(加权)每一个时间部的encoder的hidden_status,后者仅仅使用了最后一个时间步的hidden_status。
1. Banhdanuo_attention
简单描述Attentions机制:在decoder阶段阶段,decoder的hidden_status由两部分决定,一部分是context,一部分是上一个时间步的输出结果,当前时间步的context是encoder每一个时间步的context加权得到,权重取决于上一个时间步的hidden_status和encoder每一个时间步的context的相似度决定,公式为 V t a n h ( W s i − 1 + U h i ) Vtanh(Ws_{i-1} + Uh_{i}) Vtanh(Wsi−1+Uhi)
2. Luong_attention
相对于banhdanuo_attention,Luong_attention的改进在于
- 参与相似度计算的不再是上一个时间步的hidden_status, 而是这个时间步的伪hidden_status.
- 最后输出的hidden_status是由contex 和 当前时间部的伪hidden_status concat得到
- 增加了一些相似度函数的方式:dot: u T v u^{T}v uTv , general: u T W v u^{T}Wv uTWv, concat: V t a n h ( W 2 [ u , v ] ) Vtanh(W_2[u,v]) Vtanh(W2[u,v])
3. 其他Attention
attetion的相似度函数有很多这里再补充2个:
- scaled_dot_producted u T v n \frac{u^Tv}{\sqrt{n}} n uTv
- self attention
二、评判标准
1. BLUE
BLUE的定义公式是
e
x
p
(
B
P
∗
Σ
i
=
1
N
W
n
l
o
g
(
P
n
)
)
,
exp(BP*\Sigma_{i=1}^{N} W_nlog(P_n)),
exp(BP∗Σi=1NWnlog(Pn)),
其中N是N-gram的N,通常取4,
W
n
=
1
/
N
W_n=1/N
Wn=1/N.
P
n
P_n
Pn是准确率=命中/预测值的长度。
BP是惩罚系数。如果答案比预测值短,则为1,否则 = 1 - 预测值/答案长度。因为对于准确率来讲,预测值越短一般越高,为了减少漏译的情况,必须对该情况惩罚。
2. ROUGE
可以理解成召回率,ROUGE-N和BLUE的定义类似,只是将准确率替换成召回率(就是命中/答案长度)。
ROUGE-L的本质是F1,,
P
=
L
c
s
(
x
,
y
)
/
m
P=Lcs(x,y)/m
P=Lcs(x,y)/m,
R
=
L
c
s
(
x
,
y
)
/
n
R=Lcs(x,y)/n
R=Lcs(x,y)/n,
F
L
=
(
1
+
β
2
)
R
P
/
(
R
+
β
2
P
)
F_L=(1+\beta^2) RP/(R + \beta^2P)
FL=(1+β2)RP/(R+β2P),
其中
L
c
s
(
x
,
y
)
Lcs(x,y)
Lcs(x,y)代表最长公共子序列,m是预测长度,R是答案长度,
β
=
1
\beta=1
β=1的时候就是F1
ROUGE-W是加权最大公共子序列。给连续命中的情况更高的分数。
ROUGE-S可以不在乎N-gram的连续性。
三、解码优化
1.压缩字典
原始的Bert字典大概2w多,因为decoder阶段是需要做softmax-2万分类的。这里的计算量还是极大的,我们可以将语料中未出现的从字典中删除,压缩字典,提高计算效率,同时也能提高精确度。
2. Beam Search
将上一个时间步预测出来最大可能的输出作为下一个时间步的策略叫Greedy Search。这个方法比较容易陷入局部最优解。为了减少这种情况发生,我们可以牺牲一点效率,每次选取K个最可能的答案送入下一个时间步作为输出。时间复杂度为O(KKT),T是长度。