前言

数据增强(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)

把它排第一是因为在一般情况下它是最为有效的。

同义词替换通常的步骤如下:

  1. 对句子分句
  2. 对句子中的每个词语(除了停用词外):使用该词语的近似词将其替换

以上最重要的是如何找到词语的近似词,常见的方法有:

  • 准备一个 同义词词林 ,从中找近似词
  • 通过计算 词向量 之间的余弦距离来寻找词语的近似词,词向量可采用常见的静态词向量如 word2vec 和 glove,也可采用经 BERT 编码的动态词向量

具体使用哪种近似词选取方法可以通过实验决定,哪种方法好用哪种。

第一种同义词词林方法难点在于准备一个较为实用的同义词词林,虽然在网上已经存在一些同义词词林(如哈工大的同义词词林扩展版),但其包含的词语的范围有时很难满足数据增强的需要,所以应用也较少。

其实,我想重点介绍的是第二种使用词向量的方法,这种方法也是 TinyBERT 使用的方法。TinyBERT 同时采用静态和动态的词向量,即对于单个字使用经预训练好的 BERT 作为语言模型预测这个字的近似词(字),对于词语则使用静态词向量。使用 BERT 预测近似词时,需要在句子中将需被替换的字 masked 掉,再将句子输入到 BERT 中。具体细节可以参考 TinyBERT 的 GitHub 仓库。

Figure 2. TinyBERT 中的数据增强

其实,在我看来,对于字的情况或是词的情况都可以使用 BERT 作为语言模型寻找近似词,只不过要注意使用基于全词遮罩(Whole Word Masking)技术的预训练模型BERT-wwm,这种预训练模型可以在这个 (https://github.com/ymcui/Chinese-BERT-wwm) 仓库下载

回译(Back Translation)

这种方法实现起来也较为简单,步骤如下(以中文与英文为例):

  1. 借用一些翻译 API 将已有的中文训练文本翻译成英文
  2. 同样借用这些翻译 API 将翻译后的英文重新翻译回中文

这种方法对翻译质量的敏感度较高,翻译质量决定了数据增强的效果。

文本生成(Text Generation)

这种方法我没有尝试过,感觉和回译这种方法类似,可以把文本生成这种数据增强方法看作一种“另类”的翻译操作,它和回译的不同之处在于,它是一步到位的,而不像回译需要另一种语言作为中间状态。

这种方法的实现较前面几种来说更为复杂,在使用文本生成进行数据增强之前,需要首先训练出一个文本生成模型,这说明又要为文本生成模型准备训练语料而头疼了

NLP 中的数据增强相关推荐

  1. NLP中的数据增强技术综述

    NLP数据增强技术 1. 词汇替换 Lexical Substitution 基于词典的替换 Thesaurus-based substitution 基于词向量的替换 Word-Embeddings ...

  2. NLP中的数据增强方法综述

    论文链接:A Survey of Data Augmentation Approaches for NLP 摘要 由于越来越多的研究在低资源领域.新任务和需要大量训练数据的大规模神经网络中,NLP中的 ...

  3. NLP中的数据增强方法

    目录 1 概述 2. 方法 2.1 随机drop和shuffle 2.2 同义词替换 2.3 回译 2.4 文档裁剪 2.5 生成对抗网络 2.6 预训练的语言模型 1 概述 NLP中的数据是离散的. ...

  4. NLP中的数据增强:UDA、EDA

    文章目录 NLP数据增强 1. UDA (Unsupervised Data Augmentation)[推荐使用] 2. EDA (Easy Data Augmentation) NLP数据增强 1 ...

  5. 图机器学习中的数据增强技术

    文稿整理者:张琳 审稿&修改:赵通 本人总结来自圣母大学的博士生赵通在深蓝学院分享的"图机器学习中的数据增强技术"公开课.通过介绍图机器学习的概念,发展历程等,以及分享两篇 ...

  6. NLP 英文文本数据增强

    数据增强是一种有效的防止过拟合并且可以加大训练集的有效方式,NLP中的数据增强方法有回译,同义词替换,随机插入,随机交换,随机删除,对抗训练这几种方式,本篇文章简单介绍一下这几种方式. 1.回译 #经 ...

  7. NLP中文本数据扩增的几种方法【一】单词替换

    和图像数据增强不同,NLP中文本数据增强比较少见.图像的一些增强操作,如图像旋转.灰度处理等等都不会改变图像的语义,语义不变变换的存在使得增广成为计算机视觉研究中必不可少的工具.但在NLP中进行数据增 ...

  8. 【技术综述】深度学习中的数据增强(下)

    文章首发于微信公众号<有三AI> [技术综述]深度学习中的数据增强(下) 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  9. [综述类] 一文道尽深度学习中的数据增强方法(上)

    今天带来一次有关于深度学习中的数据增强方法的分享. 00 什么是数据增强 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完成任务. 为了要保证完美地完成项 ...

最新文章

  1. * 执行多条更新的Sql语句
  2. 深度对话林元庆:AI创业历史性窗口到来,将诞生下个BAT
  3. 3D脚本 maxscript入门教程(6)
  4. 基于centos7系统mongodb3.,4.4安装
  5. ajax保存避免重复提交,ajax 实现防止重复提交
  6. c语言100位整数变量声明_C ++程序动态声明一个整数变量并打印其内存地址
  7. logStash收集日志并存储到Elasticsearch
  8. django url 路由设置技巧
  9. Flightgear 编译
  10. 区分iphone和ipad 函数sysctlbyname 来获取设备名称
  11. 3DGIS 与 BIM 融合技术方案
  12. 蓝蓝设计 扁平化界面风格的设计
  13. 高三数学微课堂【教学视频】
  14. Pytorch中torch.nn.DataParallel负载均衡问题
  15. java strom实例_strom wordcount java 实现案例
  16. 如何理解泊松分布和泊松过程
  17. 解读机器人视觉类别及应用原理
  18. 解决GoLand上面出现的Couldn‘t copy unpacked SDK问题
  19. Codeforces 1034 A
  20. UiPath Robotic Enterprise Framework 学习笔记

热门文章

  1. python爬虫教程:Python写网络爬虫的优势和理由
  2. 2020年蘑菇街春招Java后端开发实习岗面经(一面+二面+HR面)
  3. 遍历数组、对象的方法
  4. 多因子模型之因子(信号)测试平台----alphalens(一)
  5. RecyclerView新体验(2)
  6. 能打开人心结的21句话
  7. 给力干货!一文教你如何通过Jade计算晶粒尺寸、微观应变和结晶度
  8. NLP自然语言处理系列-week6-Seq2Seq+Attention
  9. html 图片自动裁剪,如何用CSS自动裁剪图片 - Thomas'博客
  10. 机器人Python编程与开发