DKT 论文笔记

单位:北京邮电大学,美团

时间:2022.06

发表:ACL

论文链接:
https://aclanthology.org/2022.acl-short.6/

一、前言

1. DKT 想做些什么?

在文本分类中,域外(Out-of-Domain)意图识别旨在将新的未知意图归入不同的聚类,发现域外意图对意图识别机器人能实现完全自动化至关重要,这有助于改善对话系统的未来发展。其中一个重大的挑战是如何将先前的域内(IND) 知识转移到域外(OOD)聚类中。

2. DKT 做到了什么?

与先前的方法相比,使用一个统一的对比学习框架将预训练的意图表征解耦为两个独立的子空间,即实例级和类(群)级。如下图所示。

使用统一的对比目标进行预训练和聚类弥合了两个阶段之间的差距。此外,两个独立的头将实例级和集群级的对比性学习解耦,以学习解耦的意图表示,从而实现更好的知识转移。

作者在两个基准数据集上进行的实验和分析表明了方法的有效性。

二、Disentangled Knowledge Transfer for OOD Intent Discovery with Unified Contrastive Learning

1. 方法

首先使用 BERT 编码器来学习意图特征。然后将意图特征经过池化后,在其之上添加两个独立的转换头(实例级头 f 和类级头 g),其实就是两个全连接层。如下图所示。

1.1 IND Pre-training

在 IND 预训练阶段,使用 head f 进行监督实例级对比学习(SCL),公式如下。

就是将Batch内同一分类的句子当正例,不同分类的句子当负例。该对比学习方法与我先前分享的 ContrastNet 的第一个损失函数可以说大同小异,不过这里作者用了之前分享过的 SimCSE 的数据增强方法,即一个句子 dropout 两次彼此也当作正例。

同时在 head g 使用交叉熵分类损失来学习类(聚类)上的区分。

作者做的消融实验表明 SCL 损失对于最后的效果影响更大

根据 Table1 的结果来看,有 IND 预训练能有很大加成。

1.2 OOD Clustering

在 OOD 聚类阶段,对这两个头采用相似的目标,在实例级头 f 的基础上,进行实例级对比学习(ILCL),公式如下。

简而言之就是将两次 dropout 的句子彼此做为正例, batch 内的其它句子做为负例。

在簇级头 g 的基础上,作者在假设已知领域外数据集的类别个数的情况下,按照如下方法进行对比聚类(CLCL)。

这里的 $y_i$ 指的是第 i 个分类的代表向量,还是把两次 dropout 的代表向量彼此做为正例,不同代表向量作为负例。

对于推理,只使用集群级的对比头 g ,并计算 argmax 来获得集群结果,而不需要额外的K-means。

2. 实验

编码器使用 bert-base-uncased , Pooling 层使用的是一层双向的 GRU ,每个头都是两层全连接层中间加了个 ReLU 函数。

值得注意的是,除了 bert 的最后一层 transformers ,作者把其它的参数全部冻结不作更新。

2.1 数据集

为了构建 IND/OOD 数据,按照指定的OOD比例(CLINC为10%,20%,30%,Banking为10%),论文随机划分这两个数据集,分三次随机划分,其余为 IND 数据。注意,论文只使用 IND 数据进行预训练,使用 OOD 数据进行聚类。

就是说 CLINC-10% 是将百分之10的数据全看作领域外数据,剩下的百分之90为领域内数据。

2.2 IND Pre-training

t=0.5,batch_size=128,lr=5e-5,dropout 来构建增强的例子, dropout 率为0.1

2.3 OOD Clustering

比较迷的是,在聚类阶段,CLINC-10%、CLINC-30%、Banking-10%这三个的batch_size为512,而 CLINC-20% 为400。这个属实是没看懂,这个400的大小是怎么来的。。。

簇级头t=1.0,实例级头t=0.5,lr=3e-4,dropout 来构建增强的例子, dropout 率为0.1

对于实例级对比头,行空间的维度被设定为128,SCL和实例级CL的温度为0.5。对于簇级对比头,列空间的维数自然设置为IND类/OOD簇的数量。

三、总结

通过一个统一的多头对比学习框架,提出了一种新颖的分解知识转移方法(DKT),将分解的IND意图表征转移到 OOD 聚类中。在两个基准点上的实验和分析证明了 DKT 对于 OOD 发现的有效性。

四、值得思考的地方

1. 双簇头

双簇头的作用主要是通过两个不同的 MLP 将 bert 得到的表示转换到另一个向量空间,因为实例级别的任务和分类级别的任务判别标准是不同的,放在同一向量空间下训练效果就会大打折扣,作者做的消融实验证明了这点。

这个思路很巧妙,说不定有更好的方法分开两个级别的任务?

2. Pooling方法

使用了一层双向的 GRU 当 Pooling 方法,但作者并没有多谈,为什么用这个聚合方法和如果用其它的方法效果如何,可以做些实验验证下。

3. 冻结参数

作者将 bert 除了最后一层 transformer 外的其它参数全部冻结不作训练,这个小方法很有意思,可以尝试能否扩展到其它模型上。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>