Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问一下,这篇文章和SimCSE的区别有哪些? #1

Open
yejiahaoye opened this issue Jun 4, 2021 · 13 comments
Open

请问一下,这篇文章和SimCSE的区别有哪些? #1

yejiahaoye opened this issue Jun 4, 2021 · 13 comments

Comments

@yejiahaoye
Copy link

No description provided.

@yym6472
Copy link
Owner

yym6472 commented Jun 4, 2021

我们的工作和SimCSE确实比较像,都是利用对比学习的思想改善句子语义表示,模型上也都采用类似SimCLR的结构。以下是一些区别:

  1. 数据增强方法的侧重不同:SimCSE使用BERT自带的dropout两次forward来做数据增强构造正样本对;而我们研究了一系列作用在word embedding层的隐式(不生成具体增强样本)数据增强的方法。我们文章中的“Dropout“数据增强方法仅作用在word embedding层;同时我们所有的实验都会在训练过程中将BERT自带的dropout设置为0,以排除BERT自带dropout的干扰。
  2. 融合NLI监督数据的方式不同:对于有监督实验,SimCSE将NLI数据中”蕴含“标签的句子对作为正样本,”矛盾“标签的句子对作为负样本,以此融合监督信号,但损失仍然使用对比学习的损失;而我们直接用NLI数据做了一个三分类任务。
  3. 无监督的训练数据不同:SimCSE从Wiki文档中随机采样1M条无监督文本;而我们使用目标STS任务的无标签文本进行训练(和BERT-flow保持一致)。
  4. 超参设置不同:对于无监督实验,SimCSE超参设置为learn_rate = 2e-5,temperature = 0.05;而我们设置learn_rate = 2e-7,temperature = 0.1。我后面又重新进行了实验,发现learn_rate = 2e-5,temperature = 0.05 确实能取得更好的结果(之前我们实验的学习率调得过低了)。
  5. 实验分析上:SimCSE 用 align-uniform 的量化指标对训练过程进行了分析,以及和baseline进行对比,感觉是一个比较好的角度。我们之前也在实验中注意到,用对比学习fine-tune BERT到后期会逐渐使得所有表示均匀弥漫在整个空间,从而使得STS任务性能下降,因此需要有标注的样本作为验证集来选取恰到好处的最优checkpoint;我们的实验分析侧重于不同数据增强方法(及其组合)的效果比较,以及少样本设置下的实验。

希望能有帮助~

@qiuwenbogdut
Copy link

实际场景中如何选择选择目标场景下的无监督数据的条数?
无监督数据的条数过多是不是会使得所有表示均匀弥漫在整个空间,从而使得性能下降

@yym6472
Copy link
Owner

yym6472 commented Jun 7, 2021

我觉得实际场景下的无监督数据量还是越多越好的。因为实际场景能收集的无监督样本条数可能有限,数据量越多还是越能代表下游STS任务真实的数据分布。

训练后期表示均匀弥漫的问题主要是对比学习的训练目标(把来自不同样本的表示推远)导致的。我觉得大概率和数据量多少是没有什么关系,数据量少的情况下也会因为对比学习目标不断把不同样本的表示推远而产生弥漫的问题。然后为了避免这个问题,实际使用的话可能需要使用少量有标注的数据作为验证集,去选取最优的模型checkpoint(这个也是目前的一个限制)。

@qiuwenbogdut
Copy link

@yym6472 thank you

@mylv1222
Copy link

mylv1222 commented Jul 22, 2021

@yym6472 请问根据这篇文章的实现,如果两个数据增强策略的超参都填“none”是不是就相当于实现SimCSE那篇了?

@yym6472
Copy link
Owner

yym6472 commented Jul 23, 2021

@yym6472 请问根据这篇文章的实现,如果两个数据增强策略的超参都填“none”是不是就相当于实现SimCSE那篇了?

按道理应该是的。不过我们做数据增强组合的分析实验的时候,为了避免BERT自带的dropout的影响,通过--no_dropout的参数关闭了BERT自带的dropout。如果不传这个参数的话,效果应该就等同于用BERT自带的dropout做数据增强。

@mylv1222
Copy link

@yym6472 明白了,谢谢。

@guotong1988
Copy link

Thank you.

@qianzhang2018
Copy link

你好,能问一下。因为我刚刚看nlp相关的文章,所以有这样的疑问。simsce和本文的监督训练,本质来说算是一种弱监督训练吧?都是在nli数据集上进行监督,在sts上进行测试。真正的有监督应该在sts上训练测试把?
然后如果我有大量的医学领域无监督语料和少量有监督语料。那是不是先用你们的这种方式先进行无监督训练,然后再用少量的微调会比较好?
期待您的回答~

@yym6472
Copy link
Owner

yym6472 commented Dec 15, 2021

你好,能问一下。因为我刚刚看nlp相关的文章,所以有这样的疑问。simsce和本文的监督训练,本质来说算是一种弱监督训练吧?都是在nli数据集上进行监督,在sts上进行测试。真正的有监督应该在sts上训练测试把? 然后如果我有大量的医学领域无监督语料和少量有监督语料。那是不是先用你们的这种方式先进行无监督训练,然后再用少量的微调会比较好? 期待您的回答~

是的,因为STS数据集的构建需要人工为句子对打分,还是比较耗时耗力的,数据规模也没法很大。然后之前的工作有证明NLI任务对STS任务有较强的提升,因此使用NLI训练模型,然后提取出其中的句子编码器直接做STS任务。对于你的情况,如果人工标注的STS样本数量足够的话,无监督训练后再微调(设计二分类或者回归任务)肯定是能有更明显的提升的。

@qianzhang2018
Copy link

qianzhang2018 commented Dec 15, 2021 via email

@Niutranser-Li
Copy link

想要问一下,注意到 ConSERT 在 paper 5.2 部分测试了使用两次 dropout 数据增强方法,并且实际效果并不十分理想,但个人感觉这和 SimCSE 采取的操作类似,只是一个发生在 word embedding 部分,一个发生在 Transformer 内部,那么为什么会有如此明显的性能差异呢?

@yym6472
Copy link
Owner

yym6472 commented Jun 9, 2022

想要问一下,注意到 ConSERT 在 paper 5.2 部分测试了使用两次 dropout 数据增强方法,并且实际效果并不十分理想,但个人感觉这和 SimCSE 采取的操作类似,只是一个发生在 word embedding 部分,一个发生在 Transformer 内部,那么为什么会有如此明显的性能差异呢?

我的理解是word embedding上的dropout相对比较naive,模型很容易就学会区分相近样本,因此对一致性的建模比较弱;而SimCSE采用的transformer自带的dropout因为在每一层transformer layer都会持续做数据增强,所以对样本的扰动层次更深,对模型训练(学习不变性)而言,任务更难,学习的维度更全面吧。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants