Deep Reinforcement Learning for Dialogue Generation
这是一篇将策略梯度(policy gradient)引入Seq2Seq来进行多轮对话的文章。
使用策略梯度从三方面来reward: informativity,coherence, and ease of answering。
作者提到将SEQ2SEQ模型用于dialogue generation存在两个问题:其一,SEQ2SEQ模型使用的是最大释然估计(MLE)的目标函数,然而MLE会倾向选择高频的generic response比如“I don’t know”(dull utterances),很难产生interesting,diverse和informative的feedback来保持对话的继续;另外,可能陷入infinite loop of repetitive responses, 比如“A: see you later. B: see you later”然后A再回复“see you later”。
不过作者没有提出新的框架结构,而是以pre-trained的SEQ2SEQ模型为基本框架,以DRL的思路提出了一种启发式算法。
作者认为good conversation具有forward-looking, interactive, informative和coherence 的特征。
Reward
1.Ease of answering
r1=−1NS∑s∈S1Nslogpseq2seq(s|a)
r
1
=
−
1
N
S
∑
s
∈
S
1
N
s
l
o
g
p
s
e
q
2
s
e
q
(
s
|
a
)
在当前的action下产生无聊回答的平均log概率作为一个reward
2.Information Flow
r2=−logcos(hpi,hpi+1)=−loghpi⋅hpi+1||hpi||||hpi+1||
r
2
=
−
l
o
g
c
o
s
(
h
p
i
,
h
p
i
+
1
)
=
−
l
o
g
h
p
i
⋅
h
p
i
+
1
|
|
h
p
i
|
|
|
|
h
p
i
+
1
|
|
hpi,hpi+1
h
p
i
,
h
p
i
+
1
我的理解是Encoder的上一轮和这一轮的隐层的向量(如果有误,恳请指出),这个是计算上一轮的输出和当前轮次的输出求余弦相似,给出一个reward. 避免产生infinite loop of repetitive responses。
需要注意地就是cos取值范围是[-1,1],log中定义就要保证
cos(hpi,hpi+1)>0
c
o
s
(
h
p
i
,
h
p
i
+
1
)
>
0
,事实上
hpi
h
p
i
必然满足
0≤hpi≤1
0
≤
h
p
i
≤
1
。理由就是,
hpi
h
p
i
实际上是LSTM的隐状态向量。如下是LSTM的cell state计算公式
ct=f⋅ct−1+i⋅σ(W1⋅xt−1+W2⋅ht−1+b)
c
t
=
f
⋅
c
t
−
1
+
i
⋅
σ
(
W
1
⋅
x
t
−
1
+
W
2
⋅
h
t
−
1
+
b
)
其中的
σ()
σ
(
)
就是sigmoid 函数,它的取值就是[0,1]。forget门和input门的取值也是[0,1]。因此向量
hpi,hpi+1
h
p
i
,
h
p
i
+
1
均是正的,其余弦值也就是正的了。
3.Semantic Coherence
r3=1Nalogpseq2seq(a|qi,pi)+1Nqilogpbackwardseq2seq(qi|a)
r
3
=
1
N
a
l
o
g
p
s
e
q
2
s
e
q
(
a
|
q
i
,
p
i
)
+
1
N
q
i
l
o
g
p
s
e
q
2
s
e
q
b
a
c
k
w
a
r
d
(
q
i
|
a
)
三个reward取的是加权平均
r(a,[pi,qi])=λ1r1+λ2r2+λ3r3
r
(
a
,
[
p
i
,
q
i
]
)
=
λ
1
r
1
+
λ
2
r
2
+
λ
3
r
3
训练
作者不是直接使用一般的pre-trained的SEQ2SEQ,因为一般的会产生dull&generic response, e.g. “i don’t know”。作者借用了自己以前论文用到的MMI公式代替MLE,假设pre-trained SEQ2SEQ产生了一个candidate list(比如 N-best list)记为
A={aˆ|aˆ pRL}
A
=
{
a
^
|
a
^
p
R
L
}
,记mutual information score(MMI文章内容,可参考我的这篇博客)为
m(aˆ|,[pi,qi)
m
(
a
^
|
,
[
p
i
,
q
i
)
作者用的是MLE和强化学习混合的训练方式。
对于长度为T的序列,前L个token使用MLE进行训练,后面T-L个token使用强化学习的方法。
使用退火算法,在训练过程中使得L逐步减小为0.
reward的expected为:
J(θ)=E[m(aˆ|,[pi,qi)]
J
(
θ
)
=
E
[
m
(
a
^
|
,
[
p
i
,
q
i
)
]
梯度
▽J(θ)=m(aˆ|,[pi,qi)▽logpRL(aˆ|,[pi,qi)
▽
J
(
θ
)
=
m
(
a
^
|
,
[
p
i
,
q
i
)
▽
l
o
g
p
R
L
(
a
^
|
,
[
p
i
,
q
i
)
按这公式训练所需的SEQ2SEQ模型
强化学习阶段
贴公式:
reward的expected为:
JRL(θ)=EpRL(a1:T)[∑i=Ti=1R(ai,[pi,qi])]
J
R
L
(
θ
)
=
E
p
R
L
(
a
1
:
T
)
[
∑
i
=
1
i
=
T
R
(
a
i
,
[
p
i
,
q
i
]
)
]
梯度:
▽JRL(θ)≈▽∑i=1logp(ai,pi,qi)[∑i=Ti=1R(ai,[pi,qi])]
▽
J
R
L
(
θ
)
≈
▽
∑
i
=
1
l
o
g
p
(
a
i
,
p
i
,
q
i
)
[
∑
i
=
1
i
=
T
R
(
a
i
,
[
p
i
,
q
i
]
)
]
文章中,实验测试阶段,作者使用beam search的技术(训练时好像不需要使用beam search?)就不展开了。
数据集为OpenSubtitle,实验部分本文不涉及。
本文完