ConSERT
ConSERT copied to clipboard
关于数据增强的问题
你好,请问数据增强的实现里cut off是只把对应的行或列的初始化embedding设置为0,mask没变,后续还会继续参与训练更新是吗?我看《A Simple but Tough-to-Beat Data Augmentation Approach for Natural Language Understanding and Generation》这篇的源代码里似乎是把mask和embedding都置为0了?不知我的理解是否有误?
你好,我没有太理解你说的“初始化embedding”和“mask“是什么意思?我们的cutoff数据增强是对每一个样本经过BertEmbedding后的tensor(维度为batch_size, seq_len, emb_size)进行操作的,如果是按行,就在[0, seq_len)
的范围内随机选取indexes,然后将对应行(seq_len
那一维)的元素置为零;如果是列,则在[0, emb_size)
的范围内选取indexes,然后将对应列(emb_size
那一维)的元素置为零。实现上,我们直接在transformers库中modeling_bert.py代码的基础上修改,见:https://github.com/yym6472/ConSERT/blob/master/transformers/modeling_bert.py#L971
我的意思是比如在对行(token)做cutoff的时候,这个实现只是对BertEmbedding初始化生成的tensor进行了行(token的初始化embedding)的置0操作,并没有改变该token的attention_mask, 那么在计算attention的时候,这些token还是会进行计算。而《A Simple but Tough-to-Beat Data Augmentation Approach for Natural Language Understanding and Generation》这篇论文中cutoff的实现貌似是把attention_mask(input_mask)也置0了,这样这些token就不会在attention的softmax计算的时候被考虑到,因为transformer里attention计算的时候是先全部求attention_score,然后把mask=0对应位置score变成很小的负数所以注意力为0。
哦哦是的,我们并没有改attention_mask,后面BERT编码的时候attention里还是会attend到这些位置。