本文主要描述的是NMT中的一些Dual learning的方法,其中主要是基于半监督和无监督下的场景。
1.简单回顾back-translation的方法:
回译法最初被提出的背景是,如果我们有少量的对齐语言对数据集
D
H
=
(
X
,
Y
)
D_H=(X,Y)
DH=(X,Y),以及大量的目标语言的单语语料
Y
ˉ
\bar Y
Yˉ,需要训练翻译模型
θ
X
Y
\theta_{XY}
θXY,建立映射
X
→
Y
X \to Y
X→Y。为了利用这些单语语料,我们可以利用对齐的语言对
(
Y
,
X
)
(Y,X)
(Y,X),训练翻译模型
θ
Y
X
\theta_{YX}
θYX,将单语语料
Y
ˉ
\bar Y
Yˉ翻译为
X
ˉ
\bar X
Xˉ,相当于一种数据增强方法,我们利用伪语料对
D
S
=
(
X
ˉ
,
Y
ˉ
)
D_S=(\bar X,\bar Y)
DS=(Xˉ,Yˉ)和真实的语料对
(
X
,
Y
)
(X,Y)
(X,Y)训练模型
θ
X
Y
\theta_{XY}
θXY。实际上,这样做相当于:
求解模型
θ
X
Y
∗
\theta_{XY}^*
θXY∗,使得:
m
a
x
θ
∑
(
x
,
y
)
∈
D
H
P
(
y
∣
x
;
θ
)
+
∑
(
x
ˉ
,
y
ˉ
)
∈
D
S
P
(
y
ˉ
∣
x
ˉ
;
θ
)
\mathop{max}\limits_{\theta} \sum_{(x,y) \in D_H} P(y|x;\theta) + \sum_{(\bar x,\bar y) \in D_S} P(\bar y| \bar x;\theta)
θmax(x,y)∈DH∑P(y∣x;θ)+(xˉ,yˉ)∈DS∑P(yˉ∣xˉ;θ)
注意,这里我们要求目标语料有大量单语语料,原因很可能是翻译过程的 d e c o d e r decoder decoder实际上比 e n c o d e r encoder encoder面临的难度更大,因为前者需要将密集信息一一解码出来,很容易连续犯错;如果此时我们的评价指标更加迷惑,是一些翻译出来的语料,那么模型错误的传播可能更加厉害。此外,显然这里的翻译出来的伪语料,也需要经过筛选,排除一些低质量的数据。
2.Principle of Dual Reconstruction
这里以机器翻译为例,说明半监督条件下的Dual learning。
图中Bob只说语言X,Alice只说语言Y,并且有两个翻译模型。实际上,我们并不确保两个机器翻译模型的正确性。但是我们至少可以通过以下手段判断翻译模型是否存在问题:
1.Bob向模型
f
f
f说一句话
x
x
x,因此得到了
y
ˉ
=
f
(
x
)
\bar y=f(x)
yˉ=f(x);
2.Alice看到了
y
ˉ
\bar y
yˉ,利用模型
g
g
g,得到
x
ˉ
=
g
(
y
ˉ
)
\bar x=g(\bar y)
xˉ=g(yˉ),发送给Bob;
3.此时,由于Bob作为精通本语言的人,Bob只需要比较一下
x
ˉ
\bar x
xˉ和
x
x
x的区别,就知道模型翻译的质量。
对于模型的优化,可以认为是最小化如下的重建损失:
Δ
(
x
,
g
(
f
(
x
)
)
)
\Delta(x,g(f(x)))
Δ(x,g(f(x)))
Δ
(
y
,
f
(
g
(
y
)
)
)
\Delta(y,f(g(y)))
Δ(y,f(g(y)))
这公式被称作是deterministic dual reconstruction
具体到NMT中,相当于最大化重建概率,或者说最小化负log可能性,如下所示:
m
i
n
f
,
g
−
l
o
g
P
(
x
∣
f
(
x
)
;
g
)
m
i
n
f
,
g
−
l
o
g
P
(
y
∣
g
(
y
)
;
f
)
\mathop{min}\limits_{f,g} -logP(x|f(x);g) \\ \mathop{min}\limits_{f,g} -logP(y|g(y);f)
f,gmin−logP(x∣f(x);g)f,gmin−logP(y∣g(y);f)
以上两式又被称作:probabilistic dual reconstruction principle
3.DualNMT 算法形式化表示:
3.1 输入:
包含单语语料 M x M_x Mx和 M Y M_Y MY;初始的两个翻译模型,其参数表示为 θ X Y \theta_{XY} θXY和 θ Y X \theta_{YX} θYX,然后是两个语言模型(用于评估概率,相当于两个专家的人) P ( x ) P(x) P(x)和 P ( Y ) P(Y) P(Y),以及超参数 α \alpha α、beam search 的大小 K K K,学习率 γ 1 , t , γ 2 , t \gamma_{1,t},\gamma_{2,t} γ1,t,γ2,t
3.2 步骤:
1.Set t=0
2.重复以下步骤,直到翻译模型收敛:t=t+1
3.从
M
x
M_x
Mx和
M
y
M_y
My中,分别采样两句(batch)句子;
4.设当前翻译的句子(batch)s为
s
x
s_x
sx
5.使用模型
θ
X
Y
\theta_{XY}
θXY使用beam search的方法生成K个句子
s
m
i
d
,
1
,
.
.
.
,
s
m
i
d
,
K
s_{mid,1},...,s_{mid,K}
smid,1,...,smid,K
6.对于以上这K句句子遍历,并做以下操作:
k
=
1
,
.
.
.
,
K
k=1,...,K
k=1,...,K:
7.使用语言模型,计算句子k的评价分数
r
1
,
k
=
P
Y
(
s
m
i
d
,
k
)
r_{1,k}=P_Y(s_{mid,k})
r1,k=PY(smid,k)
8.计算对句子k重建奖励
r
2
,
k
=
l
o
g
P
(
s
∣
s
m
i
d
,
k
;
θ
Y
X
)
r_{2,k}=logP(s|s_{mid,k};\theta_{YX})
r2,k=logP(s∣smid,k;θYX)
9.计算总的评价
r
k
=
α
r
1
,
k
+
(
1
−
α
)
r
2
,
k
r_k=\alpha r_{1,k}+(1-\alpha)r_{2,k}
rk=αr1,k+(1−α)r2,k
10.结束对K句句子的遍历
11.计算对于
θ
X
Y
\theta_{XY}
θXY的梯度:
∇
θ
X
Y
E
~
[
r
]
=
1
K
∑
k
=
1
K
[
r
k
∇
θ
X
Y
l
o
g
P
(
s
m
i
d
,
k
∣
s
;
θ
X
Y
)
]
\nabla_{\theta_{XY}} \tilde E[r]={1 \over K}\sum^{K}_{k=1}[r_k \nabla_{\theta_{XY}}logP(s_{mid,k}|s;\theta_{XY})]
∇θXYE~[r]=K1k=1∑K[rk∇θXYlogP(smid,k∣s;θXY)]
12.计算对于
θ
Y
X
\theta_{YX}
θYX的梯度:
∇
θ
Y
X
E
~
[
r
]
=
1
K
∑
k
=
1
K
[
r
k
(
1
−
α
)
∇
θ
Y
X
l
o
g
P
(
s
∣
s
m
i
d
,
k
;
θ
Y
X
)
]
\nabla_{\theta_{YX}} \tilde E[r]={1 \over K}\sum^{K}_{k=1}[r_k (1-\alpha)\nabla_{\theta_{YX}}logP(s|s_{mid,k};\theta_{YX})]
∇θYXE~[r]=K1k=1∑K[rk(1−α)∇θYXlogP(s∣smid,k;θYX)]
13.对于模型的似然优化,因此做梯度上升:
θ
X
Y
←
γ
1
,
t
∇
θ
X
Y
E
~
[
r
]
θ
Y
X
←
γ
2
,
t
∇
θ
Y
X
E
~
[
r
]
\theta_{XY} \gets \gamma_{1,t} \nabla_{\theta_{XY}} \tilde E[r] \\ \theta_{YX} \gets \gamma_{2,t} \nabla_{\theta_{YX}} \tilde E[r]
θXY←γ1,t∇θXYE~[r]θYX←γ2,t∇θYXE~[r]
14.将句子(batch)s换为
s
y
s_y
sy,重放上述操作,注意翻译模型和语言模型要换成是对偶的。
3.3 解释:
上述算法算是在一个半监督的模式下进行的,并不要求
M
X
M_X
MX和
M
Y
M_Y
MY两个语料库是parallel的,这个和back-translation的方法又不一样了。
首先,其中的两个语言模型都必须预先训练好,因为他们作为“人类专家”,必须要有坚固的知识;他们接受整个句子或者是句子的一部分,然后对句子的自然程度进行打分。
其次,这里的模型优化是基于强化学习的
p
o
l
i
c
y
g
r
a
d
i
e
n
t
policy gradient
policygradient方法,这是由于在产生句子的这一步,是有采样过程的,使得梯度往往无法传播,因此采用启发式的policy gradient近似,可以得到很好的效果。相关内容可以查看rollout policy
或者textGAN
之类的内容。作者推荐的文献是: Policy gradient methods for reinforcement learning with function approximation一文。
这里对于 X → Y ˉ → X ˉ X \to \bar Y \to \bar X X→Yˉ→Xˉ的情况,对于 θ X Y \theta_{XY} θXY采用的分数是 r 1 , r 2 r_1,r_2 r1,r2两者的线性插值,可以理解,但是 θ Y X \theta_{YX} θYX只考虑 1 − α 1-\alpha 1−α部分,直观理解就是要和 θ X Y \theta_{XY} θXY模型对齐,避免二者学习进度不均衡。
此外,这里使用beam search的考虑,可能是因为单个句子的随机梯度下降可能带来的采样误差比较大,因此选择K个概率较高的句子。
最后,我们也可以看到,算法实际上是具有较强的一般性的,因此可以应用到类似的其他任务上。而且,也未必设两个任务构成的一个loop,可以是多个任务的loop,如 a 1 → a 2 → . . . → a n → a 1 a_1 \to a_2 \to... \to a_n \to a_1 a1→a2→...→an→a1
4.比较
和回译法比较,利用Dual training的方法其实构建了一个回环,使得不同方向的模型都能够得到更新,而是用back-translation的方法只更新了我们需要的模型,但是没有更新新构造的回译模型,不能够持续的提高数据的质量。而且Dual training可以利用其它单语的知识,基于无监督的方式进行训练,因此实际上比回译法的应用范围更广。