【NLP】NLP中的数据增广方法

NLP中的数据增广方法

author: Heisenberg
date:2020-09-20

CV 主要以图像中心旋转、灰度变换为主,图像本身含义变化不大。NLP则对此非常敏感。

NLP中Data Augmentation Techs:

一、词汇替换

  1. 基于同义词典的替换

    WordNet: For English

    ChineseSemanticKB:For Chinese

  2. 基于Word-Embedding的替换

    Word2vec, Glove, FastText

    #demo code
    import gensim.downloader as api
    
    model=api.load('glove-twitter-25')
    model.most_similiar('awesome',tpon=5)
    
  3. 基于Masked Language Model的替换

    Bert、RoBERTa,ALBERT

    基于预训练模型在考虑上下文的信息的基础上进行填充。

    from transformers import pipeline
    nlp = pipeline('fill-mask')
    nlp('This is <mask> cool')
    
  4. 基于TF-IDF的替换

    TF-IDF 分数较低的单词不能提供信息,因此可以在不影响句子的基本真值标签的情况下替换它们。(https://arxiv.org/abs/1904.12848)

二、Back Translation(回译)

使用机器翻译的方法生成复述的一段新的文本。

汉语—>英语/韩语/法语—>汉语(TextBlob或者谷歌翻译)

三、Text Surface Transformation

利用正则表达式进行模式匹配。

比如把动词的缩写形式转换为非缩写形式。She’s —> She is/She has 或者反方向。

对于中文来说不太适用

四、Random Noise Injection

为文本注入噪声生成新文本,使结果对扰动具有鲁棒性。

  1. spelling error injection

    添加一些随机单词的拼写错误

  2. QWERTY Keyboard Error Injection

    img

    模拟输入文本时typo的产生

  3. Unigram Noising

    使用从 unigram 频率分布中采样的单词进行替换。这个频率基本上就是每个单词在训练语料库中出现的次数。

    img

  4. Blank Noising

    用占位符标记替换一些随机单词。例如某论文中使用 “_” 作为占位符标记,他们使用它作为一种避免在特定上下文上过度拟合的方法以及语言模型平滑的机制

  5. Sentence Shuffling

    打乱训练文本的句子顺序

  6. Random Insertion

    首先从句子中随机选择一个不是停止词的词;然后找到它对应的同义词,并将其插入到句子中的一个随机位置。(NG20 news就用了 )

  7. Random Swap

    在句子中随机交换任意两个单词

  8. Random Deletion

    以概率 p 随机删除句子中的每个单词。

五、Instance Crossover Augmentation

intuition 来源于遗传学中的染色体交叉操作。

将用一个类别的文本各自交换一半的内容cross-over,虽然对语法和语义有所破坏,仍将保留原来的情绪类别。

六、Syntax-tree Manipulation

根据语义分析句法树使用规则对原来的的文本进行转述。e.g.主动语态和被动语态的转变、

七、MixUp for Text

intuition来自于CV中将两个随机图像按比例混合生成训练的额合成数据,可以作为正则化的方式。

  1. wordMixup

    一个小批中取两个随机的句子,它们被填充成相同的长度;然后,他们的 word embeddings 按一定比例组合,产生新的 word embeddings 然后传递下游的文本分类流程,交叉熵损失是根据原始文本的两个标签按一定比例计算得到的。

    img

  2. sentMixup

    先把句子encoding和embedding之后再combine起来丢给模型。

    img

八、生成式的方法

尝试在生成额外的训练数据的同时保留原始类别的标签。

  1. 在训练数据中预先加入类别标签,如下图所示。

    img

  2. 在这个修改过的训练数据上 finetune 一个大型的预训练语言模型 (BERT/GPT2/BART) 。对于 GPT2,目标是去做生成任务;而对于 BERT,目标是要去预测被 Mask 的词语。

  3. 使用经过 finetune 的语言模型,可以使用类标签和几个初始单词作为模型的提示词来生成新的数据。本文使用每条训练数据的前 3 个初始词来为训练数据做数据增强。

img

九、实现

nlpaug、textattach两个库提供了很多data augmentation的方法。

大多数方法都是具有很强的任务属性的,并且针对这些方法的实验也只在某些特定的场景进行了验证。可以见得,系统地比较这些方法并且分析它们在其他任务上的表现在未来将是一项有趣的研究。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值