与计算机视觉中使用图像进行数据增强不同,NLP中文本数据增强是非常罕见的。这是因为图像的一些简单操作,如将图像旋转或将其转换为灰度,并不会改变其语义。语义不变变换的存在使增强成为计算机视觉研究中

举个简单例子,我们用机器翻译把一段英语翻译成另一种语言,然后再翻译回英语。这个方法已经成功的被用在Kaggle恶意评论分类竞赛中。反向翻译是NLP在机器翻译中经常使用的一个数据增强的方法。。其本质就是快速产生一些不那么准确的翻译结果达到增加数据的目的。

例如,如果我们把“I like this movie very much”翻译成俄语,就会得到“Мне очень нравится этот фильм”,当我们再译回英语就会得到“I really like this movie”。回译的方法不仅有类似同义词替换的能力,它还具有在保持原意的前提下增加或移除单词并重新组织句子的能力。

回译可使用python translate包和textblob包(少量翻译),或者使用百度翻译或谷歌翻译的api通过python实现。

参考:

dupanfei1/deeplearning-util​github.com

1.回译

在这个方法中,我们用机器翻译把一段中文翻译成另一种语言,然后再翻译回中文。回译的方法不仅有类似同义词替换的能力,它还具有在保持原意的前提下增加或移除单词并重新组织句子的能力。

回译可使用python translate包和textblob包(少量翻译),或者使用百度翻译的api通过python实现。

百度开放的翻译接口

百度翻译开放平台​api.fanyi.baidu.com

支持每月200万字的免费翻译,提供了各种语言的使用demo,本篇使用Python3调用百度API实现自然语言的翻译,实现代码如下。

import http.clientimport hashlibimport jsonimport urllibimport random#调用百度翻译API将中文翻译成英文def baidu_translate(content):appid = 'appid'secretKey = '秘钥'httpClient = Nonemyurl = '/api/trans/vip/translate'q = contentfromLang = 'zh'  # 源语言toLang = 'en'  # 翻译后的语言salt = random.randint(32768, 65536)sign = appid + q + str(salt) + secretKeysign = hashlib.md5(sign.encode()).hexdigest()myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + signtry:httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')httpClient.request('GET', myurl)# response是HTTPResponse对象response = httpClient.getresponse()jsonResponse = response.read().decode("utf-8")  # 获得返回的结果,结果为json格式js = json.loads(jsonResponse)  # 将json格式的结果转换字典结构dst = str(js["trans_result"][0]["dst"])  # 取得翻译后的文本结果#print(dst)  # 打印结果return dstexcept Exception as e:print('err:' + e)finally:if httpClient:httpClient.close()if __name__=='__main__':contents='百度翻译开放平台是百度翻译针对广大开发者提供的开放服务平台'#将翻译后的英文写入文件with open('data/test_data_translate', 'a', encoding="utf-8") as f:translate_en = baidu_translate_1(contents)  # 中文翻译成英文f.write( 't' + translate_zh + 'n')print(translate_en)

这种方法试图在不改变句子主旨的情况下替换文本中的单词。

  • 基于词典的替换

在这种技术中,我们从句子中随机取出一个单词,并使用同义词词典将其替换为同义词。例如,我们可以使用WordNet的英语词汇数据库来查找同义词,然后执行替换。它是一个手动管理的数据库,其中包含单词之间的关系。

  • 基于词向量的替换
  • 在这种方法中,我们采用预先训练好的单词嵌入,如Word2Vec、GloVe、FastText、Sent2Vec,并使用嵌入空间中最近的相邻单词替换句子中的某些单词。Jiao et al.在他们的论文“TinyBert”中使用了这种技术,以提高他们的语言模型在下游任务上的泛化能力。Wang et al.使用它来增加学习主题模型所需的tweet。

例如,你可以用三个最相似的单词来替换句子中的单词,并得到文本的三个变体。

取最近的邻居是很容易的。例如,这

2. 随机噪声注入

