1 对话状态跟踪概述

1.1 简介

对话状态跟踪是任务型(task-oriented)对话系统中的一部分,更具体来讲,是对话管理中的一部分。对话状态是从对话开始到当前对话的用户目标的总结,通常表现为多组槽-值对的组合的形式,有时也会包括对话所属的领域、用户意图等信息。对话状态跟踪是指结合对话历史、当前对话、前一轮对话状态等信息,推断并更新当前对话状态的过程。

1.2 关键概念

1)领域(domain)

可以简单理解为业务场景,如Hotel、Train、Restaurant等。

2)意图(intention)

用户话语的目的,如请求信息、提供信息,确认信息等。

3)槽(slot)

槽(slot)是指某种信息,与完成任务所需要获取的某种信息相对应,比如在预定酒店这个任务中,相关的槽有name、area、price range等。

4)本体(ontology)

数据集中,涉及到的所有的领域、意图、槽以及其相关的所有的值构成的数据字典,称为该数据集的本体。

1.3 方法

1)根据输入的来源来划分,可以分为Pipline和End-to-End的方法。

Pipline方法的输入是自然语言理解(NLU)模块的输出,依赖NLU模块的效果。End-to-End方法的输入是用户的对话,可以直接从对话中提取语义信息。

2)根据使用的模型来划分,可以分为基于规则、生成式模型、判别式模型的方法。

基于规则的方法一般使用NLU模块的1-best的结果作为输入,而且输出的对话状态也是确定型,基于规则的方法需要大量的人工和专家知识,因此在较复杂的场景适用性不强。基于规则的方法的优点是不依赖于历史数据,因此在没有历史数据的情况下适合冷启动。

生成式模型的方法主要利用贝叶斯网络学习整个对话状态的概率分布,其通用表达式为:


生成式模型的方法实现起来比较复杂,传统的生成式方法还要列出所有可能的对话状态,以及对话状态概率转移矩阵等。

判别式模型的方法直接根据输入判断当前的对话状态的概率分布,其通用表达式为:

其中表示输入特征,早期的判别模型的方法会利用SVM,最大熵,CRF等模型,随着深度学习的发展,目前主要使用各种神经网络。

3)根据slot的值是从预定义的ontology中选择还是从对话历史中提取或自动生成来划分,可以分为fixed-vocabulary、open-vocabulary的方法。

fixed-vocabulary的方法从预定义的ontology中选择slot的值。这种方法相对比较简单,对于未出现在对话历史中的值,也可以根据上下文信息进行预测。但是,在实际使用时,难以把slot所有可能的值都先预定义好。其次,计算的复杂度会随着ontology的规模而显著增加。在后续的改进中,提出了从NLU模块自动生成候选的slot值的方法,但是计算复杂度的问题,依然难以解决。

open-vocabulary的方法有两种方式生成slot的值,第一种是直接从对话历史中提取slot的值,这种方式无法解决部分不会明文出现在对话历史中值的问题。第二种是直接生成slot的值,这种方式会导致拼写错误等问题,而且逐字生成效率较低。虽然两种方式都存在缺点,但是open-vocabulary的方法仍然是目前的研究热点。

1.4 数据集

1.4.1 数据集构建方式

目前的对话系统数据集的构建方式主要可以分为两种:WOZ型、机器对机器型。

WOZ型:由两个人分别扮演用户和系统,用户给出其要满足的目标,系统连接实体数据库,返回选项。数据集通过众包的形式构建。

机器对机器型:过去的机器对机器的方式主要是基于对话模板生成数据,存在自然性、多样性和鲁棒性不足等缺陷。2018年谷歌提出M2M,只需要开发者提供一个任务纲要(Task Schema)和一个 API 客户端,然后就能利用一个领域无关的对话生成器,自动生成对话大纲(及标注),最后通过简单的人工改写,将对话大纲转换为自然对话。由于annotations、slot span是自动生成的,大大减少了数据收集成本。

1.4.2 常用数据集

单领域常用数据集为DSTC2、WOZ2.0。

多领域常用数据集为MultiWOZ。

1.5 评价指标

1)联合目标准确率(joint goal accuracy)/联合状态准确率(joint state accuracy)

对于每轮对话,将预测的对话状态和真实的对话状态进行比较,当且仅当对话状态中所有的(domain,slot,value)预测正确时,才认为对话状态预测正确。

2)槽位准确率(slot accuracy)

单独比较每个(domain, slot, value),当预测值与真实值匹配时,认为预测正确。

3)推断时间复杂度(inference time complexity,ITC)

衡量在相同的ontology下,DST模型的运行效率。ITC的计算方式是完成一次对话状态预测,需要inference多少次。ITC越小越好。

2 对话状态表示

第一种方式表示为所有可能的slot-value对的组合,这种方式表示的对话状态数量随着slot和value的数量指数级增加。

第二种方式使用状态分组和状态分割减少跟踪复杂度,不断的减少不确定性。类似于二分查找、剪枝。

第三种方式假设不同槽值的转移概率是相互独立的,表示为每个slot取值为每个value的概率分布,这种方式表示的对话状态数量随slot和value的数量线性增加。

第四种方式把对话状态表示为由每个slot及其取值构成,这种方式表示的对话状态数量与slot的数量相同。

3 Pipline方法

================================================================================================

ACL 2013:Deep Neural Network Approach for the Dialog State Tracking Challenge

================================================================================================

概述

本文提出了一种使用深度神经网络进行对话状态跟踪的方法。

模型架构

为在第t轮及其之前的对话中,SLU模块中出现过的所有关于slot s的可能的值的集合。对话跟踪器需要通过计算出slot的值在上的概率分布,来表示用户真正的目标,other表示用户的真正目标暂时没有出现在SLU的结果当中。

本模型的输入为第t轮及其之前的对话特征,输出是类的概率分布。

为第i个特征函数,t表示第t轮对话,v为来自SLU或者系统返回的slot的候选值。其中

