Sobes.tech
Middle — Senior

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:

  1. Přidat vrstvu klasifikace nad BERT — obvykle lineární vrstvu, která přijímá vektor z poslední vrstvy BERT odpovídající tokenu [CLS].

  2. Vstupní data se zadávají do BERT s tokenem [CLS] na začátku.

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

  4. Poslat tento vektor do klasifikátoru (například linear + softmax pro vícerozměrnou klasifikaci).

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