1、简介
数据增强——即对原始数据进行一系列操作后并产生同样有效的新数据的过程。在CV中,数据增强已经被玩出了很多花样,再NLP中都具有哪些操作呢?
NLP常见的有两类数据增强手段: 词语修改 与 句法语义增强 。
2、词语修改
这种技术仅仅在单词层面做简单修改与替换,易于理解,实现简单无需训练,并且执行速度快,但效果并不理想,甚至会改变语义结构,使得句子不通顺。常见的操作有:
随机删除
随机替换
随机交换
插入
上述方法在文献【1】(文末)中有详细介绍,此类方法被证明在小量数据中有一定效果,当数据量比较大时效果并不理想。
3、句法语义增强
该类方法旨在改变语义,并保持相对通顺的语句,是NLP中比较可靠且稳定的数据增强手段,然而该类方法现阶段并不十分成熟,常见有以下操作:
回译
使用机器翻译模型将句子翻译成另外一种语言,再翻译回目标语言。但会存在问题:当前机器翻译效果已逐渐完善,增强后的文本与原文几乎一致甚至完全一致,此时数据增强效果将大打折扣,因此可做出了以下改进:
从可翻译的语言池中,随机抽取N种语言作为中间翻译过程,最后再翻译为目标语言。这种改进会使得增强后的文本与源文本一致性大大降低,但调用API的时间较长,而且推荐大家找到足够的免费翻译API后使用该方法。
句子改写
顾名思义即对句子进行相同语义的转写,可以使用生成模型或者爬虫的方式进行。
SimBert 模型
比如苏剑林大神基于Bert,提出了Sim Bert相似语句改写模型,已经更新到2.0版本,对于某类型文本有一定改写能力:
>>> gen_synonyms(u'微信和支付宝哪个好?')
[
u'微信和支付宝,哪个好?',
u'微信和支付宝哪个好',
u'支付宝和微信哪个好',
u'支付宝和微信哪个好啊',
u'微信和支付宝那个好用?',
u'微信和支付宝哪个好用',
u'支付宝和微信那个更好',
u'支付宝和微信哪个好用',
u'微信和支付宝用起来哪个好?',
...........
]
可能受限于数据集,SimBert依然不能“通杀”所有数据,实际效果并不特别理想。
句子续写模型
句子续写是极具商业价值的NLP任务,可用于小说创作、文章修改等,因此开源模型并不多见,虽然GPT系列开源可用,但受限于硬件条件,一般个人难以驾驭。秘塔写作猫、彩云小梦等,澜舟科技、PaddlePaddle等科技公司提供句子续写API,但仅有少量的免费试用,仍然无法满足大批量使用。以下是秘塔写作猫和澜舟科技的使用样例:
相似语句爬虫
使用爬虫也可得到与原文相似的文本,例如我们可以从百度搜索中将相关语句输入,可得到相似语句:但对百度网页爬虫具有一定难度,同时到达一定量后会遭到封IP,该方法实现时需要具有较高的反爬虫能力,请密切关注手写AI,不久将来会推出解决方案。
总结
当前NLP领域中,同时具有:效果佳、免费开源、性能稳定特点的数据增强技术仍有待发现,各位同学在使用过程中,应根据硬件性能、处理时间、实际效果等出发,选择最合适数据增强手段。
相关文献
【1】 EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks.