还在为DST模型刷不动而感到苦恼吗?来试试无监督DST吧,DSI等你来战!


本文介绍一篇西湖大学联合哈尔滨工业大学 SCIR 实验室和北京理工大学发表于 IJCAI 2020 的论文 Dialogue State Induction Using Neural Latent Variable Models

论文连接:git

https://www.ijcai.org/Proceedings/2020/0532.pdfgithub

代码连接:数据库

https://github.com/taolusi/dialogue-state-induction微信

PPT连接:网络

https://taolusi.github.io/qingkai_min/assets/pdf/20-ijcai-dsi_slides.pdfapp

视频连接:ide

https://www.bilibili.com/video/BV1fV41127tqpost

对话状态跟踪模块是任务型对话系统中的核心部件,目前主流的对话状态跟踪的方法须要在大量人工标注的数据上进行训练。然而,对于现实世界中的各类客户服务对话系统来讲,人工标注的过程存在代价高、标注慢、错误率高以及难以覆盖数量庞大的不一样领域等问题。学习

基于这些问题,咱们提出了一个新的任务:对话状态推理,目标是从大量无标注的客服对话记录中自动挖掘对话状态,并提出了两个基于神经隐变量的模型来实现无监督的对话状态推理,同时咱们在下游的对话生成任务中进行了验证,实验结果代表,相比于缺乏对话状态的对话系统,使用咱们推理获得的对话状态能够得到更好的表现。优化

背景

1.1 任务型对话系统

任务型对话系统(task-oriented dialogue system)的目标是协助用户完成特定的任务,好比订机票、打车、日程管理等。

一个典型的任务型对话系统能够分为四个模块:天然语言理解(natural language understanding, NLU)、对话状态追踪(dialogue state tracking, DST)、策略学习(dialogue policy)以及天然语言生成(natural language generation, NLG),在这个过程当中须要跟各类各样的数据库进行查询甚至更新等操做。

▲ 图1 任务型对话系统

(图片来源于:Gao J, Galley M, Li L. Neural approaches to conversational AI[C]//The 41st International ACM SIGIR Conference on Research & Development in Information Retrieval. 2018: 1371-1374.)

1.2 对话跟踪模块及其限制

对话状态跟踪模块是任务型对话系统的一个核心模块,对话状态表示了用户在每轮对话所寻求的内容的关键信息,它是从对话开始到当前轮的全部信息的累积,表示形式是一些 slot-value pairs 的集合,inform 表示用户对所寻求的内容的限制,request 表示用户想要寻求哪些内容。

▲ 图2 对话状态表示

传统的 DST 的作法是先经过 NLU 模块对用户对话进行意图识别和槽位解析,而后将结果输入到 DST 模块中,由 DST 模块处理 NLU 模块带来的一些不肯定性,获得最终的对话状态。目前愈来愈多的工做直接经过一个端到端的 DST 模型来直接处理用户对话(以及历史对话记录)获得当前的对话状态,如图 3 所示。

▲ 图3 端到端的DST

端到端的 DST 模型虽然已经在标准的数据集(如 EMNLP 最佳资源论文 MultiWOZ 数据集)取得了绝大的成功,可是这种方法依赖于人工标注的大量语料,因为对话状态自己的复杂性很是高,须要对语义以及上下文有一个总体的理解,因此致使人工标注的过程存在两个很是大的问题:

  • 昂贵的标注代价:在 MultiWOZ2.0 数据集中一共标注了 8438 组对话,一共居然用了 1249 个标注人员。

  • 太高的标注错误率:根据相关论文统计,MultiWOZ2.0 数据集中有大约 40% 的标注错误;而在此基础上更新的 MultiWOZ2.1 数据集也有超过 30% 的错误;目前最新版已经更新到了 MultiWOZ2.2。

从这两点能够看出想要构建大规模高质量的数据集存在很是大的困难,这也致使虽然对于任务型对话系统的研究在一些领域上已经取得了必定的成功,可是也很是受限于这些已经标注好大量语料的领域,在实际应用中,会有大量新的领域存在,面对每个新的领域都要人工标注新的数据集是不太实际的。

▲ 图4 端到端的DST所面临的新领域问题

动机

2.1 新任务:对话状态推理 (dialogue state induction, DSI)

在这种状况下,如何可以从对话记录中自动发现对话状态显得十分重要。咱们假设能够得到大量来自不一样领域的对话记录,而这些对话记录是没有对话状态标注的,一般这样的语料是相对容易得到的,好比能够来源于不一样商业服务中已经积累的人工客服与用户的对话记录。

基于这种假设,咱们提出了一个新的任务:对话状态推理(dialogue state induction, DSI),任务的目标是从大量的生对话语料中自动推理获得对话状态,并能更好的用于下游任务好比策略学习和对话生成。

DSI 与 DST 的区别如图 5 所示,和 DST 类似的是,DSI 的输出也是 slot-value pairs 形式的对话状态,不一样的是,在训练过程当中 DST 依赖于对话语料以及人工标注的对话状态,而 DSI 不依赖于人工标注,能够在生对话中自动生成 slot-value pairs。

▲ 图5 DST与DSI对比

除了咱们提出的 DSI 任务以外,谷歌的研究者也提出了经过 zero-shot DST 的方案来缓解标注数据缺失的问题,他们主要利用了一些类似的领域之间可能存在类似的槽位的这一特色,好比订火车票和订机票两个领域都存在像出发地、到达地和出发时间、到达时间等槽位,经过对领域和槽位进行天然语言的描述来创建不一样领域之间的联系。

这种方法确实能够在必定程度上解决未知领域的问题,可是这种方法一样须要对不一样领域的槽位进行高质量(一致性高)的标注,同时在面对新的与已知的领域关联性不大的领域时(好比金融领域),很难从已知的领域迁移到这些全新的领域。

▲ 图6 Zero-shot DST及其限制

而咱们提出的 DSI 任务进一步减轻了对人工标注的依赖,咱们但愿经过数据驱动的方式,采用无监督的方法从生对话中自动挖掘出对话状态的信息。

方法

咱们的方法分为两个步骤:1)候选词抽取(经过 POS tag、NER 和 coreference);2)为候选词分配合适的槽位。

