提示:阅读论文时进行相关思想、结构、优缺点,内容进行提炼和记录,论文和相关引用会标明出处。
前言
标题:Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieval-Based Chatbots
原文链接:Link
Github:NLP相关Paper笔记和实现
说明:阅读论文时进行相关思想、结构、优缺点,内容进行提炼和记录,论文和相关引用会标明出处,引用之处如有侵权,烦请告知删除。
转载请注明:DengBoCong
介绍
本文的SMN模型结构可以说影响了很多后续相关的论文,所解决的是基于检索的聊天机器人中多回合对话的回复选择。在之前的工作,基于检索的聊天机器人的做法是将context里所有的utterances都连接在一起,将这个长长的context做处理然后和response作匹配,这样做可能会丢失语句间的关系或重要的上下文信息。Sequential Matching Network(SMN)模型就是为了解决这些问题而来的。
SMN首先在多个粒度级别上将上下文中每个utterance都和response做匹配,然后通过卷积和池化操作从每对中提取重要的匹配信息作为向量,接着通过递归神经网络(RNN)按时间顺序累积矢量,该神经网络对utterance之间的关系进行建模,最后使用RNN的隐藏状态计算最终匹配分数。
构建对话机器人的现有方法中,可以分为 generation-based(生成式)和retrieval-based(检索式),相对于生成式而言,检索式拥有的信息更加丰富,且运行流畅的特点。选择response的关键在于输入response匹配。与单回合对话不同,多回合对话需要在响应和对话上下文之间进行匹配,在该上下文中,不仅需要考虑response和输入信息之间的匹配,而且还需要考虑前一回合中response和utterances之间的匹配。总结而言该领域的任务存在如下的challenges:
- 如何根据上下文识别重要信息(单词,短语和句子),这对于选择正确的response并利用相关信息进行匹配至关重要
- 如何对上下文中的utterances之间的关系进行建模。
下图展示了challenges的例子:第二句的“hold a drum class”和第三句的“drum”相关性很强,所以回复是高度依赖于上下文以及语句之间的关系的。
在上面粗体中描述了SMN的结构流程,具体来说,对于每个utterance-response对而言,模型通过word embeddings和带有门控递归单元(GRU)的递归神经网络的隐藏状态来构造word-word相似度矩阵和sequence-sequence相似度矩阵。这两个矩阵分别在word级别和segment(单词子序列)级别上捕获成对的重要匹配信息,并且通过交替对矩阵进行卷积和池化操作,将信息提取和融合为匹配向量。
通过这种方式,可以在response的充分监督下识别上下文中多个粒度级别的重要信息,并以最小的损失进行匹配,然后将匹配向量喂给另一个GRU,以形成context和response的匹配分数,这个GRU会根据上下文中utterances的时间顺序在其隐藏状态下累积匹配。它以匹配的方式对utterances之间的关系和依存关系进行建模,并以utterances的顺序来监督配对匹配的累积。context和response的匹配程度是由具有GRU隐藏状态的logit模型计算的。
具体结构及实现
问题符号化
数据集表示为 D = { ( y i , s i , r i ) } i = 1 N D=\{(y_i,s_i,r_i)\}_{i=1}^N D={(yi,si,ri)}i=1N,其中 s i = { u i , 1 , . . . , u i , n i } s_i=\{u_{i,1},...,u_{i,n_i}\} si={ui,1,...,ui,ni}表示对话上下文, { u i , k } k = 1 n i \{u_{i,k}\}_{k=1}^{n_i} {ui,k}k=1ni表示utterances, r i r_i ri表示response的候选, 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 D D 的匹配模型 g ( . , . ) g(.,.) g(.,.),对于任何context-response pair ( s , r ) (s,r) (s,r), g ( s , r ) g(s,r) g(s,r) 衡量 s s s 和 r r r 之间的匹配程度。
模型结构
按照上面的模型结构图,SMN首先将context-response分解为几个utterance-response pair匹配,然后通过递归神经网络将所有pairs匹配累积为基于上下文的匹配。模型分为三层:
- 在word级别和segment级别将候选response与上下文中的每个utterance匹配,然后通过卷积提取两个层上的重要匹配信息,池化并编码为匹配向量。
- 将上一层得到的匹配向量喂入第二层,在该层中,它们按照上下文中utterances的时间顺序在具有GRU的递归神经网络的隐藏状态下进行累积。
- 将上一层的隐藏状态用于计算最终匹配分数
这样的模型结构有以下的优势:
- 一个候选response可以在一开始就匹配上下文中的每个utterances,因此可以充分提取每个utterance-response pair中的匹配信息,并以最小的损失将其携带到最终匹配分数
- 由于从每个utterance中提取信息是在不同的粒度级别上进行的,并且在response的充分监督下进行,因此可以很好地识别和提取对每个utterance中的response选择有用的语义结构。
- 匹配和utterance关系是耦合而不是分开建模的,因此,作为一种knowledge,utterance关系(例如顺序)可以监督匹配分数的形成。
接下来针对三层的细节展开描述。
Utterance-Response匹配
给定上下文
s
s
s 中的语句
u
u
u 和候选响应
r
r
r,然后对
u
u
u 和
r
r
r 进行Embedding得到对应的表示
U
=
[
e
u
,
1
,
.
.
.
,
e
u
,
n
u
]
U=[e_{u,1},...,e_{u,n_u}]
U=[eu,1,...,eu,nu] 和
R
=
[
e
r
,
1
,
.
.
.
,
e
r
,
n
r
]
R=[e_{r,1},...,e_{r,n_r}]
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
u
u 和
r
r
r 的第
i
i
i 个单词的嵌入。然后使用
U
∈
R
d
×
n
u
U\in \mathbb{R}^{d\times n_u}
U∈Rd×nu 和
R
∈
R
d
×
n
r
R\in \mathbb{R}^{d\times n_r}
R∈Rd×nr 构造word-word相似度矩阵
M
1
∈
R
n
u
×
n
r
M_1\in \mathbb{R}^{n_u\times n_r}
M1∈Rnu×nr,以及sequence-sequence相似度矩阵
M
2
∈
R
n
u
×
n
r
M_2\in \mathbb{R}^{n_u\times n_r}
M2∈Rnu×nr,这两个矩阵作为卷积神经网络(CNN)的两个input channels,CNN从矩阵中提取重要的匹配信息,并将该信息编码为匹配向量
v
v
v。具体来说,
∀
i
,
j
\forall i,j
∀i,j,
M
1
M_1
M1 第
(
i
,
j
)
(i,j)
(i,j) 个元素被定义为(公式1):
e
1
,
i
,
j
=
e
u
,
i
T
⋅
e
r
,
j
e_{1,i,j}=e_{u,i}^T\cdot e_{r,j}
e1,i,j=eu,iT⋅er,j
M
1
M_1
M1 在单词级别上模拟
u
u
u 和
r
r
r 之间的匹配。为了构造
M
2
M_2
M2 ,我们首先使用GRU将
U
U
U 和
R
R
R 转换为隐藏向量。假设
H
u
=
[
h
u
,
1
,
.
.
.
,
h
u
,
n
u
]
H_u=[h_{u,1},...,h_{u,n_u}]
Hu=[hu,1,...,hu,nu] 是
U
U
U 的隐藏向量,则
∀
i
,
h
u
,
i
∈
R
m
\forall i,h_{u,i}\in \mathbb{R}^m
∀i,hu,i∈Rm 定义为(公式2):
z
i
=
σ
(
W
z
e
u
,
i
+
U
z
h
u
,
i
−
1
)
z_i=\sigma (W_{ze_{u,i}}+U_zh_{u,i-1})
zi=σ(Wzeu,i+Uzhu,i−1)
r
i
=
σ
(
W
r
e
u
,
i
+
U
r
h
u
,
i
−
1
)
r_i=\sigma (W_{re_{u,i}}+U_rh_{u,i-1})
ri=σ(Wreu,i+Urhu,i−1)
h
~
u
,
i
=
t
a
n
h
(
W
h
e
u
,
i
+
U
h
(
r
i
⊙
h
u
,
i
−
1
)
)
\tilde{h}_{u,i}=tanh(W_{he_{u,i}}+U_{h}(r_i\odot h_{u,i-1}))
h~u,i=tanh(Wheu,i+Uh(ri⊙hu,i−1))
h
u
,
i
=
z
i
⊙
h
~
u
,
i
+
(
1
−
z
i
)
⊙
h
u
,
i
−
1
h_{u,i}=z_i\odot\tilde{h}_{u,i}+(1-z_i)\odot h_{u,i-1}
hu,i=zi⊙h~u,i+(1−zi)⊙hu,i−1
其中
h
u
,
0
=
0
h_{u,0}=0
hu,0=0,
z
i
z_i
zi 和
r
i
r_i
ri 分别是update gate和reset gate,
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)是一个sigmoid函数,
W
z
,
W
h
,
W
r
,
U
z
,
U
r
,
U
h
W_z,W_h,W_r,U_z,U_r,U_h
Wz,Wh,Wr,Uz,Ur,Uh 都是参数,同样,我们有
H
r
=
[
h
r
,
1
,
.
.
.
,
h
r
,
n
r
]
H_r=[h_{r,1},...,h_{r,n_r}]
Hr=[hr,1,...,hr,nr] 作为
R
R
R 的隐藏向量,然后
∀
i
,
j
\forall i,j
∀i,j,
M
2
M_2
M2 第
(
i
,
j
)
(i,j)
(i,j) 个元素被定义为(公式3):
e
2
,
i
,
j
=
e
u
,
i
T
A
h
r
,
j
e_{2,i,j}=e_{u,i}^TAh_{r,j}
e2,i,j=eu,iTAhr,j
其中
A
∈
R
m
×
m
A\in \mathbb{R}^{m\times m}
A∈Rm×m 是一个线性变换,
∀
i
\forall i
∀i,GRU对直到位置
i
i
i 的单词之间的顺序关系和依赖关系进行建模,并对text segment进行编码,直到第
i
i
i 个单词为隐藏矢量为止,
M
2
M_2
M2 在segment级别上建模
u
u
u 和
r
r
r 之间的匹配。
然后,CNN将
M
1
M_1
M1 和
M
2
M_2
M2 处理为
v
v
v。
∀
f
=
1
,
2
\forall f=1,2
∀f=1,2,CNN视
M
f
M_f
Mf 为输入通道,交替进行卷积和最大池化操作。假设
∀
f
=
1
,
2
\forall f=1,2
∀f=1,2,
z
(
l
,
f
)
=
[
z
i
,
j
(
l
,
f
)
]
I
(
l
,
f
)
×
J
(
l
,
f
)
z^{(l,f)}=[z_{i,j}^{(l,f)}]_{I^{(l,f)}\times J^{(l,f)}}
z(l,f)=[zi,j(l,f)]I(l,f)×J(l,f) 表示
l
l
l 层上类型为
f
f
f 的特征图的输出,其中
z
(
0
,
f
)
=
M
f
z^{(0,f)}=M_f
z(0,f)=Mf。在卷积层上,我们使用窗口大小为
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) 定义为(公式4):
z
i
,
j
(
l
,
f
)
=
σ
(
∑
f
′
=
0
F
l
−
1
∑
s
=
0
r
w
(
l
,
f
)
∑
t
=
0
r
h
(
l
,
f
)
W
s
,
t
(
l
,
f
)
⋅
z
i
+
s
,
j
+
t
(
l
−
1
,
f
′
)
+
b
l
,
k
)
z_{i,j}^{(l,f)}=\sigma(\sum_{f^{'}=0}^{F_{l-1}}\sum_{s=0}^{r_{w}^{(l,f)}}\sum_{t=0}^{r_{h}^{(l,f)}}W_{s,t}^{(l,f)}\cdot z_{i+s,j+t}^{(l-1,f^{'})}+b^{l,k})
zi,j(l,f)=σ(f′=0∑Fl−1s=0∑rw(l,f)t=0∑rh(l,f)Ws,t(l,f)⋅zi+s,j+t(l−1,f′)+bl,k)
其中,
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)是一个ReLU,
W
(
l
,
f
)
∈
R
r
w
(
l
,
f
)
×
r
h
(
l
,
f
)
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
b^{l,k}
bl,k 是参数,
F
l
−
1
F_{l-1}
Fl−1 是第
(
l
−
1
)
(l-1)
(l−1) 层上的特征图的数量,最大池化操作基于卷积操作,可以表示为(公式5):
z
i
,
j
(
l
,
f
)
=
m
a
x
p
w
(
l
,
f
)
>
s
≥
0
m
a
x
p
h
(
l
,
f
)
>
t
≥
0
z
i
+
s
,
j
+
t
z_{i,j}^{(l,f)}=\underset{p_w^{(l,f)}>s\geq0}{max} \underset{p_h^{(l,f)}>t\geq0}{max}z_{i+s,j+t}
zi,j(l,f)=pw(l,f)>s≥0maxph(l,f)>t≥0maxzi+s,j+t
其中
p
w
(
l
,
f
)
p_w^{(l,f)}
pw(l,f) 和
p
h
(
l
,
f
)
p_h^{(l,f)}
ph(l,f) 分别是2D池的宽度和高度,最终特征图的输出被串联并映射到低维空间,并通过线性变换作为匹配向量
v
∈
R
q
v\in \mathbb{R^q}
v∈Rq
Accumulation匹配
假设 [ v 1 , . . . , v n ] [v_1,...,v_n] [v1,...,vn] 是第一层的输出(对应 n n n pairs),在第二层,GRU取 [ v 1 , . . . , v n ] [v_1,...,v_n] [v1,...,vn] 作为输入,并将匹配序列编码为其隐藏状态 H m = [ h 1 ′ , . . . , h n ′ ] ∈ R q × n H_m=[h_1^{'},...,h_n^{'}]\in \mathbb{R^{q\times n}} Hm=[h1′,...,hn′]∈Rq×n。 其详细参数设置与公式(2)相似,这个层有两个函数:
- 它在上下文中建模utterances的依存关系和时间关系
- 它利用时间关系来监督对accumulation的累积,作为基于上下文的匹配
Prediction和Learning匹配
存在
[
h
1
′
,
.
.
.
,
h
n
′
]
[h_1^{'},...,h_n^{'}]
[h1′,...,hn′],我们将
g
(
s
,
r
)
g(s,r)
g(s,r) 定义为(公式6):
g
(
s
,
r
)
=
s
o
f
t
m
a
x
(
W
2
L
[
h
1
′
,
.
.
.
,
h
n
′
]
+
b
2
)
g(s,r)=softmax(W_2L[h_1^{'},...,h_n^{'}]+b_2)
g(s,r)=softmax(W2L[h1′,...,hn′]+b2)
其中,
W
2
W_2
W2 和
b
2
b_2
b2 是参数,我们考虑
L
[
h
1
′
,
.
.
.
,
h
n
′
]
L[h_1^{'},...,h_n^{'}]
L[h1′,...,hn′] 的三个参数化:
- 仅使用最后一个隐藏状态, L [ h 1 ′ , . . . , h n ′ ] = h n ′ L[h_1^{'},...,h_n^{'}]=h_n^{'} L[h1′,...,hn′]=hn′。
- 隐藏状态线性组合, L [ h 1 ′ , . . . , h n ′ ] = ∑ i = 1 n w i h i ′ L[h_1^{'},...,h_n^{'}]=\sum_{i=1}^{n}w_ih_i^{'} L[h1′,...,hn′]=∑i=1nwihi′,其中 w i ∈ R w_i\in \mathbb{R} wi∈R
- 我们遵循并运用注意力机制来组合隐藏状态,则
L
[
h
1
′
,
.
.
.
,
h
n
′
]
L[h_1^{'},...,h_n^{'}]
L[h1′,...,hn′] 被定义为(公式7):
t i = t a n h ( W 1 , 1 h u i , n u + W 1 , 2 h i ′ + b 1 ) t_i=tanh(W_{1,1}h_{u_i,n_u}+W_{1,2}h_i^{'}+b_1) ti=tanh(W1,1hui,nu+W1,2hi′+b1) a i = e x p ( t i T t s ) ∑ i ( e x p ( t i T t s ) ) a_i=\frac{exp(t_i^Tt_s)}{\sum_i(exp(t_i^Tt_s))} ai=∑i(exp(tiTts))exp(tiTts) L [ h 1 ′ , . . . , h n ′ ] = ∑ i = 1 n a i h i ′ L[h_1^{'},...,h_n^{'}]=\sum_{i=1}^{n}a_ih_i^{'} L[h1′,...,hn′]=i=1∑naihi′
其中, W 1 , 1 ∈ R q × m W_{1,1} \in \mathbb{R^{q\times m}} W1,1∈Rq×m , W 1 , 2 ∈ R q × q W_{1,2}\in \mathbb{R^{q\times q}} W1,2∈Rq×q和 b 1 ∈ R q b_1\in \mathbb{R^{q}} b1∈Rq 是参数, h i ′ h_i^{'} hi′ 和 h u i , n u h_{u_i,n_u} hui,nu 分别是第 i i i 个匹配向量和第 i i i 个utterance的最终隐藏状态, t s ∈ R q t_s\in \mathbb{R^{q}} ts∈Rq 是一个虚拟上下文向量,它是随机初始化的,并在训练中共同学习。我们用 L [ h 1 ′ , . . . , h n ′ ] L[h_1^{'},...,h_n^{'}] L[h1′,...,hn′] 的三个参数化来表示我们的模型,分别是 S M N l a s t SMN_{last} SMNlast, S M N s t a t i c SMN_{static} SMNstatic 和 S M N d y n a m i c SMN_{dynamic} SMNdynamic,并在实验中进行比较。
我们通过用
D
D
D 最小化交叉熵来学习
g
(
⋅
,
⋅
)
g(\cdot,\cdot)
g(⋅,⋅)。令
θ
\theta
θ 表示
S
M
N
SMN
SMN 的参数,则学习的目标函数
L
(
D
,
θ
)
L(D,\theta)
L(D,θ) 可表示为(公式8):
−
∑
i
=
1
N
[
y
i
l
o
g
(
g
(
s
i
,
r
i
)
)
+
(
1
−
y
i
)
l
o
g
(
1
−
g
(
s
i
,
r
i
)
)
]
-\sum_{i=1}^{N}[y_ilog(g(s_i,r_i))+(1-y_i)log(1-g(s_i,r_i))]
−i=1∑N[yilog(g(si,ri))+(1−yi)log(1−g(si,ri))]
检索候选Response
作者利用启发式方法从索引中获取候选response,将前一轮的utterances { u 1 , . . . , u n − 1 } \{u_1,...,u_{n-1}\} {u1,...,un−1} 和 u n u_n un 进行计算,根据他们的tf-idf得分,从 { u 1 , . . . , u n − 1 } \{u_1,...,u_{n-1}\} {u1,...,un−1} 中提取前 5 5 5 个关键字,然后,我们将扩展后的message用于索引,并使用索引的内联检索算法来检索候选response。最后,我们使用 g ( s , r ) g(s,r) g(s,r) 对候选进行排名,并返回第一个作为对上下文的response。
实验结果
- Ubuntu语料
- 豆瓣多轮语料:下图给出三组的统计数据。
下图显示两个数据集的评估结果:
我们使用Ubuntu语料库中的示例对第二层中的相似性矩阵和GRU的gates进行可视化,以进一步阐明我们的模型如何在上下文中识别重要信息,以及如何使用前文所述的GRU的门机制选择重要的匹配向量,示例及可视化图如下:
{
u1: how can unzip many rar (_number_ for example ) files at once;
u2: sure you can do that in bash;
u3: okay how?
u4: are the files all in the same directory?
u5: yes they all are;
r: then the command glebihan should extract them all from/to that directory
}
下面是消融(Ablation)实验的结果:
**跨context长度的效果:**显示了豆瓣语料库上不同长度间隔的MAP的比较
**最大context长度:**展示了在最大context长度方面,SMN在Ubuntu Corpus和Douban Corpus上的性能
错误分析:
- 逻辑一致性。 SMN在语义级别上对context和response进行建模,但很少关注逻辑一致性
- 检索后没有正确的候选
总结
论文提出了一个新的基于上下文的模型,用于基于检索的聊天机器人中的多轮响应选择,论文还详尽的介绍了豆瓣对话语料库,并且做了实验去研究应该在context中取多少个utterance,即取多少轮对话,实验证明轮数取10的时候效果最好,很值得学习的论文。