英文题目:SimCSE: Simple Contrastive Learning of Sentence Embeddings
中文题目:SimSCE:用简单的对比学习提升句嵌入的质量
论文地址:https://export.arxiv.org/pdf/2104.08821.pdf
领域:自然语言处理,对比学习
发表时间:2021.04
作者:Tianyu Gao, 普林斯顿大学,清华大学
出处:EMNLP
被引量:83
代码和数据:https://github.com/princeton-nlp/SimCSE
阅读时间:2022.09.18
(周五同事分享,简单整理笔记)
读后感
主要用于提升句嵌入的质量。方法很简单,利用BERT模型本身的dropout性质,通过同一输入输出不同嵌入作为正例对,然后取同一batch下的反例对训练模型。
介绍
自监督学习主要包含:生成式,对比式,对抗式。其中的对比学习原理是:利用无监督数据,通过巧妙的方法构造正例/反例(一般是一个正例对应多个反例),训练模型,让正例距离足够近,反例距离足够远,以利用无监督数据,进行更好地表示(表征)。
一般设计包含三部分:构造正/负例;优化损失函数;调整模型编码器。
评价对比学习的质量有两个关键指标:alignment和uniformity。其中alignment指的是正例中数据对表示的一致性:
uniformity指的是嵌入空间分布的均匀性:
其中Pdata指空间中所有实例。也就是说正例距离越近越好,而随机采样的数据对的距离应该分布在超球体表面。
方法
无监督数据训练SimCSE
之前生成近似正例的方法有:随机增删,近义词替换,交换词序等。本文利用 BERT 模型本身包含 dropout,这样同一个句子两次送入模型,由于随机dropout,最终的编码也不同。用这种方法作为数据增强,生成对比学习中的正例对,使用同一batch中的其它实例作为反例。损失函数定义如下:
表-1对比了文中方法和其它常用方法(删词,剪切),在同义句子匹配STS-B任务中的效果:
图-2把损失拆分成alignment和uniformity,位置处于左下角时效果最好(两个loss都小);可以看到随着迭代训练损失的变化(箭头方向),其中红色线为SimSCE在两个评测方向的变化相对最好。
有监督数据训练SimCSE
文中还研究了SimSCE对比学习如何利用有监督学习的数据来提升模型的表现力。具体使用自然语言推理任务(NLI)数据,NLI用以判断两个句子的关系是:蕴含、中性或矛盾。利用训练集中的标注信息产生对比学习中的正/负例。
选择标注数据
为对比 NLI 的提升效果,先探索了一些构造正例的方法:
- 使用Kaggle比赛的QQP数据集,它的训练数据标注了两个问句语义是否相同。
- 使用Flickr30,对每个图片人工标注了五个标题,可将其中的两两标注组成正例对。
- 使用ParaNMT,大规模的反向翻译数据集(如:中->英->中),作为正例对。
- 使用NLI任务数据集,最终NLI数据集效果最好,这是由于它包含高质量的众包人工标注,并且正例中词汇重合度小(同一词在两个正例对中均出现)。
将矛盾关系对作为硬负例
为了更好利用NLI数据集,利用标注为矛盾的实例,生成硬负例,并修改了损失函数,实验证明了它的有效性:
可以看到,这里硬负例被充分利用(被计入了N次),图-4展示了实验结果:
为了公正的对比,sample列只采样了134k正例来训练模型。可以看到不同任务训练的模型对 STS-B 效果的提升。
各向异性
各向异性意思是所有向量都被映射在了一个“狭窄”的高维空间。而uniformity是评价所有实例在向量空间中是否均匀分布,SimCSE在uniformity方面提升,也改善了自然语言编码的各向异性问题。
图-3对比了目前各种流行模型的alignment和uniformity:
实验
主实验使用句子相似度任务,在有监督和无监督两方面,对比了不同方法的效果:
可以看到SimSCE效果已超过了目前业界使用最为广泛SBERT(挛生网络)模型。
网友评论