当前位置:   article > 正文

【多轮对话】任务型多轮对话状态跟踪-NBT原理_任务型多轮对话(对话工厂)

任务型多轮对话(对话工厂)

让机器像人一样自由的对话,对话机器人必然要具备连续对话的能力,即多轮对话,多轮对话不用多讲,那么什么是多轮对话状态跟踪呢(DST, dialogue state tracker | belief traker)?

在会话的每一步需要去预测用户的目标,然后会话策略给于用户正确的用响应,但用户目标是一个不可观测的隐状态,所以需要通过观测用户历史utterence、系统历史响应,然后获得belief state,通过belief state来表示用户目标。

会话状态(belief state)

那么什么是会话状态(belief state): 对话的每一个时间步的状态表示,由于当前观测状态具有不确定性(asr噪声、nlu不确定、用户表达本身的不确定性),所以belief state是一个概率分布,具体为每个slot的概率,slot包含type,value,action。会话状态追踪技术就是每一个时间步的状态预测belief state,方法也较多,本文先从ACL的一篇文章NBT讲起。

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=uiui+n1rn=i=1kun+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

c=σ(Wcs(cs+cv)+bcs)d=rc
c=σ(Wcs(cs+cv)+bcs)d=rc

上文表征

有两种情况需要上文的系统表征

  • 系统问下了用户某个槽位,比如用户对价格要求,这时候用户回答极有可能就是价格。
  • 系统向用户发起确认某个slot-value的时候,用户回答肯定的时候,需要更新槽位。

因此编码上文表征就显得重要,通过ts,tv表示系统的请求或者确认的槽位,将分别和cs,cv计算点积作为r的门控获得m向量,公式如下:
m r = ( c s ⋅ t q ) r m c = ( c s ⋅ t s ) ( c v ⋅ t v ) r

mr=(cstq)rmc=(csts)(cvtv)r
mr=(cstq)rmc=(csts)(cvtv)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 Updates1

简单的规则,通过一个衰减系数将当前的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 )

P(s,vh1:t,sys1:t1)=λP(s,vht, sys t1)+(1λ)P(s,vh1:t1, sys 1:t2)
P(s,vh1:t,sys1:t1)=λP(s,vht, sys t1)+(1λ)P(s,vh1:t1, sys 1:t2)

优势:

  • 依赖于预训练的词向量,可以做到将槽位的归一,例如"a pricey restaurant"分类为"price=expensive"
  • slu和dst集成到一起,集成度高。

缺点:

  • 首先要求有预先定义的ontology,slot-value对是可遍历的,不能太多。
  • 其次每次预测都要和每个slot-value计算,开销比较大,不是很实用。
  • 编码方法比较native。
  • 丢弃了历史的状态,里面可能包含的信息有利于理解。
  • 状态更新基于规则。

2018Fully Statistical Neural Belief Tracking.pdf
在这里插入图片描述

上一篇文章,由于通过手工规则更新belief state,导致新领域迁移需要昂贵的手动操作(我觉得也没多昂贵),这篇文章改进了belief state更新,通过联合学习的方式,将其集成到NBT中。

主要改进点在于引入了上一轮的belief state建模进行联合学习,不在使用规则,其他部分都一样就不在赘述,主要了解belief state的更新机制

Belief State Updates2

One-Step Markovian Update

只依赖域上一步的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 bst1)

Constrained Markovian Update

W curr  , i , j = { a curr  ,  if  i = j b curr  ,  otherwise  W past  , i , j = { a past  ,  if  i = j b past  ,  otherwise 

\begin{array}{l}W_{\text {curr }, i, j}=\left\{\begin{array}{ll}a_{\text {curr }}, & \text { if } i=j \\ b_{\text {curr }}, & \text { otherwise }\end{array}
\right. \\ W_{\text {past }, i, j}=\left\{
apast , if i=jbpast , otherwise 
\right.\end{array} Wcurr ,i,j={acurr ,bcurr , if i=j otherwise Wpast ,i,j={apast ,bpast , if i=j 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

reference

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号