对比学习论文(持续更新)

最近老板让我去读对比学习的论文,我断断续续读了一些。在这里对读到的文章做一下整理,因为考试和假期这些论文也是比较久之前读的了,难免有所不足,请见谅。

目录

EMNLP 2021-SimCSE: Simple Contrastive Learning of Sentence Embeddings

这篇文章大家已经耳熟能详了,并且也有很多文章做了很好的分析。可以看这篇博客

  • 它简单地用dropout替换了传统的数据增强方法,将同一个输入dropout两次作为对比学习的正例,而且效果甚好。
  • 它简单地将NLI的数据用于监督对比学习,效果也甚好。
  • 此外文中还分析了对比学习究竟是如何工作的

ACL-2021-ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer

本篇论文美团已经给出了很详细的解读

  • 本文的想法思路也是一样即对比学习,主要创新点就是试了一些数据增强如对抗攻击、打乱词序、裁剪、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)进行修改得到,因此相比显式生成增强文本的方法更为高效。

ACL 2021 BOB:BERT over BERT for Training Persona-based Dialogue Models from Limited Personalized Data

开放域对话系统需要在对话过程中尽可能地保持一致的人物角色特征,但是在应用上受限于人物角色对话数据的有限规模。在现阶段下,无论是开放域对话生成模型还是开放域对话系统,面临的最大挑战之一就是对话回复的前后不一致。针对这一问题,相关的研究工作开始在对话中明确地引入角色信息。角色信息的引入极大地简化了对话过程一致性的建模,也使得评价过程更容易。然而,这些工作都依赖于带有角色信息的对话数据,但是标注成本高昂,难以获得大规模的数据。
针对上面的问题,本文设计了一个全新的基于BERT的模型,包含了一个BERT编码器和两个BERT解码器,将理解能力和生成能力的获取分离开来。这样,无论是一致性理解还是对话生成,都能够找到充足的数据资源来进行训练。对于一致性理解,本文选择使用大规模的非对话推理数据集(non-dialogue inference dataset),比如MNLI和SNLI;对于对话生成,选择使用大规模对话语料,比如角色信息稠密的PersonaChat数据集(英文,众包,12万数据量)和角色信息稀疏的PersonalDialog数据集(中文,社交媒体,1200万数据量)。该模型由一个基于 BERT 的编码器和两个基于 BERT 的解码器组成,其中一个解码器用于响应生成,另一个用于一致性理解。

  • 参考1参考2参考3

  • 自回归 (Autoregressive) 解码器:自回归解码器将解码器自己当前步的输出加入下一步的输入,解码器融合所有已经输入的向量来输出下一个向量,所以越往后的输出考虑了更多输入。在一定程度上自己预测自己。

  • 模型结构:
    对比学习论文(持续更新)

  1. 编码器E。它的工作方式类似于一个标准BERT模型,它双向地将嵌入的输入编码为一个隐藏向量序列,下游的任务将在这个序列上执行。然后嵌入层将输入信息转换为词向量,这里E的工作方式和原始的BERT完全一致。

  2. 自回归解码器D1。由BERT初始化,但以自回归解码器方式工作。首先,在E和D1之间插入交叉注意传递上下文信息。其次,为保持自回归生成特性,对D1执行词语自左向右预测掩码(利用上三角的掩码矩阵),以确保生成的回复词只能依赖已有的信息。由于BERT模型中不存在交叉注意力机制,因此在训练过程中对交叉注意力机制进行随机初始化和更新。D1最后一层的输出会进一步送到D2中进行一致性理解处理。

  3. 双向解码器D2。D2也是从BERT进行初始化的,为了减少推理数据中矛盾数据出现的可能性,使D2能够获得一致性理解的能力,D2引入了Unlikelihood目标函数进行训练。在进行一致性理解训练时,D2的输入是数据集N={Premise, Hypothesis, Label},而生成目标同样数据中的Hypothesis。原因在于模拟对话数据的生成方式,从而让模型能够利用非对话的推理数据进行一致性理解训练。每一层的结果融合了P和 R1 的信息。D2最后一层的输出是最终表示R2。在R2上通过输出层,例如线性层,我们可以得到生成的响应R。

  • 实验:
  1. 同时在角色信息稠密的PersonaChat数据集和角色信息稀疏的PersonalDialog数据集上通过大量的实验来验证了BoB模型的有效性。在评价指标方面,同时使用了人工评价和客观指标,来比较不同模型的角色一致性和回复质量。对于客观指标,本文引入了基于不同类别(一致和矛盾)对话回复的语言模型困惑度指标和基于分类器的一致性得分指标来进行比较。实验结果证明了BoB模型在保持良好的回复质量的同时,仍然在角色一致性上优于所有基线模型。

  2. 在PersonaChat数据集上进行消融实验。结果为:Unlikelihood训练目标对于一致性理解最为重要;而第二个解码器则对于多样性和困惑度贡献最大;基础的BERT编码器也有不错的性能表现,为BoB模型提供了良好的初始化。

