Sobes.tech
Middle — Senior

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:

  1. 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.

  2. Die Eingabedaten werden mit dem Token [CLS] am Anfang an BERT übergeben.

  3. 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.

  4. Geben Sie diesen Vektor an den Klassifikator weiter (z.B. linear + Softmax für Mehrklassenklassifikation).

  5. 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.