其中第一步是一个预处理的过程,第二步咱们创建了两个无监督的神经隐变量模型 DSI-base 和 DSI-GM 来为每一个候选词分配一个槽位索引(slot-index),其中 DSI-GM 能够认为是 DSI-base 的一个变种。

▲ 图7 两个步骤来解决DSI

3.1 VAE简介

在说 VAE 以前,先来看一下它的前身 AutoEncoder (AE)。AE 是很是知名的自编码器,它经过自监督的训练方式,可以从原始特征得到一个潜在的特征编码,实现了自动化的特征工程,而且达到了降维和泛化的目的。它的网络结构很简单,有编码和解码两个部分组成:

▲ 图8 AutoEncoder

从图中能够看出,AutoEncoder 被认为自监督是由于它的目标就是输入自己,不须要额外的标签。AutoEncoder 虽然是由编码器和解码器两部分构成的,可是它的重点是经过编码获得隐藏层的向量,用来表示输入的潜在的特征。

解码的做用是重建输入数据,经过优化使得重建的输入和真实的输入尽量的相似,从而达到压缩数据的目的。尽管经过这种方式获得的隐变量的维度要远小于输入的原始数据,可是这种隐藏空间的分布并非连续的,致使在解码的过程当中,解码器很难正常的重建输入数据。

▲ 图9 Variational AutoEncoder

VAE 假设通过神经网络编码后的隐变量符合标准的高斯分布,也就是从一个高斯分布中采样获得隐变量 z,具体的作法再也不经过编码器直接获得一个隐变量 z,而是获得两个向量,这两个向量做为高斯分布的参数,从这个分布中采样获得隐变量 z,而后经过解码器重建获得输入数据。

VAE 的这种假设使得抽取出来的隐藏特征直接拟合了已知的潜在几率分布,从而获得了连续完整的潜在空间,拥有了更强大的表达能力。

VAE 训练过程的 loss 分为两个部分:一个是重建项(reconstruction term),还有一个是正则项(regularization term)。第一部分的目的是让隐变量可以尽量表示输入数据的特征,第二个部分是使得编码获得的后验分布尽量接近先验的标准高斯分布。

3.2 模型1:DSI-base

在 DSI 的任务设置里,对话状态对咱们来讲是未知的,而对话状态又表示了当前对话中最关键的信息,所以咱们将对话状态表示为隐变量 z。

和 VAE 相似,咱们的模型也分为三个部分:Encoder、Sampling 和 Decoder。

