您的DST大礼包请查收

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

很认真的前言

还不了解对话状态追踪(DST)在整个对话系统中的角色的小伙伴可以看小夕前不久的吐血科普文《对话系统的设计艺术》。

另外,还是要把小福利送给爱学习的小伙伴们鸭,订阅号后台回复「对话状态追踪」可领取小夕打包的本文papers噢~

推动DST问题前进的一个特别极其非常重要的竞赛兼数据集就是DST Chanllege(DSTC)。因此本文主要会围绕DSTC竞赛进行介绍,模型也多是在该竞赛的基础上,使用相关数据集提出的方法。本文主要会从下面几个方向进行介绍:

  • DST基础

    • 对话状态定义

    • DST定义

    • DST实例

  • DST常用方法

    • Rule-based DST

    • Generative Models for DST

    • Discriminative Models for DST(分类+序列建模)

    • Web Rank for DST

  • 基于深度学习的DST模型

    • DNN for DSTC1

    • Word-based RNN for DSTC2

    • Delexicalised RNN for DSTC3

    • Neural Belief Tracking(NBT)for DSTC2

    • Fully NBT

  • DSTC简介

    • DSTC1

    • DSTC2

    • DSTC3

DST基础

对话状态定义:对话状态St是一种将到t时刻为止的对话历史简化为可供系统选择下一时刻action信息的数据结构,往往可以理解为每个slot的取值分布情况。

DST(Dialog State Tracking)就是根据所有对话历史信息推断当前对话状态St和用户目标。往往是pipeline对话系统中至关重要的一个模块,上接NLU,下接Policy。如下图所示:

如果把DST当做是一个黑盒的话,那么就可以简化为如下“输入→输出”的形式,

  • 输入往往包含:

    ASR、SLU 的输出结果N-best,系统采取的action,外部知识等等;

  • 输出:

    对化状态St,用于选择下一步动作;

由于ASR、SLU等组件的识别结果往往会出错,所以常常会输出N-best列表(带置信度概率),这就要求DST拥有比较强的鲁棒性。所以DST往往输出各个状态的概率分布,这样可以在多轮对话中进行修改,并且方便bot向用户发起澄清query。DST的例子见下图:

DST常用方法

这里参考“The Dialog State Tracking Challenge Series: A Review”“MACHINE LEARNING FOR DIALOG STATE TRACKING: A REVIEW”这两篇论文进行总结。主要介绍当前DST的一些主流方法,其实主要就是人工规则、生成式模型、判别式模型、Web Rank四大类。就目前来讲,判别式模型效果更好,因为他通过特征提取的方法对对话状态进行精准建模,而且可以方便的结合深度学习等方法进行自动提取特征。此外,RNN、CRF等模型可以将对话当做序列数据进行建模,学习对话轮次之间的状态变化,较传统的分类方法效果更好。

1,Hand-Crafted Rules for DST

一般只使用概率最高的SLU结果结合人工编写的更新规则进行状态更新:F(s,u’)=s’。例如,只有置信度高于0.8的slot和value才会被更新到对话状态中。

优点:不需要训练数据,很适合冷启动,而且很容易将领域的先验知识编码到规则中。

缺点:无法利用ASR和SLU解析出的N-Best列表,也没有办法同时追踪多种状态。一般使用的规则都很简单,没有办法定制复杂状态的更新机制;缺乏灵活性。

===》有些方法直接编写N-Best列表进行状态更新。但是缺点是相关参数需要人工编写制定,没有办法根据数据分布进行学习

2,Generative Models for DST

生成式模型主要是对数据集中存在的模式进行挖掘,学习出对话状态的条件概率分布。常见的方法包括贝叶斯网络和POMDP。通过构建对话状态之间的转义关系图,建模各变量之间的依赖关系和概率分布计算公式。下面以贝叶斯网络为例进行说明:

使用贝叶斯网络对状态分布进行预测,输入是系统动作a+用户动作u+(ASR+SLU结果u~)

上面公式中b(s)代表上一时刻对话状态的分布,b’(s’)表示预测的下一时刻状态分布,u’表示用户当前时刻的输入query。所以用户输入u依赖于当前的对话状态s和系统动作a,s’依赖于s和a’。

生成模型在效果上好于规则式方法,但是仍然无法完全利用所有有用的信息,原因就是其需要对所有特征之间的依赖关系进行精确建模,这是不现实的。而往往的做法是进行不必要的假设或者忽略对话历史中一些有用的信息。所以效果仍然无法满足需求。

