Sobes.tech
Middle — Senior

Hogyan finomhangoljuk a BERT-et osztályozási feladatra? Mit vegyünk ki a kimenetből?

sobes.tech MI

Válasz az MI-től

A BERT finomhangolásához osztályozási feladatokra általában a [CLS] speciális token kimenetét használják, amelyet a modell az egész szekvencia információinak összegzésére használ.

Fő lépések:

  1. Adjunk hozzá egy osztályozó réteget a BERT fölé — általában egy lineáris réteget, amely a BERT utolsó rétegének [CLS] tokenjéhez tartozó vektort fogadja.

  2. A bemeneti adatok a BERT-be [CLS] tokennel a kezdetén kerülnek.

  3. Nyerjük ki a [CLS] beágyazást a BERT utolsó rejtett rétegéből. Ez a vektor például 768 méretű (az alapmodellhez), és tartalmazza az egész szekvencia összegzett információit.

  4. Ezt a vektort adjuk át a osztályozónak (pl. lineáris + softmax többosztályos osztályozáshoz).

  5. Tanítsuk az egész modellt (BERT + osztályozó) együtt a célfeladaton, megfelelő veszteségfüggvényt használva (pl. CrossEntropyLoss).

Példa PyTorch-ben:

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

Ezért osztályozás esetén kifejezetten a BERT utolsó rétegéből származó [CLS] token kimenetét veszik.