Encoder 的目的是经过神经网络将对话输入编码获得一个多元高斯分布的参数 ,这个高斯分布应该可以尽可能好的表示当前的对话状态并尽量地贴近标准的多元高斯分布;Sampling 利用当前的高斯分布采样获得表示当前对话状态的隐变量 z;Decoder 的目的是经过神经网络将隐变量 z 解码为当前的对话输入。

咱们如下边这句对话为例来解释一下咱们的模型(蓝色字表示在预处理过程获得的 candidates):

I need to take a train out of Chicago, I will be leaving Dallas on Wednesday.

首先介绍 encoder 部分:在 encoder 中,咱们首先将对话表示为两种形式:one-hot(oh)表示和 contextualized embedding(ce)表示。

oh 是对句子的一种离散化的向量表示,oh 的长度是语料中全部候选词的数量,当前对话中出现了哪些候选词,就将其对应的位置置为 1,其他的位置置为 0,而后经过 linear transformation + SoftPlus + Dropout 将 oh 编码为 encoded_oh。

ce 是对子的一种连续性的向量表示,将当前对话通过了一个预训练好的语言模型(如 ELMo、BERT),能够获得每一个单词在当前对话中的上下文表示,咱们将每一个候选词的上下文表示取出,先对全部的候选词作 AvgPooling 获得当前句子的总体表示,而后而后经过 linear transformation + SoftPlus + Dropout 将 ce 编码为 encoded_ce。

而后将 encoded_oh 和 encoded_ce 拼接起来,分别通过 linear transformation + BatchNorm 获得后验高斯分布的参数 posterior 和posterior

▲ 图10 Encoder

接下来是 sampling 过程:在获得高斯分布的参数以后咱们要经过随机采样获得隐变量 z,可是随机采样的过程是没办法求导的,因此没办法进行梯度的回传,这时候须要采用一个重参数化技巧(reparameterization trick),将 z 的采样过程转变为 ,这样使得采样过程变得可导。

▲ 图11 Sampling

最后是 decoder 部分:在获得隐变量 z 以后咱们须要经过一个 decoder 来从新获得当前对话的表示 oh 和 ce。这时咱们首先经过 transformation+Softmax 获得另外一个隐变量 s,隐变量 s 表示了当前对话中 slot 的几率分布,s 的维度是预设的 slot 的数量,是一个调整的超参数。

接下来咱们首先经过一个 linear transormation+BatchNorm 获得重建的 oh 表示,reconstructed_oh 的维度也是全部 candidate 的数量。

除此以外,咱们还想要获得重建获得上下文表示 ce,这是咱们将上下文 ce 的重建转换为重建一个可以表示上下文分布规律的多元高斯分布,也就是说对这个多元高斯分布采样可以以比较更好地获得当前的 ce。

▲ 图12 Decoder

咱们的模型的优化过程和 VAE 相似,模型的 loss 分为两个部分:重建项和正则项,咱们的重建项又分为两个部分,一部分是对 oh 表示的重建,另外一部分是对 ce 表示的重建。

对 oh 的重建咱们经过对 reconstructed_oh 和真实的 oh 求 cross entropy loss:

对 ce 的重建咱们转化为提升咱们重建获得的多元高斯分布采样获得 ce 的几率,也就是说咱们将高斯分布取得候选词的几率取反做为 loss,而后将全部的候选词对应的 loss 相加,这样咱们优化 loss 就是不断提升重建的高斯分布可以获得候选词上下文表示的几率。

对于正则项来讲,咱们计算后验的高斯分布和标准的高斯分布的 KL 散度做为 loss,经过优化 loss 来不断拉近后验的高斯分布与标准高斯分布之间的距离。

模型训练完以后,咱们看一下模型是如何进行预测的?经过和训练过程彻底相同的 encoder 和 sampling 模块,获得隐变量 z,而后经过 linear transformation+softmax 获得隐变量 s,此时的 s 表明当前对话中不一样 slot 的分布几率,可是这个几率针对每一轮的对话来讲的,咱们并不知道几率较高得几个 slot 分别对应哪些 candidate,那么怎么对不一样的 candidate 进行区分呢?

咱们先来看一下除了 encoder,模型在 decoder 模块中学到了什么。首先从第一部分 oh 的重建过程,由 slot 的表示 s 到 oh 的 linear transformation 中能够获得一个 [slot_num, vocab_len] 的参数矩阵 W,以下图所示。

