Kaip atlikti BERT tobulinimą klasifikacijos užduočiai? Ką imti iš išėjimo?
sobes.tech AI
Atsakymas iš AI
Norint tobulinti BERT klasifikacijos užduotims, paprastai naudojamas specialus [CLS] žymeklio išėjimas, kurį modelis naudoja visos sekos informacijos sujungimui.
Pagrindiniai žingsniai:
-
Pridėti klasifikacijos sluoksnį virš BERT — dažniausiai tai yra linijinis sluoksnis, kuris priima išvesties sluoksnio vektorių, atitinkantį [CLS] žymeklį.
-
Įvesties duomenys į BERT pateikiami su [CLS] žymekliu pradžioje.
-
Išgauti [CLS] įterpimą iš paskutinio paslėpto BERT sluoksnio. Šis vektorius, pavyzdžiui, 768 dydžio (bazinį modelį), apima sutrauktą visos sekos informaciją.
-
Perduoti šį vektorių klasifikatoriui (pvz., linijinis + softmax daugiaklasės klasifikacijai).
-
Mokyti visą modelį (BERT + klasifikatorius) kartu tiksliniam uždaviniui, naudojant tinkamą nuostolio funkciją (pvz., CrossEntropyLoss).
Pavyzdys 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] žymeklis
logits = self.classifier(cls_output)
return logits
Taigi, klasifikacijai imamas būtent paskutinio sluoksnio [CLS] žymeklio išėjimas.