绑定输入输出的词向量矩阵 W m , v W_{m,v} Wm,v
节省一半的参数量,词向量矩阵非常耗内存,只需维护一个即可。
解码方式
auto-regressive:seq2seq
CRF:建模隐状态之间的线性依赖关系
Train with teacher forcing
好处:加快模型训练速度,噪声少,收敛快
坏处:没有自我纠错的能力
解码过程预测错误的现象:exposure bias 解决方案:teacher forcing与non-teacher forcing结合
先用teacher forcing训练前几个epoch(或几个batch),然后non-teacher forcing训练后几个epoch,模型会具备一定的纠错能力。
How to decode
a
r
g
m
a
x
P
θ
(
Y
∣
X
)
=
a
r
g
m
a
x
∏
i
=
1
n
P
θ
(
y
i
∣
y
1
.
.
.
y
i
−
1
,
X
)
argmaxP_\theta(Y|X)=argmax\prod_{i=1}^{n}P_\theta(y_i|y_1...y_{i-1},X)
argmaxPθ(Y∣X)=argmax∏i=1nPθ(yi∣y1...yi−1,X)
解码过程:维特比算法不行
启发式解码:
Greedy Decode:在当前位置只选择最优的输出
问题:在每个位置都是唯一的预测,不可能对前面的错误进行修改
Beam Search:在每个位置留出k个(score最大)可能的候选,一定程度上解决上面的问题
s
c
o
r
e
(
y
1
,
.
.
.
,
y
t
)
=
∑
i
=
1
t
l
o
g
P
l
m
(
y
t
∣
y
1
.
.
.
y
t
−
1
,
x
)
score(y_1,...,y_t)=\sum_{i=1}^tlogP_{lm}(y_t|y_1...y_{t-1},x)
score(y1,...,yt)=∑i=1tlogPlm(yt∣y1...yt−1,x)
因为在beam search中的每一个score都是负数,越长的序列加起来越小,所以beam search更倾向于生成短句子
维特比算法和Beam search的区别:
维特比算法在生成当前位置的输出时依赖前面一个(或有限个)的输出,而beam search是依赖所有前面位置的输出