1.Paraphrasing(同义转换)

  1. 对句子中的词、短语、句子结构做一些更改,保留原始的语义

1.Thesaurus

利用词典、知识图谱等外部数据。对文本数据中的单词做同义替换,将非停用词替换为意思相近的上义词或下义词或者替换成相同词性的词。
(是不是就类似于我利用miRNA命名找规律一样)

2.Semantic Embeddings

利用语义向量,将词语替换成相近的词(不一定是同义词)。

3.MLMs

利用BERT等模型,随机mask掉一些成分后生成新的。

4.Rules

利用一些规则,例如缩写、动词变位、否定等,对句子一些成分进行改写,比如把 is not 变成 isn’t

5.Machine Translation

将句子翻译成其他语言,再翻译回来。

6.Model Generation

利用Seq2Seq模型生成语义一致的句子
Data Augmention For NLP - 图1

2.Noising(增加噪声)

在保证label不变的同时,增加一些离散或连续的噪声,对语义的影响不大

  1. Swapping:除了交换词之外,在分类任务中也可以交换instance或者sentence
  2. Deletion:可以根据tf-idf等词的重要程度进行删除
  3. Insertion:可以把同义词随机插入句子中
  4. Substitution:把一些词随机替换成其他词(非同义),模拟misspelling的场景。为了避免改变label,可以使用label-independent的词,或者利用训练数据中的其他句子
  5. Mixup:这个方法最近两年比较火,把句子表示和标签分别以一定权重融合,引入连续噪声,可以生成不同label之间的数据,但可解释性较差

    3.Sampling(抽样)

    Data Augmention For NLP - 图2
    旨在根据目前的数据分布选取新的样本,会生成更多样的数据。
    不同于较通用的paraphrasing,采样更依赖任务,需要在保证数据可靠性的同时增加更多多样性比前两个数据增强方法更难。

    Rules:

    用规则定义新的样本和label,比如把句子中的主谓进行变换

    Seq2Seq Models:

    根据输入和label生成新的句子,比如在NLI任务中,有研究者先为每个label(entailment,contradiction,neutral)训一个生成模型,再给定新的句子,生成对应label的。
    对比之下,paraphrasing主要是根据当前训练样本进行复述

    Language Models:

    给定label,利用语言模型生成样本,有点像前阵子看的谷歌UDG。有些研究会加个判别模型过滤

    Self-training:

    先有监督训练一个模型,再给无监督数据打一些标签,有点蒸馏的感觉
    Data Augmention For NLP - 图3

    使用技巧

    Method Stacking

    实际应用时可以应用多种方法、或者一种方法的不同粒度!

    Optimization

    1.在使用增强的数据时,如果数据质量不高,可以先让模型在增强后的数据上
    pre-train,之后再用有标注数据训练。
    如果要一起训练,在增强数据量过大的情况下,可以对原始训练数据过采样
    2.在进行数据增强时注意这些超参数的调整

3.其实增强很多简单数据的提升有限,可以注重困难样本的生成。比如有研究加入对抗训练、强化学习、在loss上下文章等。
如果用生成方法做数据增强,也可以在生成模型上做功夫,提升数据多样性。

4.如果生成错数据可能引入更多噪声,可以增加其他模型对准确性进行过滤。