ASSIST: Towards Label Noise-Robust Dialogue State Tracking
面向标签噪声鲁邦性的对话状态追踪
Abstract
**问题所在:**首先抬一手MUZ2.1,其促进了DST的发展,但是MUZ2.1数据集中的注释仍然存在着大量的噪音,即使迭代更新了很多版本,2.1-2.4,但是数据集中的训练集依旧有很多的噪声。纠正所有的错误会耗费大量的人力物力财力。
**解决问题:**我们的方法不是使用笨蛋的方法去一个一个纠正错误,而是提出一个ASSIST的通用框架,用于从有噪声的训练集注释中训练DST
解决的大概流程:首先在小型干净的数据集上训练一个辅助模型,再为训练集中的每个样本生成伪标签,然后再使用生成的伪标签和原本的噪声标签放在一起训练主模型
Introduction
简单介绍了对话系统,并阐述了对话状态追踪在对话系统中的重要性,简单介绍了DST的几个通用数据集MUZ、SGD等
作者发现MUZ数据集中存在着大量的噪声,导致DST模型的鲁棒性不是很好,传统解决其问题的方式就是人工去一个一个修改标注注释,现已发表了MUZ2.1、2.2、2.3、2.4,极大地改善了主是错误的问题
即便如此还是有很多的噪声,和注释错误。
**总结问题:**收集提取大规模的,完全精确的数据集,是不太可能的,因为需要花费的成本和资源非常的多。
**提出一个新的方法:**通过特定的学习算法从嘈杂的标签中稳健的训练DST模型
解释了为什么别的任务的数据集中也存在很大噪声但是影响性能的范围不大,为什么DST存在这么大的问题,普通的任务就是简单的几分类,而DST任务涉及到复杂的对话状态的预测,所以受训练数据集的影响很大。
论文的方法是:首先在小型干净的数据集上训练一个辅助模型,再为训练集中的每个样本生成伪标签,然后再使用生成的伪标签和原本的噪声标签放在一起训练主模型,生成的伪标签可以和原始标签一起对主模型进行训练。
这里小型干净的数据集是可以收集到的
Problem Definition
Conventional Dialogue State Tracking
表示的是共T轮的对话话语的组成,分别表示在第t轮对话系统的回复和用户的回复
表示第t轮的对话状态,这里的S指的是数据集中所有预定义的域槽,vt指的是与第t轮对话相关的槽值,
将dst任务简化成了一个公式,我们将对话历史作为Xt,作为模型输入,将Bt作为第t轮的对话状态。作为输出。
这里的Xt表示的是第t轮的对话历史。
Dialogue State Tracking with Noisy Labels
讨论了数据集出现噪声和标注错误的原因所在
第一,标注数据的人员是外包人员,在标注数据时,存在知识上的盲区,
第二、数据集中存在多轮对话和跨域操作,数据集本身的结构就很复杂。
我们将其表示成数据集中有注释错误的对话状态,槽值表示的是在第t轮的对话话语中域槽s的噪声标签,
表示的是无噪声数据集中的对话状态的表示,表示 是在第t轮的对话话语中域槽s的无噪声标签,这个无噪声的标签是正确的,未知的。
因此目前的对话状态都是在有噪声的数据集下运行的,所以其公式应为:
所以我们只能学习到次优的对话状态跟踪器的原因所在就是根本没有考虑过数据集中存在的大量的注释错误和噪声。
**文章的目的:**作者想使得目前的DST模型即使在有噪声的数据集中运行也能学习到一个更接近最优的对话状态模型
Proposed Approach
**方法流程:**ASSIST首先训练一个辅助模型再利用辅助模型为训练集带噪声的每个样本生成一个伪标签。伪标签状态定义为如下所示:
表示第t轮对话的槽s的伪标签
得到伪标签之后我们将其和原始普通噪声标签合并起来训练主模型
这里的C指的是将伪标签和原始标签连接起来,即现在的对话状态追踪任务变成了预测原始噪声标签和伪标签
理论上来说其实所有的DST模型都可以被用来训练成辅助模型,但是因为干净数据集很小的原因,可能会导致DST模型过拟合,所以这里作者提出一个新的简单的模型作为辅助模型。
Auxiliary Model Architecture
辅助模型的架构如上图所示,上图由一个上下文语义编码器、槽注意力机制模块和槽值匹配模块组成。其中编码槽位和槽值的编码器被固定了参数
Dialogue Context Semantic Encoder
这里作者使用BERT 编码对话上下文并且是当前第t轮的系统话语和用户话语的连接。
指的是对话状态,这篇论文再次提到对话状态是对话历史的紧凑表示,即压缩表示。
这里讲一个tricks,为什么编码时已经输入了当前轮次的对话历史,还要再输入一个Bt-1上一轮的对话状态呢,对话状态已经代表了对话历史了,这里相当于输入了两遍,不会造成重复吗?
这里解决的问题是,当对话历史过长时,我们需要截断对话历史,因此对话历史就不完整了,这时候我们还有对话状态里面保存着完整的对话历史的信息,就弥补了截断的那一部分对话信息。
上图展示了编码器完整的输入表示。
对于数据集当中的每一个域槽和每一个域槽的候选槽值,作者使用BERT 对其进行编码分别得到和
编码公式如上所述。
Slot Attention
作者利用槽注意模块从相同的对话上下文中检索所有槽的信息
使用域槽的编码表示当做查询向量、使用对话上下文表示当做键矩阵和值矩阵。
槽自注意力机制的作用是将槽的表示信息与对话上下文中的每一个单词的语义向量进行匹配,并计算分数,这样可以得到槽的特殊信息。
表示槽s与第t轮对话上下文信息的相关信息。
经过线性变换和层归一化,我们得到了槽的特定语义信息。
Slot-Value Matching
这里主要的流程是我们得到槽的特定语义信息后,编码当前槽的候选槽值,找到其中哪一个候选槽值的编码表示与槽特定语义信息之间的L2距离(欧式距离)最小,这个槽值就是当前槽的适合槽值
Auxiliary Model Training
在辅助模型的训练中,我们使用的是小的干净的数据集,所以我们需要在当前干净的数据集中最大化的提升联合概率
Pseudo Label Generation
此时当我们的辅助模型在干净的数据集中训练完成后,我们需要依赖当前的辅助模型为每一个噪声训练集生成伪标签 。
此时,我们生成时编码的的是每一轮的对话话语,而不是整个的对话历史,
这里的对话上下文属于有噪声的数据集
Primary Model Training
这里指的是我们结合伪标签和噪声标签一起训练主模型,
上述公式表示的是将伪标签和噪声的one-hot向量结合起来成为新的标签,α是超参,是用来平衡噪声标签和伪标签对新标签的影响
训练主模型时,计算新标签的概率公式。
主模型的loss函数为:
表示只使用伪标签训练主模型的loss和只使用原始噪声标签训练主模型的loss
最小化这个总loss,使得主模型被训练首先从普通噪声标签中学习,同时模仿辅助模型伪标签的预测。
Theoretical Analysis
论文创新点的理论分析是,使用在小型干净数据集上训练的辅助模型生成的伪标签和原始带噪声的标签结合可以帮助主模型能够预测出更近似未知的真实标签。
理论支持论文中有公式的推断。
Experimental Step
Datasets
使用MUZ2.4数据集中的验证集作为小型干净数据集,预处理格式为STAR的数据集的预处理方式。
Primary DST Model
我们使用三个模型当做我们的主模型,SOM-DST、STAR、AUX-DST(这是论文中提到的辅助模型用作主模型)
Implementation Details
使用干净数据集对辅助模型进行训练,再使用噪声数据集挑选出准确率最高的辅助模型,对于所有的主要模型在MUZ2.0上α设置0.6,在MUZ2.4上设置0.4
Experimental Result
Main Result
图中显示了在MUZ2.0和MUZ2.4数据集上使用ASSIST框架下三种不同的主要DST模型的得分,同时加入了单独使用噪声标签和单独使用伪标签的结果性能。
可以看出包含伪标签是有意义的
**重点:**可以看到SOM-DST虽然与其他两个模型在联合目标准确率上进行对比的时候性能并没有很好,但是在轮级别的目标准确率上比另外两个模型要好,原因在于SOM-DST中有一个从上一轮对话状态中复制槽值的操作,比其他两个模型从头预测对话状态要好。
Applying STAR as the Auxiliary Model
做此实验的目的在于,为了证明虽然也可以使用其他的DST模型作为辅助模型,但是我们提出的简单的模型作为辅助模型的有效性。
从图中可以观察到当使用star作为辅助模型时三个主模型的性能没有使用AUX-DST为辅助模型的时候的性能好,这里可以看出我们提出的简单的辅助模型生成更高质量的伪标签。
Effects of Parameter
这里的实验主要是为了证明超参α设置多少合适。α是控制伪标签和原始噪声标签之间的权重,α越大表示对伪标签的重视越高。图中展示的是主模型为AUX-DST的结果,可以看到α权重在其中起到了非常重要的作用。
MUZ2.0在α=0.6的时候效果最好,MUZ2.4在0.4的时候效果最好,这是可解释的,因为MUZ2.1数据集的噪声较多,需要α更大更依赖伪标签。
Effects of the Size of the Clean Dataset
考虑到框架是先通过干净数据集训练辅助模型,再使得辅助模型生成伪标签。做这个实验的目的是为了探索,干净数据集的大小对主要模型性能的影响。
实验将干净数据集的大小,即数据集中的对话话语的数量从500变成1000,去生成不同程度的伪标签。通过不同的伪标签和噪声标签结合去测试主模型的性能。可以看出干净数据集的大小队模型的性能还是有很大的影响。
Analyses on Pseudo Labels` Quality
到这里我们可以看到生成的伪标签确实对模型的性能有很大的好处,这个实验是为了分析,为什么伪标签会对模型促进作用。
Quantitative Analysis(定量分析)
做这个实验的目的是为了调查生成的伪标签到底和真实标签之间是否是一致的,所以作者在想必须在真实的标签的数据集上计算辅助模型的性能,但是这里这里没有真实标签的数据集,因此作者就直接采用了训练集去验证辅助模型的性能(NOTE这里的训练集的数据只是一部分有噪声所以可以当做是真实数据)。在实验中我们同样改变了干净数据集的大小。可以看到使用越来越多的干净数据集是可以提升辅助模型的性能的。
自己的认知:实验表明干净的数据集能够帮助辅助模型生成越来越正确的对话状态,即越来越靠近真实标签。
Qualitative Analysis(定性分析)
为了直观的看见生成的伪标签的质量,做了如下表格
可以看到前两轮对话的嘈杂标签是不完整的,在辅助任务生成的伪标签他很好的补充了。
第三轮对话嘈杂标签多预测了一个错误标签,伪标签中也改正了
但是在第四轮对话中,可以看到伪标签多预测除了一个错误的标签,而原始数据确是对的,这里可以看到伪标签其实也会预测到错误的情况,因此我们需要将原始标签和伪标签结合起来使用是最好的选择。
Pseudo Labels vs. Simple Combination
做这个消融实验的主要作用是为了证明作者提出的这个框架流程是牛逼的,看到这篇论文其实有很多人会提出这样一个疑问
你先用干净的数据集生成伪标签再和嘈杂标签结合起来训练,你为什么不把干净的数据集和有噪声的数据集融合起来一起训练不好吗?此实验就是为了做这个对比实验
在使用AUX-DST作为主模型。T是噪声训练集,C是小的干净数据集,P:是生成的伪标签,可以看到我们单纯的将噪声和干净数据集融合在一起的时候效果不是很好,而是采用文中的框架反而达到了很好的效果。做好的效果是现将干净数据集和训练数据集融合在一起 ,然后再融合伪标签,达到最优结果。
Error Analysis
本实验主要研究每个插槽的错误率,我们使用AUX-DST模型作为主模型,并只在训练集上训练对比加与不加伪标签得到的结果。
可以看到hotel-type这个域槽的错误率最高,尽管使用了伪标签但是降低不明显,一些关于name的域槽在使用了伪标签时使得其错误率有很大的降低,同时可以看到有一些域槽在使用伪标签之后的错误率反而升高了,这可能是因为这些域槽的噪声本来就小,加入伪标签反而增加了噪声,这里也是开创了一个未来可以优化的点,即如何使用更好的技术来使得噪声标签和伪标签更好的结合。