前言
数据增强(Data augmentation,DA)是指利用 现有 的数据生成额外的 合成的 数据的技术。在训练样本匮乏,标注成本较高时,尝试数据增强方法是很有必要的。
Figure 1. 数据增强(图源:https://neptune.ai/blog/data-augmentation-nlp)
数据增强在计算机视觉(CV)领域的应用广泛,一方面是因为图像数据的增强较为容易,比如只需执行一些旋转、剪切、缩放、扩大、噪声注入等操作就行了,另一方面,数据增强确实能为 CV 模型的性能带来实质性的提升。但在自然语言处理(NLP)领域,一直没有较为有效的数据增强方法的出现,本人认为这有两点原因:第一,NLP 需要面对的是“博大精深”的自然语言,而对于自然语言,一个句子中某个词语甚至标点符号的变化都可能带来整个句子含义的反转,这就直接增加了 NLP 数据增强的难度;第二,NLP 领域各个任务(命名实体识别、文本分类等)对文本信息的侧重点不一样,所以找到一个 NLP 领域各任务通用的数据增强方法是困难的。
虽然 NLP 领域仍缺乏像 CV 领域那样有效的数据增强方法,但还是存在一些可尝试使用的数据增强方法的,本文将对此进行 不全面 的总结,并给出几个在 NLP 领域使用数据增强方法时的注意事项。
NLP 常用数据增强方法
同义词替换(Synonym Replacement)
把它排第一是因为在一般情况下它是最为有效的。
同义词替换通常的步骤如下:
- 对句子分词
- 对句子中的每个词语(除了停用词外):使用该词语的近似词将其替换
以上最重要的是如何找到词语的近似词,常见的方法有:
- 准备一个 同义词词林 ,从中找近似词
- 通过计算 词向量 之间的余弦距离来寻找词语的近似词,词向量可采用常见的静态词向量如 word2vec 和 glove,也可采用经 BERT 编码的动态词向量
具体使用哪种近似词选取方法可以通过实验决定,哪种方法好用哪种。
第一种同义词词林方法难点在于准备一个较为实用的同义词词林,虽然在网上已经存在一些同义词词林(如哈工大的同义词词林扩展版),但其包含的词语的范围有时很难满足数据增强的需要,所以应用也较少。
其实,我想重点介绍的是第二种使用词向量的方法,这种方法也是 TinyBERT 使用的方法。TinyBERT 同时采用静态和动态的词向量,即对于单个字使用经预训练好的 BERT 作为语言模型预测这个字的近似词(字),对于词语则使用静态词向量。使用 BERT 预测近似词时,需要在句子中将需被替换的字 masked 掉,再将句子输入到 BERT 中。具体细节可以参考 TinyBERT 的 GitHub 仓库。
Figure 2. TinyBERT 中的数据增强
回译(Back Translation)
这种方法实现起来也较为简单,步骤如下(以中文与英文为例):
- 借用一些翻译 API 将已有的中文训练文本翻译成英文
- 同样借用这些翻译 API 将翻译后的英文重新翻译回中文
这种方法对翻译质量的敏感度较高,翻译质量决定了数据增强的效果。
文本生成(Text Generation)
这种方法我没有尝试过,感觉和回译这种方法类似,可以把文本生成这种数据增强方法看作一种“另类”的翻译操作,它和回译的不同之处在于,它是一步到位的,而不像回译需要另一种语言作为中间状态。
这种方法的实现较前面几种来说更为复杂,在使用文本生成进行数据增强之前,需要首先训练出一个文本生成模型,这说明又要为文本生成模型准备训练语料而头疼了😂,好像又回到了最初的起点?
注意事项
这些注意事项摘抄自 Data Augmentation in NLP: Best Practices From a Kaggle Master:
- 不要往验证集/测试集中加入经增强的数据 (Do not validate using the augmented data.)
- 如果你使用 K 折交叉验证,记得每一折数据中都要同时包含原始样本和增强样本,以避免过拟合 (If you’re doing K-fold cross-validation, always keep the original sample and augmented sample in the same fold to avoid overfitting.)
- 多尝试不同的数据增强方法,哪种效果好就用哪个 (Always try different augmentation approaches and check which works better.)
- 结合不同数据增强方法也是不错的,但要适度 (A mix of different augmentation methods is also appreciated but don’t overdo it.)
- 通过实验来决定最优的样本增强的数量 (Experiment to determine the optimal number of samples to be augmented to get the best results.)
- 记住,数据增强在 NLP 领域并不总是可以带来提升(Keep in mind that data augmentation in NLP does not always help to improve model performance.)
总结
本文介绍了一些 NLP 领域可采用的数据增强方法,不全面,若读者有接触到其他的方法,希望您能以评论的方式进行补充,感激。
其实,以上介绍的方法,一般都只能用于文本分类(Sentence level)这种较为简单的 NLP 任务中,对于命名实体识别或关系抽取等对字词级(Character / word level)信息比较敏感的任务,则需要对上述方法进行一些细致化的设计,这方面等以后我自己有所经验了再来讨论。