文章目录

  • NLP数据增强
    • 1. UDA (Unsupervised Data Augmentation)【推荐使用】
    • 2. EDA (Easy Data Augmentation)

NLP数据增强

1. UDA (Unsupervised Data Augmentation)【推荐使用】

一个半监督的学习方法——UDA,减少对标注数据的需求,增加对未标注数据的利用。UDA的介绍来自论文《Unsupervised Data Augmentation for Consistency Training》。使用半监督方法时,常见的做法是,对大量未标记数据使用一致性训练来约束模型预测对输入噪声是不变的。在这篇论文中,提出了一个关于如何有效地对未标记数据进行噪声处理的新观点,并认为噪声质量,特别是由高级数据增强方法产生的噪声质量,在半监督学习中起着至关重要的作用。

通过用先进的数据增强方法(如 RandAugment 和反向翻译)代替简单的噪声操作,UDA在相同的一致性训练框架下对六种语言和三种视觉任务进行了实质性改进。在 IMDb 文本分类数据集上,只有 20 个标记数据,但是UDA方法实现了 4.20 的错误率,优于在 25,000 个标记数据上训练的SOTA模型。在标准的半监督学习基准 CIFAR-10 上,UDA方法优于所有以前的方法,并且仅用 250 个标记数据实现了 5.43 的错误率。UDA方法还与迁移学习很好地结合在一起,例如,当从 BERT 进行微调时,并在高数据机制(如 ImageNet)中产生改进,无论是只有 10% 的标记数据还是带有 130 万个额外未标记数据的完整标记集被使用.

UDA使用的语言增强技术——Back-translation:回译能够在保存语义不变的情况下,生成多样的句式。

UDA关键解决的是如何根据少量的标注数据来增加未标注数据的使用?

对给定的标注数据,可以根据监督学习方法学习到一个模型M=pθ(y∣x)M=p_{\theta}(y|x)M=pθ​(y∣x)。对未标注数据,进行半监督学习:参考标注数据分布,对未标注数据添加噪声后学习到的模型pθ(y∣x^)p_{\theta}(y|\hat{x})pθ​(y∣x^)。为了保证一致性的训练(consistency training),需要尽量减少标注数据和未标注数据的分布差异,即最小化两个分布的KL散度:minDKL(pθ(y∣x)∣∣pθ(y∣x^))min \quad D_{KL} (p_{\theta}(y|x)||p_{\theta}(y|\hat{x}))minDKL​(pθ​(y∣x)∣∣pθ​(y∣x^))。而x^=q(x,ϵ)\hat{x}=q(x,\epsilon)x^=q(x,ϵ)是对未标注数据添加噪声后得到的增强数据。那么如何添加噪声ϵ\epsilonϵ,来得到增强的数据集x^\hat{x}x^?

  • valid noise: 可以保证原始未标注数据和扩展的未标注数据的预测具有一致性。
  • diverse noise: 在不更改标签的情况下对输入进行大量修改,增加样本多样性,而不是仅用高斯噪声进行局部更改。
  • targeted inductive biases: 不同的任务需要不同的归纳偏差。

UDA论文中对图像分类、文本分类任务做了实验,分别用到不同的数据增强策略:

  • Image Classification: RandAugment数据增强方法,该方法受到 AutoAugment (Cubuk et al., 2018) 的启发。 AutoAugment 使用一种搜索方法将 Python 图像库 (PIL) 中的所有图像处理转换结合起来,以找到一个好的增强策略。 在 RandAugment 中,我们不使用搜索,而是从 PIL 中的同一组增强变换中统一采样。 换句话说,RandAugment 更简单,不需要标记数据,因为不需要搜索最优策略。
  • Text Classification: Back-translation回译,保持语义,利用机器翻译系统进行多语言互译,增加句子多样性。
  • Text Classification: Word replacing with TF-IDF ,回译可以保证全局语义不变,但无法控制某个词的保留。对于主题分类任务,某些关键词在确定主题时具有更重要的信息。所以采用新的增强方法:用较低的TF-IDF分数替换无信息的单词,同时保留较高的TF-IDF值的单词。