这些方法的思想是在文本中加入噪声,使所训练的模型对扰动具有鲁棒性

  • 拼写错误注入
    在这种方法中,我们在句子中的一些随机单词上添加拼写错误。这些拼写错误可以通过编程方式添加,也可以使用常见拼写错误的映射,如:https://github.com/makcedward/nlpaug/blob/master/model/spelling_en.txt。
  • QWERTY键盘错误注入
    该方法试图模拟在QWERTY布局键盘上输入时发生的常见错误,这些错误是由于按键之间的距离非常近造成的。错误是根据键盘距离注入的。
  • Unigram噪声
    该方法已被Xie et al.和UDA论文所采用。其思想是用从单字符频率分布中采样的单词进行替换。这个频率基本上就是每个单词在训练语料库中出现的次数。
  • Blank Noising
    这个方法是由Xie et al.在他们的论文中提出的。其思想是用占位符标记替换一些随机单词。本文使用“_”作为占位符标记。在论文中,他们将其作为一种避免特定上下文过拟合的方法,以及语言模型的平滑机制。该技术有助于提高perplexity和BLEU评分。
  • 句子打乱
    这是一种朴素的技术,我们将训练文本中的句子打乱,以创建一个增强版本。

3. 半监督 Mixmatch

半监督学习方法的提出是为了更好地利用未标注的数据,减轻对于大规模标注数据集的依赖;如今也证明了这是一种强有力的学习范式。

在这篇论文中,作者们把当前不同任务中的做法为半监督学习做了统一,得到了一种新的算法——MixMatch。它的工作方式是通过 MixUp 猜测数据扩增方法产生的无标签样本的低熵标签,并把无标签数据和有标签数据混合起来。

作者们通过实验表明 MixMatch 在多种不同的数据集、多种不同的有标签数据规模中都能以很大幅度领先此前的所有方法。比如,在 CIFAR 数据集上、只有 250 个标签的情况下,作者们把错误率降低到了之前方法的 1/4,在 STL-10 数据集上也降低到了之前方法的一半。

作者们也展示了 MixMatch 可以在差分隐私的使用目的下,在准确率和隐私保护之间取得好得多的平衡。最后,作者们进行了对照实验,分析了 MixMatch 方法中的哪些组件最为关键。

4.防止过拟合其他方法

在深度学习中,为了避免出现过拟合(Overfitting),通常输入充足的数据量是最好的解决办法。当数据无法达到模型的要求或者添加数据后模型由于某类数据过多导致过拟合时,以下方法也可以发挥一些作用:

  • Regularization:数据量比较小会导致模型过拟合, 使得训练误差很小而测试误差特别大。通过在Loss Function 后面加上正则项可以抑制过拟合的产生。缺点是引入了一个需要手动调整的hyper-parameter。
  • Dropout:这也是一种正则化手段,不过跟以上不同的是它通过随机将部分神经元的输出置零来实现。
  • Unsupervised Pre-training:用Auto-Encoder或者RBM的卷积形式一层一层地做无监督预训练, 最后加上分类层做有监督的Fine-Tuning。
  • Transfer Learning(迁移学习):在某些情况下,训练集的收集可能非常困难或代价高昂。因此,有必要创造出某种高性能学习机(learner),使得它们能够基于从其他领域易于获得的数据上进行训练,并能够在对另一领域的数据进行预测时表现优异。

实现

要使用上述所有方法,可以使用名为nlpaug的python库:

makcedward/nlpaug​github.com

它提供了一个简单且一致的API来应用这些技术。