在两个公开数据集上的实验表明,本文的模型可以使用更少的角色化对话数据训练,同时获得比使用全量数据训练的强基线方法更好的效果。

ACL 2021 DeCLUTR: Deep Contrastive Learning for Unsupervised Textual Representations

文章研究的问题同样是:如何利对比学习从大量无标注数据学习更好的通用句子表示?文中的对比体现在两个方面:

  1. 对比来自不同文档的文本片段(span)的语义。如果两个文本片段(span)来自同一个文档,那么他们的语义表示的距离应该相对较近,否则距离远;
  2. 对比来自同一文档的文本span。当两个文本片段都来自同一个文档,如果他们在文档中的位置距离比较近,他们的语义表示距离近,否则远。
    在采样正例的时候有些讲究。具体来讲是先从一个文档中采样N(>=1)个原始文本片段 (锚点span),然后从每个锚点span周围采样,作为正例 span。采样规则是正例span可以与锚点span交叠、相邻、从属。负例是从一个batch中随机采样得到的。对比学习的损失函数是InfoNCE。模型整体的损失函数是InfoNCE和MLM的加和。
  • 对于正负样本的选择:我的理解为每个文档之采样一个锚点(用i标记),同时在同一个文档中采样p个正样本然后取平均值作为最终的正样本,然后在其他文档中同样进行(如i+1)。作为负样本。

  • 模型的流程如下:
    对比学习论文(持续更新)

  1. 先从无标注的文档中以beta分布中抽样anchor片段,在从这一篇相同的文档以不同的beta分布抽样出positive样本对。

  2. 之后分别将anchor片段Si和positive片段Sj经过两个相同架构共享权值的编码器,生成对应的token embedding。

  3. 再将token embedding进行pooler操作,即将所有的token embedding平均生成同一维度的sentence embedding。

  4. 计算对比学习的损失函数,计算了两个片段信息之间的距离。

  5. 在计算出对比学习的loss之后,再加入MLM的loss,对模型进行反向梯度传播更新参数。

  • 实验是在SenEval benchmark(28个数据集)上进行测试的,包含有/半监督任务和无监督任务。有/半监督任务的baseline有InferSent,Universal Sentence Encoder和Sentence Transformers;无监督任务的baseline有QuickThoughts。最显著的实验结果是DeCLUTR在大部分的数据集上取得了SOTA,并且在无监督任务上取得了和有监督任务相当的结果。本文的实验结果如下:

模型:DeCLUTER-small使用DistilRoBERTa预训练模型参数为基础,DeCLUTER-base使用RoBERTa-base预训练模型参数为基础。

数据集:OpenWebText corpus,有495243个至少长度为2048的文档。

下游使用模型编码出的句子嵌入来作为分类器的特征进行分类,来探测评估模型生成的句子嵌入所含有的语义信息,最后取得了state-of-the-art。

NAACL 2021:Supporting Clustering with Contrastive Learning

这篇文章结合对比学习提出一种简单且有效的无监督文本聚类方法:SCCL。该模型刷爆了7个短文本聚类任务。

  • 文章致力于解决无监督聚类任务。所谓无监督聚类任务是在表征空间内通过特定的相似度量方法区分不同的语义簇。可以看出,这涉及2方面,输入如何表征和表征之间相似度如何度量。现有方案所得到的表示空间在各簇样本上已经重叠,这就使得后续的聚类算法难以突破其前置天花板。因此本文章结合对比学习提出一种名为SCCL的模型。该模型结合了bottom-up的实例对比学习和top-down的聚类,取得了更好的聚类结果。

  • 该论文其实在对比学习上没有多大创新,还是前几周介绍中所学的思想,研究使用了三种数据增强:

  1. Augmenter WordNet:通过用 WordNet 同义词替换其单词来转换输入文本

  2. Augmenter Contextual:利用预训练Transformer(论文选用Bert-base和Roberta)对输入文本找top-n个合适的单词进行插入或替换。

  3. Paraphrase via back translation:首先将输入文本翻译成另一种语言(法语),然后再翻译回英语,从而生成对输入文本的释义。

最后上述三个中第二个效果最好

其比较巧妙的是将其结合到了聚类上面,其框架图如下:

对比学习论文(持续更新)

  • SCCL由3部分组成:神经网络特征抽取层、clustering head 和 Instance-CL head。特征抽取层将输入映射到向量表示空间,SCCL是使用Sentence Transformer 发布的distilbert-base-nli-stsb-mean-tokens预训练模型。Instance-CL head 和 clustering head中分别使用contrastive loss 和 clustering loss。Instance-CL head由单层MLP组成,其激活函数使用的是ReLU。输入维度是768,输出维度是128。至于clustering head则是一个线性映射层,维度是768*K,其中K是聚类的类别数量。所以,整体网络结构非常简洁明了。

  • 最后,文章使用了8个短文本数据集验证SCCL的有效性,评测指标则使用 ACC(Accuracy)和 NMI,从结果展示SCCL几乎在所有数据集上取得SOTA方法。

上一篇:Error: file not found: arch/arm/boot/compressed/piggy.lzo


下一篇:Bert预训练