为了让输入维度固定,本文设置一个固定的窗口参数,对于t到t-T+1轮的特征,直接使用特征函数的值表示。对于t-T到0轮的特征,把特征函数的输出求和,作为一个整体。模型最终的输入是一个维的矩阵,

然后输入到一个3层的全连接神经网络,得到slot在第t讨论对话时,值为v的分数。对所有的候选值v计算完成后,进行归一化操作,得到最后的概率分布:

每种slot训练各自的神经网络,参数不共享。

特征函数

实验结果

4 End-to-End方法

4.1 fixed-vocabulary的方法

================================================================================================

SIGDIAL 2014:Word-Based Dialog State Tracking with Recurrent Neural Networks

================================================================================================

概述

本文提出一种不需要SLU模块,直接从语音识别结果映射到对话状态的方法。本方法使用简单的n-gram类型特征,只需要少量的特征工程。本方法可以处理之前未见过的slot值的问题。

模型架构

本文对每个slot单独建模,每个模型都是一个多分类器,类别的个数和该slot下对应的value的个数相等。

模型的输入是本轮的用户话语和上一轮的系统响应,输出是slot的每个候选值的概率分布。

1)Feature Representation

对于ASR部分的特征,从N-best列表中提取unigram、bigram、trigram特征。对于出现多次的n-gram特征按照置信度加权求和。

对于系统响应部分的特征,各种acttype(slot=value)提取unigram、bigram、trigram特征。所有特征的权重均为1。

然后把ASR部分的特征和系统响应部分的特征进行拼接,得到特征向量

为了让模型可以处理未见过的slot的值,模型加入tagged特征。

首先对于ASR结果和系统响应的n-gram特征中的词,使用标签进行替代(如food替代成<slot>,indian替代成<value>),然后把这部分的特征进行拼接,得到特征向量

然后对每一个候选的value,提取n-gram特征中包含该value的项,然后使用标签进行替代(如food替代成<slot>,indian替代成<value>),然后把这部分的特征进行拼接,得到特征向量

2)Model Definition

是一个记忆向量,是slot的值的概率分布,是由一个隐含层和激活层构成的神经网络。

首先对特征提取信息:

然后利用,提取标签特征。分别对每个候选的value进行计算:

然后把h和g相加,和一个需要学习的参数拼接,输入到softmax,得到新的概率分布:

最后更新记忆向量:

3)Denoising Autoencoder

为了加速收敛,使用dA初始化权重。

首先对数据进行加噪,然后把噪声数据进行还原,然后使用计算交叉熵:


然后使用初始化模型h的权重。

4)Shared Initialisatio

首先所有slot使用同一个h进行预训练,然后再分别对每个slot单独训练h。

实验结果

================================================================================================

ACL 2017:Neural Belief Tracker: Data-Driven Dialogue State Tracking

================================================================================================

概述

目前大多数DST方法依赖NLU模块,并且需要人工构造特征,难以扩展到更大、更复杂的对话领域。

本文提出Neural Belief Tracking (NBT) 框架,利用词向量等技术,对用户话语和对话上下文进行编码,可以自动学习特征。

模型架构

本文为每种slot分别训练一个模型。训练期间词向量固定,这样更利于扩展到之前未见过的值的问题。

NBT的输入包括前一轮的系统话语()、本轮用户话语()、一个候选的slot-value对()。为了完成对话状态跟踪,模型需要遍历所有候选的slot-value对(由ontology定义),并选出用户刚刚提出的那些slot-value对。

NBT的第一层把三个输入编码成向量表示。然后,通过上下文建模和语义解码模块进行交互,得到中间交互摘要向量。最后通过决策模块,决定用户是否表达了候选slot-value对所代表的意图。

1)Representation Learning

设用户话语()为,对应的词向量为。本文提出两种神经网络架构用于编码信息:NBT-DNN、NBT-CNN。

表示从第i个词开始的连续n个词向量的拼接:

NBT-DNN首先计算n-gram特征r1、r2、r3:

然后把所有的n-gram特征向量转换成统一大小:

然后把多种n-gram特征向量进行求和,得到最后的表示

NBT-CNN使用卷积的方式获取n-gram特征,然后通过非线性变换层和max-pooling层得到最后的表示:

然后把多种n-gram特征向量进行求和,得到最后的表示r。

2)Semantic Decoding

用于提取本轮用户话语()、候选的slot-value对()的交互信息,用于判断用户是否显式地表达了与当前候选slot-value对有关的意图。

设slot的名字表示为,slot的值表示为从词向量中获取,如果包含多个词,则把多个词的词向量相加。

通过以下方式计算交互信息:

3)Context Modelling

用于提取前一轮的系统话语()和本轮用户话语()、候选的slot-value对()的交互信息。

系统的动作一般是以下两种类型之一:System Reques、2. System Confirm。System Reques是指系统向用户查询某slo的值。System Confir是指系统向用户确认某个值是否用户的目标

通过以下方式分别计算和用户话语()、候选的slot-value对()的交互信息:

4)Binary Decision Maker

最后使用二分类器判断当前候选的slot-value对是否有被提及:

5)Belief State Update Mechanism

对于第t轮对话,表示系统上一轮的输出,表示ASR的N-best列表,其中的概率为

首先对于每个中的所有slot-value对,计算

然后对N-best列表的结果进行加权求和:

然后把本轮对话的结果和上一轮的结果进行融合:

如果该slot-value对的概率大于0.5,则更新该slot的值,否则保留上一轮的值:

实验结果

================================================================================================

2018:Fully Statistical Neural Belief Tracking

================================================================================================

概述

本文对《Neural Belief Tracker: Data-Driven Dialogue State Tracking》中提出的NBT框架进行改进。

原本NBT框架使用基于规则的方式更新对话状态,并且只考虑了之前的系统响应,忽略了之前的对话状态。

模型架构

为某slot上一时刻的对话状态,长度为为本轮对话提及到某slot-value对的概率。

本文通过以下方式更新对话状态:。其中是slot的值的概率分布。

本文提出两种计算方式更新对话状态。

1)One-Step Markovian Update

这种方式可能会面临训练样本不足的问题,每个对话中可能只包含一个slot-value对,在训练的时候无法更新

2)Constrained Markovian Update

通过对加上以上约束,对角线的元素为同一个值,其他的元素另外的一个值,这样训练的时候能更新到所有的参数。

实验结果

================================================================================================

2019:HyST: A Hybrid Approach for Flexible and Accurate Dialogue State Tracking

================================================================================================

概述

目前最佳的DST方法通过多分类方式预测slot的值,无法处理现实中slot的值的候选集巨大、存在未知的值的问题。为了解决以上问题,业界提出了一些candidate-generation-based的方法,通过在每一轮中结合当前对话和对话历史生成候选的值,从候选值中选取答案,但是这些方法目前的表现不佳。

本文提出HyST模型,使用一种的混合方法,对每种slot类型采用对应的方式。

模型架构

设对话D由N轮对话组成,第i轮的系统动作用表示,用户话语用表示,对话状态用表示。每种slot用表示,其中是预定义好的集合,第i轮的slot的值用表示。

系统开始的时候把所有对话状态设置为默认值,后面根据可选的方式持续更新。

本文使用以下两种方法:Open Vocabulary State tracking(OV ST)、Joint State tracking(JST)

1)Open Vocabulary State tracking(OV ST)

对于每个slot,采用open-vocabulary评分模型。每一轮对话每种slot类型的候选值为,对话历史为。对于的每个候选值,采用二分类的方式判断是否正确答案,当则更新对话状态。

模型的目标函数为

对于第i轮对话,本文使用从开始到第i轮对话的所有对话历史中,所有出现过的n-grams单词作为候选答案(也可以使用其他如SLU系统、或者人工规则等其他方式生成候选答案),并加入{yes,no,dontcare}三个不会出现在对话中特殊值。

上下文特征由以下三部分组成:

User utterance encoder():给定第i轮的用户话语,使用biLSTM进行编码,然后把前向和后向的输出拼接,得到最终表示

Hierarchical LSTM():使用单向LSTM编码对话历史信息

Dialogue Act LSTM():使用单向LSTM编码系统动作信息

把三种特征拼接得到第i轮对话的上下文特征

使用每种slot类型独立的前向神经网络,计算最终的输出

2)Joint State tracking(JST)

对于每种slot类型,训练一个独立的模型,slot的类型和候选值是固定的,采用多分类的方式解决

3)Hybrid state tracking(HyST)

HyST混合使用以上两种方式,对于每种slot类型自动选择最合适的方式。

首先计算两种方式在每种slot上的准确率

然后选择准确率最高的方式,作为该种slot的提取答案方式

实验结果

================================================================================================

2019:SUMBT: Slot-Utterance Matching for Universal and Scalable Belief Tracking

================================================================================================

概述

目前的方法无法只能对固定的ontology建模,当ontology更新时,需要整个模型重新训练。本文提出的SUMBT模型使用非参数方式预测slot的值,可以灵活处理ontology更新的问题。

模型架构

SUMBT模型包括几部分:Contextual Semantic Encoders、Slot-Utterance Matching、Belief Tracker、Training Criteria。

1)Contextual Semantic Encoders

设低t轮的对话为

首先使用对对话进行编码,输入为[CLS][SEP][SEP],输出为

然后使用对slot和slot的值进行编码,输入分别为[CLS]domain-slot[SEP]和[CLS]value[SEP],输出分别为。为了保持扩展性,的权重固定,在训练过程不会改变。

2)Slot-Utterance Matching

使用multi-head attention计算slot和对话的交互信息,其中Q为,K和V为。得到第t轮对话的信息表示

3)Belief Tracker

使用RNN或者Transformer建模当前对话和历史对话的信息。然后在经过layer normalization,得到最终输出

4)Training Criteria

最后通过计算模型输出和每个值的距离,得到最终的结果。距离函数可以选择Euclidean distanc或者negative cosine distanc等。

损失函数使用交叉熵函数。

实验结果

================================================================================================

2020:Find or Classify? Dual Strategy for Slot-Value Predictions on Multi-Domain Dialog State Tracking

================================================================================================

概述

目前的DST系统对于slot值的获取方法,可以分成从候选列表中选取和从对话历史中提取两种,还没有相关研究表明对于每种slot哪种方式更合适。另外,目前使用BERT的DST系统对于domain-slot和对话历史会分别进行编码,没有很好的提取到相关的交互信息。

本文提出一个双策略模型,可以同时使用从候选列表(picklist)中选取和从对话历史中提取两种获取slot值的方式。并且,通过domain-slot和对话历史在BERT上的实现深度交互,可以提取到更好的信息。

模型架构

本文把slot分成categorical和non-categorical两种,slot的分类由人工指定。对于categorical的slot采用从候选列表中选取的方式获取值,对于non-categorical的slot采用从对话历史中提取的方式获取值。

设对话历史为,第t轮对话表示为。所有的domain-slot类型为,每种domain-slot的名称表示为,其中non-categorical的slot有M种,categorical的slot有N−M种。对于每种categorical的slot,候选列表(picklist)表示为,picklist中的每个V表示为

对于每种slot,本模型首先使用BERT提取该slot和当前对话的上下文表示,然后通过一个slot gate处理特殊类型的slot值(如none、dontcare)。然后对于non-categorical类型的slot,使用two-way linear mapping从当前对话中获取其值的开始和结束位置,从当前对话中提取答案。对于categorical类型的slot,计算候选列表(picklist)中的每个值和当前上下文表示的关联性,选取答案。

1)Slot-Context Encoder

把第j种slot和第t轮对话拼接,使用BERT编码后得到上下文表示:

这部分BERT会在训练过程中进行finetune。

