[论文速览] SimCSE@ Simple Contrastive Learning of Sentence Embeddings

Pre

title: SimCSE: Simple Contrastive Learning of Sentence Embeddings
accepted: EMNLP 2021
paper: https://arxiv.org/abs/2104.08821
code: https://github.com/princeton-nlp/SimCSE
ref: https://zhuanlan.zhihu.com/p/368353121

关键词: contrastive learning, sentence embeddings
阅读理由: paperwithcode搜对比学习看到的,算是领域相关的优秀论文,而且标题的Simple就很吸引人

Idea

同一个编码器,同一个句子输入两遍,由于dropout的使用,它们语义一样但编码不同,作为正样本,其他句子为负样本做对比学习,能够有效提高句子嵌入的质量。(无监督SimCSE)

Motivation&Solution

  1. 传统方法将自然语言推理(NLI)的sentence embeddings数据集当做三分类任务:蕴含(entailment)、中性(neutral)、矛盾(contradiction) —— 将蕴含句子对作为正样本,矛盾句子对用作困难负样本去对比学习
  2. 预训练的词嵌入会有各向异性(anisotropy)问题 —— spectrum perspective 发现对比学习可以拉平句子嵌入的奇异值分布,改进uniformity

Background

\[\ell_{i} =\log \frac{e^{\operatorname{sim}\left(\mathbf{h}_{i}, \mathbf{h}_{i}^{+}\right) / \tau}}{\sum_{j=1}^{N} e^{\operatorname{sim}\left(\mathbf{h}_{i}, \mathbf{h}_{j}^{+}\right) / \tau}} \]

对比学习最早用在视觉领域,因为通过简单的数据增强很容易能构造正样本对,而文本这边也想通过类似方法来做,如删除某个词、重新排序和替换等,但是NLP的数据增强天然就不容易,因为离散的特性。

也有工作是在监督数据集(question-passage pairs)搜集正样本对\((x_i, x^+_i)\),由于\(x_i, x^+_i\)天然不同,因此这些方法都用双编码器框架。还有的通过把当前句子跟下一个句子作为正样本对

Alignment and uniformity. 对比学习相关的两种指标,

\[\ell_{\mathrm{align}}\ \stackrel{\triangle}{=} \ \underset{\left(x, x^{+}\right) \sim p_{\text {pos }}}{\mathbb{E}} \|f(x)\,-\,f\bigl(x^{+}\bigr)\|^{2}. \]

alignment计算$x_i$和$x^+_i$的平均距离

\[\ell_{\mathrm{uniform}} \stackrel{\triangle}{=} \log \underset{x,y \stackrel{i.i.d.}{\sim} p_{data}}{\mathbb{E}} e^{-2\|f(x)-f(y)\|^{2}}, \]

uniformity计算向量整体分布的均匀程度

理想情况是两个指标都低,表示正样本挨得近,且语义向量均匀分布(信息熵高,保留的信息多)

Method(Model)

图1 a无监督SimCSE预测输入句子本身(两次前向得到的特征互为正样本),应用不同的dropout mask b监督SimCSE利用NLI数据集,将蕴含句子对作为正样本,矛盾句子和其他的样本对作为负样本

Unsupervised SimCSE

将对比学习跟预训练模型(bert)结合来提升句子嵌入的性能。使用预训练的语言模型如BERT、RoBERTa对输入句子编码,然后用对比损失进行微调

在标准的Transformer中,dropout mask被放置在全连接层和注意力求和操作上(default p = 0:1),设 \(\mathbf{h}_{i}^{z}=f_{\theta}\left(x_{i}, z\right)\),其中\(z\)是随机生成的dropout mask,那么用上不同的\(z\) ,同一个样本分两次输入到同一个编码器中,能得到两个不同的表示向量

表1 在STS-B开发集上对比数据增强方法 Crop k%:保留(100-k)%长度; word deletion k%: 删掉k%的单词; Synonym replacement: 用nlpaug来根据同义词进行随机替换; MLM k%: 用BERT_{base}替换k%的单词(?) 第一行的None是本文的方法

表2 比较不同无监督目标。后两栏分别是用同一个编码器和用两个独立的编码器,Next 3 sentences: 从后3句中随机采样1句 delete one word: 随机删掉一个单词

Dropout noise as data augmentation. 表1对比了数据增强技术,SimCSE远好于其他的,表2则表明了共用encoder的必要性

表3 不同dropout概率p的影响。Fixed 0.1: 使用0.1的dropout率,但固定使用的dropout mask

图2 无监督SimCSE的align-uniform图,每隔10个训练step就可视化checkpoint,箭头表明训练的方向,点在越左下角越好

Why does it work? 表3可看出默认的 \(p=0.1\) 性能是最好的,过大过小都会严重影响性能。而图2中从预训练权重加载开始,所有模型都提升了uniformity,有两个模型的alignment剧烈下滑,而无监督的SimCSE保持了稳定的alignment,这多亏了dropout,这也表明了预训练权重的重要性,因为相当于提供了优秀的alignment,而"delete one word"虽然也能改进alignment,却uniformity进步却不明显,而虽然alignment比不上delete one word,但SimCSE分布更加均匀,因此总体性能更高。

Supervised SimCSE

表4 不同监督数据集做正样本对的比较。结果是BERT_{base}在STS-B开发集上的Spearman’s correlations,用了跟最终SimCSE一样的超参,括号中的数字表明样本对数?(the # of pairs)。Sample: 下采样134k个正样本对做公平对比,full: 使用完整数据集。在最后一行是entailment对作为正样本,contradiction对作为负样本(最终模型)

Choices of labeled data. 探索哪个监督数据集更适合构建正样本对,表4说明用上NLI(SNLI+MNLI)的entailment+contradiction效果最好,对sentence embeddings学习尤其有效。因为NLI数据集的质量本身很高,正样本词汇重合度非常小(39%)且负样本足够困难,而QQP和ParaNMT数据集的正样本词汇重合度分别达到了\(60\%\)\(55\%^{[ref1]}\)

Connection to Anisotropy

近几年不少研究都提到了语言模型生成的语义向量分布存在各向异性的问题,即学到的嵌入仅占据向量空间中一个狭小的圆锥,极大限制了表达。各向异性问题天然与uniformity相关,二者都强调嵌入要在空间中均匀分布,直观上,优化对比学习目标能够改进uniformity(会把负样本推远),Wang and Isola (2020) 证明了当负样本数量趋于无穷大时,对比学习的训练目标可以渐近表示为(假设f(x)是归一化的):

\[-\frac{1}{\tau} \underset{\left(x, x^{+}\right) \sim p_{\mathrm{pos}}}{\mathbb{E}}\left[f(x)^{\top} f\left(x^{+}\right)\right]+\underset{x \sim p_{\text {data }}}{\mathbb{E}}\left[\log \underset{x^{-} \sim p_{\text {data }}}{\mathbb{E}}\left[e^{f(x)^{\top} f\left(x^{-}\right) / \tau}\right]\right] \]

其中第一项表示拉近正样本,第二项表示推开负样本,然后又什么Jensen不等式...总之证明了对比学习可以隐式地压平嵌入空间的奇异谱,解决表示退化问题,提升向量分布的uniformity。比起后处理的方法(只鼓励各向同性表达),对比学习还通过第一项对齐正样本,这也是SimCSE成功的关键。

Experiment

Settings

在7种semantic textual similarity (STS)任务上进行实验。加载预训练的BERT或RoBERTa开始,以[CLS]表达作为句子嵌入。指标应该都是Spearman’s correlation

Dataset

无监督SimCSE:\(10^6\)条随机选择的英文百科句子
监督SimCSE:自然语言推理(NLI)数据集(MNLI and SNLI datasets (314k))

Results

方法简单,但是比训练目标(预测下一句)和离散数据增强(词删除和替换)效果都好很多。认为dropout是一种最小化的、对隐向量的数据增强,去掉它会导致表征崩塌(representation collapse)。

表5 STS任务上的句子嵌入表现。(Spearman’s correlation, “all” setting).实心三叶草和空心爱心标志表示其他论文里的数据,其余均为本文复现或重新测量的。

如表5所示,SimCSE在无监督和有监督的条件下均大幅超越了之前的SOTA模型,无监督甚至能碰一碰有监督的SOTA。也提到SimCSE在迁移任务上也不错,而且加个MLM目标还能进一步涨点。

Ablation Studies

表6 不同池化方法的消融研究 [CLS] w/MLP (train): 训练时使用MLP,但测试时去掉

表7 STS-B开发集结果上不同困难样本策略的结果 "N/A": 没有困难样本

incorporate weighting of different negatives **Pooling methods.** 之前的研究表明,使用预训练模型的平均嵌入(尤其是第一层和最后一层的)会比[CLS]更有效果。原始的BERT实现用一个额外的MLP层去处理[CLS],表6对其进行了三种研究,发现对于SimCSE来说,非监督式的只在训练用MLP最好,监督式的不太受池化方式的影响。默认非监督式只在训练用上MLP,监督式一直保留着MLP。

Hard negatives. 直觉上,区分困难样本可能很关键,给目标函数中不同负样本加上权重:

\[-\log \frac{e^{\operatorname{sim}\left(\mathbf{h}_{i}, \mathbf{h}_{i}^{+}\right) / \tau}} {\sum_{j=1}^{N}\left(e^{\operatorname{sim}\left(\mathbf{h}_{i}, \mathbf{h}_{j}^{+}\right) / \tau} + \alpha^{\mathbb{1}^j_i} e^{\operatorname{sim}\left(\mathbf{h}_{i}, \mathbf{h}_{j}^{-}\right) / \tau}\right)} \]

其中 \(\mathbb{1}^j_i \in \{0,1\}\) 是一个指示器,只有i=j的时候才为1(此时\(\alpha\)生效,作用于困难负样本),如表7,\(\alpha=1\)效果最好(那不就是说这个trick完全没有必要?),把neutral也当成困难负样本没有收益。

Analysis

更进一步分析SimCSE起效的内在原因

图3 模型align-uniform图。点的颜色和括号里的数字表示STS性能。Next3Sent: 表2那个后三句话

表8 检索Flickr30k (150k 句子)3个样本的对比

Uniformity and alignment. 图3展示了模型alignment和uniformity关系,如图3所示,性能更优的模型通常有着更好的alignment和uniformity,预训练的嵌入(BERT)虽然有很好的alignment,但uniformity太差,而基于后处理的BERT-flow和BERT-whitening又恰恰走向了另一个极端,本文的SimCSE则是对这两个指标的一个很好的平衡,加入监督训练后,SimCSE效果进一步提升。

Qualitative comparison.\(SBERT_{base}\)\(SIMCSE-BERT_{base}\)进行了小规模的检索实验,用Flickr30k数据集里的150k个图片说明,然后随机挑一个句子作为query去检索相似的句子(基于余弦相似度)。几个样本如表8所示,SimCSE检索的句子质量更高。

Conclusion

提出了一种简单的对比学习框架,能极大提升句子嵌入在STS(语义文本相似度)任务上的性能,有无监督式的也有用上了NLI数据集的监督模型,同时还在理论层面证实了SimCSE的有效性。

Critique

  1. dropout mask没有解释
  2. 方法简单有效,而且很有意思,图示直观
posted @ 2023-10-23 10:46  NoNoe  阅读(63)  评论(0编辑  收藏  举报