【笔记】NLP 数据增强(二)

写在前面

打比赛看到有人总结文本增强的方法里提到了这两篇论文。以下是个人的总结记录。

1 EDA

《EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks》

对四种数据增强方法进行实验效果的对比,四种NLP数据增强方法:

  • 同义词替换(SR):选择一个词,用同义词替换。
  • 随机插入(RI):在句子中插入词语。
  • 随机交换(RS):选择句子中的一对词语交换。
  • 随机删除(RD):选择一个词删除。

文章在SST-2、CR、SUBJ、TREC、PC五个文本分类数据集上进行了实验。实验主要包括:

  • 不同比例的数据进行数据增强的消融实验

    结果显示数据增强方法对小数据集(约占全量数据的20%以下)的提升更为明显,50%以上的数据提升很有限。

  • 增强的数据是否保持了标签的语义

    对于这个问题,论文可视化(t-SNE)了模型输出最后一层的向量,通过和原数据的投影对比发现。增强生成的数据和原数据的向量投影分布近似,由此说明增强的有效性,即保持的正确的语义信息。

  • 四种增强方法各自的效果,以及寻找数据增强的最优参数

    上面的实验结论的四种增强方法综合的结果。

    • 四种增强方法单独实验

      随机插入(RI)和交换(RS)的效果差不多,同义词替换(SR)在大量样本数下提升不明显。随机删除(RD)在小样本数据量(约500条)下提升是四种方法中最好的,但大样本数下效果不好。具体可以看论文的实验图表。

    • 数据增强的参数

      参数涉及:增强(改动)原文本的比例、数据集大小、数据增强数目。

      1)首先对原文本改动的比例不能太大,5%-10%的比例,数据规模越小,改动要调小一些。2)其次数据集越小,数据增强效果越明显。3)对于小样本数据集,数据增强数目可以设置的多一些,而大样本要减少数据集扩充的数目,调小增强的样本条数。

论文代码:jasonwei20/eda_nlp: Data augmentation for NLP, presented at EMNLP 2019 (github.com)

2 AEDA

《AEDA: An Easier Data Augmentation Technique for Text Classification》EMNLP 2021 Findings

AEDA是EDA之后的工作,也和EDA进行了对比。AEDA比EDA更简单,增强方法是向句中插入标点。

增强过程:

  • 设置插入次数:从 [1, 1/3 length of text] 范围内随机选择执行插入的次数;
  • 随机选择插入标点:从 {“.”, “;”, “?”, “:”, “!”, “,”} 六个标点集合中选择。

文章同样在文本分类数据集:SST-2、CR、SUBJ、TREC、PC上进行了实验。实验主要包括:

  • 数据增强数目

    和EDA论文得到的结论类似,小样本数据集(约500条)增强数目更多收益更大,论文中增强16条要比 {1,2,4,8}条都要好一些。而大样本数据集(5000条及以上)中,增强 {1,2,4} 收益会更好一些。

  • 随机种子的影响

    省略

  • AEDA对深度模型的提高

    EDA和前面的AEDA实验是基于RNN/CNN模型的。AEDA在Bert分类任务上进行实验。论文结果是AEDA也支持对BERT的提升,作为对比EDA反而带来负收益。

论文代码:aeda_nlp/aeda.py at master · akkarimi/aeda_nlp (github.com)

我对AEDA方法的实验

我拿bert-base-chinese简单地在CLUE的iflytek数据集(多分类任务,acc)上做了下实验,看下效果。

full 0.1 0.5
None 0.598 0.362 0.557
2 0.593(-0.8%) 0.511(+41.1%) 0.579(+3.94%)

表格列是数据集划分:全体数据full,比例0.1,比例0.5。划分时我按标签类别对train集进行了随机抽样。dev和test都没换,以及用的model_pytorch里的代码。

表格行是AEDA论文代码的增强方法,对比了不增强None和对每条样本增强2条文本,保持增强的标签。然后,论文方法用的标点候选集是英文的。我也没有针对中文数据引入中文标点,或是更多标点。但是就结果上已经能看到一些效果了。

结果上看,和论文反映的规律差不多:小数据集下分数提升比较明显,可以看到:10%和50%比例的数据都得到了不同程度的提升(+41.1%和+3.94%),但在整个train上做增强反而降低了acc。

总结

EDA的方法我也在一些比赛中用过,我感觉一定要控制增强的比例,以及对原文改动的比例。这两个影响比较大,且很有可能引入噪声,导致负收益。

AEDA看完有点迷糊啊,感觉这个随机标签插入也能带来收益,好玄学。理论上去理解的话,就是相比EDA方法,AEDA引入的标点对原文本的语义信息修改不大,更多的是文本上增强加了一些噪声(改动了位置)。

个人使用看来对抗训练还是比较稳定的提点trick。像是SimCSE论文中使用两次dropout,也是对于向量层面的噪声操作会比较鲁棒一些。对原始文本的改动很有可能引入噪声,反而需要更加注意生成的文本。不过论文中也展示了,实验结果对于小样本的提升会更加明显一点,我没有实验过。EDA我之前是在短文本匹配任务场景试过,不是很好用,很大概率是引入噪声太大。

你可能感兴趣的:(NLP,笔记,自然语言处理,人工智能)