论文阅读:GLAD《Global-Locally Self-Attentive Dialogue State Tracker》

论文阅读:《Global-Locally Self-Attentive Dialogue State Tracker》

背景

这篇论文,如我所关注的那样,还是针对任务完成型对话系统的。其核心就是所谓的对话状态跟踪(Dialogue state tracking)组件。这篇paper里,作者提出了“全局-局部自注意力对话状态跟踪器(Global-Locally Self- Attentive Dialogue State Tracker ,GLAD)”,这个tracker的特点是,它能通过全局本地模块(global-local moduls)来学习对用户输入和以往系统动作的表示(representaiton)。 模型使用global模块在不同类型(称为slots)的对话状态的估计器之间共享参数,并使用local模块学习特定于slots的特征(slot-specific features)。 实验证明,这改善了对稀少状态(rare states)的跟踪。

考虑到读者基础不同,这里简要介绍下self-attention机制。self-attention,又名intra-attention,是自然语言处理任务中对序列表征概括上下文的一个有效方法。

介绍

对话状态跟踪的模块,作用的根据当前用户输入和以往的系统动作来估计对话状态,然后使用此对话状态来决定下一个系统动作并响应回用户。每一个turn都有turn goals和turn request.
多说无益,看下面一个完整的对话过程就明白了。

在如上图,每一个turn用虚线分隔,紫色为用户输入,后面跟着蓝色表示相应的turn goals和turn request。系统动作为黄色,并将结果转换为自然语言(黄色)。
对话系统的另一个重要概念是slot-values pair(以下称槽值对),可以说对话状态就相当于是多个槽值对的组合。由于对话的状态空间很大,因此构成状态的槽值对有很多其实在训练集中是很少出现的(rarely occur)。尽管用户指定某个特定的槽值对的概率很小,但是用户指定至少一个槽值对的概率很大。如果没能对这样的稀少槽值对进行预测,在对话历史中会累积错误,状态跟踪就很容易挂掉。

解决办法就是这篇论文提出来的所谓的GLAD。以往的DST,是对所有单个的槽值对独立地进行估计;而GLAD设计了global模块和local模型,global模块对于每一个slot估计器共享参数,local模块学习slot-specific features。

GLAD

状态跟踪问题,从一种角度,可以看做给定用户输入和过往系统动作来预测系统状态。其中,状态相当于是多个槽值对的组合。多标签状态预测问题就转化为针对槽值对的二元预测问题的集合。GLAD继承了上述思想,也是通过单独预测一个槽值对的思路来描述整个状态跟踪模型。全部结构如图所示,可看成DST由encoder模块和scoring模块构成
全部结构如图所示,可看出DST由编码模块(encoding module)和打分模块(scoring module)构成。encoder模块有3个encoder,分别对用户输入、过往系统动作、槽值对进行编码,输出encoding向量H和上下文向量c。

  • U:用户输入的词嵌入
  • Aj:过去第j轮的系统动作
  • V:under consideration的槽值对

将编码模块的输出送入打分模块进行打分,计算两种分数后加权求和得到最终得分y

Global-locally Self-Attention Encoder

首先介绍encoder模块的核心组件,Global-locally Self-Attention Encoder。
如上文所说,状态的本质是槽值对,稀少槽值对的预测性能的不足造成对话轮次层面的跟踪的不足。由于历史错误的积累,这个问题在joint tracking中进一步被放大。所以,在encoder模块部分,作者用了Global-locally的思想,更好地encode稀少槽值对,方式还是上文说的,通过global模块对于每一个slot估计器共享参数,通过local模块学习slot-specific features。

encoder的组成部分还是经典是Bi LSTM,加入了一个自注意力层来进行序列建模。形式如下。在这里插入图片描述
全局自注意力模块(Global self-attention module)的目的是计算用于通用意图状态跟踪的attention context。局部自注意力模块(Local self-attention module)的目的是计算slot-specific attention context。

方法:
考虑关于某一特定的slot进行序列encoding的过程。
第一步:
设序列中有n个word,词嵌入维度为demb,序列被构造成一个n×demb的矩阵X。
X经过Global Bi-LSTM构造得到全局编码 Hg
H g = b i L S T M g ( x ) H^{g}=biLSTM^{g}\left( x\right) Hg=biLSTMg(x)
X经过Local Bi-LSTM构造得到局部编码 Hs
H s = b i L S T M s ( x ) H^{s}=biLSTM^{s}\left( x\right) Hs=biLSTMs(x)
两个编码的维度相同,都是n×drnn。drnn是LSTM的状态维度。
两个LSTM的输出再通过如下方式合并,即获得X的全局-局部编码H
H = β s H s + ( 1 − β ) s H g H=\beta ^{s}H^{s}+\left( 1-\beta \right) ^{s}H^{g} H=βsHs+(1β)sHg
β s \beta ^{s} βs是每个slot s的专属的取值在0到1的标量,用于衡量global要素与local要素的比重,是待学习的参数。仅使用local模块对应 β s = 1 \beta^s=1 βs=1,仅使用global模块对应 β s = 0 \beta^s=0 βs=0

