让机器像人一样自由的对话,对话机器人必然要具备连续对话的能力,即多轮对话,多轮对话不用多讲,那么什么是多轮对话状态跟踪呢(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​=ui​⊕…⊕ui+n−1​rn​=i=1∑ku​−n+1​vin​rn′​=σ(Wns​rn​+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 \begin{array}{l}\mathbf{c}=\sigma\left(W_{c}^{s}\left(\mathbf{c}_{\mathbf{s}}+\mathbf{c}_{\mathbf{v}}\right)+b_{c}^{s}\right) \\ \mathbf{d}=\mathbf{r} \otimes \mathbf{c}\end{array} c=σ(Wcs​(cs​+cv​)+bcs​)d=r⊗c​

上文表征

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

  • 系统问下了用户某个槽位,比如用户对价格要求,这时候用户回答极有可能就是价格。
  • 系统向用户发起确认某个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 \begin{array}{l}\mathbf{m}_{\mathbf{r}}=\left(\mathbf{c}_{\mathbf{s}} \cdot \mathbf{t}_{\mathbf{q}}\right) \mathbf{r} \\ \mathbf{m}_{\mathbf{c}}=\left(\mathbf{c}_{\mathbf{s}} \cdot \mathbf{t}_{\mathbf{s}}\right)\left(\mathbf{c}_{\mathbf{v}} \cdot \mathbf{t}_{\mathbf{v}}\right) \mathbf{r}\end{array} mr​=(cs​⋅tq​)rmc​=(cs​⋅ts​)(cv​⋅tv​)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 ) \begin{array}{r}\mathbb{P}\left(s, v \mid h^{1: t}, s y s^{1: t-1}\right)=\lambda \mathbb{P}\left(s, v \mid h^{t}, \text { sys }^{t-1}\right) +(1-\lambda) \mathbb{P}\left(s, v \mid h^{1: t-1}, \text { sys }^{1: t-2}\right)\end{array} P(s,v∣h1:t,sys1:t−1)=λP(s,v∣ht, sys t−1)+(1−λ)P(s,v∣h1:t−1, sys 1:t−2)​

优势:

  • 依赖于预训练的词向量,可以做到将槽位的归一,例如"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(Wcurr​yst​+Wpast ​bst−1​)

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\{\begin{array}{ll}a_{\text {past }}, & \text { if } i=j \\ b_{\text {past }}, & \text { otherwise }\end{array}\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

  • Neural Belief Tracker- Data-Driven Dialogue State Tracking
  • Fully Statistical Neural Belief Tracking

【多轮对话】任务型多轮对话状态跟踪-NBT原理相关推荐

  1. 对话式AI系列:任务型多轮对话的实践与探索

    移动互联网带来了大数据的普及,摩尔定律预言了计算机硬件的发展,深度学习则借助这阵东风实现了技术上的突破,人工智能成功进入大众视野,并改变了人们的日常生活. "小X同学,请打开电视" ...

  2. 对话系统-“任务型”多轮对话(二):对话状态追踪(DST)【基于规则;基于模型】【输入:当前意图和槽值对+历史槽值对;输出:State(槽值对集合)或State Vector 】【为DP做数据准备】

    在任务型的对话系统中,对话状态跟踪(DST)的目标是从对话历史中监控对话的状态. DST的输入:Intent+Slot+History:输出:State或State Vector DST中的State ...

  3. 模块结构篇:7.1)动力型塑料齿轮轮系设计步骤详解

    本章目的:详解塑料齿轮轮系设计步骤,设计出漏洞少的动力型塑料齿轮轮系. 本篇博文只是对机械手册上的内容进行详细的解读,更加详细的内容见机械设计手册第六版第三卷. 但作者见实例中有些尺寸公差明显高于普通 ...

  4. 小天鹅XQB30-7型波轮全自动洗衣机控制系统分析

    一.小天鹅XQB30-7型波轮全自动洗衣机小天鹅XQB30-7型波轮全自动洗衣机的控制电路由CXD-Q-3型电动式程序控制器.电源开关.水位选择开关.指示灯.蜂鸣器等构成,如图4-24所示. 1.CX ...

  5. c语言实现图片轮播,纯css实现轮播图

    轮播图的实现原理其实是比较简单的 举个例子 main的宽度是100px div-main的宽度是500px 我们用js控制div-main往左或往右移动,这样就实现了轮播,简单把 好了,先介绍个 cs ...

  6. kafka时间轮linux时间轮,Kafka解惑之时间轮 (TimingWheel)

    Kafka中存在大量的延迟操作,比如延迟生产.延迟拉取以及延迟删除等.Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定 ...

  7. axure轮播图怎么设置循环轮播_Axure教程:轮播图制作步骤详解

    不管是在PC端还是移动端,轮播图是常见的设计元素.下面详细讲解轮播图的制作步骤. 作为Axure初学者,把最近学到的记录下来,和大家一起学习. 如何实现轮播图: 循环展示轮播图片: 将圆点与轮播图一一 ...

  8. 关于element-ui中轮播图手动切换轮播图片

    文章目录 前言 一.关于element-ui中轮播图手动切换轮播图片 二.解决方案 1.查看element-ui中Carousel 走马灯组件的方法 2.解决方法 结尾 前言 在开发过程中发现项目中轮 ...

  9. bootstrap轮播速度_BootStrap:轮播插件

    前述 利用 BootStrap 实现图片轮播,包括 基本轮播.带标题的轮播.设置轮播速度的轮播.控制前后的轮播 实例 基本轮播 代码 1.引入bootstrap和jQuery文件 2.首先要有一个整体 ...

最新文章

  1. easyui validate 后 使用ajax提交
  2. wordpress从apache迁移到nginx
  3. OC中的自动引用计数
  4. Android开发--Spinner控件的使用
  5. Linux实战教学笔记02:计算机系统硬件核心知识
  6. taskspawn函数 linux,vxworks的启动任务taskSpawn
  7. 牛客网 【每日一题】5月14日题目 maze
  8. link、symlink、readlink、unlink函数的使用
  9. 根据工序画出aoe网_这些金刚网纱窗竟然含“毒”!选错就得病
  10. mysql 可以承受多少人_多少人曾羡慕“双 11”时的爆单 可知谁在承受库存积压的风险...
  11. Linux ext4文件系统下 extundelete 恢复 误删除的文件
  12. css设置background图片的位置实现居中
  13. java打印出日历_java控制台打印本月的日历
  14. ASEMI双向可控硅BTA12A,BTA12A特征,BTA12A主要用途
  15. 学习python:练习2.投资理财计算器
  16. C++七种序列容器类型
  17. word文档开头首字母取消自动检查大写
  18. html默认样式总结
  19. Web安全工具—Nmap(持续更新)
  20. ChIP专题 | 如何进行ChIP-qPCR富集验证

热门文章

  1. RK3399平板设备无法被应用识别为平板类型 问题处理
  2. Matlab字符串拼接
  3. 2020 | 带领团队学习成长,精华总结
  4. c#使用正则表达式获取TR中的多个TD_使用python+BeautifulSoup爬取微博热搜榜
  5. 【redis】内存回收机制
  6. Shoot Them Up Game
  7. canvas保存到本地图片三种方法
  8. pytorch如何查看显存利用情况
  9. 【论文笔记】Spatiotemporal Residual Networks for Video Action Recognition
  10. 利用SVM 实现文本分类的实例