UDA中的数据增强

2021SC@SDUSC
实验中用到的数据增强的方式
图像
AutoAugment
这种方法确定一个对图像进行变换的策略空间,使用强化学习的方式来确定最优变换策略。

这种方法和我们前面介绍的 NAS 用到的 RL 方法差不多,也是用一个 RNN 来顺序输出一个数据增广策略,把每一步的输出看做一个 action,最后每个轨迹有一个总的 sparse reward,然后使用强化学习方法来训练。
RNN 输出一个 policy 包含五个 sub-policy,每个 sub-policy 包含两个变换,每个变换由三个元素组成,分别是“变换方式”、“变换概率“(可以选择进行该变换或者不进行该变换)和”变换幅度“。对于一幅图片来说,先从各个 sub-policy 中等概率选择一个,然后再顺序进行该 sub-policy 中的两个操作。
RandAugment
改进自AutoAugment,不再搜索最优策略,而是在所有的子策略中以均匀分布随机采样。

AutoAugment 的搜索方法比较暴力,直接在数据集上搜索针对该数据集的最优策略,其计算量很大。在 RandAugment 文章中作者发现,一方面,针对越大的模型,越大的数据集,使用 AutoAugment 方式搜索到的增广方式产生的收益也就越小;另一方面,这种搜索出的最优策略是针对该数据集的,其迁移能力较差,并不太适合迁移到其他数据集上。
在 RandAugment 中,作者提出了一种随机增广的方式,不再像 AutoAugment 中那样使用特定的概率确定是否使用某种子策略,而是所有的子策略都会以同样的概率被选择到,论文中的实验也表明这种数据增广方式即使在大模型的训练中也具有很好的效果。
2. 文本

Back-translation
对于一个段落,我们把它从A语言翻译至B语言,再从B语言翻译至A语言。这样能保证变换前后的段落语义信息基本保持一致。
在这里插入图片描述
Word replacing with TF-IDF
Back-translation的一个问题就是转换前后会有一些关键的词语不一致,为了缓解这个问题,我们设置了一个指标量TF-IDF,高TF-IDF代表该词语在这个段落中是高信息量的。我们固定注这些高TF-IDF的词语,让它们在转换之后的段落中保持不变,而其余低TF-IDF的词语则将其替换掉。

# Easy data augmentation techniques for text classification
# Jason Wei and Kai Zou

from eda import *

#arguments to be parsed from command line
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("--input", required=True, type=str, help="input file of unaugmented data")
ap.add_argument("--output", required=False, type=str, help="output file of unaugmented data")
ap.add_argument("--num_aug", required=False, type=int, help="number of augmented sentences per original sentence")
ap.add_argument("--alpha", required=False, type=float, help="percent of words in each sentence to be changed")
args = ap.parse_args()

#the output file
output = None
if args.output:
    output = args.output
else:
    from os.path import dirname, basename, join
    output = join(dirname(args.input), 'eda_' + basename(args.input))

#number of augmented sentences to generate per original sentence
num_aug = 9 #default
if args.num_aug:
    num_aug = args.num_aug

#how much to change each sentence
alpha = 0.1#default
if args.alpha:
    alpha = args.alpha

#generate more data with standard augmentation
def gen_eda(train_orig, output_file, alpha, num_aug=9):

    writer = open(output_file, 'w')
    lines = open(train_orig, 'r').readlines()

    for i, line in enumerate(lines):
        parts = line[:-1].split(',')
        label = parts[0]
        sentence = parts[1]
        aug_sentences = eda(sentence, alpha_sr=alpha, alpha_ri=alpha, alpha_rs=alpha, p_rd=alpha, num_aug=num_aug)
        for aug_sentence in aug_sentences:
            writer.write(label + "," + aug_sentence + '\n')

    writer.close()
    print("generated augmented sentences with eda for " + train_orig + " to " + output_file + " with num_aug=" + str(num_aug))

#main function
if __name__ == "__main__":

    #generate augmented sentences and output into a new file
    gen_eda(args.input, output, alpha=alpha, num_aug=num_aug)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值