赞
踩
让机器像人一样自由的对话,对话机器人必然要具备连续对话的能力,即多轮对话,多轮对话不用多讲,那么什么是多轮对话状态跟踪呢(DST, dialogue state tracker | belief traker)?
在会话的每一步需要去预测用户的目标,然后会话策略给于用户正确的用响应,但用户目标是一个不可观测的隐状态,所以需要通过观测用户历史utterence、系统历史响应,然后获得belief state,通过belief state来表示用户目标。
那么什么是会话状态(belief state): 对话的每一个时间步的状态表示,由于当前观测状态具有不确定性(asr噪声、nlu不确定、用户表达本身的不确定性),所以belief state是一个概率分布,具体为每个slot的概率,slot包含type,value,action。会话状态追踪技术就是每一个时间步的状态预测belief state,方法也较多,本文先从ACL的一篇文章NBT讲起。
2017Neural Belief Tracker- Data-Driven Dialogue State Tracking.pdf
此篇文章提出NBT框架,通过引入预训练词向量,将用户query和会话上文表征为向量,解决语义理解任务需要大量数据和手工特征的问题,更适合复杂的对话。
对于上一轮的系统输出,当前轮次的用户输入,每个slot-value对进行向量表征,转化为向量t,r,c。然后将t和r计算
将当前轮次的状态和上一轮的历史状态做合并。
分别使用两种encoder,分别是DNN和CNN,将用户query转化为向量。拿DNN举例,设置1-3的词语窗口,将窗口内的词向量拼接获得各个位置i的向量
v
i
1
,
v
i
2
,
v
i
3
v_i^1,v_i^2,v_i^3
vi1,vi2,vi3,然后通过各个i的向量求和获得向量
r
1
,
r
2
,
r
3
r_1, r_2, r_3
r1,r2,r3,进过非线性变化获得
r
1
,
,
r
2
,
,
r
3
,
r_1^,, r_2^,, r_3^,
r1,,r2,,r3,
v
i
n
=
u
i
⊕
…
⊕
u
i
+
n
−
1
r
n
=
∑
i
=
1
k
u
−
n
+
1
v
i
n
r
n
′
=
σ
(
W
n
s
r
n
+
b
n
s
)
r
=
r
1
,
+
r
2
,
+
r
3
,
\mathbf{v}_{i}^{n}=\mathbf{u}_{i} \oplus \ldots \oplus \mathbf{u}_{i+n-1} \\ \mathbf{r}_{n}=\sum_{i=1}^{k_{u}-n+1} \mathbf{v}_{i}^{n} \\ \mathbf{r}_{n}^{\prime}=\sigma\left(W_{n}^{s} \mathbf{r}_{n}+b_{n}^{s}\right) \\ r = r_1^,+ r_2^, + r_3^,
vin=ui⊕…⊕ui+n−1rn=i=1∑ku−n+1vinrn′=σ(Wnsrn+bns)r=r1,+r2,+r3,
对于每一个slot-value对,将槽位类型cs和槽位值cv相加之后经过一层MLP之后获得向量c,然后c和r做点乘获得获得d向量。
c
=
σ
(
W
c
s
(
c
s
+
c
v
)
+
b
c
s
)
d
=
r
⊗
c
有两种情况需要上文的系统表征
因此编码上文表征就显得重要,通过ts,tv表示系统的请求或者确认的槽位,将分别和cs,cv计算点积作为r的门控获得m向量,公式如下:
m
r
=
(
c
s
⋅
t
q
)
r
m
c
=
(
c
s
⋅
t
s
)
(
c
v
⋅
t
v
)
r
最终经过MLP层进行一个二分类,输出当前slot-value的概率:
y
=
ϕ
2
(
ϕ
100
(
d
)
+
ϕ
100
(
m
r
)
+
ϕ
100
(
m
c
)
)
ϕ
100
=
M
L
P
l
a
y
e
r
w
i
t
h
d
i
m
=
100
\mathbf{y}=\phi_{2}\left(\phi_{100}(\mathbf{d})+\phi_{100}\left(\mathbf{m}_{\mathbf{r}}\right)+\phi_{100}\left(\mathbf{m}_{\mathbf{c}}\right)\right) \\ \phi_{100}=MLP\ layer \ with \ dim=100
y=ϕ2(ϕ100(d)+ϕ100(mr)+ϕ100(mc))ϕ100=MLP layer with dim=100
简单的规则,通过一个衰减系数将当前的belief state和上一个belief state相加,获得每个slot-value的概率,再通过阈值(文中为0.5)进行过滤。
P
(
s
,
v
∣
h
1
:
t
,
s
y
s
1
:
t
−
1
)
=
λ
P
(
s
,
v
∣
h
t
,
sys
t
−
1
)
+
(
1
−
λ
)
P
(
s
,
v
∣
h
1
:
t
−
1
,
sys
1
:
t
−
2
)
优势:
缺点:
上一篇文章,由于通过手工规则更新belief state,导致新领域迁移需要昂贵的手动操作(我觉得也没多昂贵),这篇文章改进了belief state更新,通过联合学习的方式,将其集成到NBT中。
主要改进点在于引入了上一轮的belief state建模进行联合学习,不在使用规则,其他部分都一样就不在赘述,主要了解belief state的更新机制
只依赖域上一步的belief state和当前识别的槽位,所以当前的状态更新:
b
s
t
=
softmax
(
W
c
u
r
r
y
s
t
+
W
past
b
s
t
−
1
)
\mathbf{b}_{s}^{t}=\operatorname{softmax}\left(W_{c u r r} \mathbf{y}_{s}^{t}+W_{\text {past }} \mathbf{b}_{s}^{t-1}\right)
bst=softmax(Wcurryst+Wpast bst−1)
W
curr
,
i
,
j
=
{
a
curr
,
if
i
=
j
b
curr
,
otherwise
W
past
,
i
,
j
=
{
a
past
,
if
i
=
j
b
past
,
otherwise
改进了权重参数,每个权重矩阵只有两个参数,即对角矩阵和非对角,对角是对于同一个槽位的更新, a c u r r a_{curr} acurr表示倾向于使用当前槽位的权重, a p a s t a_{past} apast表示倾向于历史槽位的权重,非对角是不同的槽位的更新.
这样做的好处:parameter are tied, ensuring that the model can deal with slot values unseen in training
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。