论文阅读:《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.
多说无益,看下面一个完整的对话过程就明白了。
对话系统的另一个重要概念是slot-values pair(以下称槽值对),可以说对话状态就相当于是多个槽值对的组合。由于对话的状态空间很大,因此构成状态的槽值对有很多其实在训练集中是很少出现的(rarely occur)。尽管用户指定某个特定的槽值对的概率很小,但是用户指定至少一个槽值对的概率很大。如果没能对这样的稀少槽值对进行预测,在对话历史中会累积错误,状态跟踪就很容易挂掉。
解决办法就是这篇论文提出来的所谓的GLAD。以往的DST,是对所有单个的槽值对独立地进行估计;而GLAD设计了global模块和local模型,global模块对于每一个slot估计器共享参数,local模块学习slot-specific features。
GLAD
状态跟踪问题,从一种角度,可以看做给定用户输入和过往系统动作来预测系统状态。其中,状态相当于是多个槽值对的组合。多标签状态预测问题就转化为针对槽值对的二元预测问题的集合。GLAD继承了上述思想,也是通过单独预测一个槽值对的思路来描述整个状态跟踪模型。
全部结构如图所示,可看出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=i∑pigHi
首先,对于第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:X→H,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条结论:
- 时序对于状态跟踪非常重要
作者尝试了仅使用self-attention而不使用LSTM的实验,发现性能较差,这表明,捕获时间依赖性的representations有助于理解状态跟踪中的短语。 - 自注意力机制保障了slot-specific的、鲁棒的特征学习
在时间维度上,使用平均池化而非自注意力的模型,作者观察到性能持续下降。这是由于自注意力机制提供了attention context计算的灵活性,这种灵活性使得模型可以关注under consideration的槽值对相关的被选中的words - 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准确率。