第二步:计算H对应的context c
具体地:
α i g = W g H i + b g \alpha^{g}_{i}=W^{g}H_{i}+b^{g} αig=WgHi+bg p i g = s o f t m a x ( a g ) p^{g}_{i}=softmax(a^{g}) pig=softmax(ag) c g = ∑ i p i g H i c^{g}=\sum _{i}p^{g}_{i}Hi cg=ipigHi
首先,对于第i个元素Hi,计算其全局自注意力分数 α i g \alpha^{g}_{i} αig。然后通过一个softmax对所有元素标准化,作为权重进行加权求和,即得到global self-attention context cg

把上面三个式子中的g换成s,就相应地得到local self-attention context cs

最后,global-local self-attention context c 用如下公式得到:
c = β s c s + ( 1 − β ) s c g c=\beta ^{s}c^{s}+\left( 1-\beta \right) ^{s}c^{g} c=βscs+(1β)scg

为了方面阐述,我们定义一个多值编码函数encode(X)
e n c o d e : X → H , c encode:X \rightarrow H,c encode:XH,c
即用上面的函数表示将序列X映射到H和c的过程。

Encoding module

定义了encoder之后,接下来构建对用户输入、过往系统动作,以及槽值对的表示(representation)。如上文所说有如下向量:
U:用户输入的词嵌入
Aj:过去第j轮的系统动作
V:under consideration的槽值对
H u t t ; c u t t = e n c o d e ( U ) H^{utt}; c^{utt} = encode (U) Hutt;cutt=encode(U) H j a c t ; c j a c t = e n c o d e ( A j ) H^{act}_{j}; c^{act}_{j} = encode (A_j) Hjact;cjact=encode(Aj) H v a l ; c v a l = e n c o d e ( V ) H^{val}; c^{val} = encode (V) Hval;cval=encode(V)

Scoring module

根据直觉,我们可以通过检查两个输入源(input resource)来确定用户是否表达了考虑下的槽值对。
第一个resource是用户输入语句。第二个resource是过往系统动作。
第一个源没什么好解释的,就是从输入获取信息。
比方说,当系统问“有什么我可以帮到你?”,用户回答“我要在市中心找一个法式餐厅”。如下处理:在这里插入图片描述
【注:相当于计算输入话语与slot-value pair的相似度。】
如上图所示,m是用户输入语句的words的数量,分数yutt指示了用户输入表达了value的程度。
第二个源,也就是过往的系统动作,其含义是,当用户输入语句没有提供足够充足的信息,而是refers to了过往的系统动作,就启用此输入源的信息。
比方说,当系统问“你要在市中心找一个餐厅吗?”,用户回答“是”。
在这里插入图片描述
分数yact指示了过往动作表达了value的程度。
【注:相当于计算过往动作与slot-value pair的相似度。】
除了真实的系统动作之外,我们还在每一轮引入了一个感知动作,它允许注意力机制忽略过往的系统动作。
最终分数y是yutt和yact的加权和通过一个sigmoid函数。
y = σ ( y u t t + ω y a c t ) y=\sigma \left( y^{utt}+\omega y^{act}\right) y=σ(yutt+ωyact)
这里的权重 ω \omega ω也是待学习的参数。

Experiments

下面的我就没有细看了。

ablation study

共有3条结论:

  1. 时序对于状态跟踪非常重要
    作者尝试了仅使用self-attention而不使用LSTM的实验,发现性能较差,这表明,捕获时间依赖性的representations有助于理解状态跟踪中的短语。
  2. 自注意力机制保障了slot-specific的、鲁棒的特征学习
    在时间维度上,使用平均池化而非自注意力的模型,作者观察到性能持续下降。这是由于自注意力机制提供了attention context计算的灵活性,这种灵活性使得模型可以关注under consideration的槽值对相关的被选中的words
  3. global-local共享机制提高了goals追踪的质量
    第一个实验,在仅使用local模块( β s = 0 \beta^s=0 βs=0)时,goal跟踪质量会下降,但不影响request跟踪。这是由于前者是对几个slots的联合越策,很少有训练样例,而后者则预测了那一个拥有最多训练样例的slot。第二个实验,在仅使用global模块( β s = 1 \beta^s=1 βs=1)时,goal跟踪和request跟踪都性能不佳,说明这样的模型的表达力不行,除了最终合格的打分模块外,它没有任何slot-specific的专业知识。

Related Work

主要的总结

Conclusion

这篇论文提出了一种新的用于对话状态跟踪的模型GLAD,其核心思想就是全局-局部的自注意力编码。其中全局部分允许slots间的参数共享,局部部分允许slot-specific的features的学习。这样,GLAD就能够在受限数据集下实现对稀少槽值对的泛化。在WoZ对话状态跟踪任务上,GLAD达到了88.1%的goal准确率,97.1%的request准确率。在DSTC2上,GLAD达到了74.5%的goal准确率,97.5%的request准确率。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值