Jak doladit BERT pro úlohu klasifikace? Co vzít z výstupu?
sobes.tech AI
Odpověď od AI
Pro jemné doladění BERT pro úlohy klasifikace se obvykle bere výstup ze speciálního tokenu [CLS], který model používá k agregaci informací o celé sekvenci.
Hlavní kroky:
-
Přidat vrstvu klasifikace nad BERT — obvykle lineární vrstvu, která přijímá vektor z poslední vrstvy BERT odpovídající tokenu [CLS].
-
Vstupní data se zadávají do BERT s tokenem [CLS] na začátku.
-
Získat embedding [CLS] z poslední skryté vrstvy BERT. Tento vektor, například o velikosti 768 (pro základní model), obsahuje zhuštěné informace o celé sekvenci.
-
Poslat tento vektor do klasifikátoru (například linear + softmax pro vícerozměrnou klasifikaci).
-
Trénovat celý model (BERT + klasifikátor) společně na cílové úloze s použitím vhodné ztrátové funkce (například CrossEntropyLoss).
Příklad v 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, :] # token [CLS]
logits = self.classifier(cls_output)
return logits
Protože se pro klasifikaci bere výstup právě z tokenu [CLS] z poslední vrstvy BERT.