在很多 NLP 任务中都会用到句子向量,例如文本检索、文本粗排、语义匹配等任务。现在有不少基于 Bert 的方式获取句子向量,例如 Bert-flow 和 Bert-whitening 等,这些方法会对预训练 Bert 的输出进行变换从而得到更好的句子向量。本文介绍 SimCSE,SimCSE 通过对比学习的方法训练模型,取得 SOTA 的效果,并且可以用于有监督和无监督学习。在无监督的过程中,对于一个句子,SimCSE 通过 Dropout 构造正例,而语料库里面的其他句子作为负例。

1. 概述

句子向量 (Embedding) 和句子语义匹配是 NLP 的重要任务,不少研究都将 Bert 用于这些任务中获取句子的向量,其中分为有监督和无监督的方式。

无监督获取句子向量的常见方式有以下几种,得到句子向量后可以通过余弦相似度计算两个句子的相似性:

  • 使用预训练好的 Bert 直接获得句子向量,可以是 CLS 位的向量,也可以是不同 token 向量的平均值。

  • Bert-flow,Bert-flow 出自论文《On the Sentence Embeddings from Pre-trained Language Models》,主要是利用流模型校正 Bert 的向量。

  • Bert-whitening,用预训练 Bert 获得所有句子的向量,得到句子向量矩阵,然后通过一个线性变换把句子向量矩阵变为一个均值 0,协方差矩阵为单位阵的矩阵。

有监督的方式主要是 Sentence-Bert (SBERT),SBERT 出自《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》,通过 Bert 的孪生网络获得两个句子的向量,进行有监督学习,SBERT 的结构如下图所示。

SBERT 结构

本文介绍 SimCSE,出自论文《SimCSE: Simple Contrastive Learning of Sentence Embeddings》。SimCSE 通过对比学习的方法进行训练,并且可以用于无监督训练。在无监督的时候,SimCSE 会把通过不同的 Dropout 得到一个句子的两个向量,作为正样本对,而语料库里的其他句子向量可作为负样本。

2. 对比学

用 D 表示我们的数据集,数据集里面包含多个正样本对,如下面所示,x 表示句子,x+ 表示与 x 语义相关的样本:

对比学习数据集

通过模型可以得到句子 x 的向量 h,并计算两个向量的余弦相似度,如下:

计算句子向量相似度

对比学习训练的目标函数如下:

对比学习目标函数

2.1 构造正样本对

对比学习的一个重要问题是如何构造正样本对,即通过 x 构造出 x+,有点类似数据增强。在图像领域这相对容易,通过对图像进行翻转、裁剪、加噪音、缩放等方式即可构造,而文本相对会难一些。

常见的文本数据增强方式有删除词组、替换近义词、互译等方式。但是这些方式都是离散的,有时效果并不理想,因此 SimCSE 通过 Dropout 的方式构造正样本对。

2.2 对比学习评价指标

alignment 和 uniformity 是对比学习中比较重要的两种属性,可用于衡量对比学习的效果。

alignment 计算所有正样本对之间的距离,如果 alignment 越小,则正样本的向量越接近,对比学习效果越好,计算公式如下。

alignment

uniformity 表示所有句子向量分布的均匀程度,越小表示向量分布越均匀,对比学习效果越好,计算公式如下。

uniformity

3. SimCSE

下图是 SimCSE 的结构图,左边是无监督的 SimCSE,右边是有监督的 SimCSE。

SimCSE 结构

3.1 无监督 SimCSE

无监督 SimCSE 最主要是对于同一个句子采用两个不同 Dropout Mask,得到两个不同的句向量作为正样本,如下。

无监督时通过不同的 Dropout 构造正样

训练的目标函数如下:

无监督训练目标

作者对比了 Dropout 和其他数据增强方法的效果 (评价指标是 Spearman 相关系数),结果如下表所示,其中 None 表示 SimCSE 用到的 Dropout 方法,可以看到通过 Dropout 生成正样本的效果比其他数据增强方式好。

Dropout 和其他数据增强方法对比

作者也通过 alignment 和 uniformity 这两个指标验证无监督 SimCSE 的效果,如下图所示。其中 "Fixed 0.1" 表示对于 x 和 x+ 使用相同的 Dropout (p=0.1),Unsup. SimCSE 表示无监督 SimCSE,箭头表示训练的变化过程。

alignment 和 uniformity

可以看到 "Fixed 0.1" 和 "No dropout" 这两种方法随着训练的进行可以减小 uniformity 的值,但是 alignment 却会变大。而 "Unsup. SimCSE" 和 "Delete one word" 可以在 alignment 保持稳定的情况下,减小 uniformity 的值。

另外一方面,SimCSE 与 "Delete one word" 相比,SimCSE 的 alignment 相对大了一些,但是 uniformity 却小了很多,因此 SimCSE 效果比 "Delete one word" 更好。

3.2 有监督 SimCSE

有监督 SimCSE

SimCSE 也可用于有监督训练,例如可以使用自然语言推理数据集 (SNLI 和 MNLI) 进行有监督学习,自然语言推理数据集包含很多句子对,句子对有三种关系: 蕴含 (entailment), 中性 (neutral), 矛盾 (contradiction)。可以把蕴含和中性的句子对作为正样本,矛盾的句子对作为负样本进行训练。

下面是有监督 SimCSE 的实验效果,其中 Unsup. SimCSE (无监督 SimCSE) 是在 SNLI+MNLI+ANLI 数据上训练的,其效果比有监督的差。

有监督 SimCSE 实验效果

下面是各种常见句子向量算法的对比,可以看到 SimCSE 的效果最好。

各种句向量对比

4. 参考文献

  • SimCSE: Simple Contrastive Learning of Sentence Embeddings

  • Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

举报/反馈

NLP学习笔记

322获赞 802粉丝
专注分享自然语言处理知识
关注
0
0
收藏
分享