Sobes.tech
Middle — Senior

Ako doladiť BERT pre úlohu klasifikácie? Čo vziať z výstupu?

sobes.tech AI

Odpoveď od AI

Na doladenie BERT pre úlohy klasifikácie sa zvyčajne berie výstup zo špeciálneho tokenu [CLS], ktorý model používa na agregáciu informácií o celej sekvencii.

Hlavné kroky:

  1. Pridať vrstvu klasifikácie nad BERT — zvyčajne lineárnu vrstvu, ktorá prijíma vektor z poslednej vrstvy BERT zodpovedajúci tokenu [CLS].

  2. Vstupné údaje sa zadávajú do BERT s tokenom [CLS] na začiatku.

  3. Získať embedding [CLS] z poslednej skrytej vrstvy BERT. Tento vektor, napríklad, s veľkosťou 768 (pre základný model), obsahuje skrátenú informáciu o celej sekvencii.

  4. Poslať tento vektor do klasifikátora (napríklad, lineárne + softmax pre viacnásobnú klasifikáciu).

  5. Trénovať celý model (BERT + klasifikátor) spoločne na cieľovú úlohu s použitím vhodnej funkcie straty (napríklad, CrossEntropyLoss).

Prí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, :]  # [CLS] token
        logits = self.classifier(cls_output)
        return logits

Pre klasifikáciu sa berie presne výstup tokenu [CLS] z poslednej vrstvy BERT.