基于语义负样本的对比学习来提升自然语言理解

前言

这两年对比学习是一个研究热点,今年的ACL会议有16篇关于对比学习的paper,今天分享其中的一篇——基于语义负样本的对比学习来提升自然语言理解(CLINE: Contrastive Learning with Semantic Negative Examples for Natural Language Understanding)。对比学习(Contrastive Learning)最先应用在图像领域,其核心思想是拉近正样本之间的距离,同时推开正负样本之间的距离,进而提高表征学习能力,而其关键步骤是如何构造正负样本。不同于图像领域,文本数据主要利用数据增强的方式去构造正负样本,如增加词、随机删除、dropout方式、或同义词替换,这些方式都会对文本的语义产生改变,甚至影响样本所属的label。这样就带来噪声影响,如果噪声的负影响超过对比学习的正影响,那就损害模型的表现。针对上述问题,文本提出构造语义否定的样本作为负样,在预训练中加入对比学习,提升下游任务。论文开源的代码为:https://github.com/kandorm/CLINE。

模型

从模型图可以看出,论文的思想很简单:将原文本的一些词做同义词替换生成的样本作为正样本,将原文本的一些词做反义词替换生成的样本作为负样本,然后进行对比表征学习。

对比其他类似的paper,个人觉得本篇paper的创新点有两个:
1、利用反义词替换构造负样本
2、在训练任务中增加替换词预测任务(Replaced Token Detection Objective)

这样文中提到的预训练任务有三个目标,第一个是MASK预测任务,第二个是替代词任务,第三个是对比学习任务,第一个就是BERT常规任务。
关于第二个任务文中如此操作:对序列进行二分类预测:



判断每个token是否被替换,取值1为替换,0反之。则对应的损失函数为:


关于第三个任务,每个样本与生成的两个样本进行对比学习,其计算方式如下:


则整体的训练目标为:


实验

作者是在RoBERTa-base模型的基础上,使用BookCorpus 和English Wikipedia 数据集来训练自己的CLINE模型,主要在文本分类任务进行了测试,主要结果如下:

结语

论文的思想很简单,也很好理解。分享的目的正是由于它简洁,有效果,能容易在我们实践项目中尝试。同时个人也有些疑问:1)文中提出的否定词替换构造负样本,其实跟常规的方式思路一致,也同样有噪声存在,并不能凸显这种方式的优越性;2)文中提出的预训练模型CLINE只在文本分类任务进行了对比测试,没有在阅读理解这样复杂的任务进行对比。个人想法:如何将对比学习更好的应用到NLP领域,在构造正负样本上,觉得更应该从全局的角度去生成,目前主流采用基于词的粒度进行操作,是一种局部的方式,生成的样本很多根本就不在语料库中出现过,类似构造了一个人类没用过的语句,如此也会带来语义偏差的学习。

更多文章可关注笔者公众号:自然语言处理算法与实践

你可能感兴趣的:(基于语义负样本的对比学习来提升自然语言理解)