SimCSE: Simple Contrastive Learning of Sentence Embeddings(EMNLP 2021)
Motivation
无监督的SimCSE将句子过两次预训练模型得到两个不同的embedding作为正例对,将同一batch中的其他句子作为负例,模型在所有负例中预测出唯一的正例。有监督的SimCSE使用NLI数据,将蕴含关系对作为正例,矛盾关系及batch内其他的句子作为负例。
Contrastive Learning
句对集合为
D
=
{
(
x
i
,
x
i
+
)
}
i
=
1
m
\mathcal{D} = \left\{(x_i, x_i^+)\right\}_{i=1}^m
D={(xi,xi+)}i=1m,其中
x
i
x_i
xi和
x
i
+
x_i^+
xi+是语义上相关的。优化目标如下:
ℓ
i
=
−
log
e
s
i
m
(
h
i
,
h
i
+
)
/
τ
∑
j
=
1
N
e
s
i
m
(
h
i
,
h
j
+
)
/
τ
\ell_i = -\log \frac{e^{sim(h_i, h_i^+)/\tau}}{\sum_{j=1}^N e^{sim(h_i, h_j^+)/\tau}}
ℓi=−log∑j=1Nesim(hi,hj+)/τesim(hi,hi+)/τ
Positive instances
如何构建正例对是一个关键问题。本文发现对中间层表示简单使用标准的dropout已经能超过其他的离散表换(删除、替换词语)等操作。
Alignment and uniformity
Alignment用来计算句对间embedding的预期距离,uniformity用来衡量embedding一致分布的好坏。这两个指标与对比学习的目标保持一致,正例对的距离应相对较近,并且随机实例的embedding应该分散在超球体上。
Unsupervised SimCSE
正例对中,
x
i
+
=
x
i
x_i^+ = x_i
xi+=xi,关键因素是独立对
x
i
x_i
xi和
x
i
+
x_i^+
xi+使用dropout。本文将dropout看作一种最小化形式的数据增强,并将其与其他数据增强方法进行了对比,结果如下图:
为了进一步探究dropout噪声的作用,作者还尝试了不同的dropout率。如下图:
Supervised SimCSE
将NLI数据集中的蕴含句子作为正例,矛盾句子作为难负例。便将目标函数更新为如下形式:
ℓ
i
=
−
log
e
s
i
m
(
h
i
,
h
i
+
)
/
τ
∑
j
=
1
N
(
e
s
i
m
(
h
i
,
h
j
+
)
/
τ
+
e
s
i
m
(
h
i
,
h
j
−
)
/
τ
)
\ell_i = -\log \frac{e^{sim(h_i, h_i^+)/\tau}}{\sum_{j=1}^N (e^{sim(h_i, h_j^+)/\tau}+e^{sim(h_i, h_j^-)/\tau})}
ℓi=−log∑j=1N(esim(hi,hj+)/τ+esim(hi,hj−)/τ)esim(hi,hi+)/τ
Connection to Anisotropy
很多工作证明了表示中的各向异性问题,例如,学习到的embedding在向量空间中仅仅占据一个窄圆锥的大小,这会大大损害embedding的表达能力。各向异性问题与uniformity相关,都强调embeddings应该在向量空间中均匀分布。对比学习的目标是要让负例对间的距离相对较远,因此能提升uniformity(消除各向异性)。