gan 总结 数据增强_[NLP]聊一聊,预处理和数据增强技术
在基于margin-loss的句子相似度这个项目中,为了验证想法,找不到开放数据集,因此自己从新浪爱问爬取了数据。自己爬的数据和学界开放的数据对比,数据显得非常脏。这里有三个含义:第一:数据不规范,比如用词,写作等;第二:中文文本中蕴含了特殊符号等;第三:数据偏见在真实场景下是确实存在的。这里是从数据质量的角度来看,结合具体的场景,可能会有各种影响数据质量的因素。因此,我们需要数据预处理,目的是提升数据质量;
此外,数据规模也是重要的。我们需要数据增强技术来提升数据规模。这是数据增强技术的表面结果,从深层次的角度来看,数据增强技术可以有效防止模型的过拟合,提升模型的鲁棒性。所谓”见多识广”。
因此,为了提升数据质量和数据规模,我们需要预处理技术和数据增强技术。
一.预处理技术
1.中文
(1)分词
中文分词通常是基于词的中文NLP场景下的第一步,虽然目前的中文分词社区仍然对于一些中文语句的分词结果不理想,但是整体上是可用的。自己常用的分词工具是哈工大的LTP。
(2)停用词过滤
停用词是高频,但是无意义的词。在中英文环境中都存在停用词,但是停用词是否要去掉是一个有争议的问题。从理论上分析,去掉停用词,有助于减少VOC的大小,加快收敛,节省存储和计算时间;减少停用词对句子语义表示的影响,有助于提升模型效果。但是实际上,预估停用词对任务的影响是困难的。因此实际场景下,可以做两个版本分别对比。
(3)特殊符号清洗
标点符号和词都是符号,但是还要一类特殊符号,诸如笑脸,数字,运算符号等,在一些场景下,需要注意这类特殊符号的过滤。如果这类符号是低频的,那么通过停用词过滤,可以去掉一部分符号,但是如果不能过滤掉,需要显式地去过滤该类符号。在上文提到的项目中,就会遇到这种表情符号特别丰富的场景。
(4)任务依赖的预处理
在分类任务中,可以通过NER技术将待分类文本中出现的地点,组织和人名替换为,和,减少OOV的可能,优点同上。比如,可以应用在AI Challenger 2018的细粒度情感分类比赛中。
2.英文
(1)分词
英文句子以空格作为分割符,分割单词。但是直接通过空格分隔符会导致下述情况下的分词结果的不正确性。比如:
You’re the apple of my eye!
分词后,eye!和eye就表示不同的单词了。直观上来看,似有不合理之处。因此,显然,要去掉符号。
(2)标点符号过滤
在(1)中,去掉标点符号之后,得到,
You re the apple of my eye
这样的话,又会遇到it’s和its的冲突。
因此,好的英文分词要考虑上述两种情况,NLTK对于
it’s my dog!
的分词结果是:
[[it] [’s] [my] [dog] [!]]
这正是我们需要的。
(3)大小写统一
在英文场景下需要考虑,有些特殊场景下不适合进行大小写的统一。比如,BERT的预训练模型就提供了两个版本的,分别是统一后和不做统一的。
(4)标准化(stemming&lemmatization)
这个是英文场景所特有的,举例如下:
第一种情况:比如对名词eye,有eye和eyes两种形态;
第二种情况:比如对动词take,有token, taken, take三种形态。
通过stemming(词干分析)解决第一种;通过lemmatization(词元分析)解决第二种;
如果说分词可以认为是中文所特有的(不严格成立,英文也可以分词,但是英文分词的必要性显然不如中文分词),那么标准化就是英文所特有的。
(5)subword
为了进一步减少VOC的大小,在机器翻译任务中比较流行的subword技术。比如两个单词,分别是person和possion,则subword可以表示为[[pers],[on],[possi]],具体由语料和BPE算法决定。
二.数据增强
1.简单数据增强
(1)同义词替换
同义词的获取可以基于词向量获取其他技术构建的词的量化表示,通过距离计算相似度得到。
(2)同义词随机插入
将句子中选定的词的同义词随机插入句子任何位置,插入之后,句子变长。
(3)随机交换词汇位置
交换后,句子长度不变。
(4)随机删除
2.任务依赖的增强技术
(1)back-translation
反向翻译用于机器翻译,用于中文文本纠错任务。
3.复杂技术
(1)使用预测语言模型做同义词替换
(2)作为平滑技术的数据加噪
(3)基于生成模型(VAE&GAN&Flow)进行数据生成
总结:虽然梳理了一些预处理和数据增强的技术,但是实际任务中的技术选取还是要以下游任务的提升为基准点。2018年有一篇文章做CV领域的自动数据增强技术的,基于强化学习。NLP领域或许也可以做一做呀。从工具使用上,在预处理阶段,综合体验NLTK和哈工大的LTP结合使用最棒。可能与自己不载入一个模型就会感觉不舒服有关吧。本来写这篇博客的目的是想写一个预处理和数据增强的模块的,但是现在感觉意义不是很大。
主要参考:
1.《EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks》
在情感分类任务上,比较了两种数据增强技术,分别是Random Token Perturbations和Backtranslation,证明了Backtranslation的有效性。
SQuAD2.0生成不相关的问题。该问题与文章相关,但是在文章中找不到答案。因为SQuAD2.0添加了一类新的问题,该问题的是“no answer”的。
如非必要,不要做过多的数据预处理。因为无论是对于任务本身,还是对于后续的生产部署,都是坑。
10.《Data Augmentation using Pre-trained Transformer Models》
文章比较了基于自编码(BERT),预训练语言模型(GPT-2),和预训练seq2seq(BART/T5)的三种模型用于数据增强的效果。具体的,比如对于一个情感分类任务,三种方式都可以做,哪种好一些?文章的结论是:考虑到标签保持的能力和多样性,seq2seq整体上较好。 在具体数据增强的方法上,文章也有一些阐述。整体上文章解决的问题实用性较强,既可以作为一篇Review,也可以作为一篇技术报告来看。此外,文中的一些方法虽然是放在数据增强的角度来考察的,但是理论上应该也可以推广到其他Task上,例如情感迁移等。
总结的非常全面的NLP中的数据增强方法。
数据增强作为一种正则化的观点。
gan 总结 数据增强_[NLP]聊一聊,预处理和数据增强技术相关推荐
- keras时间序列数据预测_使用Keras的时间序列数据中的异常检测
keras时间序列数据预测 Anomaly Detection in time series data provides e-commerce companies, finances the insi ...
- 什么事数据科学_如果您想进入数据科学,则必须知道的7件事
什么事数据科学 No way. No freaking way to enter data science any time soon-That is exactly what I thought a ...
- 基于plotly数据可视化_如何使用Plotly进行数据可视化
基于plotly数据可视化 The amount of data in the world is growing every second. From sending a text to clicki ...
- 数据多重共线性_多重共线性对您的数据科学项目的影响比您所知道的要多
数据多重共线性 Multicollinearity is likely far down on a mental list of things to check for, if it is on a ...
- python怎么用大数据分析师_如何七周成为数据分析师18:Python的新手教程
本文是<怎样 七周成为数据剖析 师>的第十八篇教程,假定 想要了解 写作初衷,能够 先行阅读七周指南.温馨提示:假定 您曾经 熟习 Python,大可不用 再看这篇文章,或只选择 部分 . ...
- python大数据免费_用python做大数据
不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...
- 数据结构设计_撮合引擎开发:数据结构设计
价值超5万的撮合引擎:开篇 价值超5万的撮合引擎:MVP版本 交易委托账本 交易委托账本(OrderBook)是整个撮合引擎里最核心也是最复杂的数据结构,每个交易对都需要维护一份交易委托账本,账本里保 ...
- python收集数据程序_用Python挖掘Twitter数据:数据采集
原标题:用Python挖掘Twitter数据:数据采集 作者:Marco Bonzanini 翻译:数盟 这是7部系列中的第1部分,注重挖掘Twitter数据以用于各种案例.这是第一篇文章,专注于数据 ...
- 商业方向的大数据专业_好程序员大数据培训分享大数据就业方向有哪些
好程序员大数据培训分享大数据就业方向有哪些?看到了大数据的就业前景及就业薪资,相信很多人都对大数据技术跃跃欲试,想要学习大数据技术.小编认为在学习大数据之前,你还需要了解一下大数据的就业方向有哪些?毕 ...
最新文章
- java.lang.exception_java.lang.RuntimeException和java.lang.Exception
- Tech UP——EGO北京分会成立啦
- linux命令ping
- 小工匠聊架构-Redis 缓存一致性设计
- python把列表写入excel_用Python将列表写入Excel文件
- Ant Design Vue select下拉列表设置默认值
- 2019ICPC(南京) - Holy Grail(最短路)
- 西部数据app可导致Windows 和 macOS 提权
- bash+vasp+vaspkit能量应变计算弹性常数
- 腾讯CJ放出大招!次世代手游大作曝光,画面堪比3A大作
- UOJ132 【NOI2015】小园丁与老司机
- 讯飞离线语音识别使用出现初始化失败的解决方法
- UVM-入门实验2_uvm代码实现
- 4个手机使用必备小常识,没几个人全知道,了解完绝对涨知识
- 苹果软件扣费申请退款
- 最新全国机场名(持续更新2017-12-27)
- Java action name=*_* class=com..action.{1}Action method={2} 中*_*意思
- android socket 推送服务版本
- php detect,php 检测字符编码mb_detect_encoding()函数
- 你记得也好,最好你忘掉
热门文章
- 这样是不是就可以预测语音长度和内容了
- JavaScript9x9乘法表
- 生成动态验证码的jsp
- 都说做ToB商业模式,VR AR博物馆内容的矿或许可以挖下
- python编码最佳实践之总结
- write solid code 零散(原文)
- VS2010 ASP.NET MVC4 安装失败问题
- 基于springboot实现高校学生健康档案管理系统
- 基于Springboot实现共享自习室管理系统
- 调用torchtext报错OSError: libtorch_cpu.so: cannot open shared object file: No such file or directory