对比学习 SimCSE
SimCSE 的对比学习机制,以及 SBERT、ConSERT 等句向量模型的原理与区别。
句向量学习希望意思接近的句子,在向量空间中也比较接近。 SimCSE 通过对比学习调整编码器,让正样本对靠近,让负样本对相对分开。
1. BERT 与句向量
BERT 输出的是各个 token 的上下文表示,池化(pooling) 把它们汇总成固定维度的句向量。常见方式有三种:
- CLS:取特殊 token
[CLS]的表示。 - MEAN:对有效 token 的表示求平均,排除 padding。
- MAX:在每个特征维度上取有效 token 的最大值。
有了句向量,就能通过余弦相似度比较两个向量的方向。但原始 BERT 的训练目标没有直接要求“同义句的余弦相似度应当更高”,因此仍需要句子级训练或向量后处理。
“他正在修理自行车”和“他在修车”意思接近;“他不再修理自行车”虽然共享许多词,含义却不同。句向量需要保留这种区别。
2. SimCSE:正负样本与训练目标
对比学习采用判别式训练,通过区分正负样本的关系学习表示。在句向量任务中,这种约束作用于整个句子的表示。
SimCSE 同时提供这两种方式:
- 文本关系由人工标注提供时,属于监督学习
- 文本关系由文本自身构造时,属于自监督学习
2.1 无监督 SimCSE
同一句话经过两次带有不同 dropout 的编码,就形成一对正样本。 dropout 会随机将部分中间计算值置零;mask 记录本次置零的位置。
- 同一句话输入共享参数的编码器两次,两次独立采样 dropout mask。
- 得到的两个句向量组成正样本对,同一 batch 中其他句子的表示作为负例。
- 根据对比损失更新编码器,使同句的两个表示更接近,同时与负例区分。
“预测自己”指在候选中找出同一句话的另一份表示,并不需要重建原句。原论文的实验中,关闭 dropout 或让两次编码使用相同 mask,都会明显降低效果。
批内其他句子未必真的语义不同。
例如,“如何修改密码”和“怎样更改密码”可能被误当成负例,这就是假负例。扩大 batch 会增加对比对象,也可能引入更多假负例。
2.2 有监督 SimCSE
有监督 SimCSE 利用 自然语言推断(NLI) 数据:给定一个前提,判断另一个句子与它是蕴含、矛盾还是中立关系。
前提:一名男子正在弹吉他。
- 蕴含:有人正在演奏乐器。前提能够支持这句话。
- 矛盾:没有人在演奏乐器。它与前提冲突。
- 中立:这名男子是一位音乐老师。仅凭前提无法判断。
训练时,蕴含句作为正例,对应的矛盾句作为难负例,并加入批内其他样本作为负例。
“有人在演奏乐器”和“没有人在演奏乐器”只差一个“没”字,意思却相反。这类用词相似、含义却冲突的句子容易被模型误判,因此称为难负例。训练时将它们的向量拉开,让模型学会识别这种含义差别。
NLI 标签在这里负责组织样本,SimCSE 的目标仍是对比学习,并非三分类。其基本构造不使用中立句作为对应难负例;蕴含句提供语义关联,但不要求与前提完全等价。
2.3 损失函数与温度
设一个 batch 有 对样本, 是当前比较的句向量,称为锚点; 是它的正例。以另一侧的 个表示作为候选,基本对比损失为:
- 是余弦相似度, 是温度参数。
- 分子是正例的指数得分;分母包含正例和 个负例。
- 整个分式是正例被选中的概率 ,损失为 ,batch 损失取平均。
最小化损失会提高正例概率,负号不能省略。 这种 InfoNCE 形式的目标,可以理解为在候选中识别正例的交叉熵。有监督版本还会把矛盾句的得分加入分母。
InfoNCE 借鉴了噪声对比估计(NCE) 的思路:NCE 通过区分数据与噪声来估计未归一化的概率模型;InfoNCE 则把目标写成从多个候选中识别正例。
InfoNCE 与密度估计有理论联系,但在 SimCSE 中,直接优化的是候选正例的概率,无需显式拟合完整的句子概率分布。
温度控制相似度差异对概率的影响:温度小,概率分布更尖锐;温度大,概率分布更平缓。
假设只有一个正例和一个负例,相似度分别为 、。 时,正例概率约为 ; 时,约为 。向量没变,变的是损失对这 分差的响应。
较低温度会让训练更关注相似度高的负例,但其中可能混有假负例,因此温度并非越小越好。
2.4 推理与辅助任务
计算句向量时通常关闭 dropout,每个句子只需编码一次。两次编码是训练时构造正样本的方式。
掩码语言模型(MLM)是可选的辅助任务:继续预测被遮蔽的 token,帮助保留 token 级知识。SimCSE 论文中,它略微改善了平均迁移任务表现,却降低了语义文本相似度(STS)表现,不能笼统地说加入 MLM 就会更好。
3. 各向异性与向量后处理
各向异性指向量分布偏向某些方向。在 BERT 句向量中,常见表现是大量向量集中在相近方向,使语义无关的句子也可能得到偏高的余弦相似度。这种语义区分能力下降是表示退化的一种表现。
各向同性指整体分布不偏向某个方向。例如,在二维平面上,以原点为圆心、沿圆周均匀分布的点没有特别集中的方向。这里描述的是样本分布,不要求样本向量彼此正交。
**基向量是否正交、是否为单位长度,描述的是坐标基。**即使采用互相垂直的单位坐标轴,样本仍可能全部挤在右上方。因此,不能用“基向量非正交”来定义各向异性。
BERT-flow 论文分析了词频与空间分布的关系:高频词的向量较靠近原点、分布较密集,低频词的向量较远、分布较稀疏。
ConSERT 论文进一步指出,**对 token 表示求平均时,这类词频偏差可能影响句向量,使相似度偏离真实语义。**句向量学习需要减少这种偏差,并保留句子的语义关系。
对比学习兼顾两个目标:
- 对齐:语义相关的正样本对保持接近。
- 均匀性:归一化后的向量在单位球面上充分展开,避免挤在少数方向。
SimCSE 通过训练改变编码器。BERT-flow 和 BERT-whitening 则固定编码器,直接调整已有句向量的分布。
3.1 BERT-flow
BERT-flow 学习一个可逆的非线性变换,把句向量映射到以标准高斯分布为目标的空间。这种变换称为归一化流(normalizing flow)。
训练更新的是 flow 参数,BERT 参数保持不变。它需要额外训练和推理计算,目标是改善整体分布,没有直接利用正负句对学习语义关系。
3.2 BERT-whitening
BERT-whitening 对句向量做中心化、旋转和缩放,让拟合数据在保留方向上的均值为零、协方差为单位矩阵。它只需估计均值与协方差,不需要梯度训练;保留部分主方向还能同时降维。
假设二维数据已经中心化,两个方向不相关,方差分别为 和 。第一个坐标除以 ,两个方向的方差就都变成 。
在原论文所测试的语义相似度任务上,白化取得了与 BERT-flow 有竞争力的结果,且无需额外训练 flow 网络。
白化消除二阶线性相关,不保证消除非线性依赖,也不意味着数据服从高斯分布或落在球面上。单位球面来自额外的 归一化,即把每个非零向量除以自身长度。
分布更均衡,并不自动保证同义句更接近。 SimCSE 论文的实验观察到,BERT-flow 和 BERT-whitening 改善了均匀性,但正样本对的对齐程度有所下降。
4. SBERT:句子级监督
Sentence-BERT(SBERT)让句子分别经过共享参数的 BERT 和池化层,得到固定维度的句向量,并通过句子级监督微调模型。 两个句子共享编码器的结构称为孪生网络(Siamese),原论文默认采用平均池化。
训练目标随数据变化:句对关系标签对应分类,相似度分数对应回归。三元组网络(Triplet)让锚点、正例、负例共享编码器,要求锚点到正例的距离比到负例至少小一个间隔。
设两个句子的向量为 ,原论文的自然语言推断分类训练与句向量使用,需要区分:
- 训练时:把 、 和逐元素绝对差 拼接,交给分类器。
- 比较相似度时:直接比较独立生成的句向量 ,无需保留拼接和分类头。
句向量的比较指标包括余弦相似度、曼哈顿距离和欧氏距离。相似度越大或距离越小,表示越接近;具体指标应与训练目标匹配。
SBERT 在原论文的语义相似度评测中优于当时比较的多种句向量方法。
SBERT 与 SimCSE 都能采用共享编码器,区别主要在训练目标和样本构造。SBERT 也没有“无法比较短句与长段落”的结构限制;实际效果取决于训练数据、输入长度限制和截断方式。
5. ConSERT:不同的数据增强
ConSERT 为同一句话生成两个增强视图,通过共享 BERT 编码器,对最后一层的 token 表示做平均池化,得到句向量并进行对比训练。 原论文比较了四类增强:
| 增强方式 | 具体变化 |
|---|---|
| 对抗扰动 | 根据监督损失的梯度,在 token embedding 上施加小扰动,训练模型对这类扰动保持稳定 |
| Token shuffling | 打乱位置编号,改变 token 与位置的对应关系 |
| Cutoff | Token cutoff 将选中 token 的整行置零;feature cutoff 将选中特征维度的整列置零 |
| Dropout | 随机将 token embedding 中的单个元素置零 |
矩阵的行对应 token,列对应特征维度,因此 cutoff 与逐元素 dropout 删除的信息结构不同。这四项是候选策略,不要求全部叠加;其中对抗扰动依赖监督信号。
ConSERT 的 dropout 增强位于 token embedding 层,原实验关闭了 BERT 内部的默认 dropout。SimCSE 则直接使用编码器内部的标准 dropout,两者的扰动位置不同。
ConSERT 把同一句话的两个增强版本当作正样本,训练它们的表示彼此接近。因此,增强应尽量保留决定句意的信息,否则模型可能被训练成忽略重要的语义差别。
例如,token cutoff 若遮掉“不”的表示,可能削弱“我不喜欢这部电影”中的否定信息;位置打乱若使“甲帮助乙”的主客体关系难以辨认,可能丢失“谁帮助谁”的区别。仍把这些版本作为正样本拉近,就可能让模型忽略否定或角色关系。
评论
使用 GitHub 登录后参与讨论,评论将公开保存在 GitHub。
站长管理删除会同步到 GitHub,无法撤销。
阅读到这里时加载评论。