之前介绍了自然语言理解、对话管理,其中对话管理包括DST和DPL,简单再说一遍,NLU是为了分析单一输入的语义,通过intent和slot表示语义,而DST是为了结合当前输入、上一时刻的输入和上一时刻系统的action分析出综合语义state(一般都是指slot-value),一般是指对NLU得到的slot进行更新,而DPL则是基于得到的state分析action。

这里主要结合具体的模型讲一下现实中是如何进行DST的,这个模型是十分经典的Neural Belief Tracker,模型的结构原理真的很厉害,真的很值得细细品味。

之前我们提到先进行NLU再进行DST和DPL,而Neural Belief Tracker则提出把NLU和DST合并在一起,既然NLU分析得到的slot很可能不准确,那就直接不单独分析单句话的语义,而是连着两句话进行分析(假设当前对话语义只和上一轮对话紧密相连,马尔可夫假设),所以Neural Belief Tracker分析的对象(输入)是上一轮的系统输出和当前的输入,同时还有所有候选的slot-value pairs中的某一个,输出就是一个二分类结果"有关联"或者"没有关联",通过遍历所有slot-value pairs,从而把所有和当前输入有关联的slot-value都找出来。

这是整个模型的结构图,从最上层开始看起,分别是system output、user utterance和candidate pair,user utterance就是当前的模型输入句子,candidate pair就是所有可能的slot-value,重点在于system output,也就是上一轮系统的输出,这是比较有意思的一个地方,在任务导向型对话系统中,系统的output可以分为两种,一种是system request,主要为了询问用户关于某些slot的value,比如问"想要买什么时候的机票",另一种就是system confirm,是为了确定一些特定的slot-value是否正确,比如问用户"你购买的是三号从上海飞北京的机票,信息正确吗?",对于system request,system output直接用特定的slot的embedding向量tq表示,对于system confirm,output是特定的slot-value的embedding向量(ts,tv)表示,注意!注意!注意!这里的括号是表示这是一个二元组,不是一个数组,也没有拼接在一起的意思。对于system output,说到底都是用slot或者slot-value的embedding向量表示,而不是用系统上一轮生成的语句表示,当然这也有道理,毕竟用系统生成的语句表示,说到底还是需要通过NLU转化为slot-value,还不如一开始就是用上一轮最终生成的slot-value。

所以来到第二层,就可以知道,context represantation就是指(tq,ts,tv)这些slot或者slot-value的embedding向量,因为要么是slot要么是slot-value,所以当其中一个不存在时就用零向量表示。对于candidate represantation,也是slot-value的embedding向量(cs,cv)。

然后我们来看看utterance representation,注意在把句子的单词替换成词向量之后,还需要进行所谓的representation learning,目的是用单一一个向量r表示整个句子的语义。论文中提到了NBT-DNN和NBT-CNN两种方法,首先来看NBT-DNN:

图中的r1通过把整个句子的一个一个单词加起来计算的,而r2则是先把每两个相邻的单词拼接在一起,再把拼接后的向量加起来,类似的,r3就是把相邻的三个向量拼接后,再相加,举个例子,“How are you”,r1就是把"How"、“are”、“you"的词向量加起来,r2就是把"How are”、"are you"的词向量加起来,r3就是"how are you"这个词向量,当然实际处理过程中我觉得会有一个padding操作,使得处理后的向量数量相等,不然r2比r1少了一个向量,r3又少了一个,这样后续处理就比较麻烦了。用公式表示就是:

vin=ui⨁...⨁ui+n−1v_i^n = u_i \bigoplus ... \bigoplus u_{i+n-1}vin=ui...ui+n1

上式表示句子第i位置n个向量的拼接。

rn=∑i=1ku−n+1vinr_n = \sum_{i=1}^{k_u -n+1} v_i^nrn=i=1kun+1vin

上式就是把拼接后的向量进行加法,从而得到r1、r2、r3,然后再经过线性变换和非线性变换(sigmoid函数)得到r’:

rn′=σ(Wnsrn+bns)r_n' = \sigma (W_n^s r_n + b_n^s)rn=σ(Wnsrn+bns)

最后再把三个变量加起来得到最终的向量r:

r=r1′+r2′+r3′r =r_1' + r_2' + r_3'r=r1+r2+r3

简单来说,上面就是对句子中的1-gram、2-gram、3-gram分别利用神经网络提取特征,再相加得到整个句子的特征向量。

明白了NBT-DNN的思想,NBT-CNN就不难理解了,其实只是换成CNN提取特征而已:

假设词向量尺寸为300,那么就用3001、3002、300*3三种不同尺寸的卷积核进行卷积运算得到R1、R2、R3,然后再用激活函数和最大池化处理一下:

rn′=maxpool(ReLU(Rn+bns))r_n' = maxpool(ReLU(R_n + b_n^s))rn=maxpool(ReLU(Rn+bns))

本质上来说还是对于不同的n-gram采用CNN提取一下特征,最后再加起来得到最终的向量r。

接下来继续看第三层,先看semantic decoding,主要是分析用户的输入有没有匹配到相应的candidate pairs,当然这是在没有考虑system output的情况下,之前我们已经得到了utterance representation r和candidate representation (cs,cv),如果slot或者value有多个单词就加起来,确保cs和cv是单个向量,然后模型会通过单层神经网络学习出单个语义向量表示出cs和cv:

c=σ(Wcs(cs+cv)+bcs)c = \sigma (W_c^s (c_s + c_v) + b_c^s)c=σ(Wcs(cs+cv)+bcs)

同时上述的线性变换也确保了最终得到的c和r的尺寸是一致的,以便继续进行element-wise的乘法计算相似度:

d=r⨂cd = r \bigotimes cd=rc

再来看看context modelling,这个有点复杂,先来看看公式:

mr=(cs⋅tq)rm_r = (c_s \cdot t_q)rmr=(cstq)r

mr=(cs⋅ts)(cv⋅tv)rm_r = (c_s \cdot t_s)(c_v \cdot t_v)rmr=(csts)(cvtv)r

还记得一开始说过,system output可能是slot也可能是slot-value pairs,所以这里分两种情况有两种公式,首先我们要进行的是system output和当前的candidate pair的相似度计算,这里相当于一个门机制,我是这样理解的,假设上一轮system output的内容是food(没有value),tq=(1,0,0),现在的candidate pair是food:Indian,词向量可能是cs=(0.9,0.1,0.2),这样点积的结果是0.9+0+0=0.9,还有一种情况,candidate可能是sports:basketball,向量cs=(0,0,1),这时候点积结果就是0+0+0=0,所以,通过system output和candidate pair的点积运算,得到的数值其实是可以反映出两者的关联的。

然后再用得到的相似度乘以utterance r,按照论文的说法,目的是只传递和system output、candidate pair都相关的信息,比如说system output和candidate pair都提到food,相似度就比较高,utterance就可以比较完整地传递过去,如果system output和当前的candidate pair不相关,最终计得的context modelling向量甚至可能接近0。关于这点,也比较好理解,假如当前的candidate pair是food:persian,而上一轮的output是sport:basketball,那么就完全不相关了,既然上一轮系统在谈论运动和篮球的话题,那么这一轮用户的回答应该也是和这个话题有关的,换句话说当前的输入很大概率和candidate pairs无关,而这种无关性就可以通过接近0的context modelling向量反映。

以上的方法,论文还提到一个很重要的作用,在system output是confirm的情况下,比如"would you like indian food?“这时候用户的回答可能只是一个"yes”,并不包含任何的slot-value,但是实际上这个yes的意思就是确认了food:indian这个slot-value pair的正确性,我们当然可以知道yes包含了这层意思,可是模型怎么学习出这层意思呢,这就是context modelling这个结构最巧妙的地方,注意!注意!注意!当system output和candidate pair高度相关时,user utterance能够完整地传递给context modelling,也就是"yes"的语义向量能比较完整地传给context modelling模块,而当模型遇到多次"yes",都发现system output和candidate pair都高度相关时,模型就能领悟到,只要下次也接收到这个"yes",就意味着它包含了上一轮system output的slot-value,所以说,这个context modelling,真的是整个模型最叹为观止的地方。

最后,终于到了binary decision making,通过神经网络基于context modelling和semantic modelling的结果进行二分类,从而分析出user utterance和当前的candidate pair到底有没有联系,如果有就说明用户的输入可以反映出candidate pair的信息,没有就继续分析下一个candidate pair,一直把所有candidate pairs都分析一遍,从而把user utterance中所有有关的slot-value pair都找出来。

再总结一下整个模型的流程,首先,模型的目的是基于上一轮系统的输出和当前系统的输入,分析输入和候选的slot-value pair有没有关系,怎么看有没有关系,自然就是对候选的pair逐个进行分析,逐个进行二分类,在分析的过程中,首先需要进行representation learning,把output、utterance和candidate pair都转化为向量,然后一方面分析utterance和candidate pair的关系,一方面综合分析system output、utterance和candidate pair之间的关系,最后再把分析出来的特征传入神经网络进行二分类,判断utterance有没有包含当前的candidate pair信息。

在github写的自然语言处理入门教程,包含汇总的博客文章和相应的模型代码:NLPBeginner

最近开始研究对话系统,还在探索当中,学习笔记也会在github上整理更新:HowToCreateHomunculus

DST与Neural Belief Tracker相关推荐

  1. 最新模型-SUMBT【slot-utterance matching belief tracker】

    论文名称:SUMBT: Slot-Utterance Matching for Universal and Scalable Belief Tracking Abstract 本文的模型叫做SUMBT ...

  2. 对话管理DST:Deep Neural Network Approach for the Dialog State Tracking Challenge

    数据集 DSTC 本论文方案参与DSTC的竞赛,队名为: 'team1/entry1'. 模型结构 一个槽位S训练一个模型,训练过程: 1.计算该槽位s被slu识别的所有槽值v(加UNK)特征得分,作 ...

  3. 您的DST大礼包请查收

    本文转载自刘冲大佬(知乎id:呜呜哈)的知乎文章,链接: https://zhuanlan.zhihu.com/p/40988001 除本文外,作者还写了很多对话相关的良心好文!做对话的小伙伴千万不要 ...

  4. 任务型对话(二)—— DST(对话状态追踪)

    1,概述 关于任务型对话的简介看任务型对话(一)-- NLU(意识识别和槽值填充). 首先我们来看下对话状态和DST的定义. 对话状态:在$t$时刻,结合当前的对话历史和当前的用户输入来给出当前每个s ...

  5. 梳理|对话系统中的DST

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接:   http://www.pkudodo.com/201 ...

  6. 任务导向型对话系统——对话管理模型研究最新进展

    作者丨戴音培.虞晖华.蒋溢轩.唐呈光.李永彬.孙健 单位丨阿里巴巴-达摩院-小蜜Conversational AI团队,康奈尔大学 对话管理模型背景 从人工智能研究的初期开始,人们就致力于开发高度智能 ...

  7. 什么是人机对话模型?阿里小蜜团队写了1.5万字

    简介: 从人工智能研究的初期开始,人们就致力于开发高度智能化的人机对话系统.对话管理模型研究最新进展源于前沿的深度的研究-- 作者: 戴音培1.虞晖华2.蒋溢轩2.唐呈光1.李永彬1.孙健1 单位: ...

  8. 深度前沿:对话管理模型研究最新进展

    简介: 从人工智能研究的初期开始,人们就致力于开发高度智能化的人机对话系统.对话管理模型研究最新进展源于前沿的深度的研究. 作者: 戴音培1.虞晖华2.蒋溢轩2.唐呈光1.李永彬1.孙健1 单位: 阿 ...

  9. 小蜜团队万字长文 | 讲透对话管理模型最新研究进展

    对话管理模型背景 从人工智能研究的初期开始,人们就致力于开发高度智能化的人机对话系统.艾伦·图灵(Alan Turing)在1950年提出图灵测试[1],认为如果人类无法区分和他对话交谈的是机器还是人 ...

  10. 一文读懂智能对话系统

    来源:机器学习算法全栈工程师 作者:蒙康 编辑:王抒伟 本文共6050字,建议阅读10分钟. 本文带大家理解智能对话系统的研究方法以及未来趋势. 笔者在最近的研究中发现了一篇非常好的有关对话系统的论文 ...

最新文章

  1. Android:Handler的消息机制
  2. int main(int argc,char* argv[])详解(原)
  3. 解析金融反欺诈技术的应用与实践
  4. Python语言学习:复杂函数(yield/@property)使用方法、案例应用之详细攻略
  5. contiki源码阅读之list
  6. javascript js jquery获取元素位置代码总结
  7. Golang 标准库--strings
  8. 组织架构递归_映射架构和递归管理数据–第1部分
  9. js 的push方法
  10. 所有铣床行业调研报告 - 市场现状分析与发展前景预测
  11. Qt实现Areo效果
  12. hadoop重新启动之后Datanode无法启动的问题
  13. highcharts:根据Y的数值范围,动态改变图形的填充颜色
  14. DSP ADC模数转换
  15. HttpSession session用法详解
  16. 虚拟机安装win10教程
  17. Codepen 每日精选(2018-3-26)
  18. pandas写入excel指定行_使用pandas操作excel
  19. 有谁在阜阳计算机学校教英语,阜阳计算机学校怎么样、好不好
  20. C语言————文件的打开(知识点总结+举例)

热门文章

  1. 零基础学前端系列教程 | 和前端谈恋爱的第005天——约会账单
  2. [论文阅读] 对话式推荐系统的进展与挑战:综述(Advances and Challenges in Conversational Recommender Systems: ASurvey)-01
  3. 数据库系统的基本组成
  4. leetcode 155. Min Stack最小栈(中等)
  5. PTA实验4-1-2 求奇数和 (15分) 本题要求计算给定的一系列正整数中奇数的和。
  6. a-upload 上传文件到阿里oss
  7. ubuntu更改文件夹权限
  8. Anaconda安装教程
  9. 手机签到应用的设计与手机定位方法浅析
  10. 由《爆裂鼓手》引发的产品思考