2)Slot-Gate Classification

使用三分类器判断当前slot值的类型,有{none,dontcare,prediction}三种结果。none表示没有提及,dontcare表示可以接受任何的值,prediction表示需要预测具体的值。计算方式如下:

这部分的损失函数为:

3)Non-Categorical Slot-Value Prediction

对于non-categorical类型的slot,需要预测相应值的开始和结束位置,首先使用two-way linear mapping计算开始和结束向量:

然后通过如下方式计算具体的位置:

这部分的损失函数为:

4)Categorical Slot-Value Predictio

首先使用BERT对候选列表picklist中的每个值进行编码:

计算当前上下文编码和每个值的余弦距离,选取余弦距离最大的值作为答案:

这部分使用hinge loss作为损失函数:

这部分BERT训练过程中固定,不进行finetune。

5)Training Objective

最终的损失函数为:

对于slot值属于{none, dontcare}的情况,直接设置为0。

实验结果

其中DS-Span表示所有答案都从当前对话中提取,DS-Picklist表示所有答案都可以从候选列表中选取。

================================================================================================

ACL 2020:A Contextual Hierarchical Attention Network with Adaptive Objective for Dialogue State Tracking

================================================================================================

概述

目前的DST模型缺乏对slot和对话历史交互进行建模的强大机制,难以有效利用上下文的信息。并且,这些模型很少关注slot不均衡的问题。

本文提出使用上下文层次注意网络(CHAN),不仅可以提取word level和turn level的相关信息,还可以学习到上下文表示。CHAN首先提取slot和每轮对话之间的word-level信息。然后,这些word-level信息通过丰富的交互被编码成上下文表示。最后,将所有上下文表示聚合成turn level信息,然后将其与word-level信息结合得到最终输出。为了进一步增强利用上下文表示的能力,本文使用了一个状态转换预测任务来辅助DST训练。

对于slot不均衡问题,本文进一步提出了一种自适应目标函数,自适应目标函数可以在训练过程中动态评估slot的难度,自动调整不同slot的学习权重,缓解slot不均衡问题。

模型架构

本模型把对话跟踪建模为多标签分类问题,设对话历史为,对话状态为

本模型包含三部分:contextual hierarchical attention network、state transition prediction、adaptive objective。

1)Contextual Hierarchical Attention Network

本模型使用Slot-Word Attention和Slot-Turn Attention同时提取关键的词和对话回合信息。

Sentence Encoder:对于每一回合对话,把对话信息表示为,然后输入BERT,得到该轮对话的表示。对于slot的信息,分别把slot和slot的值表示为,然后输入BERT,得到表示这部分的BERT在训练的过程中会被finetune,则在训练过程中是不变的。

Slot-Word Attention:使用multi-head attention提取slot和每一轮对话的信息,把信息编码成向量

Context Encoder:使用N层transformer encoder提取多轮对话中的上下文信息,第一层的输入是Slot-Word Attention的输出加上位置信息,最后一层的输出表示为,计算公式如下:

Slot-Turn Attention:继续使用multi-head attention提取slot和上下文的信息,把信息编码成向量

Global-Local Fusion Gate:用于动态计算当前对话信息和全局上下文信息的信息的重要性,计算公式如下:

模型最终输出的计算公式如下:

通过计算模型输出和各个候选slot值的欧式距离,得到最终输出:

损失函数使用交叉熵:

2)State Transition Prediction

为了更好地捕获上下文信息,引入一个辅助任务来共同训练。辅助任务是一个二分类任务,预测slot的值和上一轮对话状态对比是否有更新。

当t=1时,初始化为全0向量。

这部分的损失函数计算公式为

3)Adaptive Objective

根据每个slot在验证集上的准确性来评估其难度,并在训练过程中自适应地调整每个slot的权重。

首先计算slot的相对难度:

然后计算样本的相对难度

最后得到损失函数

4)Optimization

首先联合训练contextual hierarchical attention network和state transition prediction:

然后使用adaptive objective进行finetune:

实验结果

特征分析

4.2 open-vocabulary的方法

================================================================================================

ACL 2018:An End-to-end Approach for Handling Unknown Slot Values in Dialogue State Tracking

================================================================================================

概述

以前的方法需要基于预定义好的ontology或者前置的SLU模块,无法很好处理未知的slot值的问题,本文提出一种基于指针网络(PtrNet)的端到端模型,可以有效地提取未知的slot值。

模型架构

指针网络是seq2seq模型,包含一个编码器和解码器。本模型使用双向LSTM对对话历史进行编码,系统话语和用户话语之前分别加上<sys>和<user>特殊符号用作区分,编码器的每个位置的隐藏状态表示为。编码器前向LSTM的最终隐藏状态用作解码器额初始隐藏状态。

解码的时候,对于不同类型的slot,分别进行,第一步的输入是该slot的代表符号(例如<food>)的嵌入表示,输出是输入序列的一个位置。解码过程的计算过程如下:

从第二歩开始,输入是上一步输出的输入序列的位置对应的词的嵌入。

对于不会出现在对话历史的特殊的值,如none和dontcare,指针网络无法解决。为了处理这个问题,本模型添加了一个分类器,分类器的输出是none、dontcare或者other,只有在other的情况下,指针网络才会进行解码。分类器的输入是编码器前向LSTM的最终隐藏状态

训练过程中,分类器和指针网络联合训练。

为了防止slot对于某些常见值的过拟合无法泛化到未知slot的情况,本文提出Targeted Feature Dropout方法。通过随机把真正的slot值的embedding设置为0,让模型可以学习到从上下文中提取信息,而不是只能学会训练数据中常见的值。

实验结果

================================================================================================

ACL 2019:Dialog State Tracking: A Neural Reading Comprehension Approach

================================================================================================

概述

本文将对话状态跟踪任务当作阅读理解任务来处理,把对话历史视为一个需要阅读的文章段落,阅读完成后回答一个问题“当前的对话状态是什么?”。

本文使用基于注意力的神经网络模型,通过直接在对话历史中标记开始和结束位置,获取slot的值。

除了阅读理解模型外,还引入了另外两个模型。一个slot carryover模型,判断slot是否维持前一轮的值。一个slot type模型,判断答案是{Yes,No,DontCare,Span}中的哪种类型。

模型架构

设从开始到第t轮对话间的所有对话历史为,第t轮对话的对话状态为。把作为需要阅读的文章段落,对于每个slot,提出一个问题:“当前slot的值是什么”。

本模型包含三部分:slot carryover model、slot type model、slot span model。slot carryover model决定是否维持上一轮的值。如果不维持,则slot type model判断新的值的类型。如果判断类型为span,则slot span model从对话历史中获取新的值的开始和结束位置。

1)Question and Dialog Encoding

首先获取对话历史和问题的编码表示。

对于每个问题,使用一个需要学习的向量表示。

对于对话历史,首先把所有的用户话语和系统话语拼接成,为了区分用户话语和系统话语,拼接的时候需要在它们前面分别加上符号。

对于对话历史中的每个单词,首先使用BERT编码,然后再经过一个全连接层,最后得到词向量,训练过程中BERT的权重固定,不参与训练。

然后把词向量输入到一个单层双向LSTM中,得到最后的编码表示,其中。我们把作为整个对话历史的编码。

2)Slot Carryover Model

对于每个slot,如果等于1,如果相等则等于0。使用一个全连接网络计算概率:

3)Slot Type Model

由于slot的值可能是分类实体(Yes, No, DontCare),或者是命名实体,只有值是命名实体才需要从对话历史中找答案。Slot Type Model用于判断当前值的类型,是一个四分类器,分类结果是{Yes, No, DontCare, Span}中其中一个。

对于第i个slot,计算方式为

4)Slot Span Model

判断slot的值在对话历史中开始和结束位置,给性对话历史中的编码表示,开始位置的计算方式为:

结束位置的计算方式类似。

在预测过程中,使用得到的值最大的方式选择开始和结束位置。

实验结果

实验过程中,本文测试只使用本模型、本模型结合传统的JST模型的两种方式的结果。

模型的组合策略如下,首先在验证集上计算每个模型的每种slot的准确率,然后对于每种slot,选择准确率较高的那个模型作为该种slot的预测模型。

特征分析

================================================================================================

ACL 2019:Transferable Multi-Domain State Generator for Task-Oriented Dialogue Systems

================================================================================================

概述

传统的DST方法过分依赖预定义的领域本体(ontology),要求所有的槽(slot)及其相关的值已知,把DST建模为分类问题。并且,传统的DST方法难以处理多轮对话间跨领域的引用,以及知识共享问题。本文提出的TRADE模型可以一定程度解决few-shot和zero-shot问题。

TRADE利用context-enhanced slot gate和复制机制来追踪对话历史中提到的槽值,解决多回合映射问题。TRADE直接生成槽值,我们的模型不是预测每个预定义本体术语的概率,而是。

模型架构

本模型包含三部分:utterance encoder(对话编码器)、context-enhanced slot gate、state generator(状态生成器)。utterance encoder将对话话语编码成向量序列。context-enhanced slot gate预测每个(domain,slot)对是否有在本轮对话中被提及到。state generator结合context-enhanced slot gate的预测结果,生成对应(domain,slot)的值。

首先定义X = {(U1, R1), . . . ,(UT , RT )}为对话历史,U代表用户话语,R代表系统话语。B = {B1, . . . , BT }代表每一轮的对话状态,其中B是三元组 (domain,slot,value)。

1)utterance encoder

encoder可以使用任意的模型,本文选择双向GRU。

把对话历史的所有单词拼接起来,输入到Utterance Encoder,输出是

2)state generator

本文使用soft-gated copy机制,结合词典和对话历史,生成(domain,slot)的值。generator使用GRU,分别对每个(domain,slot)独立生成。

generator的第一步输入是domain和slot的embedding相加的和,初始隐藏状态是encoder的最终隐藏状态。第k歩输入是第k-1歩输出的单词,输出是隐藏状态

首先通过计算词典中每个词的概率

同时,使用计算对话历史中每个词的注意力权重

然后,计算从词典生成词的权重,其中

最后,得到最终分布

3)slot gate

slot gate是一个简单的三分类器,用于指示每个(domain,slot)是none、dontcare或者ptr。计算方式为

4)optimization

在训练的时候,同时使用slot gate和state generator的损失。

实验结果

================================================================================================

EMNLP 2019:COMER: Scalable and Accurate Dialogue State Tracking via Hierarchical Sequence Generation

================================================================================================

概述

目前的DST方法需要预测所有预定义的slot类型的值,当slot的种类很多时,需要大量的计算。本文提出一种hierarchical encoder-decoder架构,在每轮对话结束后直接生成当前的对话状态,这种模型的计算复杂度是一个常数,与预定义的slot类型的数量无关。

本文把对话状态跟踪任务定义为序列生成问题,而不是预测问题。解码的时候,首先生成当前对话状态包含的slot的序列,然后再分别生成每个slot的值。

本文还提出用于计算DST模型运行效率的推断时间复杂度(inference time complexity,ITC)的概念。还有对domain、slot、value层层递进的计算准确率的指标。

模型架构

本模型基于encoder-decoder框架,由三个encoder和三个分层堆叠的decoder组成。对话状态的格式设置为(Domain1-Slot1, Value1; Slot2, Value2; Domain2-Slot1, Value1; ......),其中Domain和Slot的顺序根据它们在训练数据中出现的频率排序。

encoder由embedding层和BiLSTM组成,三个encoder为User Encoder、Sys Encoder和Belief Encoder,分别对当前的用户话语、前一轮的系统话语,前一轮的对话状态进行编码。其中用户和系统行动的encoder使用固定的BERT作为embedding层。

decoder输入来自三个encoder的输出,再额外加上一个条件向量。第一个decoder的条件向量为全零向量,生成的是本轮对话中涉及到的domain的序列,还有对应的嵌入表示。然后把中的每一个元素对应的嵌入表示作为条件向量,依次输入到第二个decoder,对应的输出为该domain下涉及到的slot的序列,还有对应的嵌入表示。然后把中的每一个元素对应的嵌入表示作为条件向量,依次输入到第三个decoder,生成该slot的值。最后更新当前的对话状态。三个decoder共享所有参数。

本模型根据当前对话历史直接生成对话状态,不需要对预定义的domain和slot逐一判断,所以模型的推理时间复杂度(inference time complexity,ITC)和预定义的domain和slot的数量无关,只和当前对话历史的复杂度有关。模型的ITC为O(1)。

1)Encoding Module

设用户话语或者系统话语为由一系列词组成。首先把输入到预训练好的BERT,获得上下文表示,其中为BERT中所有层的输出的平均。

对于对话状态,本模型把每个domian和slot映射成一个static embedding。这样在生成domian和slot的时候,可以一次生成目标,而不是依次生成其名称中的单词。首先把domian和slot的名称输入到BERT,获得对应的embedding,对于由多个单词组成的domian和slot,直接取多个单词的输出的平均值作为对应的表示。同时,本模型也构建了一个静态的词向量的构造方式为把BERT的词典中的每个单词分别输入到BERT,把得到的输入作为该单词的embedding。最后把拼接,得到最后的static word embedding()。

然后把得到的三个上下文表示分别输入到BiLSTM:

其中是一个全零向量。每个时间歩BiLSTM的输出为,是前向和后向LSTM输出的拼接。把所有时间歩的输出拼接,得到

2)Conditional Memory Relation Decoder(CMRD)

CMRD输入一个token(),输出是下一个token()和该token对应的embedding():

最终的输出是所有时间歩的拼接,表示为

具体来说,在第0个时间歩,CMR decoder首先把输入token()通过固定的词向量矩阵转换成embedding(),然后输入到LSTM,得到。其中是上一个时间歩的隐藏状态,对于不同的decoder,分别是的所有隐藏状态的平均。

然后把和条件向量相加得到,然后依次与进行计算,得到最终的输出:

其中Attn的计算方式如下:

然后把r输入到一个四层全连接神经网络(MLP),得到输出

最后通过dropout和softmax得到最终的输出:

损失函数采用交叉熵函数(cross-entropy loss)

实验结果

特征分析

为了对模型进行更加深入的分析,本文对domain、slot、value递进的计算准确率。

1)联合领域准确率(joint domain accuracy,JD ACC)

计算每轮生成的对话状态中所有的domain和真实数据完全匹配的概率。

2)联合域-槽准确率(joint domain-slot accuracy,JDS ACC)

计算每轮生成的对话状态中所有的domain、slot和真实数据完全匹配的概率。

3)联合目标准确率(joint goal accuracy,JG ACC)

计算每轮生成的对话状态中所有的domain、slot、value和真实数据完全匹配的概率。

================================================================================================

ICLR 2020:END-TO-END MULTI-DOMAIN TASK-ORIENTED DIALOGUE SYSTEMS WITH MULTI-LEVEL NEURAL BELIEF TRACKER

================================================================================================

概述

本文提出一个端到端的多领域任务型对话系统,系统使用Multi-level Neural Belief Tracker进行对话状态跟踪,加上一个答案生成模块,完成处理端到端的对话任务。

首先使用Multi-level Neural Belief Tracker分别处理domain级别和slot级别的上下文信息,然后结合两部分信息完成多领域的对话状态跟踪。然后使用multi-head attention layers综合处理各种类型的信息,包括对话上下文、用户话语、对话状态、数据库的查询结果。最后把所有组件组合起来,创建一个从对话状态追踪到响应生成的,可以通过端到端的方式训练的对话系统。

模型架构

本模型包含三部分:Encoders、Multi-level Neural Belief Tracker、Response Generator

1)Encoders

负责把对话历史、当前用户话语、目标系统响应、domain和slot的名称、之前的对话状态进行编码。

Encoders的输入为,输出为。每个encoder包含一个embedding层和layer normalization层。embedding层由token-level embedding和positional embedding组成。所有encoders共享权重参数。

输入前把添加到句子的开始和结束位置。对话历史由多轮的对话拼接得到。

为slot的名字和对应的值,本文把对话状态表示为以下格式:

只有前一轮对话状态包含对应slot值的时候,才会出现在对话状态中。

为了分别学习domain和slot级别的信息,分别构造domain和slot的输入格式

2)Multi-level Neural Belief Tracker

包含两个模块,分别负责提取domain级别和slot级别的信息,然后使用Late Fusion结合两个模块的输出,构成domain-slot联合特征表示。

Domain-level Processing:给定对话历史编码信息,当前用户话语信息,domain本身的编码信息,通过一个层的网络,得到交互信息。其中每一层网络包含三个multi-head attention模块,第一个模块与domain自身的信息进行交互,第二个模块与对话历史进行交互,第三个模块与当前用户话语进行交互,通过残差连接的方式把三个模块依次连接起来。

Slot-level Processing:给定对话历史编码信息,之前的对话状态信息,当前用户话语信息,slot本身的编码信息,通过一个层的网络,得到交互信息。其中每一层网络包含四个multi-head attention模块,第一个模块与slot自身的信息进行交互,第二个模块与对话历史进行交互,第三个模块与当前的对话状态进行交互,第四个模块与当前用户话语进行交互,通过残差连接的方式把四个模块依次连接起来。

Domain-Slot Joint State Tracking:通过把扩展到相同维度,然后通过element-wise multiplicatio进行组合,得到domain-slo联合特征。然后把输入到层self-attention网络,得到输出的每一行代表一个slot的信息,用于获取该slot的值。用作一个RNN的初始隐藏状态,用于解码inform型slot的值,或者输入到一个分类器,用于获取request型slot的值。

