Причина в случайной инициализации слоя классификатора Берта. Если вы распечатаете свою модель, вы увидите
(pooler): BertPooler(
(dense): Linear(in_features=768, out_features=768, bias=True)
(activation): Tanh()
)
)
(dropout): Dropout(p=0.1, inplace=False)
(classifier): Linear(in_features=768, out_features=5, bias=True)
)
На последнем слое есть classifier
, этот слой добавляется после bert-base
. Ожидается, что вы обучите этот уровень своей последующей задаче.
Если вы хотите получить больше информации:
model, li = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels = 5, output_loading_info=True) # as we have 5 classes
print(li)
{'missing_keys': ['classifier.weight', 'classifier.bias'], 'unexpected_keys': ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias'], 'error_msgs': []}
Вы можете увидеть classifier.weight
и bias
отсутствуют, поэтому эти части будут случайным образом инициализироваться каждый раз, когда вы вызываете BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels = 5)
.