论文阅读笔记:Sequential Matching Network: A New Architecture for Multi-turn Response Selection in Retrieva

提示:阅读论文时进行相关思想、结构、优缺点,内容进行提炼和记录,论文和相关引用会标明出处。


前言

标题: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,iRd 分别是 u u u r r r 的第 i i i 个单词的嵌入。然后使用 U ∈ R d × n u U\in \mathbb{R}^{d\times n_u} URd×nu R ∈ R d × n r R\in \mathbb{R}^{d\times n_r} RRd×nr 构造word-word相似度矩阵 M 1 ∈ R n u × n r M_1\in \mathbb{R}^{n_u\times n_r} M1Rnu×nr,以及sequence-sequence相似度矩阵 M 2 ∈ R n u × n r M_2\in \mathbb{R}^{n_u\times n_r} M2Rnu×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,iTer,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,iRm 定义为(公式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,i1) 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,i1) 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(rihu,i1)) 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=zih~u,i+(1zi)hu,i1
其中 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} ARm×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=0Fl1s=0rw(l,f)t=0rh(l,f)Ws,t(l,f)zi+s,j+t(l1,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} Fl1 是第 ( l − 1 ) (l-1) (l1) 层上的特征图的数量,最大池化操作基于卷积操作,可以表示为(公式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)>s0maxph(l,f)>t0maxzi+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} vRq

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} wiR
  • 我们遵循并运用注意力机制来组合隐藏状态,则 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=1naihi
    其中, W 1 , 1 ∈ R q × m W_{1,1} \in \mathbb{R^{q\times m}} W1,1Rq×m W 1 , 2 ∈ R q × q W_{1,2}\in \mathbb{R^{q\times q}} W1,2Rq×q b 1 ∈ R q b_1\in \mathbb{R^{q}} b1Rq 是参数, 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}} tsRq 是一个虚拟上下文向量,它是随机初始化的,并在训练中共同学习。我们用 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=1N[yilog(g(si,ri))+(1yi)log(1g(si,ri))]

检索候选Response

作者利用启发式方法从索引中获取候选response,将前一轮的utterances { u 1 , . . . , u n − 1 } \{u_1,...,u_{n-1}\} {u1,...,un1} u n u_n un 进行计算,根据他们的tf-idf得分,从 { u 1 , . . . , u n − 1 } \{u_1,...,u_{n-1}\} {u1,...,un1} 中提取前 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的时候效果最好,很值得学习的论文。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页