那么这个参数矩阵 W 的含义是什么呢?作完 softmax 后的隐变量 s 能够表明不一样的 slot 的几率,和参数矩阵相乘能够看做将是对 W 每行的参数进行加权求和,获得 reconstructed_oh,而后和实际的 oh 求交叉熵。

由于在 oh 中当前对话出现的 candidate 被置为 1,其他的 candidate 被置为 0,这些被置为 1 得 candidate 可能属于当前对话不一样的 slot,而同一个 slot 中出现的 candidate 有很高的重复性(好比火车的起点是一个固定的集合)。

那么通过屡次数据优化以后的结果就是隐变量 s 中当前对话中出现的 slot 对应的那些维接近 1,不出现的 slot 的那些维接近 0,s 中接近 1 的那些维映射到参数矩阵 W 的对应行中,这些 slot 中常常得 candidate 对应的那些维接近 1,其他的接近 0。

这样通过对 W 每一行的加权平均至关于取出 slot 对应的 candidate 相加获得 oh,那么 W 的每一行就能够看做某个 slot 中全部 candidate 出现的几率。

这样咱们能够利用参数矩阵 W 来判断每一个 candidate 属于各个 slot 的几率,和咱们训练过程当中求交叉熵 loss 的优化方式同样,咱们将 candidate 的 one-hot 表示与 W 的每一行点对点相乘,能够看做在每个 slot 下可以获得当前 candidate 的几率。

和当前对话的 oh 表示可能存在多个 1 不一样的是,每一个 candidate 的 one-hot 表示只有一维是 1,和 W 的每一行点积的过程能够看做是将 W 中的对应列取出的过程,这样就获得了 candidate 获得属于每一个 slot 的几率。

一样咱们看一下模型在对 ce 的 decode 过程当中学到了什么?咱们能够在重建获得高斯分布的两个参数 的过程当中获得两个参数矩阵,接下来咱们也来分析一下这两个参数矩阵的含义。

相似于 oh 重建过程,获得参数 的过程也能够看作是对两个参数矩阵的加权求和过程: 是对当前对话总体的上下文的一个表示,而 s 表示了当前对话中每一个 slot 出现几率,那么这两个参数矩阵中每一行就是每一个 slot 对应的上下文的表示,多个不一样的 slot 进行加权求和,获得了总体的上下文表示。

咱们将两个参数矩阵中对应的每一行 取出来,能够做为每一个 slot 对应的可以表示相应上下文的高斯分布的参数,由此获得了 slot_num 个不一样的多元高斯分布。

咱们利用 slot_num 个不一样的高斯分布,能够计算每一个高斯分布采样获得 candidate 的 ce 的几率,做为 candidate 属于不一样 slot 的几率。

咱们将获得的三个几率相乘,最终获得 candidate 属于每一个 slot 的几率,取其中最大的做为当前 candidate 对应的 slot。

由于咱们采起的是无监督的方式来为每个 candidate 预测 slot,对应于每一个 candidate 咱们获得的是 slot 的索引,和全部无监督的方式同样,咱们须要有一个后处理的为每个 slot 的索引分配一个合适的标记。

如图所示,咱们将分配到同一个 slot 下的 candidate 汇集起来,经过多数投票的方式,观察其中大多数的 candidate 实际应该属于哪一个合适的label,将这个 label 分配给当前的 slot,这样获得了每一个 slot 对应 label 的一个字典,经过这个字典将预测的 slot 索引替换为实际的 label。

3.3 模型2:DSI-GM

目前任务型对话系统的构建都是创建在多领域的语料之上,其中一些领域可能有类似的 slot,好比 train 和 taxi 这两个领域可能有类似的 slot 包括 arrive by、leave at、destination 和 departure。

而类似的 slot 之间上下文多是很是相似的,好比对于 arrive by 这个 slot 来讲,不一样的领域可能共享了“I need by arrive by xxx”,而对于 departure 这个 slot 来讲,不一样的领域可能共享了“I need departure from xxx”。

针对这种状况,咱们提出了 DSI-GM 模型来解决这个问题。在 DSI-base 模型中,全部不一样的领域和槽位都经过一个高斯分布来进行建模,这样不一样领域的类似的 slot 由于其具备类似的上下文可能致使模型没法对这些 slot 进行区分。

在 DSI-GM 模型中,咱们利用高斯混合模型(A Mixture-of-Gaussians)来对隐变量 z 进行建模,每个单个的子模型来对一个领域进行建模,这样在避免了不一样领域的类似 slot 被混合在一块儿的状况,能够在领域这个维度上对对话进行更加清晰地建模。