3,Discriminative Models for DST

判别式模型的想法是先对观察结果提取有用特征,然后进行建模:b’(s’) = P(s’|f’)。通过对当前轮次对话提取特征来表示,往往在一定程度上可以反映出对话的状态,常见的特征见下面4.1节所使用的特征。常见的方法有两大类:

  • 一种是将特征用于训练分类器,预测接下来的状态s’是哪一个,需要将所有历史信息抽象成一个固定维的特征向量。

    (ME、NN、web_ranking等方法);

  • 另外一种是将特征用于序列建模,比如马尔科夫链、CRF、RNN等模型

判别式方法的主要环节就是特征提取+模型。特征提取主要包括人工体特征和模型自己学(RNN的word-based方法等),而模型就是上面提到的分类和序列建模两种。这也是我们接下来要介绍的主要方案。

缺点:判别式方法需要大量的标注数据用于训练⇒multi_domain learning + 迁移学习 + 无监督自适应方法。

在上述的方法中,模型直接从大量数据中学习用户行为(改变目标等),因此可以引入一些先验知识改善状态追踪效果,比如对一些置信度高的SLU结果设计一些特定规则以表示状态的转换等。

深度学习模型DST

从这里开始将要介绍具体的模型,会针对DSTC竞赛选择几个典型的DNN模型来介绍,具体的DSTC数据集会放在下一节进行介绍,因为主要是一些数据描述和竞赛结果等内容,放在前面会比较占篇幅。根据上面DST的定义,我们知道DST的输入是ASR+NLU的N-best列表,再加上bot上一时刻的动作等信息,而输出是对话状态和用户目标的表征。但是在具体建模中,我们直接会把对话状态细化为每个slot取值的概率分布。所以一般会对每个slot分别构建一个模型用于学习其概率分布,这样做的好处是将问题简化,方便实用深度学习的模型进行建模。

1、DNN for DSTC1

本文提出的模型把DST当做是一个分类问题,输入是时间窗口T内的对话轮次提取出的特征,输出是每个slot取值概率分布。该模型的优点是不需要知道slot取值的确定个数(参见DSTC1数据集特点,某些slot的取值范围不确定),而且模型对特定域的过拟合很弱,可以很容易的迁移到其他相似domain上。模型结构如下图所示:

对所有出现过的slot-value都进行下面的流程,再额外训练一个unknown值,这也是不需要知道所有value取值的原因,因为他把每个slot都拆分成很多个二分类,而不是一个多分类问题:

  1. 其中1…M表示模型提取的M种特征(见下表)。

    t…t-T+1表示T时间窗口内的对话轮,对于最近的T个轮次,每轮都提取响应特征;

    0…t-T表示在此之前的所有轮,对于这些轮对话直接对其特征求和作为一维特征输入。

    所以最后留下T*M个特征。

  2. 接下来经过三个全连接层,得到最终的编码向量E(t,v)(这里会对所有在t轮之前出现过的v都计算一次)。

  3. 计算各个slot的value 。

    对于出现过的v,直接使用E(t,v)计算即可;

    对于没有出现过的slot,为每个slot训练一个参数B。

    然后进行归一化,如下图所示:

接下来看一下特征如何选取,为了达到更好的效果,本文选择了如下12个特征:

2、Word-based RNN For DSTC2

本文提出模型的特点:

  1. 直接使用ASR输出的结果,不用SLU(避免了SLU模块的误差),而且将DST当做是一个序列建模问题,直接使用RNN处理;

  2. 传统判别式方法需要人工提取特征,而本文直接使用n-gram特征以重构那些人工特征;

  3. 构造一个与slot无关的RNN组件(见下面模型结构图中g|v部分),以解决判别式模型过拟合的现象,从而追踪未见过的系统状态

同样对每个slot训练一个RNN,其输入为上一轮用户query和系统动作,输出为本时刻的状态概率分布,并更新内部记忆向量。直接输出所有value的概率分布,对每个slot训练一个多分类器。

接下来先来看看特征提取的办法

从上图可以看出,主要包含f,fs,fv三种特征,f是对原始query提取的,fs和fv都是对query中的词进行tag替换得到的模板泛化特征,其中fv对每个value都进行提取,这样做有助于模型泛化。最终模型的输入特征会达到3500维左右;

然后f,fs,fv都是有ASR和machine act两部分连接而成。ASR是query的N-best列表,分别提取其一元二元三元组n-gram,概率就是n-best置信度相加;machine act(acttype(slot=value)结构)也是同样,不过概率置1;具体可以参考上图,其实就是对query和machine act提取n-gram,进行各种组合,目的是通过这种低阶的多维组合,可以在高层重构出各种特征组合的可能性,来模拟甚至超越人工提取的各种特征。

然后接下来看一下模型的结构:

对每个slot训练一个模型,输出的是其所有value的可能取值+不存在的概率分布。模型也包含两部分:h+g;

  • 其中h是对f进行建模(h=NNet(f+p+m)),但是其泛化效果较差;

  • g是对每个v都有一个模型(g=NNet(f+fs+fv+{P|N,P|v}+m)),主要是一些标签式的特征,其泛化效果较好

然后分别使用softmax和sigmoid对p和m进行更新。

3、Delexicalised RNN for DSTC3

仍然延续上述模型,只不过增加了无监督自适应学习过程,而且为了将模型泛化到一个新的domain,这里将上述模型中的h省去,易于泛化。模型结构图如下所示:

论文主要是为了DSTC3中的新domain知识的学习。这里不再赘述,想要了解的同学可以看原论文和DSTC3。

4、Neural Belief Tracker(NBT)

目前的对话系统很难扩展:NLU要求大量训练数据+模板用于捕捉用户差异输入。前面提到的几个模型也都并不像传统的深度学习那样,使用的还是n-gram特征作为输入。而且像Delexicalised这种方法需要大量的语义词典、模板等人工构造的信息才能够学习出相似、相关词进行替换,整个模型的复杂度仍然很高。为了解决这些问题,NBT模型就首次引入了word2vec来学习和表征语义相似度信息。

⇒NBT模型使用表示学习的方法克服上述问题。首先使用word2vec将用户输入编码成语义向量。然后使用context modeling + semantic decoding两个子模块对分别实现上下文建模和单轮NLU的功能。

第一部分:先来看一下使用word2vec进行表示学习的模型,这里提出两种架构NBT-DNN + NBT+CNN,模型结构图如下所示:

  • NBT-DNN模型流程:

    • 先对输入按照滑动窗口进行contactate得到向量vi(滑动窗口的长度分为1,2,3);

    • 然后DNN模型对contactate之后的向量vi进行累加求和得到r1,r2,r3(分别代表n-gram的累加结果);

    • 接下来通过一层神经网络将向量映射到同一维度得到r1‘,r2’,r3‘;

    • 最后箱量相加求sum,得到用户输入utterance的向量表示r

  • NBT-CNN模型流程:

    • 先对输入按照滑动窗口进行contactate得到向量vi(滑动窗口的长度分为1,2,3);

    • 然后分别去窗口长度为1,2,3,宽度为1300,2300,3*300的卷积核对v进行卷积;

    • 接下来对卷积结果使用Relu和max_pooling取出其最大值得到窗口1,2,3的编码向量r1’,r2‘,r3’;

    • 对向量进行求和得到最终用户输入utterance的表示向量r

第二部分:接下来看看整个系统的结构图,里面包含了semantic decoding和context modelling两部分:

  • semantic decoding:

    判断一个slot-value对是否出现在当前query中

    • candidate pair表示方法:

      cs+cv直接使用词向量表示即可:

      c=tanh(W(cs+cv)+b)

    • 语义表示向量:

      d=r*c

  • context modeling:

    对上一轮系统act结果进行解析,system request(tq)+system confirm(ts+tv)。

    • 系统询问(system request):

      主要询问某个slot的取值,用tq表示,mr=(cs·tq)r

    • 系统确认(system confirm):

      确认某个slot取值value,用ts和tv表示,用户返回正向or负向信息。

      mc=(cs·ts)(cv·tv)r

第三部分:Binary Decision Maker:进行二元决策,判定当前轮次中slot-value对的状态;

  • 状态更新机制:

    本文采用简单的基于规则的状态更新机制。

    • 对每个ASR的输出query按照上述方法求解其对应的每个slot-value对的概率值;

    • 按照ASR的置信度对所有结果进行加权求和,得到slot-value的最终概率;

    • 对历史结果进行更新(按照置信度lamba,常取0.55,在历史和当前值之间trade off);

    • 最终,对于约束slot而言,取概率最高的value进行查询,对request slot而言,直接返回结果,因为request类不需要多轮。

5、Fully NBT

这是ACL 2018的最新文章,其在NBT的基础上,将原始的规则式状态更新模型,融合到模型中进行联合训练,期末性框架图如下所示:

本文提出了两种更新机制:

  • One-Step Markovian Update

    • 使用两个矩阵来学习当前状态和前一时刻状态之间的更新关系和系数。

      矩阵每一行学习一个特定value的概率。

      ⇒无法处理没见过的value;

  • Constrained Markovian Update

    • 只用4个参数来构建上述矩阵(对角线和非对角线)。

      对角线用于学习当前值和过去值之间的关系,非对角线用于学习不同value之间如何相互影响;

可以看出Fully NBT已经可以实现全部的端到端学习,而且该文作者开源了本论文的可训练

https://github.com/nmrksic/neural-belief-tracker

DSTC简介

整体的三个数据集的数据情况如下图所示:

DSTC1:公交线路查询,目标固定不变。共5个slot(路线,出发点,重点,日期,时间),有些slot(时间和日期)的取值数量不固定。而且DSTC1的用户目标在对话过程中不会发生变化。从下图可以看出DSTC1竞赛结果最好的是team6 entry4,用的是判别+生成+无监督自适应。而DNN方法效果还很一般,还不如人工规则的方案。

DSTC2:餐馆预订,用户查询满足特定条件下的餐馆的某些信息(电话、地址等),用户目标会在对话过程中发生变化;我们可以从比赛结果中发现,已经大很多支队伍开始尝试NN的方法来解决DST问题,而且大都尝试序列建模(CRF、马尔科夫等),此外需要注意的是web ranking方法效果也比较好。而且很对队伍都是直接使用ASR结果,不再用SLU组件。

DSTC3:在DSTC2的基础上,增加一些新的slot,而且添加了新的域(旅游信息查询)(只有很少的训练数据)

最后还是要给爱学习的小伙伴送出小福利鸭,订阅号后台回复「对话状态追踪」领取本文papers噢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LSTM长短记,长序依赖可追忆(深度学习入门系列之十四)

摘要:如果你是一名单身狗,不要伤心,或许是因为你的记忆太好了。有时,遗忘是件好事,它让你对琐碎之事不再斤斤计较。然而每当自己记不住单词而“问候亲人”时,也确实气死个人。于是你懂得了如何控制好什么信…

技术动态 | 清华大学开源OpenKE:知识表示学习平台

本文转载自公众号机器之心,选自 THUNLP。 清华大学自然语言处理实验室近日发布了 OpenKE 平台,整合了 TransE、TransH、TransR、TransD、RESCAL、DistMult、HolE、ComplEx 等算法的统一接口高效实…

多任务学习时转角遇到Bandit老虎机

注:本文的正文干货转载并少量修改自大佬覃含章(知乎id同名,知乎必关的数值优化大佬啊啊)的一篇知乎回答,链接https://www.zhihu.com/question/53381093/answer/562235053一个转角事情是这样的,最近小夕在做…

NLP13-LDA引发的一系活动

摘要: 目标是想了解也学习LDA,寻找学习LDA相关资料,学习LDA相关的概率基础,对于LSI,pLsa,LDA作为主题模型的对比;然后到LDA本身,对LDA相关的概率基础进行学习。把相关资料疏理与集合起来。

王昊奋 | 从聊天机器人到虚拟生命:AI技术的新机遇

本文转载自公众号中国人工智能学会。 10月12-13日,第七届中国智能产业高峰论坛在佛山开幕,在NLP与服务机器人专题论坛上,深圳狗尾草CTO王昊奋发表了主题为《从聊天机器人到虚拟生命:AI技术的新机遇》的精彩演讲。 以下是王昊奋老师…

【Java】如何理解Java中的异常机制?

1 异常的概念 程序在执行过程中出现非正常线性,导致JVM非正常停止异常不是语法错误 2 异常的分类 Throwable是所有错误或异常的超类Exception是编译期间异常(写代码时IDE会报错)RuntimeException时运行期异常,程序运行时出现的…

文本匹配相关方向总结(数据,场景,论文,开源工具)

