删除并重新初始化相关的 BERT 权重/参数

时间:2021-05-18 16:26:54

标签: nlp pytorch bert-language-model huggingface-transformers

我尝试为分类下游任务微调 BERT。

现在我再次加载模型并遇到以下警告:

初始化 BertModel 时未使用 bert-base-uncased 的模型检查点的某些权重:['cls.predictions.transform.dense.weight', 'cls.predictions.transform.LayerNorm.weight', 'cls. seq_relationship.weight', 'cls.predictions.bias', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.解码器.权重']

  • 如果您从在其他任务上训练的模型的检查点或使用其他架构(例如,从 BertForPreTraining 模型初始化 BertForSequenceClassification 模型)初始化 BertModel,这是预期的。
  • 如果您从希望完全相同的模型的检查点初始化 BertModel(从 BertForSequenceClassification 模型初始化 BertForSequenceClassification 模型),则不会出现这种情况。

[屏幕截图][1] [1]:https://i.stack.imgur.com/YJZVc.png

我已经删除并重新安装了transformers==4.6.0,但没有任何帮助。 我想也许通过参数“force_download=True”它可能会恢复原始权重,但没有任何帮助。

我要继续忽略警告吗?有没有办法删除模型检查点,例如下载模型时再次固定权重?

提前致谢!

最好的, 亚历克斯

2 个答案:

答案 0 :(得分:0)

只要您为下游任务微调模型,就可以忽略此警告。这个想法是来自预训练模型的 [CLS] 令牌权重不会对下游任务有用,需要进行微调。

Huggingface 随机初始化它们,因为您使用的是 bert-base-cased,它是一个 BertForPretraing 模型,并且您从中创建了一个 BertModel。警告是为了确保您了解直接使用预训练模型的区别,或者您是否计划针对不同的任务对其进行微调。

请注意,如果您计划处理分类任务,我建议您改用他们的 BertForSequenceClassification 类。

TL;DR 只要你在微调,你就可以忽略它。

答案 1 :(得分:0)

您好,感谢您的回答!我在描述中不是很具体!我首先针对下游任务对 Bert 进行了微调,然后在另一个 Notebook 中我只想要通常的相关 BERT 并使用其嵌入。

我关联了根本不相关的事物。我想通过在下游任务上微调 BERT 参数,我已经更改了所有“bert_base_uncased”模型的参数,这就是我收到此警告的原因。即使我只是想要标准相关 BERT 的常用嵌入。

我已经“解决”了这个问题,或者至少我找到了一个解决方案:

  • 一个用于下游任务分类的 Conda 环境:conda install -c conda-forge Transformers
  • 一个用于获取嵌入的 Conda 环境:conda install -c conda-forge/label/cf202003 Transformers

也许这是 Apple/Mac 特有的问题,我不知道为什么会遇到这个问题,但没有其他人 ^^

无论如何感谢您的回答!

最好的, 亚历克斯