DSI-GM 模型实际是什么样的呢?相对于 DSI-base 模型在经过 encoder 和 sampling 获得隐变量以后直接预测获得 slot 来讲,DSI-GM 在获得隐变量 z 以后,经过和先验的 K 个高斯分布子模型进行对比。

首先预测出当前对话的领域,在此基础上,在利用 z 和 decoder 模块预测获得 slot,当前的领域和 slot 共同组成了当前的 slot(实际 slot 是由领域和 slot 两部分组成),DSI-GM 模型具体的训练和预测过程请详见咱们的论文。

实验

咱们在 MultiWOZ2.1 和 SGD 两个数据集上进行了实验,咱们从两个层面对咱们的结果进行了评价,一个是传统的 joint level,joint level 的 dialogue state 是从对话开始到当前对话全部的信息的累积,另外一个是 turn level,turn level 的 dialogue state 是仅对当前轮对话的局部信息的表示。

在这两个层面上,咱们分别经过两个指标对结果进行了评价,一个是 accuracy,当对话状态中全部的 slot-value pairs 被识别对才认为是正确;另外一个是 state matching(precision, recall, F1),用来评价推理获得的 slot-value pairs 的覆盖率。

从结果中能够看出,相对于随机分配的 slot,经过咱们的模型能够有效地推理出对话状态,咱们采用的高斯混合模型在 DSI-base 的基础上有明显的提升。可是从 accuracy 来看,咱们的结果还比较低,这也反映出了无监督的 DSI 任务的难度,仍然有很大的提高空间。

除此以外,咱们还将推理获得的对话状态用于下游的 act prediction 和对话生成上,下游任务的模型咱们采用的是 [Chen et al., 2019] Wenhu Chen, Jianshu Chen, Pengda Qin, Xifeng Yan, and William Yang Wang. Semantically conditioned dialog response generation via hierarchical disentangled self-attention. In ACL, 2019。

从实验结果能够看出,相对于没有对话状态,经过 DSI-GM 获得的对话状态对下游任务有明显的提高,而相比于人工标注的对话状态还有必定的差距,这也体现了咱们的这个任务还有较大的提高空间。

咱们分析了多个不一样的领域的结果,经过将结果最好的领域 attraction 和结果最差的领域 hotel 对比,咱们发现不一样领域中 slot 的数量对结果有直接的影响,slot 的数量较少的领域更容易进行推理是比较显然的,可是如何对不一样的领域进行建模是将来值得考虑的问题。

除此以外,咱们还就 DSI-base 和 DSI-GM 在隐变量 z 上的表现进行了进一步的分析,咱们经过 t-SNE 来对 z 进行了降维,图中每一种颜色表明一个领域,从图中能够看出,DSI-GM 在对不一样领域的区分上确实取得了更好的效果,这也进一步证实了咱们的高斯混合模型的做用。

结论

咱们提出了一个新的任务:对话状态推理(dialogue state induction,DSI),目标是从无标注的对话记录中自动推理获得对话状态。

咱们提出了两个基于神经隐变量的模型经过无监督的方式来对对话状态进行自动推理。

咱们提出的任务针对了当前任务型对话研究中面临的很是实际的标注困难的问题,咱们的提出的任务是一个比较有前景同时颇有挑战性的任务。

一方面,咱们在 IJCAI 的 review 也说到了:“This problem is important and interesting, this area should attract more attention. This work has great potential of motivating follow-up research.”,证实咱们的这个工做的意义,是有利于促进后续的研究工做的。

另外一方面,由对话状态自己的复杂性到无监督的任务设定使得这个任务仍是有很是大的提高空间,咱们提出的两个基于神经隐变量的模型也是抛砖引玉,提供了一种解决这个任务的思路,你们能够以咱们的模型做为 baseline,提出更多的方法来解决这个任务。

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许能够成为一座桥梁,促使不一样背景、不一样方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或我的,在咱们的平台上分享各种优质内容,能够是最新论文解读,也能够是学习心得技术干货。咱们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系我的原创做品,来稿需注明做者我的信息(姓名+学校/工做单位+学历/职位+研究方向) 

• 若是文章并不是首发,请在投稿时提醒并附上全部已发布连接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site 

• 全部文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便咱们在编辑发布时和做者沟通

????

如今,在「知乎」也能找到咱们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅咱们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。若是你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

相关文章
相关标签/搜索