2018-ACL-Global-Locally Self-Attentive Dialogue State Tracker
概要
问题动机
先前的方法无法对稀有槽值对进行准确预测,因为每个状态都是由一组槽值对组成的,其中许多是罕见的,对罕见的槽值对的糟糕推断随后会导致糟糕的回合级状态跟踪。
主要贡献
与之前独立估计每个槽值对的方法相比,GLAD使用全局模块(global module)在不同槽的估计器之间共享参数,并用局部模块(local module)学习特定于槽的特征表示。实验表明,在WOZ对话状态跟踪任务上,GLAD达到了88.1%的目标精度和97.1%的请求精度(Wen等人,2017),比之前好3.7%和5.5%。在DSTC2(Henderson等,2014a)上,我们实现了74.5%的目标精度和97.5%的请求精度,比之前好1.1%和1.0%。
相关研究
- 2018-ICLR-A deep reinforced model for abstractive summarization
- 2017-ACL-Get to the point: Summarization with pointer generator networks
- 2017-ICLR-Bidirectional attention flow for machine comprehension
模型
Overview
GLAD通过对构成对话状态的每个槽值对使用一个不同的估计器(estimator),将多标签状态预测问题分解为一组二分类预测问题。因此,我们根据模型所预测的槽值对来描述GLAD。
如上图GLAD由一个编码器模块和一个评分模块组成。编码器模块由独立的Global-Local Self-Attentive编码器组成,用于用户话语、之前的系统动作和正在考虑的槽值对。评分模块由两个评分者组成。一个评分者考虑话语的贡献,而另一个评分者考虑以前系统行为的贡献。
Global-Local Self-Attentive Encoder
如上图,该模块由一个双向LSTM组成,它捕获序列内的时间关系,然后是一个自我注意层来计算序列的摘要。
考虑对特定插槽 $s$ 的序列的编码过程,设$n$为序列的token数量,$d{emb}$为嵌入维度,$X \in \R^{n \times d{emb}}$ 序列的词嵌入输入序列。将其馈入biLSTM:
$d_{rnn}$: LSTM的隐藏层状态维度
再用同样的方式的到$H^s$:
两个LSTM的输出通过混合层组合,产生$X$的全局局部编码$H$:
$\beta^s$: 可学习参数,范围(0,1)之间
接下来,计算 $H$ 上的全局-局部自注意力上下文 $c$,在本文中,使用一个全局自注意模块来计算适合通用状态跟踪的attention context,以及一个局部自注意模块来计算特定于槽的attention context。
对于$H$中的每一个元素$H_i$,计算一个标量分数 $a_i^g$,然后使用softmax将所有分数进行标准化得到一个分布$p^g$:
全局自注意力上下文$c^g$计算如下:
用相似的方法计算局部自注意力上下文$c^s$:
最终,全局-局部自注意力上下文 $c$ 为:
Encoding module
$encode(X)$: $X \rightarrow H,c$ 表示将输入X映射为编码$H$以及自注意力上下文 $c$.
Scoring module
Utterance scorer
首先计算每一个$H_i^{utt}$与自注意力上下文 $c^{val}$的评分:
然后计算注意力分布:
$m$: 用户语句中词的数量
得到自注意力上下文:
最后用自注意力上下文对槽对进行评分:
其中 $y^{utt}$的值就表示了用户话语表达该槽的程度(与该槽的相关度)
Action scorer
该模块是当用户语句无法提供足够信息时做补充使用。比如在系统询问用户”Would you like a restaurant in the centre of town ?” 时用户只是回答了句 “Yes !”。这时候我们在考虑了用户话语后还要额外考虑之前的系统动作。
假设之前的系统动作为$C^{act} = [C_1^{act},…,C_l^{act}]$, 首先计算其与自注意力上下文的相关度得分:
然后计算注意力分布:
得到自注意力上下文:
最后用自注意力上下文对槽值对进行评分:
其中$y^{act}$的值表示了先前系统动作与槽值对的相关度。
最终得分为两个评分模块结果的组合:
$w$ : 可学习的参数
实验
数据集
采用DSTC2 和 WoZ 数据集