知行编程网知行编程网  2022-02-08 16:00 知行编程网 隐藏边栏 |   抢沙发  246 
文章评分 0 次,平均分 0.0
丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

小编注:他来了他来了,苏神带着他的文章走来了!在小屋这篇《丹琦女神新作:对比学习,简单到只需要Dropout两下》推出后,苏神发来了他在 SimCSE 上的中文实验,实验结果表明在不少任务上 SimCSE 确实相当优秀,能明显优于 BERT-whitening。那么话不多说,让我们接着前篇的讨论,来看看苏神的文章吧~

今年年初,笔者受到 BERT-flow 的启发,构思了 BERT-whitening 方法,一度成为了语义相似度的新 SOTA——参考《你可能不需要 BERT-flow :一个线性变换媲美 BERT-flow 》[1],对应论文为《Whitening Sentence Representations for Better Semantics and Faster Retrieval》[2]。

。然而“好景不长”,在 BERT-whitening 提交到 Arxiv 的不久之后,笔者刷到了至少有两篇新论文里边的结果明显优于 BERT-whitening 了。

第一篇是《 Generating Datasets with Pretrained Language Models 》,这篇借助模板从 GPT2_XL 中无监督地构造了数据对来训练相似度模型,个人认为虽然有一定的启发而且效果还可以,但是复现的成本和变数都太大。另一篇则是本文的主角《 SimCSE: Simple Contrastive Learning of Sentence Embeddings 》,它提出的 SimCSE 在英文数据上显著超过了 BERT-flowBERT-whitening ,并且方法特别简单~

那么,SimCSE 在中文上同样有效吗?能大幅提高中文语义相似度的效果吗?本文就来做些补充实验。

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!SimCSE 简介丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

首先,简单对 SimCSE 做个介绍。事实上,SimCSE 可以看成是 SimBERT 的简化版(关于 SimBERT 请阅读《鱼与熊掌兼得:融合检索和生成的 SimBERT 模型》[3]),它简化的部分如下:

1、SimCSE 去掉了 SimBERT 的生成部分,仅保留检索模型;
2、由于 SimCSE 没有标签数据,所以把每个句子自身视为相似句传入。

说白了,本质上来说就是(自己,自己)作为正例、(自己,别人)作为负例来训练对比学习模型。当然,事实上还没那么简单,如果仅仅是完全相同的两个样本作为正例,那么泛化能力会大打折扣。一般来说,我们会使用一些数据扩增手段,让正例的两个样本有所差异,但是在 NLP 中如何做数据扩增本身又是一个难搞的问题,SimCSE 则提出了一个极为简单的方案:直接把 Dropout 当作数据扩增!

具体来说,个句子经过带 DropoutEncoder 得到向量,然后再过一遍 Encoder (这时候是另一个随机 Dropout )得到向量,我们可以将视为一对(略有不同的)正例了,那么训练目标为:

 

 

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!英文效果丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

原论文的(英文)实验还是颇为丰富的,读者可以仔细阅读原文。但是要注意的是,原论文正文表格的评测指标跟 BERT-flowBERT-whitening 的不一致,指标一致的表格在附录:

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!
▲SimCSE与BERT-flow、BERT-whitening的效果对比

不管怎样比,SimCSE 还是明显优于 BERT-flowBERT-whitening 的。那么 SimCSE 的这个优势是不是普遍的呢?在中文上有没有这个优势呢?我们马上就来做实验。

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!实验配置丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

我们的中文实验基本与《无监督语义相似度哪家强?我们做了个比较全面的评测》[4]对齐,包括之前测试的 5 个任务、4 种 Pooling 以及所有 base、small、tiny 版的模型,large 没有跑是因为相同配置下 large 模型 OOM 了。

经过调参,笔者发现中文任务上 SimCSE 的最优参数跟原论文中的不完全一致,具体区别如下:

1、原论文batch_size=512,这里是batch_size=64(实在跑不起这么壕的batch_size);
2、原论文的学习率是5e-5,这里是1e-5;
3、原论文的最优dropout比例是0.1,这里是0.3;
4、原论文的无监督 SimCSE 是在额外数据上训练的,这里直接随机选了1万条任务数据训练。

