对话系统大多数是基于生成式或者检索式的方法构建的,现有的对话系统没有从不同模型的优势中获益。检索式的方法依赖人工对候选答复进行筛选、重排序,由于答复是人工编写的,其有可能与输入信息不匹配。生成式的方法可以依据输入信息自动生成答复,但它会遇到生成大众化答复的问题。很自然,我们希望能利用检索的答复来加强生成的答复。为了利用检索的答复信息加强生成的答复,本文提出了一种检索增强对抗训练的神经网络答复生成方法(REAT)。REAT采用了encoder-decoder的架构,同时也检索式系统得到的N-bset候选答复。
论文地址:
https://arxiv.org/abs/1809.04276
引言
为了提升现有的对话生成系统,本文提出了检索增强的对抗训练方法来更好地利用N-best候选答复。首先,我们使用一个判别器代替原有的最大似然估计目标来监督训练的过程。另外,N-best候选答复也被用做于判别器的参考来提升它的分类准确度。事实证明,N-best候选答复通过对抗训练有利于生成模型。实验结果表明,我们提出的REAT模型性能优于普通的seq2seq模型,以及其他对抗训练方法。
数据集
本文实验基于NTCIR语料集,其数据来源于新浪微博。首先,我们借助LTP对语句做切分词处理。同时删除长度小于5的句子,其有利于缓解生成通用性答复的现象。我们从语料集中随机选取10000对语料做为开发集,然后选取10000对语料做为测试集,训练集语料大小为119941。
模型
检索增强的对抗训练
判别器的目标是区分一个答复y是人工生成的还是机器生成的,其概率公式如下:
D
Φ
(
y
∣
x
,
{
c
}
)
D_{\Phi}(y|x,\{c\})
DΦ(y∣x,{c})
其中,x是输入信息,
{
c
}
=
{
c
1
,
.
.
.
,
c
k
,
.
.
.
,
c
N
}
\{c\}=\{c^1,...,c^k,...,c^N\}
{c}={c1,...,ck,...,cN}是N-best答复候选集,
Φ
\Phi
Φ表示判别器的模型参数。判别器的目标方程是最小化分类错误率,具体如下:
J
D
(
Φ
)
=
−
E
y
∼
g
r
o
u
n
d
−
t
r
u
t
h
l
o
g
D
Φ
(
y
∣
x
,
{
c
}
)
−
E
y
∼
G
l
o
g
(
1
−
D
Φ
(
y
∣
x
,
{
c
}
)
)
J_D(\Phi)=-E_{y\sim ground-truth}logD_{\Phi}(y|x,\{c\})-E_{y \sim G}log(1-D_{\Phi}(y|x,\{c\}))
JD(Φ)=−Ey∼ground−truthlogDΦ(y∣x,{c})−Ey∼Glog(1−DΦ(y∣x,{c}))
我们把检索加强的答复生成看作是一个强化学习问题,其通过策略梯度算法将误差反向传播到生成器。生成器可以被看做是一个agent,其参数
θ
\theta
θ定义了更新策略
ϕ
\phi
ϕ。在每个时间步,生成器生成一个词并更新其当前状态
s
s
s。最后,agent能够从判别器获得一个奖励
r
r
r,它答复是人工生成
D
Φ
(
y
∣
,
{
c
}
)
D_{\Phi}(y|,\{c\})
DΦ(y∣,{c})的概率表示。
生成器的目标是最小化负期望奖励,梯度
θ
\theta
θ计算如下:
J
G
(
θ
)
=
−
E
y
∼
G
(
D
Φ
(
y
∣
x
,
{
c
}
)
)
J_G(\theta)=-E_{y\sim G}(D_{\Phi}(y|x,\{c\}))
JG(θ)=−Ey∼G(DΦ(y∣x,{c}))
J
G
(
θ
)
=
−
E
(
D
Φ
(
y
∣
x
,
{
c
}
)
)
,
y
∼
G
J_G(\theta)=-E(D_{\Phi}(y|x,\{c\})),y \sim G
JG(θ)=−E(DΦ(y∣x,{c})),y∼G
在对抗训练之前,生成器与判别器都是预先训练好的。生成器通过MLE损失在训练集上完成预训练,判别器利用人工生成的答复做为正样本以及机器生成的答复做为正样本完成模型的预训练。对于预训练的生成器与判别器,对抗训练如下:
m
i
n
G
m
a
x
D
J
G
(
θ
)
−
J
D
(
Φ
)
\underset{G}{min}\underset{D}{max}J_G(\theta)-J_D(\Phi)
GminDmaxJG(θ)−JD(Φ)
其中,判别器尽量区分人工生成的答复与机器生成的答复,生成器通过生成human-like的答复尽量去迷惑判别器。
判别器
判别器是二分类器,其通过输入答复y,信息x以及N-best候选答复
{
c
}
\{c\}
{c}来判断y是人工生成的还是机器生成的。我们通过计算出andidate-aware response representation
z
c
z^c
zc来建模答复与候选集之间的关联。每个候选对象通过candidate LSTM进行信息编码:
u
i
k
=
f
c
(
c
i
k
,
u
i
−
1
k
)
u_i^k=f_c(c_i^k,u^k_{i-1})
uik=fc(cik,ui−1k)
其中,
c
i
k
c_i^k
cik是第k个候选对象的第i个词,
u
i
k
u_i^k
uik表示i时刻的隐层状态。一般情况下,
u
T
k
u_T^k
uTk被用来初始化response LSTM的隐层状态,
T
T
T是句子长度。
Response LSTM用于为每个候选对象
c
k
c^k
ck计算局部candidate-aware response representation
z
c
k
z^{c^k}
zck:
v
i
k
=
f
y
(
y
i
,
v
i
−
1
k
)
v_i^k=f_y(y_i,v_{i-1}^k)
vik=fy(yi,vi−1k)
z
c
k
=
v
T
k
z^{c^k}=v^k_T
zck=vTk
z
c
=
1
N
∑
k
=
1
N
z
c
k
z^c=\frac{1}{N}\sum^{N}_{k=1}z^{c^k}
zc=N1k=1∑Nzck
与此同时,我们按照上述公式也可以得到
z
x
z^x
zx,用于表征信息(message)与答复(response)之间的关联。
最后,人工生成答复的概率
D
Φ
(
y
∣
x
,
{
c
}
)
D_{\Phi} (y|x,\{c\})
DΦ(y∣x,{c})计算如下:
D
Φ
(
y
∣
x
,
{
c
}
)
=
σ
(
M
L
P
(
[
z
x
,
z
c
]
)
)
D_{\Phi}(y|x,\{c\})=\sigma(MLP([z^x,z^c]))
DΦ(y∣x,{c})=σ(MLP([zx,zc]))
其中,
[
⋅
,
⋅
]
[\cdot,\cdot]
[⋅,⋅]表示拼接操作,
σ
\sigma
σ是sigmoid函数。
生成器
生成器是一个多源的seq2seq模型,由encoder与decoder组成。Encoder读取信息(message)与N-best候选答复(response),并将它们编码到上下文向量中(context vector)。Decoder是一个语言模型,其通过上下文向量逐字生成答复。
Encoder通过双向LSTM编码每个候选词汇以及它在候选答复中的上下文信息:
h
i
k
→
=
g
c
0
(
c
i
k
,
h
i
−
1
k
→
)
\overrightarrow{h_i^k}=g^0_c(c_i^k,\overrightarrow{h^k_{i-1}})
hik=gc0(cik,hi−1k)
h
i
k
←
=
g
c
1
(
c
i
k
,
h
i
−
1
k
←
)
\overleftarrow{h_i^k}=g_c^1(c_i^k,\overleftarrow{h^k_{i-1}})
hik=gc1(cik,hi−1k)
h
i
k
=
(
h
i
k
→
,
h
i
−
1
k
→
)
h_i^k=(\overrightarrow{h^k_{i}},\overrightarrow{h^k_{i-1}})
hik=(hik,hi−1k)
Encoder采用了2个级别的注意力结构,即word-level注意力与sentence-level注意力,其计算公式如下:
a
i
j
k
=
e
x
p
(
q
(
s
j
−
1
,
h
i
k
)
)
∑
t
=
1
T
e
x
p
(
q
(
s
j
−
1
,
h
t
k
)
)
a_{ij}^k=\frac{exp(q(s_{j-1},h_i^k))}{\sum_{t=1}^{T}exp(q(s_{j-1},h_t^k))}
aijk=∑t=1Texp(q(sj−1,htk))exp(q(sj−1,hik))
a
j
c
k
=
∑
i
=
1
T
a
i
j
k
h
i
k
a_j^{c^k}=\sum^{T}_{i=1}a_{ij}^kh_i^k
ajck=i=1∑Taijkhik
β
i
j
=
e
x
p
(
q
(
s
j
−
1
,
a
j
c
k
)
)
∑
n
−
1
N
e
x
p
(
q
(
s
j
−
1
,
a
j
c
n
)
)
\beta_{ij}=\frac{exp(q(s_{j-1},a_j^{c^k}))}{\sum_{n-1}^{N}exp(q(s_{j-1},a_j^{c^n}))}
βij=∑n−1Nexp(q(sj−1,ajcn))exp(q(sj−1,ajck))
a
j
c
=
∑
k
=
1
N
∑
i
=
1
T
β
k
j
a
i
j
k
h
i
k
a_j^c=\sum_{k=1}^{N}\sum_{i=1}^{T}\beta_{kj}a_{ij}^kh_i^k
ajc=k=1∑Ni=1∑Tβkjaijkhik
其中,
a
i
j
k
a_{ij}^k
aijk是
c
k
c^k
ck中第i个词的word-level权重,
s
j
−
1
s_j-1
sj−1是decoder的隐层状态,q是前馈神经网络,
β
i
j
k
\beta_{ij}^k
βijk是
c
k
c^k
ck的sentence-level权重。
a
j
c
a^c_j
ajc是候选上下文向量(candidate context vector),同样我们也可以得到信息上下文向量(message context vector)
a
j
x
a^x_j
ajx。decoder端j时刻的隐层状态计算如下:
s
j
=
g
y
(
[
y
i
−
1
,
a
j
c
,
a
j
x
]
,
s
j
−
1
)
s_j=g_y([y_{i-1},a^c_j,a^x_j],s_{j-1})
sj=gy([yi−1,ajc,ajx],sj−1)
其中,
g
y
g_y
gy是decoder端的计算单元。
####基于检索的模型
为了获取N-best答复候选集,我们借助Lucene实现答复的筛选。具体地,我们首先合并所有的message-response对,并为它们构建索引。然后,使用每个message做为query来搜索K篇文档,这些文档的message与上述query相似。接着,我们根据它们的匹配分值,对K篇文档重排序,去除query为message的此条数据。最终返回N个response做为N-best答复候选集。
实验
本文实验是基于开源框架OPEN-NMT,实验中用了5个基线模型,分别是Rtr、S2S、MS2S、Edit、AL。我们交互训练生成器与判别器,每训练20轮判别器,再去训练10轮生成器。为了保证对比的合理性,我们设置LSTM模型隐层节点数为500,batch size的大小为64,优化器选择Adam。人工评估与自动评估实验结果表明,我们提出的模型性能明显优于众多基线模型。
结论
本文作者认为基于检索的对话生成能提升生成式的对话系统,利用判别器与生成器对抗训练的思想,提出了一种新的模型(REAT)。在数据集上,对比了多个基线模型,验证了该模型的合理性。
扫码识别关注,获取更多新鲜论文解读