BERT Transformer模型给出了多类分类的错误



我正试图用BERT模型训练一个情绪分析模型,该模型有5个类别(1-非常消极、2-消极、3-中立、4-积极、5-非常积极(。

from transformers import BertTokenizer, TFBertForSequenceClassification
from transformers import InputExample, InputFeatures

model = TFBertForSequenceClassification.from_pretrained("bert-base-cased")
tokenizer = BertTokenizer.from_pretrained("bert-base-cased")

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=3e-5, epsilon=1e-08, clipnorm=1.0), 
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), 
metrics=[tf.keras.metrics.SparseCategoricalAccuracy('accuracy')])

model.fit(train_data, epochs=2, validation_data=validation_data)

但我得到了以下错误(只是错误消息的最后一部分(

Node: 'sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits'
Received a label value of 5 which is outside the valid range of [0, 2).  Label values: 3 4 5 2 2 4 4 3 4 5 5 4 5 5 4 4 4 3 4 4 5 5 5 4 4 5 3 5 4 4 3 5
[[{{node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]] [Op:__inference_train_function_31614]

有人能告诉我我在这里做错了什么吗?

TFBertForSequenceClassification对象需要创建一个所谓的分类头。分类头是单个NN层的一个很酷的名称,该层将[CLS]令牌表示投影到向量中,每个可能的目标类有一个项目。

当您通过调用from_pretrained来初始化模型时,您可以指定num_labels,这是一系列目标标签(请参阅Transformers文档中的示例(。如果未指定,则将通过获取批次中的最大类ID,从第一个培训批次推断出目标类的数量。如果你运气不好,并且第一批只包含较低的标签ID,那么它会初始化一个较小的分类头,当有较高ID的批次时会失败。

还要注意,类编号从零开始。如果使用标签1-5,则该模型将有一个不使用的额外的第0类。如果你想保持数字1-5,你的num_labels将是6。

相关内容

  • 没有找到相关文章

最新更新