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:
-
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].
-
Datele de intrare sunt introduse în BERT cu tokenul [CLS] la început.
-
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ță.
-
Trimiteți acest vector la clasificator (de exemplu, linear + softmax pentru clasificare multi-clasă).
-
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.