3)Response Generator

结合来自对话上下文的信息、对话状态信息和数据库查询的结果,生成目标系统响应。

当前的对话状态信息会用于去数据库查询相关的结果。本文为每个domain创建一个固定维度的one-hot指针向量(),指针向量的每个位置表示对应数据库查询结果实体的编号。将所有domain的指针向量拼接起来得到最后的结果,然后输入到一个embedding层,得到

给定答案编码信息,对话历史编码信息,当前用户话语信息,上下文感知的domain-slo联合特征,数据库结果编码信息,通过一个层的网络,得到交互信息。其中每一层网络包含五个multi-head attention模块,第一个模块与答案自身的信息进行交互,第二个模块与对话历史进行交互,第三个模块与当前用户话语进行交互,第四个模块与domain-slo联合特征进行交互,第五个模块与数据库结果进行交互,通过残差连接的方式把五个模块依次连接起来。

最后把输入到一个softmax,解码系统响应。

4)END-TO-END TRAINING

目标损失函数是对话状态损失(包括RNN和分类器的损失)、答案生成损失的组合:

其中

实验结果

================================================================================================

ACL 2020:Efficient Dialogue State Tracking by Selectively Overwriting Memory

================================================================================================

概述

目前的DST模型每轮对话都会从新开始预测所有slot的值,效率比较低。本文将对话状态看作可以覆盖的memory,提出选择性更新的机制,每次预测需要更新的slot,并只预测需要更新slot的值。

本模型把DST分成两个子任务,第一个任务是预测每个slot需要执行的更新操作,第二个任务是生成需要更新的slot的值。这样可以提高效率,并且让decoder可以专注于本身的值生成任务。

模型架构

首先定义第t轮的对话状态为

slot有两种特殊的值,NULL和DONTCARE。每轮对话结束时,对于slot的操作有四种,CARRYOVER、DELETE、DONTCARE、UPDATE。

模型包含两部分,State Operation Predictor、Slot Value Generator。

1)State Operation Predictor

每一轮的对话表示为,其中A是系统的反馈,U是用户的话语,是特殊符号。

对话状态表示为,其中是特殊符号,是表示slot的嵌入式表示,在本模型中,所有的都统一用表示。

encoder使用预训练的BERT,输入是上一轮的对话,本轮的对话,加上上一轮的对话状态,

对于slot的值是NULL的情况,使用符号表示。对于值是DONTCARE,使用字符串表示,这样可以利用BERT已经学习到的语言学知识。对于BERT输入中的segment id部分,使用0表示,使用1表示。position embeddings使用BERT原始的方式。

encoder的输出是,输入的聚合信息表示计算方式为

对于每个slot的操作,可以通过如下方式计算得到是slot的四种操作的概率。

我们把需要UPDATE的集合定义为

2)Slot Value Generator

本文使用GRU作为decoder生成slot的值。GRU使用初始化。每一轮以词嵌入为输入,并更新,直到计算得到结束。

对于词典中每个词的概率,使用计算得到,其中E是词嵌入矩阵,encoder和decoder共享。

本文使用soft-gated copy机制,从对话历史中提取词,计算方式为

最终得到输出词的计算方式为:

,其中

3)Objective Function

本文对state operation predictor和slot value generator同时训练。

对于state operation predictor,除了slot的操作分类外,还使用domain分类任务作为辅助,让模型学习每轮对话之间的slot操作和domain转换的相关性。

domain分类的计算方式如下

state operation predictor的损失包含两部分

slot value generator的损失计算方式为

最终的损失表示为

实验结果

================================================================================================

ACL 2020:Dialogue State Tracking with Explicit Slot Connection Modeling

================================================================================================

概述

在多领域的场景中,用户经常使用省略和引用来表示在其他领域中已经提到的slot的值。本文提出的模型考虑不同领域slot之间的相关性,在给定target slot的情况下,通过slot connecting机制可以推断出source slot,并直接复制source slot的值,从而大大降低了学习和推理的难度。

模型架构

1)Encoder

本模型使用双向GRU对对话历史进行编码

2)Word Generation

本模型使用GRU作为decoder生成slot的值。初始输入是domain和slot的embedding的和,初始隐藏状态是Encoder的最终隐藏状态。

设解码的第t歩时的decoder的隐藏状态为,通过注意力机制计算与encoder输出之间的注意力权重,并得到上下文表示

最后计算从词典生成词的概率

3)Word Copying

从对话历史中复制词的概率直接使用decoder对encoder的注意力权重表示

最后使用soft-gated copy机制计算输出的概率

4)Slot Connecting Mechanism

设之前的对话状态为

在解码的第一步,使用计算与各个slot的权重

在解码的时候,从slot中复制词的概率为

再次使用soft-gated copy机制计算最终的输出概率

实验结果

================================================================================================

2020:TripPy: A Triple Copy Strategy for Value Independent Neural Dialog State Tracking

================================================================================================

概述

本文提出三重复制机制实现对话状态跟踪。进行对话状态跟踪时,本模型实时创建并维护两个内存,一个用于保存系统曾经推荐给用户的slot的值 ,另一个用于保存已经出现在对话状态中的slot的值。新一轮的slot的值可以从用户话语,或者两个内存中提取。

模型架构

设对话历史为,所有的slot集合为,对话状态为,系统推荐历史为

1)Context Encoder

使用BERT对本轮用户话语、上一轮系统话语,对话历史进行编码。

得到

2)Slot Gates

用于判断slot的值属于哪种类型,每种slot分别训练对应的参数。

输入为,输出是在各种类型上的概率分布。

对于二分类型的slot,,对应的输出为:

3)Span-based Value Prediction

当slot的值的类型判断为span时,从用户话语中提取值。输入为,输出为值的开始和结束位置。

4)System Inform Memory for Value Prediction

每当系统给用户推荐某slot的值时,会同步更新到系统推荐历史中。当slot的值的类型判断为inform时,则该值设置为

5)DS Memory for Coreference Resolution

用户处理跨domain的slot值的引用问题。当slot的值的类型判断为refer时,计算从各个slot中引用的概率分布:

其中+1表示有可能没有引用。

6)Auxiliary Features

本文设置两个二值向量。作为辅助特征,代表对应的slot是否有被系统推荐,对应的slot是否在对话状态中更新。

把这两个向量和BERT的输出结合,得到

7)Partial Masking

对对话历史中的系统的响应中的词随机使用替换。这样做是为了让模型关注上下文信息,而不是某个特定的值。

8)Dialog State Update

基于人工制定的规则更新对话状态,如果某个slot的值预测为none,则保留上一轮的值,否则使用新的值替代。

9)Training

对于多领域数据集,损失函数为:

对于单领域数据集,损失函数为:

实验结果

特征分析

对话状态跟踪学习笔记相关推荐

  1. 【多轮对话】任务型多轮对话状态跟踪-NBT原理

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

  2. Jarry的目标跟踪学习笔记一

    Jarry的目标跟踪学习笔记一 目标跟踪是计算机视觉中的一个重要方向,已经由来已久,并且有着广泛的应用,如:视频监控,人机交互, 无人驾驶等.在我的想象中,自己研究的内容就是,将来钢铁侠头盔里追踪敌人 ...

  3. Kaldi决策树状态绑定学习笔记(一)

    建议在csdn资源页中免费下载该学习笔记的PDF版进行阅读:)点击进入下载页面 Kaldi决策树状态绑定学习笔记(一) --如何累积相关统计量? 目录 Kaldi决策树状态绑定学习笔记一 如何累积相关 ...

  4. oracle数据库修改写入状态,【学习笔记】Oracle oradebug 使用oradebug修改数据库SCN方法案例...

    天萃荷净 使用oradebug修改数据库scn,使用oradebug修改数据库scn的案例. 这里也做了两个测试,发现该功能确实很巧妙,通过修改内存中的scn值,然后写入控制文件和数据文件,实现修改s ...

  5. OpenCV 3 Tracking API目标跟踪学习笔记——定义、物体跟踪常用算法、demo

    今天开始接触目标跟踪 本文翻译自https://www.learnopencv.com/object-tracking-using-opencv-cpp-python/#opencv-tracking ...

  6. 相关滤波目标跟踪学习笔记(三)——KCF算法公式理解

    KCF算法特点: 1.通过循环移位产生了大量的虚拟样本: 2.利用循环矩阵可以在傅里叶域对角化的性质,大大减少了运算量,提高了运算速度: 3.核函数的运用,提高了分类器的性能: 4.采用HOG特征,相 ...

  7. 目标跟踪学习笔记_2(particle filter初探1)

    首先提供几篇关于粒子滤波算法的博客: http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html 这篇博客比较通俗易懂,简单的介 ...

  8. 目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)

    在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行op ...

  9. AE摄像机跟踪学习笔记

    AE单点跟踪 1.拖入视频素材到合成 2.点击素材,再点击右栏的跟踪器,再点跟踪运动(如果没有找到跟踪器,就点击菜单栏里的窗口,里面把跟踪器打勾) 3.途中出现框,将框放入要跟踪的点,再点击向前分析, ...

  10. vot 单目标跟踪学习笔记

    目录 MixFormer TCTrack 视频测试代码: 图片测试代码: 摄像头测试代码: MixFormer

最新文章

  1. 用matlab分析时间响应教程,基于Matlab的多自由度耦合滑移模型的动力响应可靠度分析...
  2. java 多线程(Callable,Future)
  3. sqlserver 分页存储过程
  4. python mysql返回,python操作mysql数据-执行语句返回值直接返回字典类型
  5. ogg 查看某条更新_明道云Web 6.1更新:日历视图上线
  6. 信息学奥赛一本通 1030:计算球的体积 | OpenJudge NOI 1.3 12
  7. The CC version check failed下出现Failed CC version check. Bailing out! 解决方案
  8. gradle文件利用java解析_使用文件读取Gradle Multi项目构建
  9. cookie和seseion的区别和联系点
  10. 荷兰国旗问题java
  11. 开源OA:O2OA平台手机APP指纹认证的配置
  12. Matlab中常用的清除命令clc,clear,clf等
  13. 区块链研究实验室-首次提出如何确保区块链分片技术的数据完整性
  14. 小猪的Python学习之旅 —— 1.基础知识储备
  15. form表单ajax提交json数据
  16. ddb文件怎么打开?PROTEL 99se软件pcb设计下载安装使用教程(5)
  17. zotero+better bibtex+overleaf(latex):如何批量导出参考文献及相关设置
  18. 球形罩铆接机械臂设计(lunwen+开题报告+指导记录+设计图纸+PLC控制程序)
  19. 【IDEA启动报错】Failed to load JVM DLL..jre\bin\jvm.dll,If you already have 32-bit JDK installed
  20. 小程序使用彩色字体图标

热门文章

  1. css旋转立方体教程,通过CSS3实现旋转立方体的方法
  2. 特殊回文数,123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。蓝桥杯问题一次性解答,含JAVA,C++代码
  3. Excel运用: Excel的窗口冻结与拆分
  4. 用技术去掉搜索引擎中的死链接
  5. 什么是局域网?什么是广域网?CCNP是什么证书?电信能提供长途数据线路吗?
  6. 苹果手机更改照片大小kb_iPhone调整照片大小方法教程 无需第三方软件
  7. android gsm功能,Android手机-GSM网络与WCDMA网络选择的设置
  8. python图像平移,Python 图像扩充之旋转、平移、缩放、裁剪
  9. 【经验贴】本科生毕业论文答辩经验
  10. 给定任意字符串,返回所有叠字的数组