数据增强_浅析数据增强相关推荐

  1. dgi数据治理_银行数据治理方法浅析

    数据是银行最核心的资产,数据治理能成就银行的未来.数据治理是一个新兴的并且不断演进的概念,涉及数据质量.数据管理.数据政策.商业过程管理.风险管理等多个领域,同时也受技术革新等因素的影响.在数据治理体 ...

  2. er图转为数据流程图_「数据架构」实体关系模型介绍

    实体-关系模型(或ER模型)描述特定知识领域中相关的事物.基本的ER模型由实体类型(对感兴趣的事物进行分类)和指定实体之间可能存在的关系(那些实体类型的实例)组成. 在软件工程中,为了执行业务流程,E ...

  3. 人力资源大数据公司_大数据与人力资源相结合,平衡透明度和隐私

    人力资源大数据公司 这对人力资源部门来说是一个激动人心的时刻-分析的使用可以预测地将围绕人力资源的对话和看法改变为一项功能. 大多数组织相信人员分析在使HR成为高级管理人员的战略合作伙伴方面可以发挥的 ...

  4. 数据安全审计_使用数据级安全性对InfoSphere Guardium中的审计结果进行细粒度访问控制

    数据安全审计 数据级安全性对职责分离的重要性 处理数据的组织需要关注遵守不同程度的职责分离强制执行情况. 这意味着要确保没有多人参与和审查就无法完成任务,因为欺诈和人为错误的可能性较小. 这就是为什么 ...

  5. 如何成为数据科学家_成为数据科学家的5大理由

    如何成为数据科学家 目录 (Table of Contents) Introduction介绍 Variety of Skills各种技能 Uniqueness独特性 Impact影响力 Remote ...

  6. 趣味数据故事_坏数据的好故事

    趣味数据故事 Meet Julia. She's a data engineer. Julia is responsible for ensuring that your data warehouse ...

  7. 数据创造价值_展示数据并创造价值

    数据创造价值 To create the maximum value, urgency, and leverage in a data partnership, you must present th ...

  8. 如何成为数据科学家_成为数据科学家需要了解什么

    如何成为数据科学家 Data science is one of the new, emerging fields that has the power to extract useful trend ...

  9. 什么是大数据口子_大数据分析师年薪几十万,学什么专业才能从事大数据?

    近几年,大数据为各个领域带来了全新的变革,大数据的重要性越来越被企业和国家所看到,大数据工作者的需求再次被无限放大,他们的薪资和社会地位也在不断上涨.马云在演讲中就提到,未来的时代将不是IT时代,而是 ...

最新文章

  1. Java学习day2
  2. 根据中序、前序遍历重建二叉树
  3. MVC过滤整个项目输入关键字
  4. LiteOS内核源码分析:位操作模块
  5. webview java调用js_android WebView java与js相互调用
  6. 柔性太阳能电池pdf_CIS太阳能电池.pdf
  7. Windows勒索病毒防范、解决方法全攻略
  8. 爬取外网数据(twitter、facebook)-易数云可视化爬虫软件
  9. 绿联串口线linux驱动下载,绿联usb转串口驱动
  10. 证券市场的法律法规体系
  11. error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-h4wtvo23\opencv\
  12. Unity3D-摄像机详解
  13. 王者荣耀头像太小怎么办?调整图片尺寸工具分享
  14. 打包开发板根文件系统,并制作成img镜像
  15. 为什么他们能成为大师-7位华人诺贝尔科学奖得主的成功法则
  16. 人工智能——软科中国大学专业排名
  17. 云媒易:软文素材怎么找,学会这几招,让软文素材源源不断
  18. 电脑xp系统坏了,如何处理
  19. AC、AP无线组网的一些操作
  20. pandas时序数据分析

热门文章

  1. 解决WSL2中Vmmem内存占用过大问题
  2. Spark On K8S(Standalone模式部署)
  3. golang字符串类型:遍历字符串中的字符及修改字符串,只能转换为[]byte(字符串不含中文)或[]rune(字符串含中文)
  4. python2/python3安装pip/pip3及使用国内镜像源(python2/3同时安装)
  5. Java成员变量和局部变量的区别
  6. C#访问MySQL数据库的方法
  7. 报错“Error running ‘Tomcat 9.0.17‘: Address localhost:1099 is already in use
  8. 细品java封装继承多态
  9. redis 哨兵_Redis哨兵配置
  10. C/C++ 之 应用程序的编译过程