为什么模型输入不用包括attention_mask呢?
li3cmz opened this issue · 7 comments
li3cmz commented
你好,想问下,既然是LM,训练的时候用第n个token预测第n+1个token,那为什么不用引入attention_mask呢?这样不就使得预测n+1token的时候,已经看到了ground_truth了吗?这样的话,和测试时候的场景是不是就不一致了呢?是否训练的时候加入attention_mask,可以使得测试的效果更好点呢?
silverriver commented
训练的时候添加了future mask的。
silverriver commented
model的input中,attention_mask这个参数是限定attention不会attend到pad token上。
在transfertransfo的实现中,并没有加入attention_mask,因为模型本身做的都是masked self attention,所以会自动将所有future token给mask掉,包括所有的pad token。因此不需要加入attention_mask这一输入。
至于future_mask,在model中计算attention的时候已经使用了,可以参考这里的代码
https://github.com/huggingface/transformers/blob/02e05fb0a532e572b56ba75dad6ba3db625bbdeb/src/transformers/models/gpt2/modeling_gpt2.py#L174
li3cmz commented
嗯嗯,感谢。因为我看的是OpenAIGPT,它这里确实是没有你指出的gpt2的is_cross_attention那小段代码,也就是OpenAIGPT是没有做future mask的吧
silverriver commented
li3cmz commented
看到了!非常感谢~
neugwh commented
咕咕咕GIF反腐败复古风:分不够古古怪怪股