论文:Sequicity: Simplifying Task-oriented Dialogue Systems with Single Sequence-to-sequence Architectures
首先先明确一个概念,在管道型(pipeline)对话系统中一般会将对话系统拆分成几个模块,在不同文章中其叫法也不尽相同,比如自然语言理解(NLU)模块有时也被叫做user intent calssifier,对话管理模块(DM)中包含对话状态追踪(dialogue state tracking, DST)和对话策略学习(dialogue policy learning, DPL),其中DST有时也被称作belief tracking,对话状态(dialogue state)也被称作置信状态(belief state),自然语言生成(NLG)模块有时也被叫做response generator。
这篇文章提出了一个基于sequence-to-sequence(seq2seq)模型的方法用于对话状态跟踪(dialogue state tracking/belief tracking),该方法可同时解决对话任务以及生成 系统的回复。他们提出了一个叫做 belief spans(bspan) 的text spans用来追踪state(也可笼统理解为slot-value),并由此设计了叫做 Sequicity framework 的框架,并将其实例化为 Two Stage CopyNet(TSCP),且实验表明TSCP在两个大规模数据集上比用来对比的baseline要更好,包括处理一些词汇表之外的情况(out-of-vocabulary, OOV)。
其实其思想很简单,就是把一个分类问题转化为了一个seq2seq的问题。(Wen et al., 2017b)将语义槽值视为分类的标签,这篇文章则是将语义槽的值记为text spans(即这里的bspan),之后再对其进行解码。举例说明:
user语句中的语义槽可以分为两类:informable和requestable,比如上图中的食物类型、价格如何就属于informable,而地址电话就属于requestable,在bspans中分别将其记在
在知识库中搜索时,得到的 k t k_t kt会有三种情况:有多个匹配、一个精确匹配以及无匹配,这也会使得相应的系统回复不同。比如当用户询问一家徽菜馆,当查询时有多个匹配时,系统应该在回复中加上一些约束条件,比如价格距离之类的;而当有一个精确匹配时,系统应该回复用户需要的信息;而当没有匹配时系统应该告知用户并尝试一些不同的约束条件。如上面所说,这里的seq2seq解码可分为两个阶段:首先 B t − 1 R t − 1 U t B_{t-1}R_{t-1}U_t Bt−1Rt−1Ut可以一块编码,但解码阶段首先先无条件的解码 B t B_t Bt,然后暂停解码基于 B t B_t Bt搜索知识库得到 k t k_t kt,之后继续解码出 R t R_t Rt,解码过程可概括为式(1-1)和(1-2)。
B t = s e q 2 s e q ( B t − 1 R t − 1 U t ∣ 0 , 0 ) (1-1) B_t=seq2seq(B_{t-1}R_{t-1}U_t|0,0)\tag{1-1} Bt=seq2seq(Bt−1Rt−1Ut∣0,0)(1-1)
R t = s e q 2 s e q ( B t − 1 R t − 1 U t ∣ B t , k t ) (1-2) R_t=seq2seq(B_{t-1}R_{t-1}U_t|B_t,k_t)\tag{1-2} Rt=seq2seq(Bt−1Rt−1Ut∣Bt,kt)(1-2)
这篇文章还举出了一个较为简单的Sequicity framework的实例:Two Stage CopyNet(TSCP)。这里 B t B_t Bt占据了目标序列 Y Y Y的前 m ′ m^{'} m′个字符,其余的被 R t R_t Rt占据,即 R t = y 1 y 2 . . . y m ′ , R t = y m ′ + 1 . . . y m R_t=y_1y_2...y_{m^{'}},R_t=y_{m^{'}+1}...y_m Rt=y1y2...ym′,Rt=ym′+1...ym。TSCP是改进(Gu et al., 2016)的CopyNet得到的,原因是作者观察到生成目标序列时常常需要copy输入序列的一些字符。
这里补充下原文对Encoder-Decoder seq2seq模型的描述。如今很多seq2seq模型会去采用encoder-decoder的架构,即给定一个原序列 X = x 1 x 2 . . . x n X=x_1x_2...x_n X=x1x2...xn,编码网络会将其表示成隐藏状态: H ( x ) = h 1 ( x ) h 2 ( x ) . . . h n ( x ) H^{(x)}=h_1^{(x)}h_2^{(x)}...h_n^{(x)} H(x)=h1(x)h2(x)...hn(x),之后解码网络根据这一隐藏状态 H ( x ) H^{(x)} H(x)以及基于给定训练集解码得到目标序列 Y = y 1 y 2 . . . y m Y=y_1y_2...y_m Y=y1y2...ym(使得这一目标序列似然最大化)。截止到那时,结合了attention机制的RNN(Att-RNN)会被拿来做E-D框架的baseline,在encoder和decoder上各使用一个RNN。为了解码得到 y j y_j yj,解码器的RNN用 y i − 1 y_{i-1} yi−1来生成隐向量 h j ( y ) h_j^{(y)} hj(y),接着可分为以下三步来进行:
(1)计算所有 h i x ∈ H ( x ) h_i^{x}\in H^{(x)} hix∈H(x)和 h j ( y ) h_j^{(y)} hj(y)的attention scores:
u i j = v T t a n h ( W 1 h i ( x ) + W 2 h j ( y ) ) (2-1) u_{ij}=v^{T}tanh(W_1h_i^{(x)}+W_2h_j^{(y)})\tag{2-1} uij=vTtanh(W1hi(x)+W2hj(y))(2-1)
其中 v ∈ V , V i s v o c a b u l a r y s e t v\in V, V\ is\ vocabulary\ set v∈V,V is vocabulary set
(2)结合相应的attention scores对 h i ( x ) h_i^{(x)} hi(x)加权求和得到 h ~ j ( x ) \widetilde{h}_j^{(x)} h j(x):
h ~ j ( x ) = ∑ i = 1 n e u i j ∑ i e u i j h i ( x ) (2-2) \widetilde{h}_j^{(x)}=\sum_{i=1}^{n}\frac{e^{u_{ij}}}{\sum_ie^{u_{ij}}}h_i^{(x)}\tag{2-2} h j(x)=i=1∑n∑ieuijeuijhi(x)(2-2)
(3)将 h ~ j ( x ) \widetilde{h}_j^{(x)} h j(x)和 h j ( y ) h_j^{(y)} hj(y)拼接成一个向量,再经过softmax映射到输出空间从而解码得到当前的字符 y j y_j yj:
y j = s o f t m a x ( O [ h ~ j ( x ) h j ( y ) ] ) (2-3) y_j = softmax(O\left[ \begin{matrix} \widetilde{h}_j^{(x)} \\ h_j^{(y)} \end{matrix} \right])\tag{2-3} yj=softmax(O[h j(x)hj(y)])(2-3)
在CopyNet中,对于 y j y_j yj,除了用式(2-3)来计算出基于词汇集 V V V的概率分布 P j g ( v ) P_j^g(v) Pjg(v)外,还要考虑一个额外的copy概率 P j c ( v ) P_j^c(v) Pjc(v),(Gu et al., 2016)将解码空间扩大,由 V V V扩展到 V ⋃ X V\bigcup X V⋃X,并简单地将二者的和作为最后的概率分布,即 P j ( v ) = P j g ( v ) + P j c ( v ) P_j(v)=P_j^g(v)+P_j^c(v) Pj(v)=Pjg(v)+Pjc(v),但是问题来了,在Sequicity中直接使用CopyNet是不够的,因为 B t B_t Bt和 R t R_t Rt有不同的分布。所以TSCP分别采用了两个GRU来解码 B t B_t Bt和 R t R_t Rt。在第一个解码阶段,结合copy-attention机制用输入 X X X解码得到 B t B_t Bt,并按照上面E-D seq2seq模型的描述方法得到生成概率,而对于每个词 v ∈ X v\in X v∈X其copy概率为:
P j c ( v ) = 1 Z ∑ i : x i = v ∣ X ∣ e ψ ( x i ) , j ≤ m ′ (2-4) P_j^{c}(v)=\frac{1}{Z}\sum_{i:x_i=v}^{|X|}e^{\psi(x_i)},j\leq m^{'}\tag{2-4} Pjc(v)=Z1i:xi=v∑∣X∣eψ(xi),j≤m′(2-4)
其中 Z Z Z是标准化项, ψ ( x i ) \psi(x_i) ψ(xi)用来计算 x i x_i xi的copy分数:
ψ ( x i ) = σ ( h i ( x ) T W c ) h j ( y ) , j ≤ m ′ (2-5) \psi(x_i)=\sigma(h_i^{(x)^T}W_c)h_j^{(y)}, j \leq m^{'}\tag{2-5} ψ(xi)=σ(hi(x)TWc)hj(y),j≤m′(2-5)
在第二个解码阶段,将 B t B_t Bt最后一个隐状态作为 R t R_t RtGRU的初始隐状态。这里很明显要解码 R t R_t Rt需要依赖 B t B_t Bt,所以这一阶段解码过程是结合copy-attention机制用 B t B_t Bt去解码,用 B t B_t BtGRU得到的 h 1 , . . . , h m ′ h_1,...,h_{m^{'}} h1,...,hm′来计算,这减少了搜索空间因为所有 X X X中和任务有关的信息已经被包含在 B t B_t Bt中:
P j c ( v ) = 1 Z ∑ i : y i = v e ψ ( y i ) , i ≤ m ′ < j ≤ m (2-6) P_j^c(v)=\frac{1}{Z}\sum_{i:y_i=v}e^{\psi(y_i)},i\leq m^{'}
ψ ( y i ) = σ ( h i ( y ) T W c ) h j ( y ) , i ≤ m ′ < j ≤ m (2-7) \psi(y_i)=\sigma(h_i^{(y)^T }W_c)h_j^{(y)},i\leq m^{'}
至于 k t k_t kt因为有三种情况,所以将其设为一个三维的向量,并加到 y j y_j yj中去,如(2-8)所示,再将其输入到GRU中产生 h j + 1 ( y ) h_{j+1}^{(y)} hj+1(y)。
y j ′ = [ y i k t ] , j ∈ [ m ′ + 1 , m ] (2-8) y_j^{'}=\left[ \begin{matrix} y_i\\ k_t \end{matrix} \right],j\in[m^{'}+1,m]\tag{2-8} yj′=[yikt],j∈[m′+1,m](2-8)
以上就是全文的大致思路。
Tsung-Hsien Wen, David Vandyke, Nikola Mrksic, Milica Gasic, Lina M Rojas-Barahona, Pei-Hao Su, Stefan Ultes, and Steve Young. 2017b. A networkbased end-to-end trainable task-oriented dialogue system. EACL .
Jiatao Gu, Zhengdong Lu, Hang Li, and Victor OK Li. 2016. Incorporating copying mechanism in sequence-to-sequence learning. ACL .