论文名称:Scalable and Accurate Dialogue State Tracking via Hierarchical Sequence Generation
Abstract
本文的模型叫做COMER,全称Conditional Memory Relation Network,条件记忆关系网络
COMER是继TRADE后的又一个种多领域open-vocabulary based DST方法,只不过TRADE是上半年的,COMER是下半年的。COMER关注了predifned ontology based DST的一个缺陷,即计算复杂度问题,需要跟踪的预定义slots数量多,计算越复杂,所以难以适应多领域问答(slots数量极多)。
本文研究如何抛开预定义本体,用生成式方法实现DST。主要的工作是用一个hierarchical encoder-decoder structure来生成状态序列,使得即使slots很多,计算复杂度也不会剧增。
听摘要也没什么感觉,啥是hierarchical encoder-decoder structure?怎么就计算复杂了?和TRADE是啥关系?带着这些疑问进入下文。
TRADE模型体现了encoder-decoder framework的潜力,但在计算上效率不高,因为它在每一turn为全部slots生成values。COMER模型通过使用hierarchical decoder,一定上解决了TRADE的上述缺陷。hierarchical decoder,层次堆叠的解码器,以分层的方法解码domains, slots, and values,把当前轮对话状态本身生成为target sequence。此外,它们第一次提出了ICT的概念,以衡量不同DST模型对话状态预测的efficiency。COMER同样在slot values子集上生成,但是没有利用上一轮的对话状态信息。
本文的挑战:看第2节Motivation
一些名词:
utterance:话语。包括用户话语与系统话语。system utterances + user utterances/responses = dialogue history 。
hierarchical structure:层级结构,文中指domian-slot-value的三元表示
共享知识=传递知识:增加可扩展性
解码=生成
Introduction
在Multiwoz等多领域问答数据集中,对话状态的表示由domian-slot-value的三级hierarchical structure来组成,这意味着本体的复杂。
然后就是例行地把predifned ontology based DST批判一番,这些老式的方法主要问题就是预定义本体的不可获取性,具体地比如candidate slot-value pairs并不是总能全部枚举的(在大型动态知识库上,见SpanPtr)。然后,研究人员针对这个问题打过一些补丁,比如建立一个定长的候选集(fixed-length candidate set),让这个候选集在对话的发展过程中动态地更新(但是没有举例子,也许没啥用?)。
ITC
本文,为了衡量在相同本体复杂性下,DST模型的运行效率,我们提出了推断时间复杂度(inference time complexity,ITC)的概念,以衡量不同DST模型对话状态预测的效率。ITC指的是完成一次对话状态预测,需要inference多少次。显然ITC是越小越好。下图是各种模型的ITC复杂度对比。注意此处的slot指combined slot。
插句题外话,SOM-DST继承并改良了ITC的思想,把ITC分成了best case和worst case来考虑,因为SOM-DST的一个贡献就是研究在slots的一个子集上跑槽值预测这件事的,所以要论证它们如何降低“平均”的ITC。
COMER简要说明
我们的模型COMER是生成式DST,把DST任务建模为一个序列生成问题(sequence generation problem),模型可扩展性和准确性都很好,且ITC更稳定。
具体地,我们模型:
-
以encoder-decoder网络为骨架,不过使用的是hierarchically stacked decoder,首先在对话状态中生成slot sequences,然后对每个slot生成相应的value sequences。
-
所有decoders共享参数,以在对话状态的hierarchical structure的深度上呈现更好的可扩展性。
-
应用BERT与BPE进行序列的encode,确保unseen words的词表示独一无二。用于序列生成任务的词向量通过BERT静态生成。
Motivation
belief state representing
众所周知多领域DST的用户目标通过domain-slot-value三元表示,有人通过层级嵌套的结构,先domain-slot再slot-value;有人采用把领域名称和槽位名称拼接成combined slot的方法,用combined slot-value pair表示状态,等于是省略了领域与槽位的从属关系。
在本文中,我们采用逐层排序再拼接的方法。具体地,考虑到slot value pairs是无序的集合,我们对其进行一番处理。先把sequence of domain按训练集中出现的频率进行排序,然后在一个domain里按slot出现的频率对slot value pairs排序。这样,我们把对话状态表示成这样的范式:(Domain1- Slot1, Value1;Slot2, Value2; … Domain2- Slot1, Value1; …)。这样的表示更加简洁。
single value assumption
single value assumption是过去的一种错误假设,指的是,在一个turn里,对话状态slot最多仅与一个value相映射。但是事实上这是一种过度简化。用户可能会说:
如果基于single value假设,系统就只能回答“我们这没有海鲜餐厅”,浪费用户的时间和精力。DST应该精确地捕捉到“先在DB中检索海鲜餐厅,然后再检索中餐厅”这一意图。这样,就要有输出值序列的思想,对话状态不是slot-value pair,而是slot-suquenceOfValues pair,这个很关键。既然如此,我们建立的DST模型就应该有能力生成structured sequences。
Hierarchical Sequence Generation for DST
以往的方法:multi-label state prediction
COMER:通过Seq2Seq把DST任务转换成序列生成问题
如图是Hierarchical Sequence Generation Network的一般结构。我们的解码器是特别定制的CMR decoder(下文简记为CMRD)。CMR=Conditional Memory Relation,条件记忆关系(就是COMER这个名字的来历)。白色是编码部分(system encoder, user encoder,belief encoder),灰色的三个CMRD层级堆叠、参数共享,是解码部分。当前轮下encoders把用户话语、以往的系统动作、以往的对话状态编码进一个embedding space,复制三份送入三个CMRD,解码输出构成新的对话状态。
第一个CMRD用一个zero vector作为它的条件输入 c c c,输出领域序列 D D D和领域的隐藏表示 H D H_D HD;
第二个CMRD对 D D D中每个 d d d,利用对应的 h d h_d hd作为条件输入,生成它的槽位序列 S d S_d Sd和槽位的隐藏表示 H S , d H_{S,d} HS,d,全部 S d S_d Sd拼接成矩阵 S S S;
第三个CMRD对 S S S中每个 s s s,利用对应的 h s , d h_{s,d} hs,d作为条件输入,生成它的值序列 V d , s V_{d,s} Vd,s,全部 V d V_d Vd拼接成矩阵 V V V;
于是我们得到D、S、V,相当于一坨新的 ( d , ( s d , V d , s ) ) (d,(s_d,V_{d,s})) (d,(sd,Vd,s))pairs,更新对话状态,如是进行直到对话结束。
由于我们的槽值是生成出来的,所以只和具体的对话内容有关,而与预定义本体无关。
下面,依次说明我们的encoder与decoder。
Encoding Module
(1)考虑word的序列: { ω 1 , . . . , ω T } \left\{\omega_1,...,\omega_T\right\} {ω1,...,ωT};
加入两个标志符变为: { [ C L S ] , ω 1 , . . . , ω T , [ S E P ] } \left\{[CLS],\omega_1,...,\omega_T,[SEP]\right\} {[CLS],ω1,...,ωT,[SEP]};
上述序列送入一个BERT模型得到上下文嵌入 E X E_X EX(方式:BERT所有层的输出取平均);
(2)训练集中的每一个domain/slot,映射为一个静态嵌入(static embedding),以便于generate a domain/slot as a whole instead of a token at each time step of domain/slot sequence decoding.(?)。我们同时构建一个静态词汇表 E E E。
(3)将用户话语(user utterance)、系统动作/话语(system action)以及上一轮对话状态(previous belief sate)的嵌入向量喂入Bi-LSTM:
h a t = B i L S T M ( E X a t , h a t − 1 ) h_{a_t}=BiLSTM(E_{X_{a_t}}, h_{a_{t-1}}) hat=BiLSTM(EXat,hat−1)
h u t = B i L S T M ( E X u t , h u t − 1 ) h_{u_t}=BiLSTM(E_{X_{u_t}}, h_{u_{t-1}}) hut=BiLSTM(EXut,hut−1)
h b t = B i L S T M ( E X b t , h b t − 1 ) h_{b_t}=BiLSTM(E_{X_{b_t}}, h_{b_{t-1}}) hbt=BiLSTM(EXbt,hbt−1)
h a 0 = h u 0 = h b o = c 0 h_{a_0}=h_{u_0}=h_{b_o}=c_0 ha0=hu0=hbo=c0
总结:Encoders的作用,一个是生成一个静态嵌入表,一个是将三种东西,以相同方式分别编码,生成三个contextual嵌入矩阵H。
CMRD
CMRD的思想受RDN(Residual Dense Network), End-to-End Memory Networks 和Relation Networks这三种网络启发。
CMRD的功能可以用下面的公式概括:
s , h s = C M R D ( e x , c , H B , H a , H u ) s,h_s = CMRD(e_x,c,H_B,H_a,H_u) s,hs=CMRD(ex,c,HB,Ha,Hu)
输入:三种encoded信息来源 H H H,一个token的embedding e x e_x ex,一个条件 c c c;
输出:the next token s s s与hidden representation向量 h s h_s hs
三个 H H H体现了hierarchical memory,而 c c c体现了关系推理。
最后全部生成的 s s s和 h s h_s hs分别沿着sequence length dimension拼接成矩阵 S S S, H S H_S HS∈ R l s × d m R^{l_s×d_m} Rls×dm。 l s l_s ls是生成序列的长度, d m / 2 d_m/2 dm/2是Bi-LSTM的hidden size。
此时回过头看COMER网络结构图会更加明了:下一个CMRD会用到上一个CMRD输出的隐藏表示作为它的 c c c,三个堆叠的CMRD生成的输出矩阵依次为domain D、slot S、value V,联合构成新的对话状态。
注意CMRD是支持额外的记忆的(通过残差链接和注意力block),但是这里我们仅展示三个信息源的情况,三个信息源分别是:
-
belief state representation ( H B H_B HB),
-
system transcript representation ( H a H_a Ha),
-
user utterance representation ( H u H_u Hu)。
由于我们对所有decoder共享参数,所以CMRD事实上是一个关于状态生成与序列生成任务的二维自回归模型(2-dimensional auto-regressive model)。
CMRD的结构图如下所示:
decoder上一个时间步的输出 s s s(例如food),重新装入LSTM以解码下一个时间步。
公式细节
第一步:对当前token的嵌入用LSTM编码成隐藏表示 h 0 h_0 h0
回忆encoding中构建的固定的token嵌入词表 E E E∈ R d e × d v R^{d_e×d_v} Rde×dv。其中 d e d_e de是embedding的长度, d v d_{v} dv是vocabulary的长度。
在时间步 t t t,CMRD用 E E E把token x t x_t xt嵌入成向量 e x t e_{x_t} ext,再用一个LSTM编码(LSTM的隐藏状态为 q t q_t qt),输出hidden representation h 0 h_0 h0(初始的token x 0 x_0 x0是[CLS], q 0 q_0 q0是三个encoders隐藏状态的平均)。
第二步:用注意力模块获取working memory r 0 r_0 r0
h
0
h_0
h0与
c
c
c(逐元素)相加,按如下公式所示计算working memory for relation reasoning
r
0
r_0
r0:
h
1
h_1
h1:(1)喂入注意力模块;(2)用于残差连接。最后所有的
h
i
h_i
hi们拼接。
此处的注意力模块
A
t
t
n
Attn
Attn的内容:以向量
h
h
h和矩阵
H
H
H为输入,输出一个向量
h
a
h_a
ha。具体看原文:
注意:注意力模块的顺序是凭经验决定的。现实中人们倾向于先记忆最近的信息,再记忆老信息,这种内在的记忆处理顺序启发我们设计了system-user-belief_state的注意力模块顺序。
所有参数在注意力模块间共享。
第三步:用多层感知机获取下一个token的隐藏表示 h k h_k hk
将上一步得到的working memory r 0 r_0 r0喂入一个四层的多层感知机(MLP):
MLP的层数是根据grid search(网格搜索)确定的。输出下一个token的隐藏表示 h k h_k hk。
第四步:生成下一个token s s s
将上一步得到的 h k h_k hk喂入一个dropout 层,然后作为一个表示向量从decoder发出,并喂入一个线性层来生成下一个token:
由于embedding size d e d_e de是与vocabulary size独立的,所以我们的CMRD可以在动态的词表上做预测,并且内在支持unseen words的生成。 p s p_s ps是输出概率,取概率最大的作为下一个token。
在训练过程中,目标函数就是 p s p_s ps与所给labels的交叉熵。
总结:
domain-slot-value是三元,所以我们的decoder也有三个。decoder部分的公式有些多,但是目标函数很简单。
Experiments
我们基于单领域数据集Woz和多领域数据集MultiWOZ进行实验。
Metrics
我们提出了一个理论上可以衡量可扩展性的指标 K K K:推理时间倍数(Inference Time Multiplier, ITM),指当一个模型从Woz(记为 d 1 d_1 d1)上换到MultiWOZ(记为 d 2 d_2 d2)上时,速度将慢多少倍。
看原文的描述,就是ITC的量化,复杂度随着槽位、槽值数量的增长而增长的程度。
此外我们还用了时髦的多领域DST指标:联合准确率,表示对话状态完全预测成功的概率,具体地,就是模型预测的belief dictionary与labels完全匹配的概率。
我们还做了一个简单的后处理(post-processing),在生成的domain-slot-value三元组中,把那些含有空值的都移除了。
Details
Encoding中编码模型为 B E R T l a r g e BERT_{large} BERTlarge;
所有的LSTMs都是两层,最后一层的输出作为隐藏表示;
激活函数$\sigma $都用ReLU;
模型的超参数:
- dropout rate p p p:0.5
- model size d m d_m dm:512
- embedding size d e d_e de:1024
对于WoZ 2.0,batch size=32,epochs=150,ADAM优化器;
对于MultiWOZ,batch size=16,epochs=15,AMSGrad优化器。
学习率=0.0005,gradien clip=2.0
用Kaiming初始化权重,用零值初始化偏置;
GPU:NVIDIA GTX 1080Ti
Results
ITM:
我们评估了最好表现模型在woz和MultiWOZ上的验证集上的运行时间;
验证中,我们设置batch size=1,以避免数据并行性和序列填充(data parallelism and sequence padding)的影响。
运行5次取平均。
结果在woz上运行65.6秒,在MultiWOZ上运行853.2秒。
考虑到MultiWOZ的验证集比woz的验证集大5倍。
所以真实ITM=853.2/65.6/5 =2.54,与理论ITM(2.15)大致相等,说明我们的模型确实有O(1)的ITC,对预定义本体槽值数量有充分的可扩展性。
联合准确率:
当然SOTA,不过看起来比起TRADE也就零点一二个点?卖点主要在ITC?
Ablation Study
我们的CMRD结构是提升性能的关键。
(1)WoZ 2.0
在移除残差连接、注意力模块的层级堆叠之后,联合准确率下降,这证明我们的层级注意力设计的有效的。
在移除MLP后联合准确率也下降了,这是因为可训练参数减少了,不过这也能说明,MLP中堆叠更多的层,有利于关系推理。
(2)MultiWOZ
考虑对domain,slot,value层层递进地衡量准确率。分别定义联合领域准确率(joint domain accuracy,简记为JD ACC.)、联合域-槽准确率(joint domain-slot accuracy,简记为JDS ACC.)和联合目标准确率(joint goal accuracy,简记为JG ACC.)。JD ACC.表示所有领域预测正确的概率,JDS ACC.表示所有领域及槽位预测正确的概率,JG ACC表示所有领域、槽位及值预测正确的概率
那么,给定正确领域,slots被正确预测的概率就是
J
D
S
A
C
C
.
J
D
A
C
C
.
\dfrac {JDS\ ACC.}{JD\ ACC.}
JD ACC.JDS ACC.
同理,给定正确(领域和)槽位,values被正确预测的概率就是
J
G
A
C
C
.
J
D
S
A
C
C
.
\dfrac {JG\ ACC.}{JDS\ ACC.}
JDS ACC.JG ACC.
上述指标可以用于衡量DST模型domain prediction、slot prediction和value prediction的能力。
结果如下:
分析:
我们的COMER模型的domain prediction(95.52%)和value prediction(87.42%)都非常优秀了,但是slot prediction(58.43)不尽人意。我们猜测这是因为我们仅仅利用了上一个对话状态来代表对话历史,上下文信息受限,损害了slot prediction的跨轮次推理(inter-turn reasoning)能力,所以,准确率的受损应归因于TRADE中提到的多轮映射问题(multi-turn mapping problem)。
此外,我们看到当把三元组表示从嵌套结构换成拼接结构之后,JDS Acc.下降了5.48%,这是因为我们的层级序列生成拥有捕捉到domain与slot的从属关系的能力,但是这种关系在拼接结构中消失了。
Qualitative Analysis
上图是我们模型在MultiWOZ测试集上的一个预测例子。左侧是对话过程,右侧是CMRD中对话状态、系统话语和用户话语的可视化。每一行对应train领域下某个特定槽位的生成步骤的注意力分数。
上图:系统注意力。由于是第一个注意力模块,尚未拥有任何上下文信息。
中图:用户注意力。
下图:状态注意力。
Related Work
(1)TRADE:
TRADE为value序列生成应用copy机制,取得了MultiWOZ上的优秀性能。
TRADE是将以domain和slot的combine结构作为输入,所以ITC是 O(n).
TRADE达到的性能提升,主要归因于copy机制,它能在name slot上提高准确率,这种槽位依赖于从话语中拷贝。
(2)DSTreader:
DSTreader对每个combined slot寻找answer span,所以ITC是O(n).
这个方法的痛点是生成词表局限于对话历史中出现的词,而且需要用另一个联合状态跟踪模块手工合并策略来达到更好效果。
(3)Contextualized Word Embedding (CWE):上下文词嵌入