4.ESimCSE
论文链接:《ESimCSE: Enhanced Sample Building Method for Contrastive Learning of Unsupervised Sentence Embedding》
去年9月份挂在arvix上的一篇论文
- 论文里,首先指出Unsup-SimCSE的一个缺点,模型会倾向认为同样长度的句子对相似度更高,因此,论文提出采用repetition的方式来生成positive pair
为何采用repetition?起码它不会更改语义,如句子““I like this apple because it looks so fresh and I think it”
- insertion:“I don’t like this apple because but it looks so not fresh and I think it should be dog delicious.”
- deletion:“I this apple be- cause it looks so and I think it should be.”
- repetitiion:“I like like this apple because it looks so so fresh and and I think it should be delicious.”
只有repetition没有改变语义。
- 引入momentum contrast机制,让每个step的负样本能尽可能多,具体的,维护一个队列,这个队列会存储上几个step中出现过的sentence embedding作为当前step的负样本,此外,这个队列中的embedding都用一个momentum encoder来生成,而这个momentum encoder的参数是通过动量更新的,这样的好处是,每轮新加入队列的embedding差异都尽可能少?
- 论文结果如下,dup_rate=0.32效果最好,队列大小也不能太大,取为batch_size的2.5倍是最好的
本人复现时,batch_size=50,dup_rate=0.32,队列大小q=150
5. 总结
最后,用一张表把效果罗列一起,
个人体会
- 实质上,没有一种对比学习的方法能超过SBERT直接用sbs数据集做fine tuning的效果,那些说超过supervised SBERT的论文其实只是跟用NLI数据集做训练的SBERT来比较的。因此可以看到,有监督训练还是王道呢~
- 最后,没有所谓的SOTA,要明白论文及复现里的测试集都是STS,而落到实际业务中,每一个场景都有自己的特点,应该根据场景的特点去制作positive pair和思考怎么做hard negative样本,以及选择何种训练方法,当制作的数据集和训练方法越接近任务时,模型的效果自然越好。
复现参考:
3.https://github.com/xianghuisun/nlp-basictasks/blob/main/STS-B.ipynb
实验代码全部汇总在:
https://github.com/zhoujx4/NLP-Series-sentence-embeddings