SimCSE:对比学习,只需要Dropout (2)

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

个人觉得没有严格的数学证明,单从感性的角度去思考一个式子或者一个符号的意义是不够的,因此在查阅了一些资料后我将 τ \tau 这个超参数的作用整理成了另一篇文章:Contrastive Loss中参数 τ \tau 的理解

总结一下SimCSE的方法,个人感觉实在是太巧妙了,因为给两个句子让人类来判断是否相似,这其实非常主观,例如:“我喜欢北京”跟“我不喜欢北京”,请问这两句话到底相不相似?模型就像是一个刚出生的孩子,你教它这两个句子相似,那它就认为相似,你教它不相似,于是它以后见到类似的句子就认为不相似。此时,模型的性能或者准确度与训练过程、模型结构等都没有太大关系,真正影响模型预测结果的是人,或者说是人标注的数据

但是如果你问任何一个人“我喜欢北京”跟“我喜欢北京”这两句话相不相似,我想正常人没有说不相似的。SimCSE通过Dropout生成正样本的方法可以看作是数据扩增的最小形式,因为原句子和生成的句子语义是完全一致的,只是生成的Embedding不同而已。这样做避免了人为标注数据,或者说此时的样本非常客观

Alignment and Uniformity

对比学习的目标是从数据中学习到一个优质的语义表示空间,那么如何评价这个表示空间的质量呢?Wang and Isola(2020)提出了衡量对比学习质量的两个指标:alignment和uniformity,其中alignment计算 x i x_i x i + x_i^+ 的平均距离:

align E ( x , x + ) p pos f ( x ) f ( x + ) 2 (2) \ell_{\text{align}} \triangleq \mathop{\mathbb{E}}\limits_{(x, x^+)\sim p_{\text{pos}}} \Vert f(x) - f(x^+)\Vert^2\tag{2}

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

uniform  log E x , y i . i . d p data e 2 f ( x ) f ( y ) 2 (3) \ell_{\text {uniform }} \triangleq \log \mathop{\mathbb{E}}\limits_{x, y \stackrel{i . i . d}{\sim} p_{\text{data}}} e^{-2\Vert f(x)-f(y)\Vert^{2}}\tag{3}

我们希望这两个指标都尽可能低,也就是一方面希望正样本要挨得足够近,另一方面语义向量要尽可能地均匀分布在超球面上,因为均匀分布的信息熵最高,分布越均匀则信息保留的越多。作者从维基百科中随机抽取十万条句子来微调BERT,并在STS-B dev上进行测试,实验结果如下表所示:

其中None是作者提出的随机Dropout方法,其余方法均是在None的基础上对 x i + x_{i}^+ 进行改变,可以看到,追加显式数据扩增方法均会不同程度降低模型性能,效果最接近Dropout的是删除一个单词,但是删除一个单词并不能对uniformity带来很大的提升,作者也专门做了个实验来证明,如下图所示:

おすすめ

転載: juejin.im/post/7034667373244186638