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:
-
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.
-
A bemeneti adatok a BERT-be [CLS] tokennel a kezdetén kerülnek.
-
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.
-
Ezt a vektort adjuk át a osztályozónak (pl. lineáris + softmax többosztályos osztályozáshoz).
-
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.