最后一点再说明一下,原论文的无监督 SimCSE 是从维基百科上挑了 100 万个句子进行训练的,至于中文实验,为了实验上的方便以及对比上的公平,直接用任务数据训练(只用了句子,没有用标签,还是无监督的)

不过除了 PAWSX 之外,其他 4 个任务都不需要全部数据都拿来训练,经过测试,只需要随机选 1 万个训练样本训练一个 epoch 即可训练到最有效果(更多样本更少样本效果都变差)

开源地址
https://github.com/bojone/SimCSE

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!中文效果丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

SimCSE 的所有中文实验结果如下:

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

其中每个单元的数据是 “a/b/c” 的形式,a 是不加任何处理的原始结果,b 是 BERT-whitening 的结果(没有降维),c 则是 SimCSE 的结果,如果 c  > b,那么 c 显示为绿色,否则为红色,也就是说绿色越多,说明 SimCSEBERT-whitening 好得越多。

关于其他实验细节,可以看原代码以及《无监督语义相似度哪家强?我们做了个比较全面的评测》[4]。注意由于又有 Dropout ,训练时又是只采样 1 万个样本,因此结果具有随机性,重跑代码结果肯定会有波动,请读者知悉

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!一些结论丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

从实验结果可以看出,除了 PAWSX 这个“异类”外, SimCSE 相比 BERT-whitening 确实有压倒性优势,有些任务下还能好 10 个点以上,而且像 SimBERT 这种已经经过监督训练的模型还能获得进一步的提升,确实强大。(至于 PAWSX 为什么“异”,文章《无监督语义相似度哪家强?我们做了个比较全面的评测》[4]已经做过简单分析。)

同时,我们还可以看出在 SimCSE 之下,在 BERT-flowBERT-whitening 中表现较好的 first-last-avg 这种 Pooling 方式已经没有任何优势了,反而较好的是直接取[ CLS ]向量,但让人意外的是,Pooler (取[ CLS ]的基础上再加个 Dense )的表现又比较差,真让人迷惘~

由于 BERT-whiteing 只是一个线性变换,所以笔者还实验了 SimCSE 是否能浮现这个线性变换的效果。具体来说,就是固定 Encoder 的权重,然后接一个不加激活函数的 Dense 层,然后以 SimCSE 为目标,只训练最后接的 Dense 层。结果发现这种情况下的 SimCSE 并不如 BERT-whitening 。那就意味着, SimCSE 要有效必须要把 Encoder 微调才行,同时也说明 BERT-whitening 可能包含了 SimCSE 所没有东西的,也许两者以某种方式进行结合会取得更好的效果(构思中...)。

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!相关工作丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

简单调研了一下,发现 “自己与自己做正样本” 这个思想的工作,最近都出现好几篇论文了,除了SimCSE之外,同期出现的还有《Augmented SBERT: Data Augmentation Method for Improving Bi-Encoders for Pairwise Sentence Scoring Tasks》[5]、《Semantic Re-tuning with Contrastive Tension》[6]都是极度相似的。其实类似的idea笔者也想过,只不过没想到真的能work(就没去做实验了),也没想到关键点是 Dropout ,看来还是得多多实验啊~

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!本文小结丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

本文分享了笔者在 SimCSE 上的中文实验,结果表明不少任务上 SimCSE 确实相当优秀,能明显优于 BERT-whiteining

 

寻求报道、约稿、文案投放:
添加微信xixiaoyao-1,备注“商务合作”

 

丹琦女神的对比学习新SOTA,在中文表现如何?我们补充实验后,惊了!

[1] https://kexue.fm/archives/8069.

[2] Jianlin Su et al. Whitening Sentence Representations for Better Semantics and Faster Retrieval. https://arxiv.org/abs/2103.15316.

[3] https://kexue.fm/archives/7427.

[4] https://kexue.fm/archives/8321.

[5] https://arxiv.org/abs/2010.08240.

[6] https://openreview.net/forum?id=Ov_sMNau-PF.

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享