2019-ACL-Transferable Multi-Domain State Generator for Task-Oriented Dialogue Systems
概要
问题动机
对域本体的过度依赖和跨领域知识共享是对话状态跟踪两个实际和目前少有研究的问题。现有的方法在推理过程中通常不能跟踪未知的槽值,而且在适应新领域方面往往有不同的缺点。
主要贡献
在本文中,作者提出了$TRADE$——一种用于面向多域任务的对话状态跟踪的可转移的对话状态生成器。该方法的简单性和效果的提高是$TRADE$的主要优势。本项工作的贡献总结为:
- 提出Context-enhanced Slot Gate 与 Copy mechanism 让模型可以更好地在对话历史的任何地方追踪槽值。解决了多轮对话映射问题。
- 提出在领域之间共享参数,让不同领域的知识可以相互流动。以便模型可以追踪未见过的槽值。
- 利用在训练中已经看到的领域,实现zero-shot DST。如果有一些来自未见域的训练样本,TRADE可以适应新的zero-shot域而不忘记以前的域的知识。
源码:TRADE
相关研究
- 2017-alc-Google’s Multilingual Neural Machine Translation System: Enabling Zero-Shot Translation
- 2018-arXiv-The natural language de cathlon: Multitask learning as question answering.
- 2016-acl-Generating Sentences from a Continuous Space
- 2018-acl-Diverse Few-Shot Text Classification with Multiple Metrics
- 2018-acl-Toward Scalable Neural Dialogue State Tracking Model
模型
如上图,TRADE模型分为三个部分:句子编码器(Utterance encoder)、槽门(slot gate)、状态生成器(state generator)。
该模型不是预测每个预定义的本体项的概率,而是直接生成插槽值。类似于约翰逊等人(2017)对于多语言神经机器翻译,我们共享所有的模型参数,并且状态生成器为每个不同的(域、插槽)对以不同的句子开始标记。
令 $X = { (U_1,R_1),…,(U_T,R_T) }$ 为$T$轮对话历史,$B = { B_1,…,B_T }$ 为每一对话回合的对话状态且$B_t = (domain:D_n,slot:S_m,value:Y_j^{value})$, 其中$D={ D_1,…,D_N }$为$N$个不同领域;$S = { S_1,…,S_M}$为$M$个不同插槽。现在假设共有$J$个$(domain,slot)$对,$Y_j^{value}$是第$j$个$(domain,slot)$对的真实单词序列。
Utterance Encoder
该部分的模型可以是任意的句子编码模型,本文用的是双向GRU来编码对话历史。其输入为$Xt=[U{t-l},R{t-l},…,U_t,R_t] \in \R^{|X_t|\times d{emb}}$是被选中的最近的 $l$ 轮对话的所有单词的拼接矩阵。输出为被编码后的对话历史表示$Ht = [h_1^{enc},…,h{|Xt|}^{enc}] \in \R^{|X_t|\times d{hdd}}$。
State Generator
要使用输入源的文本生成插槽值,需要一种复制机制。有三种常见的复制方式,即基于索引的副本(Vinyals等人,2015)、硬门控副本(Gulcehre等人,2016;Madatto等人,2018;Wu等人,2019)和软门控副本(见等人,2017;McCann等人,2018)。基于索引的机制不适用于DST任务,因为确切的真实插槽值在话语中并不总是能找到。硬门拷贝机制通常需要给予门函数额外的监督信号。因此,本文使用软门控指针生成器复制来将词汇表上的分布和对话历史上的分布组合到一个单一的输出分布中。
本文利用GRU作为State Generator的解码器来独立预测每个$(domain,slot)$对的值。如上图所示,State Generator 对于所有$J$个$(domain,slot)$独立解码,先将domain 和 slot 的嵌入之和作为GRU解码器的第一个输入。对于第$j$个$(domain,slot)$对的解码过程的第$k$步,解码器将上一步的词嵌入$w{jk}$作为输入并返回其隐藏层状态$h{jk}^{dec}$。State Generator 将该隐藏状态利用训练好的嵌入函数 $E \in \R^{|V|\times d{hdd}}$ 映射为一个词表上的分布$P{jk}^{vocab}$中; 于此同时,$h{jk}^{dec}$被用于计算其与对话历史$H_t$的注意力分布$P{jk}^{history}$:
最终的输出$P_{jk}^{final}$是上述二者的带权和:
其中
$W_1$: 权重矩阵
$c_{jk}$: 为通过attention权重加权求和得到的表征对话历史的上下文向量。
请注意,由于公式(2),我们的模型能够生成单词,即使它们在词汇表中没有预定义。
Context-enhanced slot gate
上下文增强插槽门$G$是一个简单的三分类器,他将来自编码器隐藏状态的对话历史$H_t$通过一个线性层映射到一个概率分布$(ptr,none,dontcare)$上。对于每一个$(domain,slot)$对,如果slot gate将其预测为$dontcare 或者 none$, 我们就将解码器生成的值无视掉,并且将该$(domain,slot)$对填充为$not-mentioned 或者 does-dot-care$, 否则的话我们将state generator 生成的值做为该对的值。对于第$j$个$(domain,slot)$对,其计算过程如下:
Optimization优化方法
在训练期间,我们同时优化slot gate 和 state generator。对于前者,利用交叉熵损失函数$L_g$来作为损失函数计算$G_j$与真实one-hot 标签$y_j^{gate}$之间的损失:
对于后者,用另一个交叉熵损失函数$Lv$ 计算$P{jk}^{final}$和真实词$Y_j^{label}$之间的损失:
$L_v$是每一个$(domain,slot)$对上每一步解码过程的损失之和。我们将上述两个损失函数加权求和后得到总的损失:
零样本与少样本
作者先是用无限制微调模型得到一个基线模型,然后再用两种特定的持续学习技术:弹性权重巩固(EWC)(柯克帕特里克等,2017)和梯度情景记忆(GEM)(Lopez-Paz等,2017)来优化模型。首先定义$\Theta_S$为模型在源域上训练后的参数,将$\Theta$表示为当前经过目标域数据优化过后的模型参数。
EWC:
EWC利用费舍尔信息矩阵$F$的对较浅作为适应目标域数据的正则化器。该矩阵是用来自源域的样本来近似得到的。EWC损失定义为:
$\lambda$: 超参数
GEM:
与EWC不同的是,GEM从源域保留了少量的样本K,并且,当模型学习新的目标域时,对梯度施加约束,以防止已存储样本的损失增加。训练过程的定义为:
$L(\Theta,K)$: K 个保留样本的损失
实验
数据集
训练细节
多域联合训练:优化器为Adam、batch_size = 32, learning rate = annealing in [0.001,0.0001],dropout ratio = 0.2。
$\alpha = \beta = 1$, 所有嵌入采用$Glove$(每个词的维度为400),state generator使用了一种贪婪的搜索解码策略,因为生成的插槽值的长度通常很短。
领域扩展: 对于训练,遵循与联合训练部分相同的过程,并使用验证集对所有方法进行小网格搜索。对于EWC,我们为所有域设置了不同的$λ$值,并使用验证集选择最优值。最后,在GEM中,我们将保留的样本数量大小$K$设置为源域的$1%$。
结果
如上图,可以看出在联合目标精度上TRADE取得了最优。
上图为少样本情况下TRADE的表现,上下两部分分别是在4个领域(排除某一个领域)以及在新领域(被排除的那个领域)上不同训练和迁移策略下的实验结果,结果表明先在四个已知领域预训练,再通过少量新领域数据做fine-tune的实验结果,无论哪一种评价方式,都好于通过四个已知领域和1%新领域数据重新训练。
上图为零样本情况下TRADE的表现,zero-shot部分实验结果实际无明显亮点,唯一看得过去的taxi领域的实验源自其与train领域槽位的高度重合。论文中的解释也比较尴尬(用slot accuracy的数值强行解释),因此可以认为zero-shot并未达到作者预期的效果
2020-ACL-Modeling Long Context for Task-Oriented Dialogue State Generation
概要
问题动机
2019年提出的TRADE模型只是简单地将对话历史拼接后转换成一个上下文序列作为槽值预测的根据。这样的话当拼接的序列长度很长的时候模型很难区分哪些部分来自用户或系统。观察到$MultiWOZ 2.0$数据集中最常的拼接序列可能达到880个token。且实验表明这么长的序列会严重影响TRADE的表现。
主要贡献
本文提出了两种方法来建模长上下文,实现更好的对话状态追踪:
- 标记: 在构建对话上下文序列时,在每一个系统话语前插入一个$[sys]$标签,在每一个用户话语前插入一个$[usr]$标签。目的是为了提高模型区分用户话语和系统话语的能力。
- 集成: 将一个双向语言建模模型集成到模型的上游,作为一个辅助任务。以更好地获得对对话历史上下文的理解和表示。
相关研究
Global-Locally Self-Attentive Encoder for Dialogue State Tracking
Multi-domain Dialogue State Tracking as Dynamic Knowledge Graph Enhanced Question Answering
模型
Utterance Tagging
这部分很简单,就是在拼接上下文语句的时候在不同句子前加上标签。
Multi-task Learning with Language Modeling
双向语言建模模型的任务是利用前向GRU和后向GRU分别预测下一个单词和前一个单词。首先将对话历史的拼接序列馈入嵌入层得到每一个单词的嵌入组成的嵌入嵌入序列;在将该序列馈入一个$Bi-GRU$ 得到两个方向的隐藏状态表示$\overrightarrow{h_t^{lm}}$和$\overleftarrow{h_t^{lm}}$,这两个表示被用来预测下一个和前一个单词:
损失函数采用对数似然:
将两个隐藏层状态相加$h_t^{lm} = \overrightarrow{h_t^{lm}}+\overleftarrow{h_t^{lm}}$ 后再将结果与词嵌入$w_t$拼接后馈入句子编码器$Bi-GRU$,将slot gate 与 state generator 两个模块包含进来计算对话状态追踪的损失$L^{dst}$:
$\alpha$: 超参数,用来平衡两个任务
实验
如上图,该模型在联合精度与槽精度上都是SOTA
上图展示了$\alpha$的取值对联合精度的影响
上图展示了对于不同上下文长度上本模型与原生TRADE的比较,以及两者的预测错误类型比较。