python 微调预训练的西班牙语RoBERTa模型用于不同的任务,情绪分析

ctehm74n  于 2023-06-28  发布在  Python
关注(0)|答案(2)|浏览(216)

我在做西班牙语推特的情感分析。
在回顾了最近的一些文献之后,我发现最近有一项工作专门针对西班牙语文本(roberta-base-bne)训练RoBERTa模型。它似乎比目前最先进的西班牙语建模模型BETO表现得更好。
RoBERTa模型已经针对各种任务进行了训练,其中不包括文本分类。我想使用这个RoBERTa model并对其进行微调,以用于文本分类,更具体地说,用于情感分析。
我已经完成了所有的预处理,并创建了数据集对象,并希望在本地训练模型。

编码

# Training with native TensorFlow 

from transformers import TFRobertaForSequenceClassification

model = TFRobertaForSequenceClassification.from_pretrained("BSC-TeMU/roberta-base-bne")

optimizer = tf.keras.optimizers.Adam(learning_rate=5e-5)
model.compile(optimizer=optimizer, loss=model.compute_loss) # can also use any keras loss fn
model.fit(train_dataset.shuffle(1000).batch(16), epochs=3, batch_size=16)

问题

关于TFRobertaForSequenceClassification的问题:
既然model card中没有指定,那么使用它是正确的吗?而不是型号卡中指定的AutoModelForMaskedLM
通过简单地应用TFRobertaForSequenceClassification,我们是否意味着它将自动将训练(和预训练)的知识应用于新任务,即文本分类?

eqoofvh9

eqoofvh91#

模型卡中的模型引用了模型 * 的基本训练内容 *。如果您熟悉不同建模任务的架构选择(例如,令牌分类与序列分类),那么应该清楚这些模型将具有 * 略微 * 不同的布局,特别是在Transformer输出层之后的层中。对于令牌分类,这是(一般来说)Dropout和一个额外的线性层,从模型的hidden_sizeMap到输出类的数量。这里有一个BERT的例子。
这意味着使用不同的学习目标预先训练的模型检查点将具有最后一层的权重,而是在微调期间训练这些(相对较少的)参数。事实上,对于PyTorch模型,当加载一个可用权重略有不同的模型检查点时,通常会收到一个警告:
初始化BertForSequenceClassification时,未使用bert-base-uncased处模型检查点的某些权重:[...]

  • 如果您从在另一个任务上训练的模型的检查点初始化BertForSequenceClassification,或者使用另一个架构(例如从BertForPreTraining模型初始化BertForSequenceClassification模型)。[...]

这正是你正在做的,所以只要你有足够数量的微调示例(根据类的数量,我建议使用10 e3 - 10 e4作为经验法则),这不会对你的训练产生太大影响。
但是,我想指出的是,您可能需要指定TokenClassification层的标签数量。您可以通过在加载模型期间指定它来执行此操作:

from transformers import TFRobertaForSequenceClassification
roberta = TFRobertaForSequenceClassification.from_pretrained("BSC-TeMU/roberta-base-bne", 
                                                             num_labels=<your_value>)
c9qzyr3d

c9qzyr3d2#

谢谢你的解决方案,我想知道你在代码中使用了什么数据集@LeLuc

相关问题