2. EDA (Easy Data Augmentation)

无监督方法——EDA来自论文《EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks》。一个用于提高文本分类任务性能的简单数据增强技术。 EDA 由四个简单但功能强大的操作组成:同义词替换、随机插入、随机交换和随机删除。 在实验的五个文本分类任务中,EDA 提高了卷积和递归神经网络的性能。 EDA 对于较小的数据集表现出特别强的结果; 平均而言,在五个数据集上,仅使用 50% 的可用训练集进行 EDA 训练达到了与使用所有可用数据进行正常训练相同的准确度。

EDA 的4个数据增强操作:

  • 同义词替换(Synonym Replacement, SR):从句子中随机选取n个不属于停用词集的单词,并随机选择其同义词替换它们;
  • 随机插入(Random Insertion, RI):随机的找出句中某个不属于停用词集的词,并求出其随机的同义词,将该同义词插入句子的一个随机位置。重复n次;
  • 随机交换(Random Swap, RS):随机的选择句中两个单词并交换它们的位置。重复n次;
  • 随机删除(Random Deletion, RD):以 p的概率,随机的移除句中的每个单词;

使用EDA需要注意:控制样本数量,少量学习,不能扩充太多,因为EDA操作太过频繁可能会改变语义,从而降低模型性能。

关于EDA,我想起之前面试NLP算法工程师时,被要求写出这个4个函数。

同义词替换(Synonym Replacement, SR):

########################################################################
# Synonym replacement
# Replace n words in the sentence with synonyms from wordnet
#########################################################################for the first time you use wordnet
#import nltk
#nltk.download('wordnet')
from nltk.corpus import wordnet def synonym_replacement(words, n):new_words = words.copy()random_word_list = list(set([word for word in words if word not in stop_words]))random.shuffle(random_word_list)num_replaced = 0for random_word in random_word_list:synonyms = get_synonyms(random_word)if len(synonyms) >= 1:synonym = random.choice(list(synonyms))new_words = [synonym if word == random_word else word for word in new_words]#print("replaced", random_word, "with", synonym)num_replaced += 1if num_replaced >= n: #only replace up to n wordsbreak#this is stupid but we need it, trust mesentence = ' '.join(new_words)new_words = sentence.split(' ')return new_words

随机删除(Random Deletion, RD):

########################################################################
# Random deletion
# Randomly delete words from the sentence with probability p
########################################################################def random_deletion(words, p):#obviously, if there's only one word, don't delete itif len(words) == 1:return words#randomly delete words with probability pnew_words = []for word in words:r = random.uniform(0, 1)if r > p:new_words.append(word)#if you end up deleting all words, just return a random wordif len(new_words) == 0:rand_int = random.randint(0, len(words)-1)return [words[rand_int]]return new_words

随机交换(Random Swap, RS):

########################################################################
# Random swap
# Randomly swap two words in the sentence n times
########################################################################def random_swap(words, n):new_words = words.copy()for _ in range(n):new_words = swap_word(new_words)return new_wordsdef swap_word(new_words):random_idx_1 = random.randint(0, len(new_words)-1)random_idx_2 = random_idx_1counter = 0while random_idx_2 == random_idx_1:random_idx_2 = random.randint(0, len(new_words)-1)counter += 1if counter > 3:return new_wordsnew_words[random_idx_1], new_words[random_idx_2] = new_words[random_idx_2], new_words[random_idx_1] return new_words

随机插入(Random Insertion, RI):

########################################################################
# Random insertion
# Randomly insert n words into the sentence
########################################################################def random_insertion(words, n):new_words = words.copy()for _ in range(n):add_word(new_words)return new_wordsdef add_word(new_words):synonyms = []counter = 0while len(synonyms) < 1:random_word = new_words[random.randint(0, len(new_words)-1)]synonyms = get_synonyms(random_word)counter += 1if counter >= 10:returnrandom_synonym = synonyms[0]random_idx = random.randint(0, len(new_words)-1)new_words.insert(random_idx, random_synonym)

参考:
[1]: https://github.com/google-research/uda “Unsupervised Data Augmentation”
[2]: https://arxiv.org/abs/1904.12848 “Unsupervised Data Augmentation for Consistency Training”
[3]: https://github.com/zhanlaoban/EDA_NLP_for_Chinese “EDA_NLP_for_Chinese”
[4]: https://arxiv.org/abs/1901.11196 “EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks”
[5]: https://github.com/jasonwei20/eda_nlp “EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks”

欢迎各位关注我的个人公众号:HsuDan,我将分享更多自己的学习心得、避坑总结、面试经验、AI最新技术资讯。

NLP中的数据增强:UDA、EDA相关推荐

  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 中的数据增强

    前言 数据增强(Data augmentation,DA)是指利用 现有 的数据生成额外的 合成的 数据的技术.在训练样本匮乏,标注成本较高时,尝试数据增强方法是很有必要的. Figure 1. 数据 ...

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

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

  6. NLP 英文文本数据增强

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

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

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

  8. 数据增强_NLP 数据增强方法 EDA

    当数据集比较少的时候,往往会导致模型陷入过拟合.数据增强是一种比较有效的扩充数据集的方法,在计算机视觉领域有比较重要的作用.但是在 NLP 领域数据增强的方法相对少一些,本文介绍一种比较传统的 NLP ...

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

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

最新文章

  1. React文档(十四)深入JSX
  2. 线下生意再次“受宠”:大数据给你添点料
  3. Js中去除数组中重复元素的几种方法
  4. 测量分类准确率的过程算坍缩吗?
  5. 电脑没有ps怎么改照片dpi_PS入门的小技巧来啦!小白们还在等什么呢?快进来啊!...
  6. zoj2968 Difference Game
  7. html语言head里面的link示例,Html之head部分详解(示例代码)
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨学生们参加各科测试的次数【难度简单】​
  9. 清华博士的逆袭路:从延毕警告到在顶刊发文,我蛰伏了四年
  10. BZOJ4372: 烁烁的游戏【动态点分治】
  11. 7-4 三角形判断 (15 分)
  12. 二维字符数组转字符串c语言,[求助] 怎样转换一个字符二维数组到一维数组~~~...
  13. “/etc/profile“ 无法保存 E212: Can‘t open file for writing
  14. 7923 consoleconsumer 怎么关闭_英雄联盟手游怎么设置最好 LOL手游最佳设置攻略_英雄联盟手游...
  15. 新浪微博OAuth认证简介
  16. android camera2美颜,Nano Camera(多功能美颜相机)V2.1 安卓版
  17. 最新麦子学院嵌入式开发系列培训教程
  18. 关于连接同一wifi,手机可以上网,电脑无法上网问题
  19. 基于Linux的socket网络编程项目——游侠手机商城
  20. A review of 3D vessel lumen segmentation techniques: Models, features and extraction schemes

热门文章

  1. 【C++学习】 设计案例1:设计立方体类
  2. 你知道如何用 Git 来统计代码吗?
  3. Cinema 4D R20 Essential Training: VFX Cinema 4D R20基本训练:视觉特效 Lynda课程中文字幕
  4. UESTC人工智能 期末复习
  5. DNS被污染后怎么才能解决?
  6. 疫后如何激活消费?上海和阿里打了个样板
  7. Hashtag-Based Sub-Event Discovery Using Mutually Generative LDA in Twitter 阅读笔记
  8. 荣耀Play6T配置怎么样 荣耀Play6T值得买吗
  9. HBase读数据和写数据流程
  10. 解决:为保证帐号安全,您在这里的注册受到限制。 建议您下载网易官方手机客户端邮箱大师进行注册 原文信息: 解决:为保证帐号安全,您在这里的注册受到限制。 建议您下载网易官方手机客户端邮箱大师进行注册