本文介绍了一个简单的对比学习框架SimCSE,它极大地促进了最先进的句子嵌入。首先描述了一种无监督的方法,它接受一个输入句子,然后在对比目标中预测自己,并 只有标准的dropout用作噪声 。
这个简单的方法令人惊讶。发现,dropout充当了最小的数据扩充,移除它会导致数据表示不好。然后,我们提出了一种有监督的方法,它将自然语言推理数据集中的注释对纳入我们的对比学习框架中,使用“蕴涵”对作为正例,使用“矛盾”对作为硬负例。
在标准语义文本相似性(STS)任务中评估SimCSE,以及使用BERT-base的无监督和监督模型分别实现了和的斯皮尔曼相关性,与之前的最佳结果相比,分别提高了和。我们也展示了两者从理论和经验上来看, 对比学习目标将预先训练好的嵌入的各向异性空间规整得更加均匀,并且在有监督信号的情况下更好地对齐正对 。
学习通用句子嵌入是自然语言处理中的一个基本问题,在文献中得到了广泛的研究。在这项工作中,我们提出了最先进的句子嵌入方法,并证明了对比目标在以下情况下是非常有效的:再加上预先训练过的语言模型,如BERT或RoBERTa 。我们介绍了 SimCSE,一种简单的对比语言句子嵌入框架,可以从未标记或标记的数据中生成更好的句子嵌入 。
○ 1、无监督SimCSE:
○ 2、有监督SimCSE:
我们对七项标准语义文本相似性(STS)任务和七项转移任务中对SimCSE进行了综合评估。在STS任务中,我们的无监督模型和监督模型分别达到和的平均斯皮尔曼相关,与之前的最佳结果相比,分别提高了和。在转移任务上也取得了有竞争力的表现。
最后,我们在文献和研究中发现了一个不连贯的评估问题整合不同设置的结果,以便将来评估句子嵌入。
其中xi 和x+i是语义相关的。我们遵循对比框架,采用一个具有批量负例的叉熵目标:让 hi 和 hi+ 表示 xi 和 xi + 的表示,即训练目标。对于(xi,xi+)和小批量的N对是:
where xi and x+i are semantically related. We follow the contrastive framework in Chen et al. (2020) and take a cross-entropy objective with in-batch negatives (Chen et al., 2017;Henderson et al., 2017): let hi and h + i denote the representations of xi and x + i, the training objective for (xi, x+i) with a mini-batch of N pairs is:
其中 τ是一个温度超参数sim(h1,h2)是余弦相似性
在这项工作中,我们使用预训练的语言模型,如BERT或RoBERTa:h=fθ(x),然后微调所有参数使用对比学习目标(等式1)。
对比学习中的一个关键问题是如何构建 (xi, xi+)对。在视觉表现中,一个有效的解决方案是对同一幅图像进行两次随机变换(例如,裁剪、翻转、变形和旋转)如xi 和 xi+。最近,在语言表达中也采用了类似的方法,方法是应用增广技术,如单词删除、重新排序和替换。然而,由于NLP的离散性,NLP中的数据扩充本质上是困难的。我们将在§3中看到。简单地在中间表示上使用标准Dropout比这些离散操作符表现得更好。
在NLP中,类似的对比学习目标在不同的背景下进行了探索。 在这些情况下, (xi, xi+)收集自有监督的数据集,如问题-段落对。由于xi和xi+的明显性质,这些方法总是使用双编码器框架, 例如,对于xi和xi+使用两个独立的编码器fθ1和fθ2。
对于句子嵌入,Logeswaran和Lee(2018)也使用了对比学习和双编码器方法,将当前句子和下一个句子组成为(xi,xi+)。
最近,Wang和Isola(2020)确定了与对比学习的对齐性alignment和一致性uniformity——并建议使用它们来衡量表达的质量。给出了一个正例对分布ppos,alignment计算成对实例的嵌入之间的预期距离(假设表示已经规范化):
另一方面,一致性uniformity衡量的是嵌入物均匀分布效果:
其中pdata表示数据分布。 这两个指标与对比学习的目标非常一致 :正例之间应该保持紧密,而随机实例的嵌入应该分散在超球体上。在接下来的部分中,我们还将使用这两个指标来证明我们的方法的内部工作原理。
使用 xi+=xi。关键的成分是让这个通过使用独立取样的dropout masks 对 xi 和 xi+进行相同的正例对操作。
其中z是dropout的随机掩码。我们只是将相同的输入进行编码器两次,并获得两个具有不同dropout masksz、z0的嵌入, SimCSE的训练目标是:
我们将其视为数据扩充的一种最小形式:正例对的句子完全相同它们的嵌入只在Dropout mask上有所不同。我们将这种方法与STS-B开发集上的其他训练目标进行比较。
表1将我们的数据增强技术方法与普通方法进行了比较:如crop、word删除和替换,可以看作是 h = fθ(g(x),z),而g是x上的(随机)离散算子。注意到,即使删除一个单词会影响性能,但没有任何影响到增强效果优于dropout噪声。
我们还将self-prediction训练目标与使用的next-sentence目标进行了比较,选择其中一个或者两个独立的编码器。如表2所示,发现SimCSE比next-sentence目标的表现要好得多,并且使用一个编码器而不是两个编码器在我们的方法中有显著差异。
为了进一步了解dropout noise在无监督SimCSE中的作用,我们在表3中尝试了不同的 dropout rates,并观察到所有变体都低于Transformers的默认dropout概率p=。
我们发现两个极端情况特别有趣:
在测试过程中,我们每10步对这些模型进行一次检查训练并可视化对齐alignment和一致性uniformity度量在Figure 2中,还有一个简单的数据扩充模型“删除一个单词”。如图所示,从预先训练好的检查点开始,所有模型都大大提高了一致性uniformity。
然而,这两种特殊变体的排列也会退化由于使用了dropout噪声,我们的无监督SimCSE保持了稳定的对齐alignment。它还表明,从预训练的检查点开始是至关重要的,因为它提供了良好的初始对齐alignment。最后,“删除一个单词”改善了对齐,但在一致性度量上获得了较小的增益,最终表现不如无监督SimCSE。
我们已经证明,添加dropout 噪声能够保持正例对的良好对齐(x,x+)~Ppos。
在本节中,将研究是否可以利用有监督的数据集来提供更好的训练信号,以改进方法的一致性。
之前的研究表明,有监督的自然语言推理(NLI)数据集通过预测两个句子之间的关系是包含关系、中性关系还是矛盾关系,有效地学习句子嵌入。在我们的对比学习框架中,直接从监督数据集中提取(xi,xi+)对,并使用它们优化等式1。
我们首先探索哪些监督数据集特别适合于构造正例对(xi,xi+)。我们用大量数据集和句子对样例进行了实验,包括:
最后,我们进一步利用NLI数据集,将其矛盾对作为负例对。
在NLI数据集中,给定一个前提,注释者需要手动编写一个绝对正确(蕴涵)、一个可能正确(中立)和一个绝对错误(矛盾)的句子。因此,对于每个前提及其蕴涵假设,都有一个伴随的矛盾假设(示例见图1)。
形式上我们扩展(xi,xi+)为(xi,xi+,xi-),其中xi是前提,xi+ 和 xi−是蕴涵假设和矛盾假设。然后,通过(N是最小批量)定义训练目标Li。
如表4所示,添加负例对可以进一步提高性能(→ )这是最终有监督SimCSE。也试过了添加ANLI数据集或将其与无监督SimCSE方法相结合,但没有发现有意义的改进。我们也在有监督的SimCSE中考虑了双编码器框架,它损害了性能(→ )。
最近的研究发现了一个 各向异性 问题语言表达,即学习到的嵌入占据了向量空间中的窄锥限制了他们的表达能力。
证明语言模型经过了捆绑训练输入/输出嵌入导致单词各向异性嵌入,在预先训练的上下文表示中进一步观察到了这一点。证明奇异值语言模型中单词嵌入矩阵的构造急剧衰减:除了少数占主导地位的奇异值,所有其他值都接近于零。
(1)缓解问题的一个简单方法是后处理,要么消除主要主成分,要么将嵌入映射到各向同性分布 。
(2)另一个常见的解决方案是在训练期间增加正则化。在这项工作中,我们从理论和经验上证明,对比目标也可以缓解各向异性问题。
各向异性问题自然与均匀性有关,两者都强调了 嵌入应均匀分布在空间中 。直观地说,随着目标的推进,优化对比学习目标可以提高一致性(或缓解各向异性问题)把负例分开。在这里,我们采用单一光谱的观点,这是一种常见的做法。在这里,我们从单数光谱的角度来分析单词嵌入,以及 表明对比目标可以“压平”目标句子嵌入的奇异值分布并使表示更加各向同性 。
继Wang和Isola,对比学习目标(等式1)的渐近性可以用以下等式表示:负例的数量接近无穷大(假设 f(x) 被归一化):
与后处理方法相比 。其目的仅在于鼓励各向同性表征,对比学习还优化了通过方程式6中的第一个term,这是SimCSE成功的关键。第7节给出了定量分析。
我们在7个语义文本上进行了实验相似性(STS)任务。请注意,所有的STS实验都是完全无监督的,没有使用STS训练集。
即使对于有监督的SimCSE,也只是说,在之前的工作之后,需要额外的标记数据集进行训练。还评估了7项迁移学习任务,并在附录E中提供了详细结果。我们与Reimers和Gurevych(2019)持有类似的观点, 即句子嵌入的主要目标是对语义相似的句子进行聚类 ,因此将STS作为主要结果。
我们评估了7项STS任务:2012-2016年STS,STS基准(Cer等人,2017年)和疾病相关性(Marelli等人,2014年)。当与之前的工作进行比较时,我们在评估设置中确定了已发表论文中的无效比较模式,包括(a)是否使用额外的回归系数,(b)斯皮尔曼与皮尔逊的相关性,以及(c)如何汇总结果(表)。
我们比较了无监督和有监督的SimCSE与以前SOTA的STS任务句子嵌入方法。无监督基线包括平均GloVe嵌入、平均BERT或RoBERTa嵌入,以及后处理方法,如BERT - flow和BERT-whitening。
我们还比较了最近使用 对比目标的几种方法,包括: (1)IS-BERT),它最大限度地实现了global和local features 之间的一致性; (2) DeCLUTR,将同一文档中的不同spans作为正例对; (3) CT,它将来自两个不同的编码器的同一句子进行嵌入对齐。
表5显示了7项STS任务的评估结果。无论是否有额外的NLI监督,SimCSE都能显著改善所有数据集的结果,大大优于之前最先进的模型。具体而言,我们的无监督SimCSE-BERT-base将之前的SOTA平均Spearman相关性从提高到,甚至与有监督baselines相当。
在使用NLI数据集时,SimCSE-BERTbase进一步将SOTA结果提高到。RoBERTa编码器的收获更为明显,我们的有监督SimCSE通过RoBERT-alarge实现了
在附录E中,我们展示了SimCSE与现有工作相比达到PAR或更好的传输任务性能,还有一个辅助MLM目标可以进一步提高性能。
我们调查了不同的pooling方法和硬负例的影响。本节中所有报告的结果均基于STS-B开发集。我们在附录D中提供了更多的消融研究(标准化、温度和MLM目标)。
Reimers和Gurevych等人表明,采用预训练模型的平均嵌入(尤其是从第一层和最后一层)比 [CLS]具有更好的性能 。
表6显示了无监督和有监督SimCSE中不同池化方法之间的比较。对于[CLS]表示,原始的BERT实现需要在其上附加一个MLP层。
(1)保持MLP层; (2) 无MLP层; (3) 在训练期间保留MLP,但在测试时移除。
硬负例。直觉上,这可能是有益的区分硬负例(矛盾示例)和其他批量负例。因此,我们扩展等式5中定义的训练目标,以纳入不同负例的权重:
我们用不同的α值对SimCSE进行训练,并对训练后的模型进行评估STS-B的开发集,也考虑中性假设作为硬负例。如表7所示,α=1表现最好,且中性假设不会带来进一步的收益。
在本节中,我们将进一步分析,以了解SimCSE的内部工作原理。
图3显示了不同句子嵌入模型的一致性uniformity和对齐性alignment,以及它们的平均STS结果。 总的来说,具有更好的对齐和一致性的模型可以获得更好的性能 。
○ 在附录F中,进一步证明了SimCSE可以有效地均匀预训练嵌入的奇异值分布。 ○ 在附录G中,我们展示了SimCSE在不同的句子对之间提供了更可区分的余弦相似性。
我们使用SBERTbase和SimCSE-BERTbase进行了小规模检索实验。使用来自Flickr30k数据集,并将任意随机句子作为检索类似句子的查询(基于余弦)相似性)。如表8所示的几个例子,SimCSE检索到的句子与SBERT检索到的质量进行比较具有较高的识别率。
句子嵌入早期建立在分布假设的基础上,通过预测给定句子的周围句子。表明,简单地用n-gram嵌入来增强word2vec的概念会产生很好的结果。最近的几种方法从数据扩充或同一句话的不同版本或文件采用了对比目标。与这些工作相比,
我们感谢Tao Lei, Jason Lee, Zhengyan Zhang, Jinhyuk Lee, Alexander Wettig, Zexuan Zhong,普林斯顿NLP小组的成员有益的讨论和宝贵的反馈。这项研究得到了哈佛大学研究生奖学金的支持普林斯顿大学和苹果公司的礼物奖。