Sobes.tech
Middle — Senior

Hoe finetun je BERT voor een classificatietaak? Wat neem je uit de output?

sobes.tech AI

Antwoord van AI

Voor het finetunen van BERT voor classificatietaken wordt meestal de output van de speciale token [CLS] gebruikt, die door het model wordt gebruikt om informatie over de hele sequentie te aggregeren.

Belangrijkste stappen:

  1. Voeg een classificatielaag toe bovenop BERT — meestal een lineaire laag die de vector uit de laatste laag van BERT ontvangt die overeenkomt met de [CLS] token.

  2. De invoergegevens worden aan BERT gegeven met de [CLS] token aan het begin.

  3. Haal de [CLS] embedding uit de laatste verborgen laag van BERT. Deze vector, bijvoorbeeld van grootte 768 (voor het basismodel), bevat de samengevatte informatie van de hele sequentie.

  4. Geef deze vector door aan de classifier (bijvoorbeeld linear + softmax voor multiklassenclassificatie).

  5. Train het hele model (BERT + classifier) samen op de doelopdracht, gebruikmakend van een geschikte verliesfunctie (bijvoorbeeld CrossEntropyLoss).

Voorbeeld 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

Dus, voor classificatie wordt specifiek de output van de [CLS]-token uit de laatste laag van BERT genomen.