摘要
本文介绍了SimCSE,这是一个简单的对比学习框架,极大地促进了最优的句子嵌入。我们首先描述一种无监督的方法,该方法采用输入语句并在对比目标中进行预测,学习过程中仅将标准dropout用作噪声。这种简单的方法出奇地有效,可以与以前的有监督方法媲美。我们假设dropout作为一种数据扩充方法,因此将其删除会导致表示崩溃。然后,我们从通过自然语言推理(NLI)数据集学习句子嵌入的工作中汲取灵感,并通过使用“蕴含”对作为肯定词,而“矛盾”对作为硬否定词,将NLI数据集的标注对纳入对比学习。我们评估了标准语义文本相似性(STS)任务上的SimCSE,使用BERTbaseBERT_{base}BERTbase的无监督和有监督模型分别平均实现了74.5%和81.6%的Spearman相关性,与之前的最佳结果相比,分别提高了7.9和4.6点。我们还表明,对比学习理论上将预先训练的嵌入的各向异性空间调整为更均匀,并且在有监督信号可用时,它可以更好地对齐正例对。
1.介绍
学习通用句子嵌入是自然语言处理中的一个基本问题,并且已经在文献中进行了广泛的研究。在这项工作中,我们提出了最优的句子嵌入训练方法,并证明了对比学习可以非常有效地学习句子嵌入,并结合诸如BERT和RoBERTa等经过预先训练的语言模型。我们提出了SimCSE,这是一个简单的对比句子嵌入框架,可用于从未标记或标记的数据生成高级语句嵌入。
(1)unsupervised SimCSE
我们的无监督SimCSE可以简单地预测输入句子本身,并且仅将dropout用作噪音(图1a)。换句话说,我们将相同的输入语句两次传递给经过预训练的编码器,并通过应用独立采样的dropout掩码获得两个嵌入,作为“正例对”。 尽管它看起来非常简单,但我们发现这种方法在很大程度上优于其他训练目标,例如预测下一个句子和常用的数据增强技术,例如单词删除和替换。更令人惊讶的是,这种无监督的嵌入方法已经与所有以前的监督方法相当。通过仔细的分析,我们发现dropout本质上是作为数据扩充来使用,而删除它会导致表示崩溃。
(2)supervised SimCSE
在我们的有监督的SimCSE中,我们成功利用了基于自然语言推理(NLI)数据集进行句子嵌入学习,并将受监督的句子对纳入对比学习中(图1b)。与先前将其转换为三分类任务(包含/中立/矛盾)的工作不同,我们利用了包含对可以自然地用作正例的事实。我们还发现,添加相应的矛盾对作为反例可以进一步提高性能。与使用相同数据集的现有方法相比,这种NLI数据集的简单使用可实现更高的性能。我们还与其他(带标注)句子对数据集进行了比较,发现NLI数据集对于学习句子嵌入特别有效。
为了更好地理解SimCSE的优越性能,我们借鉴了Wang and Isola (2020) 的分析工具,该工具采用了语义相关的正例对之间的对齐和其在整个表示空间的均匀性来衡量学习嵌入的质量。我们证明,从理论上说,对比学习目标“拉平”了句子嵌入空间的奇异值分布,从而提高了均匀性。我们的方法还与最近的发现有关,即预训练的词嵌入具有各向异性。我们发现,我们的无监督SimCSE实质上提高了均匀性,同时避免了由于dropout噪声而导致的退化对齐,从而大大提高了表示的表达能力。我们还证明了NLI训练信息可以进一步改善正对之间的对齐方式,从而产生更好的句子嵌入。
我们对7个语义文本相似性(STS)任务和7个迁移任务进行了全面的SimCSE评估,并结合了以前的最新模型。在STS任务上,我们表明,使用BERTbaseBERT_{base}BERTbase,我们的无监督模型和有监督模型分别实现了74.5%和81.6%的平均Spearman相关性,大大超过了以前的最佳水平(表1)。我们还可以在迁移任务上取得有竞争力的表现。 此外,我们在现有工作中发现了一个不连贯的评估问题,并合并了不同评估设置的结果,以供将来研究之用。
2.背景:对比学习
对比学习的目的是通过将语义上紧密的邻居拉在一起并将非邻居推离来学习有效的表示。假设有一组成对构建的样例集合D={(xi,xi+)}i=1m\mathcal D=\{(x_i,x^+_i)\}^m_{i=1}D={(xi,xi+)}i=1m,其中xix_ixi和xi+x^+_ixi+在语义上相关。我们遵循Chen et al. (2020) 的对比框架,并采用batch内负的交叉熵目标:令hih_ihi和hi+h^+_ihi+作为xix_ixi和xi+x^+_ixi+的表示形式,对于具有NNN对的mini-batch来说,(xi,xi+)(x_i,x^+_i)(xi,xi+)的训练目标是:
li=logesim(hi,hi+)/τ∑j=1Nesim(hi,hj+)/τ,(1)\mathcal l_i=log\frac{e^{sim(\textbf h_i,\textbf h^+_i)/\tau}}{\sum^N_{j=1}e^{sim(\textbf h_i,\textbf h^+_j)/\tau}},\tag{1}li=log∑j=1Nesim(hi,hj+)/τesim(hi,hi+)/τ,(1)
其中τττ是温度超参数,sim(h1,h2)sim(\textbf h_1,\textbf h_2)sim(h1,h2)是余弦相似度h1Th2∣∣h1∣∣⋅∣∣h2∣∣\frac{\textbf h^T_1\textbf h_2}{||\textbf h_1||·||\textbf h_2||}∣∣h1∣∣⋅∣∣h2∣∣h1Th2。在这项工作中,我们使用预训练的语言模型(例如BERT或RoBERTa)对输入的句子进行编码:h=fθ(x)\textbf h=f_θ(x)h=fθ(x),然后使用对比学习目标(等式1)微调所有参数。
(1)Positive instances
对比学习中的一个关键问题是如何构建正例对(xi,xi+)(x_i,x^+_i)(xi,xi+)。 在计算机视觉中,有效的解决方案是对同一图像进行两次随机变换(例如,裁剪,翻转,变形和旋转)来得到xix_ixi和xi+x^+_ixi+。通过应用数据增强技术(例如单词删除,重新排序和替换),最近在语言表示中采用了类似的方法。但是,由于NLP的离散性,其数据增强是困难的。正如我们将在§3中看到的那样,在中间表示形式上使用标准dropout比这些离散运算要好。
在自然语言处理中,也已经在不同的环境中探索了类似的对比学习目标。在这些情况下,(xi,xi+)(x_i,x^+_i)(xi,xi+)是从诸如mention-entity或question-passage对之类的有监督数据集中收集的。根据定义,由于xix_ixi和xi+x^+_ixi+的不同性质,这些方法始终使用双编码器框架,即对于xix_ixi和xi+x^+_ixi+使用两个独立的编码器fθ1f_{θ_1}fθ1和fθ2f_{θ_2}fθ2。对于句子嵌入,Logeswaran and Lee (2018) 还通过将(当前句子,下一个句子)形成为(xi,xi+)(x_i,x^+_i)(xi,xi+),并使用了具有双编码器方法的对比学习。Zhang et al. (2020) 将同一句子的全局句子表示和局部字符表示作为正例。
(2)Alignment and uniformity
最近,Wang and Isola (2020) 确定了与对比学习相关的两个关键属性:alignment和uniformity,并提出了度量句子表示质量的指标。给定正例对pposp_{pos}ppos的分布,alignment计算配对样例的嵌入之间的期望距离(假设嵌入已经标准化),
lalign=△E(x,x+)∼ppos∣∣f(x)−f(x+)∣∣2.(2)\mathcal l_{align}\stackrel{\triangle}{=}\mathop{\mathbb E}\limits_{(x,x^+)\sim p_{pos}}||f(x)-f(x^+)||^2.\tag{2}lalign=△(x,x+)∼pposE∣∣f(x)−f(x+)∣∣2.(2)
另一方面,uniformity衡量不同句子嵌入间的均匀分布的程度:
luniform=△logEx,y∼i.i.dpdatae−2∣∣f(x)−f(y)∣∣2.(2)l_{uniform}\stackrel{\triangle}{=}log \mathop{\mathbb E}\limits_{x,y\stackrel{i.i.d}{\sim} p_{data}}e^{-2||f(x)-f(y)||^2}.\tag{2}luniform=△logx,y∼i.i.dpdataEe−2∣∣f(x)−f(y)∣∣2.(2)
其中pdatap_{data}pdata表示数据分布。这两个指标与对比学习的目标非常吻合:正例应保持靠近,随机样例的嵌入应散布在超球面上。在以下各节中,我们还将使用这两个指标来证明我们方法的内部运作合理性。
3.无监督SimCSE
在本节中,我们描述了我们的无监督SimCSE模型。这个想法非常简单:我们采用一个句子的集合{xi}i=1m\{x_i\}^m_{i=1}{xi}i=1m,并使用xi+=xix^+_i=x_ixi+=xi。构建句子相同的正例对的关键因素是通过使用独立采样的dropout mask。在Transformers的标准训练中,在全连接层以及注意力概率上都设置了一个dropout mask(默认p=0.1p=0.1p=0.1)。我们将其表示为hiz=fθ(xi,z)h^z_i=f_θ(x_i,z)hiz=fθ(xi,z),其中zzz是dropout的随机mask。我们只需通过应用不同的dropout masks zzz,z′z'z′以将相同的输入两次带入到编码器,训练目标就变为:
li=−logesim(hiz,hiz′)∑j=1Nesim(hiz,hjz′)(4)\mathcal l_i=-log\frac{e^{sim(\textbf h^z_i,\textbf h^{z'}_i)}}{\sum^N_{j=1}e^{sim(\textbf h^z_i,\textbf h^{z'}_j)}}\tag{4}li=−log∑j=1Nesim(hiz,hjz′)esim(hiz,hiz′)(4)
其中,NNN为一个mini-batch中的句子数目。请注意,zzz只是Transformers中的标准dropout mask,我们不会添加任何其他dropout。
(1)Dropout noise as data augmentation
我们将这种方法视为一种小的数据增强形式:正例对采用完全相同的句子,并且它们的嵌入仅在dropout masks中有所不同。我们在STS-B开发集上将这种方法与常见增强技术和其他训练目标进行了比较。
在这些实验中,我们使用从英语维基百科中随机抽取的m=106m=10^6m=106个句子并设置N=512N=512N=512。表2比较了我们对常见数据增强技术(例如crop,word deletion和replacement)的处理方式,可以将其视为h=fθ(g(x),z)\textbf h=f_θ(g(x),z)h=fθ(g(x),z),而ggg是xxx上的(随机)离散算子。我们发现,即使删除一个单词也会影响性能,而且任何离散增强方式都不会超过基本的dropout加噪方式的性能。
我们还将这种自我预测训练目标与 Logeswaran and Lee (2018) 中使用的下一句预测目标进行比较,并对采用一个编码器或两个独立的编码器也进行了比较。如表3所示,我们发现SimCSE的性能比下一句话的目标要好得多(在STSB上为79.1 vs 69.7),并且使用一个编码器而不是两个独立编码器在我们的方法中也产生了显着差异。
(2)Why does it work?
为了进一步了解dropout noise在无监督的SimCSE中的作用,我们在表4中尝试了不同的dropout概率,并观察到所有变体的性能均不及Transformers的默认dropout概率p=0.1p=0.1p=0.1。我们发现两个极端情况特别有趣:“no dropout”(p=0p=0p=0)和“fixed 0.1”(使用默认dropout概率p=0.1p=0.1p=0.1,且正例对具有相同的dropout mask)。在这两种情况下,正例对的句子嵌入完全相同,这会导致性能急剧下降。我们在训练过程中每隔10个步骤对这些模型进行检查,并显示了如图2所示的对齐和均匀性指标。可以清楚地看出,所有模型都极大地提高了均匀性。但是,这两个特殊变体的对齐方式也会大大降低,而我们的无监督SimCSE由于使用了dropout noise而保持了稳定的对齐性。另一方面,尽管“delete one word”可以稍微改善对齐性,但其均匀性增益较小,最终表现不如无监督的SimCSE。
4.有监督SimCSE
我们已经证明,通过添加dropout噪声能够学习到正例对(x,x+)〜ppos(x,x^+)〜p_{pos}(x,x+)〜ppos的好的对齐。在本节中,我们研究是否可以利用有监督数据集来提供更好的训练信号,以改善我们的方法的对齐性。先前的工作表明,通过预测两个句子之间的关系是必然的,中立的还是矛盾的,有监督的自然语言推理(NLI)数据集对于学习句子嵌入是有效的。在我们的对比学习框架中,我们直接从监督数据集中获取正例对(xi,xi+)(x_i,x^+_i)(xi,xi+),并使用它们来优化等式1。
(1)Exploiting supervised data
我们首先探讨哪些带标注的数据集特别适合构建正例对(xi,xi+)(x_i,x^+_i)(xi,xi+)。我们对具有句子对样例许多数据集进行了实验,包括QQP:Quora问题对。Flickr30k:每个图像都带有5个人工书写的字幕,我们将同一图像的任意两个字幕视为正例对。ParaNMT:大规模的反向翻译标注数据集; 最后是NLI数据集:SNLI和MNLI。
我们使用不同的数据集训练对比学习模型,并得到表5中的比较结果(为了公平比较,我们还使用相同数量的训练对进行实验)。我们发现,使用有监督数据集的大多数模型都优于我们的无监督方法,显示了监督信号的明显好处。在所有选项中,使用NLI(SNLI + MNLI)数据集中的蕴含对执行效果最佳。我们认为这是合理的,因为NLI数据集由高质量的和众包的对组成,并且人类标注者应根据前提手动编写假设,因此两个句子的词法重叠较少。例如,我们发现蕴含对(SNLI + MNLI)的词汇重叠(F1在两个单词袋之间测量)为39%,而QQP和ParaNMT分别为60%和55%。
(2)Contradiction as hard negatives
最后,我们通过将NLI contradiction对用作硬负例来进一步利用NLI数据集。在NLI数据集中,给定一个前提句子,标注者需要手动编写一个绝对正确的句子(蕴含句子),一个可能真实的句子(中立句子)和一个绝对错误的句子(矛盾句子)。因此,对于每个前提句子及其蕴含句子,都有一个对应的矛盾句子(请参见图1的示例)。
形式上,我们将(xi,xi+)(x_i,x^+_i)(xi,xi+)扩展到(xi,xi+,xi−)(x_i,x^+_i,x^−_i)(xi,xi+,xi−),其中xix_ixi是前提句子,xi+x^+_ixi+和xi−x^-_ixi−是蕴含句和矛盾句。然后训练目标li\mathcal l_ili定义如下(NNN为mini-batch大小):
−logssim(hi,hi+)/τ∑j=1N(esim(hi,hj+)/τ+esim(hi,hj−)/τ)(5)-log\frac{s^{sim(\textbf h_i,\textbf h^+_i)/\tau}}{\sum^N_{j=1}(e^{sim(\textbf h_i,\textbf h^+_j)/\tau}+e^{sim(\textbf h_i,\textbf h^-_j)/\tau})}\tag{5}−log∑j=1N(esim(hi,hj+)/τ+esim(hi,hj−)/τ)ssim(hi,hi+)/τ(5)
如表5所示,添加硬负例可以进一步提高性能(84.9→86.2),这是我们最终有监督的SimCSE。我们还尝试添加ANLI数据集或将其与我们的无监督SimCSE方法结合使用,但没有发现有意义的改进。我们还考虑了在有监督的SimCSE中使用双编码器框架,它会损害性能(86.2→84.2)。