中文NLP数据增强工具:https://github.com/InsaneLife/NLPDataAugmentation
分类的增强方法
EDA
EDA-Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks
提出了数据增强方法:
- synonym replacement(SR):随机选取句子中n个非停用词的词语。对于每个词语随机选取它的一个同义词替换该词语。
- random insertion(RI):随机选取句子中的一个非停用词的词语,随机选取这个词语的一个近义词,将近义词随机插入到句子中,做n次。
- random swap(RS):随机选取两个词语,交换他们的位置,做n次。
- random deletion(RD):对于句子中的每个词语,以概率p选择删除。
问题:对于每个句子,短句相比于长句,吸收同样的n个词噪音,更可能导致类别标签发生变化。
原文是长句具备更好的噪声吸收能力。
因此引入了补偿机制:在SR、RI、RS中,对于每句话词语变化个数n,
其中
是句子的长度,
是一个超参数,表示句子中需要被改变的词语的百分比。
- 个人认为SR、RI、RS、RD很可能会改变句子的标签,其实确定标签没有改变也是非常重要。
实验
作者在五个分类数据集上,实验对比了加入EDA的四个方法前后带来的提升。作者将数据集分别在0,20%,40%,60%,80,100%上进行了实验,结果自然是数据越少增强带来的提升越大,到100%带来的提升不大,这个倒是意料之中,比较有意思的是作者还进一步进行了实验。
EDA是否改变了标签?
通过原始数据训练一个RNN模型,然后在测试集中每个句子通过EDA获得9个增强的句子,输入到模型中,获取其最后一层的向量输出,通过t-SNE算法将向量转为2维表达并绘制2D图形,发现增强的句子与原始句子的周围且距离很近,因此认为其标签并未改变。如图
针对分类问题,评估类别标签是否变化,使用此方法讲得通,但是是建立在一个假设基础上:即训练的分类RNN模型的向量表达是准确的,而分类模型在原始的小批量数据上训练而成,本身就是不够鲁棒的(论文本身要证明的就是这一点)。
个人感觉众包review更为可信,对于论文发表来说没啥技术含量且冗长,而且也与数据增强初衷违背。 但是NER问题的增强EDA可能不太适合使用,槽位值很可能因为随机替换之类的操作而改变。
同时作者还是对前文中的参数
在各个量级数据集上进行了实验,给出了如下建议:
N t r a i n N_{train} Ntrain | α alpha α | n a u g n_{aug} naug |
---|---|---|
500 | 0.05 | 16 |
2000 | 0.05 | 8 |
5000 | 0.1 | 4 |
More | 0.1 | 4 |
5000.051620000.05850000.14More0.14
更新中。。。 中文NLP数据增强工具:https://github.com/InsaneLife/NLPDataAugmentation
reference
- EDA-Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks
- https://mp.weixin.qq.com/s/p_aZ3jMwZx7FeWoJJhDDhA