3 顺序匹配网络(Sequential Matching Network)
3.1 问题形式
假定,我们有一个数据集
D
=
{
(
y
i
,
s
i
,
r
i
)
}
i
=
1
N
\mathcal{D}=\left\{\left(y_{i}, s_{i}, r_{i}\right)\right\}_{i=1}^{N}
D={(yi,si,ri)}i=1N,
其中
s
i
=
u
i
,
1
,
…
,
u
i
,
n
i
s_i={u_i,1,\ldots,u_{i,n_i}}
si=ui,1,…,ui,ni表示具有
{
u
i
,
k
}
k
=
1
n
i
\left\{u_{i, k}\right\}_{k=1}^{n_{i}}
{ui,k}k=1ni作为表达的会话上下文。
r
i
r_i
ri表示候选回复,
y
i
∈
0
,
1
y_i\in{0,1}
yi∈0,1代表标签。
y
i
=
1
y_i=1
yi=1表示
r
i
r_i
ri是
s
i
s_i
si适当的回复,否则
y
i
=
0
y_i=0
yi=0。
我们的目标是学到一个针对数据集
D
\mathcal{D}
D的匹配模型
g
(
⋅
,
⋅
)
g(\cdot, \cdot)
g(⋅,⋅)。
对于任意一个背景-响应对
(
s
,
r
)
(s,r)
(s,r),
g
(
s
,
r
)
g(s,r)
g(s,r)测量
s
,
r
s,r
s,r之间的距离。
3.2 模型概述
我们提出了一个顺序匹配模型(SMN)来对 g ( ⋅ , ⋅ ) g(\cdot,\cdot) g(⋅,⋅)建模。图1给出了他的结构。
SMN首先将上下文-响应匹配分解为若干个话语-响应对匹配,然后通过递归神经网络将所有匹配对累加为基于上下文的匹配。
SMN由三个层组成。
第一层在单词级别和片段级别上将响应候选与上下文中的每个话语进行匹配,
并通过卷积、池化来提取来自这两个级别的重要匹配信息,并将其编码在匹配向量中。
然后,匹配向量被送到第二层,他们被积累在RNN的隐藏状态中,其中的GRU遵循上下文中话语的时间顺序。
第三层根据第二层的隐藏状态来计算最终的匹配分数。
与现有模型相比,SMN具有多个优势。
首先,候选应答可以在最开始的时候匹配上下文中的每个话语,从而可以充分提取每个话语响应对中的匹配信息,并以最小的损失得到最后的匹配得分。
其次,从每个话语中提取信息是在不同的粒度级别上进行的,并且
是在应答的充分监督下进行的,因此可以很好地识别和提取每个话语中对应答选择有用的语义结构。
第三,匹配和话语的关系是耦合的,而不是单独建模的,
因此话语关系(例如,顺序关系)作为一种知识,可以监督匹配分数的形成。
通过考虑话语关系,SMN将已被证明在单轮响应选择的文本匹配中有效的“2D”匹配扩展到在多轮对话对话的响应选择中基于上下文的顺序的“2D”匹配。
在接下来的部分中,我们将描述这三个层的详细信息。
3.3话语-应答匹配
给定上下文
s
s
s的话语
u
u
u和候选应答
r
r
r,模型查找嵌入表,并将
u
u
u和
r
r
r表示为
U
=
[
e
u
,
1
,
…
,
e
u
,
n
u
]
\mathbf{U}=\left[e_{u, 1}, \ldots, e_{u, n_{u}}\right]
U=[eu,1,…,eu,nu]和
R
=
[
e
r
,
1
,
…
,
e
r
,
n
r
]
\mathbf{R}=\left[e_{r, 1}, \ldots, e_{r, n_{r}}\right]
R=[er,1,…,er,nr],其中
e
u
,
i
,
e
r
,
i
∈
R
d
e_{u, i}, e_{r, i} \in \mathbb{R}^{d}
eu,i,er,i∈Rd
分别是
u
,
r
u,r
u,r的第
i
i
i个单词表示。
U
∈
R
d
×
n
u
\mathbf{U} \in \mathbb{R}^{d \times n_{u}}
U∈Rd×nu和
R
∈
R
d
×
n
r
\mathbf{R} \in \mathbb{R}^{d \times n_{r}}
R∈Rd×nr会用来构建
词与词之间的相似度矩阵
M
1
∈
R
n
u
×
n
r
\mathbf{M}_{1} \in \mathbb{R}^{n_{u} \times n_{r}}
M1∈Rnu×nr和序列-序列相似度矩阵
M
2
∈
R
n
u
×
n
r
\mathbf{M}_{2} \in \mathbb{R}^{n_{u} \times n_{r}}
M2∈Rnu×nr他们是
CNN
\text{CNN}
CNN的两个输入通道。
CNN从矩阵中提取重要的匹配信息,并将该信息编码成匹配向量
v
v
v。
特别地, ∀ i , j \forall i, j ∀i,j, M 1 \mathbf{M}_1 M1的第 ( i , j ) (i,j) (i,j)个元素定义如下:
e 1 , i , j = e u , i ⊤ ⋅ e r , j (1) e_{1, i, j}=e_{u, i}^{\top} \cdot e_{r, j} \tag{1} e1,i,j=eu,i⊤⋅er,j(1)
M 1 \mathbf{M}_1 M1在单词级别上对 u u u和 r r r的匹配建模。
为了构造
M
2
\mathbf{M}_2
M2我们首先使用
GRU
\text{GRU}
GRU将
U
\mathbf{U}
U和
R
\mathbf{R}
R变换为隐藏向量。
假定
H
u
=
[
h
u
,
1
,
…
,
h
u
,
n
u
]
\mathbf{H}_{u}=\left[h_{u, 1}, \ldots, h_{u, n_{u}}\right]
Hu=[hu,1,…,hu,nu]是
U
\mathbf{U}
U的隐藏向量,
∀
i
,
h
u
,
i
∈
R
m
\forall i, h_{u, i} \in \mathbb{R}^{m}
∀i,hu,i∈Rm定义如下:
z
i
=
σ
(
W
z
e
u
,
i
+
U
z
h
u
,
i
−
1
)
r
i
=
σ
(
W
r
e
u
,
i
+
U
r
h
u
,
i
−
1
)
h
~
u
,
i
=
tanh
(
W
h
e
u
,
i
+
U
h
(
r
i
⊙
h
u
,
i
−
1
)
)
h
u
,
i
=
z
i
⊙
h
~
u
,
i
+
(
1
−
z
i
)
⊙
h
u
,
i
−
1
(2)
\begin{array}{l} z_{i}=\sigma\left(\mathbf{W}_{\mathbf{z}} e_{u, i}+\mathbf{U}_{\mathbf{z}} h_{u, i-1}\right) \\ r_{i}=\sigma\left(\mathbf{W}_{\mathbf{r}} e_{u, i}+\mathbf{U}_{\mathbf{r}} h_{u, i-1}\right) \\ \tilde{h}_{u, i}=\tanh \left(\mathbf{W}_{\mathbf{h}} e_{u, i}+\mathbf{U}_{\mathbf{h}}\left(r_{i} \odot h_{u, i-1}\right)\right) \\ h_{u, i}=z_{i} \odot \widetilde{h}_{u, i}+\left(1-z_{i}\right) \odot h_{u, i-1} \end{array} \tag{2}
zi=σ(Wzeu,i+Uzhu,i−1)ri=σ(Wreu,i+Urhu,i−1)h~u,i=tanh(Wheu,i+Uh(ri⊙hu,i−1))hu,i=zi⊙h
u,i+(1−zi)⊙hu,i−1(2)
其中
u
u
,
0
=
0
u_{u,0}=0
uu,0=0,
z
i
z_i
zi和
r
i
r_i
ri分别为更新门和重置门,
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)是sigmoid函数,
W
z
,
W
h
,
W
r
,
U
z
,
U
r
,
U
h
\mathbf{W}_{\mathbf{z}}, \mathbf{W}_{\mathbf{h}}, \mathbf{W}_{\mathbf{r}}, \mathbf{U}_{\mathbf{z}}, \mathbf{U}_{\mathbf{r}}, \mathbf{U}_{\mathbf{h}}
Wz,Wh,Wr,Uz,Ur,Uh是参数。
相似地,我们有
H
r
=
[
h
r
,
1
,
…
,
h
r
,
n
r
]
\mathbf{H}_{r}=\left[h_{r, 1}, \ldots, h_{r, n_{r}}\right]
Hr=[hr,1,…,hr,nr]
作为
R
\mathbf{R}
R的隐藏向量。然后
∀
i
,
j
\forall i, j
∀i,j,
M
2
\mathbf{M}_2
M2的第
(
i
,
j
)
(i,j)
(i,j)个元素定义为:
e 2 , i , j = h u , i ⊤ A h r , j (3) e_{2, i, j}=h_{u, i}^{\top} \mathbf{A} h_{r, j} \tag{3} e2,i,j=hu,i⊤Ahr,j(3)
其中
A
∈
R
m
×
m
\mathbf{A} \in \mathbb{R}^{m \times m}
A∈Rm×m是线性变换。
∀
i
\forall i
∀i,GRU对直到位置
i
i
i的单词之间的顺序关系和依赖关系进行建模,并将直到第
i
i
i个单词的文本段落编码为隐藏向量。
因此, M 2 \mathbf{M}_2 M2在段落级别上对 u u u和 r r r之间的匹配进行建模。
M
1
,
M
2
\mathbf{M}_1,\mathbf{M}_2
M1,M2由
CNN
\text{CNN}
CNN处理形成
u
u
u。
∀
f
=
1
,
2
\forall f=1,2
∀f=1,2,
CNN
\text{CNN}
CNN用
M
f
\mathbf{M}_f
Mf来代表输入通道,
并且交替进行卷积核池化操作。
假定
z
(
l
,
f
)
=
[
z
i
,
j
(
l
,
f
)
]
I
(
l
,
f
)
×
J
(
l
,
f
)
z^{(l, f)}=\left[z_{i, j}^{(l, f)}\right]_{I^{(l, f)} \times J^{(l, f)}}
z(l,f)=[zi,j(l,f)]I(l,f)×J(l,f)
代表输出的特征映射由类型
f
f
f到层
l
l
l,其中
z
(
0
,
f
)
=
M
f
,
∀
f
=
1
,
2
z^{(0, f)}=\mathbf{M}_{f},\forall f=1,2
z(0,f)=Mf,∀f=1,2。
在卷积层上,我们使用具有窗口大小 r w ( l , f ) × r h ( l , f ) r_{w}^{(l, f)} \times r_{h}^{(l, f)} rw(l,f)×rh(l,f)的2D卷积运算,定义 z i , j ( l , f ) z_{i, j}^{(l, f)} zi,j(l,f):
z
i
,
j
(
l
,
f
)
=
σ
(
∑
f
′
=
0
F
l
−
1
∑
s
=
0
r
w
(
l
,
f
)
∑
t
=
0
(
l
,
f
)
W
s
,
t
(
l
,
f
)
⋅
z
i
+
s
,
j
+
t
(
l
−
1
,
f
′
)
+
b
l
,
k
)
(4)
z_{i, j}^{(l, f)}=\sigma\left(\sum_{f^{\prime}=0}^{F_{l-1}} \sum_{s=0}^{r_{w}^{(l, f)}} \sum_{t=0}^{(l, f)} \mathbf{W}_{s, t}^{(l, f)} \cdot z_{i+s, j+t}^{\left(l-1, f^{\prime}\right)}+\mathbf{b}^{l, k}\right)\tag{4}
zi,j(l,f)=σ⎝⎛f′=0∑Fl−1s=0∑rw(l,f)t=0∑(l,f)Ws,t(l,f)⋅zi+s,j+t(l−1,f′)+bl,k⎠⎞(4)
其中
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)是
ReLU
\text{ReLU}
ReLU,
W
(
l
,
f
)
∈
R
r
w
(
l
,
f
)
×
r
h
(
l
,
f
)
\mathbf{W}^{(l, f)} \in \mathbb{R}^{r_{w}^{(l, f)} \times r_{h}^{(l, f)}}
W(l,f)∈Rrw(l,f)×rh(l,f),
b
l
,
k
\mathbf{b}^{l, k}
bl,k
是参数,
F
l
−
1
F_{l-1}
Fl−1是在第
(
l
−
1
)
(l-1)
(l−1)层的特征映射的数量。最大池化运算跟随卷积运算,可表示为
z i , j ( l , f ) = max p w ( l , f ) > s ≥ 0 max p h ( l , f ) > t ≥ 0 z i + s , j + t (5) z_{i, j}^{(l, f)}=\max _{p_{w}^{(l, f)}>s \geq 0} \max _{p_{h}^{(l, f)}>t \geq 0} z_{i+s, j+t} \tag{5} zi,j(l,f)=pw(l,f)>s≥0maxph(l,f)>t≥0maxzi+s,j+t(5)
其中
p
w
(
l
,
f
)
p_{w}^{(l, f)}
pw(l,f)和
p
h
(
l
,
f
)
p_{h}^{(l, f)}
ph(l,f)分别是二维池化的宽度和高度。
最终特征映射的输出通过连接和线性变换映射到低维空间来作为匹配向量
v
∈
R
q
v \in \mathbb{R}^{q}
v∈Rq。
根据公式1、3、4、5,我们可以看到通过从训练数据中学习单词嵌入和
GRU
\text{GRU}
GRU的参数,话语中的单词或片段对于识别响应适应性很有用,可能与响应中的某些单词或段落有很高的相似度,并导致相似矩阵中的高值区域。
这些区域将通过卷积和池化操作进行转换和选择,并在话语中将重要信息携带到匹配向量中。
这就是我们的模型如何在上下文中识别重要信息并在响应的监督下利用它进行匹配。
我们考虑多个通道,因为我们想在多个粒度级别上捕获重要的匹配信息。
3.4 匹配积累
假定
[
v
1
,
…
,
v
n
]
\left[v_{1}, \dots, v_{n}\right]
[v1,…,vn]是第一层的输出(对应于
n
n
n对),在第二层,
GRU
\text{GRU}
GRU接受
[
v
1
,
…
,
v
n
]
\left[v_{1}, \dots, v_{n}\right]
[v1,…,vn]作为输入并且将匹配序列编码为具有类似于公式
2
2
2的详细参数化的隐藏状态
H
m
=
[
h
1
′
,
…
,
h
n
′
]
∈
R
q
×
n
H_{m}=\left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right] \in \mathbb{R}^{q \times n}
Hm=[h1′,…,hn′]∈Rq×n。
这一层有两个功能:
(1)它对上下文中话语的依赖关系和时态关系进行建模;
(2)作为基于上下文的匹配,它利用时间关系来监督pair matching的积累。
此外,由公式(2)可知重置门
r
i
r_i
ri和更新门
z
i
z_i
zi控制以前的隐藏状态和当前的输入流入到当前隐藏状态的信息量,
因此可以积累重要的匹配向量(对应重要的话语),同时过滤掉
向量中的噪声。
3.5 匹配预测与学习
已知 [ h 1 ′ , … , h n ′ ] \left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right] [h1′,…,hn′],我们定义 g ( s , r ) g(s,r) g(s,r)为:
g
(
s
,
r
)
=
softmax
(
W
2
L
[
h
1
′
,
…
,
h
n
′
]
+
b
2
)
(6)
g(s, r)=\operatorname{softmax}\left(\mathbf{W}_{2} L\left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right]+\mathbf{b}_{2}\right) \tag{6}
g(s,r)=softmax(W2L[h1′,…,hn′]+b2)(6)
其中
W
2
,
b
2
\mathbf{W_2,b_2}
W2,b2是参数。
我们考虑
L
[
h
1
′
,
…
,
h
n
′
]
L\left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right]
L[h1′,…,hn′]的三个参数:
- 只使用最后一个隐藏状态。 L [ h 1 ′ , … , h n ′ ] = h n ′ L\left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right]=h_{n}^{\prime} L[h1′,…,hn′]=hn′
- 对隐藏状态进行线性组合。 L [ h 1 ′ , … , h n ′ ] = ∑ i = 1 n w i h i ′ L\left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right]=\sum_{i=1}^{n} w_{i} h_{i}^{\prime} L[h1′,…,hn′]=∑i=1nwihi′
- 我们遵循(Yang et al., 2016),采用一种注意力机制来合并隐藏状态。
L [ h 1 ′ , … , h n ′ ] L\left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right] L[h1′,…,hn′]定义如下:
t i = tanh ( W 1 , 1 h u i , n u + W 1 , 2 h i ′ + b 1 ) α i = exp ( t i ⊤ t s ) ∑ i ( exp ( t i ⊤ t s ) ) L [ h 1 ′ , … , h n ′ ] = ∑ i = 1 n α i h i ′ (7) \begin{array}{l} t_{i}=\tanh \left(\mathbf{W}_{1,1} h_{u_{i}, n_{u}}+\mathbf{W}_{1,2} h_{i}^{\prime}+\mathbf{b}_{1}\right) \\ \alpha_{i}=\frac{\exp \left(t_{i}^{\top} t_{s}\right)}{\sum_{i}\left(\exp \left(t_{i}^{\top} t_{s}\right)\right)} \\ L\left[h_{1}^{\prime}, \ldots, h_{n}^{\prime}\right]=\sum_{i=1}^{n} \alpha_{i} h_{i}^{\prime} \end{array}\tag{7} ti=tanh(W1,1hui,nu+W1,2hi′+b1)αi=∑i(exp(ti⊤ts))exp(ti⊤ts)L[h1′,…,hn′]=∑i=1nαihi′(7)
其中,
W
1
,
1
∈
R
q
×
m
,
W
1
,
2
∈
R
q
×
q
,
b
1
∈
R
q
\mathbf { W } _ { \mathbf { 1 } , \mathbf { 1 } } \in \mathbb { R } ^ { q \times m } , \mathbf { W } _ { \mathbf { 1 } , \mathbf { 2 } } \in \mathbb { R } ^ { q \times q },\mathbf{b_1}\in \mathbb{R}^q
W1,1∈Rq×m,W1,2∈Rq×q,b1∈Rq为参数。
h
i
′
,
h
u
i
,
n
u
h_i^{'},h_{u_i,n_u}
hi′,hui,nu分别是第
i
i
i个匹配向量,第
i
i
i个话语的最终隐藏状态。
t
s
∈
R
q
t _ { s } \in \mathbb { R } ^ { q }
ts∈Rq是一个在训练中随机初始化并共同学习的虚拟上下文向量。
(2)和(3)都是为了从训练数据中学习
{
h
1
′
,
…
,
h
n
′
}
\left\{ h _ { 1 } ^ { \prime } , \ldots , h _ { n } ^ { \prime } \right\}
{h1′,…,hn′}的权重,
并突出了重要匹配向量在最终匹配中的作用。
不同的是,(2)中的权重是静态的,因为权重完全由话语的位置决定,而(3)中的权重是通过匹配向量和话语向量动态计算的。
我们用
L
[
h
1
′
,
…
,
h
n
′
]
L \left[ h _ { 1 } ^ { \prime } , \ldots , h _ { n } ^ { \prime } \right]
L[h1′,…,hn′]
的三个参数来表示我们的模型,分别为
S
M
N
last
,
S
M
N
static
,
S
M
N
dynamic
\mathrm { SMN } _ { \text {last} } , \mathrm { SMN } _ { \text {static} } , \mathrm { SMN } _ { \text {dynamic} }
SMNlast,SMNstatic,SMNdynamic,
并在实验中对它们进行实证比较。
我们通过最小化与
D
\mathcal{D}
D的交叉熵,来学习
g
(
⋅
,
⋅
)
g(\cdot,\cdot)
g(⋅,⋅)。
用
Θ
\Theta
Θ来代表
SMN
\text{SMN}
SMN的参数,然后学习的目标函数可以定义为
∑ i = 1 N [ y i log ( g ( s i , r i ) ) + ( 1 − y i ) log ( 1 − g ( s i , r i ) ) ] (8) \sum _ { i = 1 } ^ { N } \left[ y _ { i } \log \left( g \left( s _ { i } , r _ { i } \right) \right) + \left( 1 - y _ { i } \right) \log \left( 1 - g \left( s _ { i } , r _ { i } \right) \right) \right]\tag{8} i=1∑N[yilog(g(si,ri))+(1−yi)log(1−g(si,ri))](8)
4. 候选应答检索
在实践中,基于检索的聊天机器人要将匹配方法应用于响应选择,需要预先从索引中检索多个候选响应。
虽然候选检索不是本文的重点,但它是实际系统中的重要一步。
在这项工作中,我们使用启发式方法从索引中获得候选响应。
给定具有
{
u
1
,
…
,
u
n
−
1
}
\left\{ u _ { 1 } , \ldots , u _ { n - 1 } \right\}
{u1,…,un−1}前几轮的发言的信息
u
n
u_n
un,
我们从
{
u
1
,
…
,
u
n
−
1
}
\left\{ u _ { 1 } , \ldots , u _ { n - 1 } \right\}
{u1,…,un−1}提取前5个关键字根据他们的TF-IDF分数
并且使用关键词展开
u
n
u_n
un。
然后,我们将扩展消息发送到索引,并使用索引的内联检索算法检索响应候选。
最后,我们使用
g
(
s
,
r
)
g(s,r)
g(s,r)来对候选重新排序,并返回顶部的候选作为对上下文的响应。
5. 实验
我们在公开可用的英文数据集和本文发表的中文数据集上对我们的模型进行了测试。
5.1 Ubuntu语料
英文数据集是Ubuntu语料库(Lowe等人,2015年),其中包含从Ubuntu论坛的聊天日志中收集的多轮对话。
数据集包括用于训练的100万对上下文-响应对、用于验证的50万对和用于测试的50万对。
积极的反应是来自人类的真实反应,消极的反应是随机抽样的。
在训练中,正负之比为1:1,而在验证和测试中为1:9。
我们使用了徐等人分享的副本(2016)2其中数字、URL和路径由特殊占位符替换。
我们遵循(Lowe et al., 2015),采用n个候选中k位的召回率(Rn@k)作为评价指标。
5.2 豆瓣会话语料库
Ubuntu语料库是一个特定于领域的数据集,响应候选是在没有人为判断的情况下从负抽样中获得的。
为了进一步验证我们模型的有效性,我们创建了一个新的具有开放领域对话的数据集,称为豆瓣对话语料库。
豆瓣会话语料库测试集中的应答候选按照基于检索的chatbot程序收集,并由人工判断标记。
它模拟了一个基于检索的聊天机器人的真实场景。
我们将其发布给研究社区,以促进多轮对话的研究。
具体来说,我们从豆瓣小组(在中国很受欢迎的社交网络服务)中抓取了超过2个回合的110万次双向对话(两个人之间的对话)。
我们随机抽取了50万个用于创建训练集的对话,2.5万个用于创建验证集的对话和1000个用于创建测试集的对话,并确保这三个集之间没有重叠。
对于训练和验证中的每一个对话,我们将最后一个回合作为一个积极的回应,将前一个回合作为一个背景,并从110万数据中随机抽取另一个回应作为一个消极的回应。
训练集中有100万个上下文-响应对,验证集中有5万个上下文-响应对。
为了创建测试集,我们首先从中国最大的微博服务新浪微博抓取了1500万对post-reply对,并用Lucene对这些对进行了索引。
我们将测试集中每个豆瓣二元对话的最后一轮作为消息,按照第4节中的方法从索引中检索到10个响应候选,最终形成了一个具有10,000个上下文-响应对的测试集。
我们招募了三名标签员来判断候选人是否对上下文做出了适当的反应。
正确的响应意味着在给定整个上下文的情况下,响应可以自然地回复消息。
每一对收到三个标签,其中大部分标签被作为最终决定。
表二列出了这三组的统计数字。注意,标签的Fleiss‘kappa(Fleiss,1971)为0.41,这表明三个标注者达成了相对较高的一致性。
除了
R
n
@
k
s
R _ { n } @ k s
Rn@ks,我们还遵循了信息检索的惯例,采用了
平均精度均值 (MAP)、平均倒数排名(MRR)和在第一位的精度
(
P
@
1
)
( \mathrm { P } @ 1 )
(P@1)作为评价指标。
我们没有计算 R 2 @ 1 \mathrm{R_2}@1 R2@1是因为在豆瓣语料库中,一个语境可能有多个正确答案,因此我们不得不随机抽取一个样本用于 R 2 @ 1 \mathrm{R_2}@1 R2@1,这样可能会给评估带来偏差。
当使用标记集时,我们删除了所有负面响应或所有正面响应的对话,因为模型对它们没有影响。
测试集中还剩下6670个上下文响应对。
5.3 基线
我们考虑了以下基线:
Basic models: (Lowe等人,2015)和(Kadlec等人,2015)中的模型,包括TF-IDF、RNN、CNN、LSTM和BiLSTM。
Multi-view: Zhou等人提出的模型(2016)利用分层递归神经网络对话语关系进行建模。
Deep learning to respond (DL2R): Yan等人提出的模型 (2016)用上下文中的其他话语重新表达了信息。
Advanced single-turn matching models: 由于BiLSTM不代表最先进的匹配模型,我们在上下文中串联话语,并使用更强大的模型将长文本与应答候选进行匹配,这些模型包括MV-LSTM(wan等人,2016)(2D匹配)、Match-LSTM(Wang和酱,2015)、Attentive-LSTM(Tan等人,2015)(两个基于注意力的模型)和多通道,如第3.3节所述。
多通道是我们模型的一个简单版本,没有考虑话语关系。
我们还将上下文中的前5个TF-IDF单词附加到输入消息中,并计算扩展消息与具有多通道的响应之间的分数,表示为
Multi-Channel
e
x
p
\text{Multi-Channel}_ { e x p }
Multi-Channelexp
5.4 参数调整
对于基线模型,如果它们的结果在现有文献中可用(例如,在Ubuntu语料库上的结果),我们只复制数字,否则我们按照文献中的设置实现模型。
所有模型都是使用Theano实现的(Theano开发团队,2016)。单词嵌入由word2vec(Mikolov等人,2013年)的结果初始化,该结果运行在训练数据上,词向量的维数为200。
对于我们的模型中的多通道和第一层,我们将GRU的隐藏状态的维数设置为200。
我们在{(2,2),(3,3)(4,4)}中调整了卷积和池化的窗口大小,最终选择了(3,3)。
特征映射的数量是8个。
在第二层中,我们将匹配向量的维数和GRU的隐藏状态设置为50。
在单个Tesla K80 GPU上,使用Adam算法(Kingma和Ba,2014)通过随机梯度下降法更新了参数。
初始学习率为0.001,Adam的参数,
β
1
,
β
2
\beta_1,\beta_2
β1,β2分别为0.9,0.999。
我们采用了提前停止作为正则化策略。
对模型进行小批量训练,批大小为200个,最大话语数量为50个。
我们将最大上下文长度(即话语数量)设置为10,因为超过10的上下文不会提高模型的性能(详细信息见第5.6节)。
如果上下文中的话语数量少于10个,我们将填充零,否则我们将保留最后10个话语。
5.5 评估结果
表3显示了对这两个数据集的评估结果。
我们的模型在两个数据集的所有指标上要由于baseline,改进在统计上是显著的(用p值≤0.01进行t检验,除了豆瓣语料库上的R10@5)。
即使是最先进的单轮匹配模型,其性能也比我们的模型差得多。
结果表明,人们不能忽视话语关系,可以简单地将话语串联起来进行多轮对话响应的选择。
我们的模型比Multi-View有了重大改进,这证明了我们的“匹配优先”策略是合理的。
DL2R比我们的模型差,说明使用启发式规则的话语重构不是一种很好的利用上下文信息的方法。
R n @ k s R _ { n } @ k s Rn@ks在豆瓣语料库上较低,因为对于上下文有多个正确的候选(例如,如果有3个正确的响应,则最大 R 10 @ 1 R_{10}@1 R10@1为0.33)。
SMN
d
y
n
a
m
i
c
\text{SMN}_ { d y n a m i c }
SMNdynamic仅略好于
SMN
s
t
a
t
i
c
\text{SMN}_ { static}
SMNstatic
和
SMN
l
a
s
t
\text{SMN}_ {last}
SMNlast。
这可能是由于GRU可以通过其门机制从匹配序列中选择有用的信号,并在最终状态下将它们累加,从而导致注意力机制对手头任务的效果不明显。
5.6 进一步分析
可视化: 我们可视化了相似矩阵和GRU在第二层的门通过使用来着Ubuntu语料的样例,
来进一步阐明我们模型是如何识别语境中的重要信息,如何通过GRU的门控机制来选择重要的匹配向量,如3.3节和3.4节中所说的那样。
样例:
- u1: how can unzip many rar(_number_for example) files at once;
- u2: sure you can do that is bash
- u3: okey how?
- u4: are the files all in the same directory?
- u5: yes thay all are;
- r: then the command glebihan should extract them all from/to that directory
它来自测试集,我们的模型成功地将正确的回答排在了最前面。
由于空间限制,我们只可视化了
M
1
,
M
2
\mathbf { M } _ { 1 } , \mathbf { M } _ { 2 }
M1,M2
和更新门
(
i.e.
z
)
(\text{i.e.} z)
(i.e.z)在图2中。
我们可以看到,在
u
1
u_1
u1中,包括"unzip",“rar”,“files"等重要单词
被
r
r
r中的"command”,“extract”,"directory"识别进行匹配,
而
u
3
u_3
u3几乎毫无用处,因此从中提取的信息很少。
u
1
u_1
u1对响应的选择至关重要,来自
u
1
u_1
u1和
r
r
r的近乎所有信息都流向了
GRU的隐藏状态,而且其他话语的信息较少,并且相应的门几乎是关闭的,
以保持来自
u
1
u_1
u1和
r
r
r的信息直到最终状态。
模型消融: 我们通过将
SMN
\text{SMN}
SMN的不同部分逐一从
SMN
l
a
s
t
\text{SMN}_{last}
SMNlast中移除
来研究
SMN
\text{SMN}
SMN的不同部分的影响,如表4所示。
首先,用神经张量网络(NTN)(Socher等人,2013)
取代多通道的“2D”匹配(表示为
R
e
p
l
a
c
e
M
Replace_{M}
ReplaceM)会使性能急剧下降。
这是因为NTN仅通过话语向量和响应向量匹配一对,并且丢失该对中的重要信息。
结合可视化,我们可以得出结论,“2D”匹配在“匹配优先”策略中起着关键作用,因为它以最小的损失捕捉到每对匹配中的重要匹配信息。
其次,当用多层感知器替换用于匹配积累的GRU时,性能略有下降
(表示为
Replace
A
\text{Replace}_A
ReplaceA)。
这表明话语关系是有用的。
最后,我们只留下一个通道进行匹配,发现M2比M1稍微强大一些,并且两者都达到了最好的效果(除了豆瓣语料库上的 R 10 @ 5 R _ { 10 } @ 5 R10@5)。
跨上下文长度的性能:
我们研究了我们的模型(
SMN
l
a
s
t
\text{SMN}_{last}
SMNlast)在整个上下文中的表现。
图3显示了豆瓣语料库上不同长度间隔的MAP上的比较。
我们的模型始终比基线执行得更好,并且当上下文变长时,差距会变得更大。
实验结果表明,该模型能够很好地捕捉上下文中话语之间的依赖关系,尤其是长依赖关系。
最大上下文长度: 我们研究了最大上下文长度对SMN的影响。
图4显示了在最大上下文长度方面,SMN在Ubuntu Corpus和Douban Corpus上的性能。
从图4中,我们发现,当最大上下文长度小于5时,性能将显着提高,并且在上下文长度达到10后变得稳定。
这表明上下文信息对于多轮响应选择很重要,我们可以将最大上下文长度设置为10,以平衡有效性和效率。
错误分析: 尽管SMN在这两个数据集上的表现优于基线方法,但仍有一些无法完美解决的问题。
(1)逻辑一致性。SMN在语义级别上对上下文和响应进行建模,但很少关注逻辑一致性。这导致了豆瓣语料库中的多个DSAT。
例如,给定上下文:
- a: Does anyone know Newton jogging shoes?
- b: 100 RMB on Taobao.
- a: I know that. I do not want to buy it because that is a fake which is made in Qingdao
- b: Is it the only reason you do not want to buy it?
SMN对响应It is not a fake. I just worry about the date of manufacture
给予高分。
该响应与逻辑上下文不一致,因为它声称慢跑鞋不是假货。
将来,我们将探讨基于检索的聊天机器人中的逻辑一致性问题。
(2)检索后没有正确的候选项。在实验中,我们准备了1000个上下文进行测试,但是只有667个上下文在候选响应检索后具有正确的候选。
这表明候选检索组件仍有改进的空间,仅在上下文中使用几个关键字扩展输入消息可能不是候选检索的理想方法。
将来,我们将考虑用于检索候选的高级方法。
6. 结论与未来工作
我们提出了一个新的基于上下文的模型,用于基于检索的聊天机器人中的多轮回复选择。
在开放数据集上的实验结果表明,该模型可以大大优于现有方法。
此外,我们还向研究社区发布了第一个人类标记的多轮回复选择数据集。
将来,我们将研究如何对响应的逻辑一致性进行建模并改善候选检索。
做了什么?
- 提出了顺序匹配网络,从单词级和段落级两个粒度考虑整个会话与回复的相似度
- 第一层使用GRU按照时间顺序来得到语义向量
- 第二层的CNN有两个输入通道,分别对应于单词级和段落级
解决了什么?
解决了当前工作中没有考虑整个对话中每个话语之间关系和重要的语境信息。