在现实场景中,我们往往收集不到太多的数据,那么为了扩大数据集,可以采用数据增强手段来增加样本,那么平常我们应该怎么做数据增强的呢?
什么是数据增强
数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。
数据增强可以分为有监督的数据增强和无监督的数据增强方法。其中有监督的数据增强又可以分为单样本数据增强和多样本数据增强方法,无监督的数据增强分为生成新的数据和学习增强策略两个方向。
数据增强支持音频、图像、文本和视频这四种数据类型,本文主要讲解针对文本和图像的数据增强方法。
文本数据增强方法
针对文本数据来说,传统的数据增强有效方法一个是加噪,另一个是回译,均为有监督方法。加噪即为在原数据的基础上通过替换词、删除词等方式创造和原数据相类似的新数据。回译则是将原有数据翻译为其他语言再翻译回原语。
- 回译(翻译两次,例如中文到英文,然后英文再到中文)。由于语言逻辑顺序等的不同,回译的方法也往往能够得到和原数据差别较大的新数据。
- EDA(Easy Data Augmentation for Text Classification Tasks),对同义词进行替换、插入、交换和删除。
- 同义词替换(SR: Synonyms Replace):不考虑stopwords,在句子中随机抽取n个词,然后从同义词词典中随机抽取同义词,并进行替换。
- 随机插入(RI: Randomly Insert):不考虑stopwords,随机抽取一个词,然后在该词的同义词集合中随机选择一个,插入原句子中的随机位置。该过程可以重复n次。
- 随机交换(RS: Randomly Swap) :句子中,随机选择两个词,位置交换。该过程可以重复n次。
- 随机删除(RD: Randomly Delete) :句子中的每个词,以概率p随机删除。
除了传统的数据增强之外,我们还可以使用深度学习数据增强技术,如Mixmatch,这是一种半监督方法。(半监督学习方法的提出是为了更好地利用未标注的数据,减轻对于大规模标注数据集的依赖;如今也证明了这是一种强有力的学习范式。)
Mixmatch的工作方式是通过 MixUp 猜测数据扩增方法产生的无标签样本的低熵标签,并把无标签数据和有标签数据混合起来。
传统的数据增广方法有一定的效果,但主要针对小数据量,对于渴求大量训练数据的深度学习模型,传统的方法效果始终有限。而Unsupervised Data Augmentation(UDA)无监督数据扩增方法的提出,为大量数据缺失打开了一扇大门。
MixMatch 算法除了使用普通的数据增广,还有一个秘诀是 Mixup 增广术。而 UDA 的成功,得益于对特定任务使用特定目标的数据增强算法。
UDA与常规噪声比如高斯噪声、dropout 噪声相比,针对不同任务使用不同数据增强方法能够产生更有效的数据。这种方法能够产生有效、真实的噪声,且噪音多样化。
另外,以目标和性能为导向的数据增强策略可以学习如何在原始标记集中找出丢失的或最想要的训练信号(比如图像数据以颜色为目标进行数据增强)。
图像数据增强方法
针对图像数据来说,我们常采用的方法如下:
- 采用随机裁剪。裁剪原图像中的一部分,比如裁剪四角、中心或者上下部分等等,但是裁剪的尺寸不宜过小。
- 对原图像进行翻转或者镜像。可以水平翻转,也可以垂直翻转。
- 对原图像进行旋转。可以把原图像旋转不同的角度来增加样本。
- 可以调节原图片亮度或对比度。如变亮或变暗,增大对比度或减小对比度。
- 调节原图像的色度。改变R、G、B颜色分量的比例。
- 调节图像的饱和度。所谓的饱和度,指的其实是色彩的纯度,纯度越高,表现越鲜明,纯度较低,表现则较黯淡。
除此之外,我们还可以采用将图像进行高斯模糊、锐化、添加噪声以及转换成灰度图像等方法。
工具包
针对中文文本数据,可以使用textda,他是一个中文文本数据增强工具包。
还有eda_nlp,他是一个用于提高文本分类任务性能的简易数据扩充技术。
除此之外,我们还可以使用一些其他开源工具对数据进行增加,如AugLy。他是 Facebook 开源的一个数据增强 Python 库。该库目前支持音频、图像、文本和视频四种模式,一方面可以用现实数据对数据进行增强,另一方面还可以检测出相似内容,消除重复数据带来的干扰。