Motivation 前不久小夕在知乎上写了一个回答《NLP有哪些独立研究方向》,于是有不少小伙伴来问分类和匹配的参考资料了,鉴于文本分类的资料已经超级多了,就不写啦(不过分类相关的tricks可以看之前写的这篇文章《文本分类重要tricks…

机器学习】LDA线性判别分析

【机器学习】LDA线性判别分析1. LDA的基本思想2. LDA求解方法3. 将LDA推广到多分类4. LDA算法流程5. LDA和PCA对比【附录1】瑞利商与广义瑞利商线性判别分析 (Linear Discriminant Analysis,LDA)是一种经典的线性学习方法,在二分类问题上因为最早由[Fish…

科普 | 动态本体简介

本文转载自知乎专栏知识图谱和智能问答。 1 近年来,随着语义Web的兴起,本体技术受到了广泛关注。很多大型跨国公司都开始研究本体技术。谷歌于2012年提出了知识图谱的项目,旨在利用本体技术来提高搜索的精度和更智能化的知识浏览。国内的互联…

文本匹配相关方向打卡点总结

Motivation前不久小夕在知乎上写了一个回答《NLP有哪些独立研究方向》[1],于是有不少小伙伴来问分类和匹配的参考资料了,鉴于文本分类的资料已经超级多了,就不写啦(不过分类相关的tricks可以看之前写的这篇文章《文本分类重要tric…

深入理解K-Means聚类算法

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/taoyanqi8932/article/details/53727841 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit…

刘挺 | 从知识图谱到事理图谱

本文转载自 AI科技评论。 在“知识图谱预见社交媒体”的技术分论坛上&#xff0c;哈尔滨工业大学刘挺教授做了题为“从知识图谱到事理图谱”的精彩报告。会后AI科技评论征得刘挺教授的同意&#xff0c;回顾和整理了本次报告的精彩内容。 刘挺教授 刘挺教授的报告内容分为四部分…

我对JVM的理解

一、JVM简介 JVM总体上是由类装载子系统&#xff08;ClassLoader&#xff09;、运行时数据区、执行引擎、内存回收这四个部分组成。 其中我们最为关注的运行时数据区&#xff0c;也就是JVM的内存部分则是由方法区&#xff08;Method Area&#xff09;、JAVA堆&#xff0…

【LeetCode】4月4日打卡-Day20-接雨水

描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xff0c;在这种情况下&#xff0c;可以接 6 个单位的雨水&#xff08;蓝色部分表示雨水&a…

算法与数据结构--空间复杂度O(1)遍历树

大家好~我叫「小鹿鹿鹿」&#xff0c;是本卖萌小屋的第二位签约作&#xff08;萌&#xff09;者&#xff08;货&#xff09;。和小夕一样现在在从事NLP相关工作&#xff0c;希望和大家分享NLP相关的、不限于NLP的各种小想法&#xff0c;新技术。这是我的第一篇试水文章&#xf…

PCA主成分分析学习总结

大概主成分分析&#xff08;Principal components analysis&#xff0c;以下简称PCA&#xff09;是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA&#xff0c;下面我们就对PCA的原理做一个总结。首先…

技术动态 | 大规模中文概念图谱CN-Probase正式发布

本文转载自公众号知识工场。 历时多年的研发&#xff0c;复旦大学知识工场实验室正式推出大规模中文概念图谱——CN-Probase&#xff0c;用于帮助机器更好的理解人类语言。概念图谱中包含实体&#xff08;比如“刘德华”&#xff09;、概念&#xff08;比如“演员”&#xff09…

生产Docker应用重启排查经历

一、现象描述 近期&#xff0c;生产云平台监控发生Docker应用重启次数过多事故报警&#xff0c;经观察发现某些Docker应用不定期地出现重启现象&#xff0c;已严重影响服务正常提供 生产应用重启的判断条件&#xff1a;健康检查连续3次检查不通过 生产健康检查间隔时间设置为…

【Java】深入理解Java线程

1 相关概念 并发&#xff1a;两个或多个事件在同一时间段内发生【多个任务交替执行】 并行&#xff1a;两个或多个事件在同一时刻发生【多个任务同时执行】 进程&#xff1a;进入内存的程序 内存&#xff1a;所有应用程序都要进入到内存中执行 临时存储RAM 线程&#xff1a;进…

机器学习——多元线性回归分析(multiple regression)及应用

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/loveliuzz/article/details/78006493 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_vi…