bojone / bert4keras

keras implement of transformers for humans
https://kexue.fm/archives/6915
Apache License 2.0
5.37k stars 928 forks source link

T5 encoder中的self attention是不是没有添加MASK? #387

Closed battleman123 closed 3 years ago

battleman123 commented 3 years ago

T5 encoder中的self attention是不是没有添加MASK?

bojone commented 3 years ago

encoder的attention要添加什么mask?

battleman123 commented 3 years ago

最近在拿着huggingface中的mt5加载bert4keras训练出来的权值继续训练,发现同样的输入,两个模型的最后一层输出是不一样的,对照了下代码,发现bert4keras中额t5.1.1encoder没有mask(mask指https://github.com/huggingface/transformers/blob/master/src/transformers/models/t5/modeling_t5.py 第502,503行),还有一个huggingface中没有Decoder-output-scale这个缩放操作。不知道是否有这个区别?

battleman123 commented 3 years ago

可以拿下面两条文本试一下,只改变第二行的文本长度,第一行的encoder的输出就不一样,这个应该是动态的pad到一个batch中最长的文本,两个文件中第二行的长度不一样,pad的长度也不一样,在算attention时没有mask,计算出来的值也不一样,不知道这样解释合理不?

@@@@前是source,后后target 文件1 嗨美女,吃饭了吗?@@@@滚 嗨美女,吃饭了吗?嗨美女,吃饭了吗?@@@@滚

文件2 嗨美女,吃饭了吗?@@@@滚 嗨美女,吃饭了吗?嗨美女!@@@@滚

bojone commented 3 years ago

不好意思,是我测试不周了,确实有这个问题。已经尝试修复 https://github.com/bojone/bert4keras/commit/184f10df96f78d89dc7bc2f346798955ef3df9a1

欢迎重新测试