在基于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]聊一聊,预处理和数据增强技术相关推荐

  1. keras时间序列数据预测_使用Keras的时间序列数据中的异常检测

    keras时间序列数据预测 Anomaly Detection in time series data provides e-commerce companies, finances the insi ...

  2. 什么事数据科学_如果您想进入数据科学,则必须知道的7件事

    什么事数据科学 No way. No freaking way to enter data science any time soon-That is exactly what I thought a ...

  3. 基于plotly数据可视化_如何使用Plotly进行数据可视化

    基于plotly数据可视化 The amount of data in the world is growing every second. From sending a text to clicki ...

  4. 数据多重共线性_多重共线性对您的数据科学项目的影响比您所知道的要多

    数据多重共线性 Multicollinearity is likely far down on a mental list of things to check for, if it is on a ...

  5. python怎么用大数据分析师_如何七周成为数据分析师18:Python的新手教程

    本文是<怎样 七周成为数据剖析 师>的第十八篇教程,假定 想要了解 写作初衷,能够 先行阅读七周指南.温馨提示:假定 您曾经 熟习 Python,大可不用 再看这篇文章,或只选择 部分 . ...

  6. python大数据免费_用python做大数据

    不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...

  7. 数据结构设计_撮合引擎开发:数据结构设计

    价值超5万的撮合引擎:开篇 价值超5万的撮合引擎:MVP版本 交易委托账本 交易委托账本(OrderBook)是整个撮合引擎里最核心也是最复杂的数据结构,每个交易对都需要维护一份交易委托账本,账本里保 ...

  8. python收集数据程序_用Python挖掘Twitter数据:数据采集

    原标题:用Python挖掘Twitter数据:数据采集 作者:Marco Bonzanini 翻译:数盟 这是7部系列中的第1部分,注重挖掘Twitter数据以用于各种案例.这是第一篇文章,专注于数据 ...

  9. 商业方向的大数据专业_好程序员大数据培训分享大数据就业方向有哪些

    好程序员大数据培训分享大数据就业方向有哪些?看到了大数据的就业前景及就业薪资,相信很多人都对大数据技术跃跃欲试,想要学习大数据技术.小编认为在学习大数据之前,你还需要了解一下大数据的就业方向有哪些?毕 ...

最新文章

  1. java.lang.exception_java.lang.RuntimeException和java.lang.Exception
  2. Tech UP——EGO北京分会成立啦
  3. linux命令ping
  4. 小工匠聊架构-Redis 缓存一致性设计
  5. python把列表写入excel_用Python将列表写入Excel文件
  6. Ant Design Vue select下拉列表设置默认值
  7. 2019ICPC(南京) - Holy Grail(最短路)
  8. 西部数据app可导致Windows 和 macOS 提权
  9. bash+vasp+vaspkit能量应变计算弹性常数
  10. 腾讯CJ放出大招!次世代手游大作曝光,画面堪比3A大作
  11. UOJ132 【NOI2015】小园丁与老司机
  12. 讯飞离线语音识别使用出现初始化失败的解决方法
  13. UVM-入门实验2_uvm代码实现
  14. 4个手机使用必备小常识,没几个人全知道,了解完绝对涨知识
  15. 苹果软件扣费申请退款
  16. 最新全国机场名(持续更新2017-12-27)
  17. Java action name=*_* class=com..action.{1}Action method={2} 中*_*意思
  18. android socket 推送服务版本
  19. php detect,php 检测字符编码mb_detect_encoding()函数
  20. 你记得也好,最好你忘掉

热门文章

  1. 这样是不是就可以预测语音长度和内容了
  2. JavaScript9x9乘法表
  3. 生成动态验证码的jsp
  4. 都说做ToB商业模式,VR AR博物馆内容的矿或许可以挖下
  5. python编码最佳实践之总结
  6. write solid code 零散(原文)
  7. VS2010 ASP.NET MVC4 安装失败问题
  8. 基于springboot实现高校学生健康档案管理系统
  9. 基于Springboot实现共享自习室管理系统
  10. 调用torchtext报错OSError: libtorch_cpu.so: cannot open shared object file: No such file or directory