对比学习论文

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

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)。作为负样本。

一些知识点:

  • Metric learning是什么?参考

  • beta分布

  • 什么是正样本,生么是负样本?

将离一个anchor比较近的句子作为正样本(包括邻近,被包含、以及部分重叠,参考图1.b),然后将一个文档中的其他锚点及对应positive作为困难负样本、将其他文档里的锚点及其positive作为简单负样本。

  • 损失函数为什么那样设置?

  • MLM到底选用的哪个模型?bert的吗,那损失函数是bert的?后期可以跑一下代码,顺便熟悉服务器使用。

  • 蒸馏:参考一参考二

  • 模型的流程如下:

  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的聚类,取得了更好的聚类结果。

  • 博客:NAACL 2021 | 对比学习横扫文本聚类任务 (qq.com)

  • 论文:https://arxiv.org/abs/2103.12953

  • 代码:https://github.com/amazon-research/sccl

  • 该论文其实在对比学习上

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

  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方法。

ACL 2021 CLINE: Contrastive Learning with Semantic Negative Examples for Natural Language Understanding

  • 参考1参考2
    来自清华大学,文章探讨的是如何利用对比学习提高模型的鲁棒性。在初步实验中发现用探针对句子语义进行轻微扰动,模型就会预测错误。之前的对抗训练确实能够从扰动的样本中学习,但是主要侧重于语义相似的扰动,忽略了语义不同或者相反的扰动。这样的语义改变无法被对抗学习无法检测到。本文提出CLINE,使用无监督的方法构造负样本。通过同时利用语义相似和相反的样例和原始样例进行对比,模型可以侦测到扰动导致的语义的改变。

正负例的构造:

正例是将句子中的词(名词、动词、形容词)替换为其同义词. 负例是将句子中的词替换为其反义词或者随机选择的词。

文中的损失函数由三部分构成:掩码语言模型的MLM损失 + 检测当前词是否是被替换的词 的损失RTD + InfoNCE对比正例和负例。有个小细节不太一样的是对比InfoNCE中并没有引入温度参数τ。

实验是在NLU任务上进行的,包括NLI(SNLI, PERSPECTRUM,) 情感分析(IMDB,MB) 阅读理解 (BoolQ), 新闻分类(AG)。实验结果表明使用CLINE训练的模型可以同时在对抗测试集和对比测试集上提升性能。

Arxiv 2021 LINDA: Unsupervised Learning to Interpolate in Natural Language Processing

这篇文章提出了一种基于mixup方法的适用性更广的无监督数据增强方法,与我们熟知的基于对比学习的方法相比,具有不同的思路。

  • 涉及的知识点:
  • mixup

*  What is in-domain, out-domain and open-domain data?

假设您有两个数据集:数据集A(来自报纸的文本数据)和数据集B(来自维基百科的文本数据)。

现在,我们使用报纸数据集(即dataSet A)训练机器学习模型。在培训之后,我们可以将两个数据集送入我们的新培训模型以创建预测。如果我们使用DataSet A作为输入,则它被称为in-domain,另一方面,如果我们使用DataSet B作为输入,则称out-domain。
open-domain数据不限于单个域。例如,新的数据集C是数据集A和数据集B的混合。

  • Bart

  • 具体内容:
    我们知道尽管 mixup 在数据增强方面取得了成功,但由于自然语言的离散和可变长度特性,它在自然语言处理 (NLP) 任务中的适用性受到限制。 因此,最近的研究依赖于特定领域的启发式方法和手动制作的资源以便在 NLP 中应用混合。 在本文中,作者提出了一种用于数据增强的无监督文本插值学习方法LINDA,它不需要任何启发式方法或手动制作的资源,而是学习 在自然语言流形上的任何自然语言句子对之间进行插值。 在凭经验证明 LINDA 的插值能力后,论文表明 LINDA 确实可以在 NLP 中无缝应用混合,并在域内和域外的文本分类中实现更好的泛化。
    作者将文本插值定义为从以下条件分布中绘制另一个序列的过程:首先将长度可能不同的输入文本 xa 和 xb 输入encoder进行编码并传递给长度转换器以转换为具有插值匹配长度 L 的表示 Ha_L 和 Hb_L ,然后再将转换后长度相同的两个表示以混合比 α 内插到 H~L 中。最后解码器被训练以将 H~L 重构为 xa 和 xb。 并对比与输入数据的相关性作为损失函数,对于xa和xb的选择采用遍历的方法,也就是说如果有n个片段,最后会有n2个合成的结果,最后的损失函数会对这n2个取平均值。
    最后,通过实验,并以人工的经验作为评价标准,结果表明,LINDA 确实能够在数量和质量上都在格式良好的句子的自然语言流形上插入两个自然语言句子。 然后,作者通过将其插入 mixup 并在九个不同的数据集上对其进行测试,以实现数据增强的原始目的。 在大多数数据集和设置上,LINDA 优于所有其他数据增强方法并且始终优于非增强基线,而其他增强方法并非如此。

ACL 2021 Self-guided contrastive learning for BERT sentence representations

来自首尔大学,讨论的问题是如何在不引入外部资源或者显示的数据增强的情况下,利用BERT自身的信息去进行对比,从而获得更高质量的句子表示?

文中对比的是:BERT的中间层表示和最后的CLS的表示。模型包含两个BERT,一个BERT的参数是固定的,用于计算中间层的表示,其计算分两步:(1) 使用MAX-pooling获取每一层的句子向量表示 (2)使用均匀采样的方式从N层中采样一个表示;另一个BERT是要fine-tune的,用于计算句子CLS的表示。同一个句子的通过两个BERT获得两个表示,从而形成正例,负例则是另一个句子的中间层的表示或者最后的CLS的表示。

文中还对比了不同负例组合的方式,最后发现只保留CLS的表示ci和隐藏层hi的表示之间的对比,忽略CLS和CLS以及中间层和中间层之间的对比是最优的,即保留(1)(3)。


这篇论文没有选择直接从底层数据增强角度出发,是稍微偏模型方法的改进的,侧重挖掘模型内部的信息。主实验是在STS和SentEval任务上测试的,从结果来看的话,仍然是SimCSE要好很多,而且SimCSE操作起来是更简单的。不过本文也是提供了一个不一样的思路。

2021 EMNLP Tsdae: Using transformer-based sequential denoising auto-encoder for unsupervised sentence embedding learning

参考
TSDAE(Transformer-based Sequential Denoising Auto-Encoder)模型使用纯句子作为训练数据来无监督训练句子向量。在训练期间,TSDAE 将加了噪声的句子编码为固定大小的向量,并要求decoder从这个句子表征中重建原始句子。为了获得良好的重建质量,必须在encoder的句子向量中很好地捕获语义。在后续推理时,我们只使用encoder来创建句子向量。架构如下图所示:

  • encoder部分就是将带噪音的文本进行编码。控制变量实验发现,以“删除词语”的方式加入噪音、噪音比率在0.6效果的最好的:

  • 然后将encoder的输出进行pooling,控制变量实验发现,以mean的方式pooling效果最好:

  • 接下来我们主要关注下decoder部分。decoder使用的是 cross-attention:

  • 其中s是encoder输出pooling后的句子表征,\(H^k\)的decoder第k层的隐层。

  • 目标函数,其中 l 是原文本x的token数,N的词表大小:

  • 对比来看,大部分任务,TSDAE效果会优于我们之前介绍的CT和SimCSE的:
posted @ 2022-02-05 18:02  xingye_z  阅读(839)  评论(3编辑  收藏  举报