BERT设置max_length填充后掩码预测全返回119 Token,训练新模型是否也会出现该问题
问题原因
- 核心错误是调用模型时仅传入了
input_ids,未传入tokenizer输出的attention_mask参数:开启padding后,输入中存在大量无意义的[PAD]填充token,attention_mask的作用是标记哪些位置是真实文本、哪些是填充位,未传入该参数时,BERT的自注意力机制会将填充位当作正常输入计算,扰乱整个序列的注意力分布,最终导致输出全部异常。 - 你提供的报错代码存在语法疏漏:
max_length=后未赋值100,需要补全为max_length=100。 - 补充:ID 119对应BERT词表中的英文句号
.,属于模型遇到无效输入时的高概率默认输出。
修复后的调用代码示例
inputs = tokenizer("hello world [MASK] like it", return_tensors="tf", max_length=100, padding="max_length") logits = m(**inputs).logits output_ids = tf.argmax(tf.keras.activations.softmax(logits)[0], axis=-1)
训练阶段是否会出现同类问题
不会,只要遵循标准训练流程即可规避:
- 训练时固定输入长度、对数据做padding是常规操作,你只需要在喂数据时,将tokenizer输出的
attention_mask和input_ids一同传入模型即可,模型会自动跳过attention_mask标记为0的填充位,不会干扰正常文本的特征学习与预测。 - 额外注意:如果是做掩码语言模型(MLM)训练,还要传入对应的
labels参数,模型在计算损失时也会自动忽略填充位的损失值,不会影响训练效果。
内容的提问来源于stack exchange,提问作者Jeyadevan Rajan
相关产品推荐
相关产品推荐

