Wie feintuning man BERT für eine Klassifizierungsaufgabe? Was nimmt man aus der Ausgabe?
sobes.tech KI
Antwort von AI
Für das Fine-Tuning von BERT für Klassifikationsaufgaben wird in der Regel die Ausgabe des speziellen Tokens [CLS] verwendet, das vom Modell zur Aggregation der Informationen der gesamten Sequenz genutzt wird.
Hauptschritte:
-
Fügen Sie eine Klassifikationsschicht über BERT hinzu — in der Regel eine lineare Schicht, die den Vektor aus der Ausgabeschicht von BERT erhält, der dem Token [CLS] entspricht.
-
Die Eingabedaten werden mit dem Token [CLS] am Anfang an BERT übergeben.
-
Extrahieren Sie die [CLS]-Einbettung aus der letzten verborgenen Schicht von BERT. Dieser Vektor, z.B. mit einer Größe von 768 (für das Basismodell), enthält die komprimierte Information der gesamten Sequenz.
-
Geben Sie diesen Vektor an den Klassifikator weiter (z.B. linear + Softmax für Mehrklassenklassifikation).
-
Trainieren Sie das gesamte Modell (BERT + Klassifikator) gemeinsam auf der Zielaufgabe, unter Verwendung einer geeigneten Verlustfunktion (z.B. CrossEntropyLoss).
Beispiel in PyTorch:
from transformers import BertModel, BertTokenizer
import torch.nn as nn
class BertClassifier(nn.Module):
def __init__(self, bert_model_name, num_classes):
super().__init__()
self.bert = BertModel.from_pretrained(bert_model_name)
self.classifier = nn.Linear(self.bert.config.hidden_size, num_classes)
def forward(self, input_ids, attention_mask):
outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)
cls_output = outputs.last_hidden_state[:, 0, :] # [CLS] Token
logits = self.classifier(cls_output)
return logits
Daher wird für die Klassifikation genau die Ausgabe des [CLS]-Tokens aus der letzten Schicht von BERT verwendet.