本篇论文美团已经给出了很详细的解读
-
本文的想法思路也是一样即对比学习,主要创新点就是试了一些数据增强如对抗攻击、打乱词序、裁剪、dropout等等。通过一个数据增强模块,作用于Embedding层,为同一个句子生成两个不同的增强版本,作为正样本,一个batch内的其他样本作为负样本
-
首先,作者对Bert的“坍缩”现象进行了说明,即BERT对所有的句子都倾向于编码到一个较小的空间区域内,这使得大多数的句子对都具有较高的相似度分数,即使是那些语义上完全无关的句子对。作者认为这种现象是由于句子中的高频词的影响,即当通过平均词向量的方式计算句向量时,那些高频词的词向量将会主导句向量,使之难以体现其原本的语义。当计算句向量时去除若干高频词时,坍缩现象可以在一定程度上得到缓解。
-
并对一些数据增强方法进行了比较得出:Token Shuffle > Token Cutoff >> Feature Cutoff ≈ Dropout >> None还对怎么组合这些数据增强进行了实验得到:Token Shuffle和Feature Cutoff的组合取得了最优性能。各部分具体如下:
- 对抗攻击(Adversarial Attack):这一方法通过梯度反传生成对抗扰动,将该扰动加到原本的Embedding矩阵上,就能得到增强后的样本。由于生成对抗扰动需要梯度反传,因此这一数据增强方法仅适用于有监督训练的场景。
- 打乱词序(Token Shuffling):这一方法扰乱输入样本的词序。由于Transformer结构没有“位置”的概念,模型对Token位置的感知全靠Embedding中的Position Ids得到。因此在实现上,我们只需要将Position Ids进行Shuffle即可。
- 裁剪(Cutoff):又可以进一步分为两种:Token Cutoff:随机选取Token,将对应Token的Embedding整行置为零。Feature Cutoff:随机选取Embedding的Feature,将选取的Feature维度整列置为零。
- Dropout:Embedding中的每一个元素都以一定概率置为零,与Cutoff不同的是,该方法并没有按行或者按列的约束。
这四种方法均可以方便地通过对Embedding矩阵(或是BERT的Position Encoding)进行修改得到,因此相比显式生成增强文本的方法更为高效。