Sobes.tech
Middle — Senior

Cum ajustezi fin BERT pentru o sarcină de clasificare? Ce să iei din ieșire?

sobes.tech AI

Răspuns de la AI

Pentru ajustarea fină a BERT pentru sarcini de clasificare, se ia de obicei ieșirea tokenului special [CLS], care este utilizat de model pentru agregarea informațiilor despre întreaga secvență.

Pașii principali:

  1. Adăugați un strat de clasificare peste BERT — de obicei, un strat linear care primește vectorul din ultimul strat de BERT corespunzător tokenului [CLS].

  2. Datele de intrare sunt introduse în BERT cu tokenul [CLS] la început.

  3. Extrageți embedding-ul [CLS] din ultimul strat ascuns al BERT. Acest vector, de exemplu, de dimensiune 768 (pentru modelul de bază), conține informația condensată despre întreaga secvență.

  4. Trimiteți acest vector la clasificator (de exemplu, linear + softmax pentru clasificare multi-clasă).

  5. Antrenați întregul model (BERT + clasificator) împreună pentru sarcina țintă, folosind o funcție de pierdere adecvată (de exemplu, CrossEntropyLoss).

Exemplu în 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

Prin urmare, pentru clasificare, se ia în mod specific ieșirea tokenului [CLS] din ultimul strat BERT.