Πώς κάνετε fine-tuning το BERT για μια εργασία ταξινόμησης; Τι να πάρουμε από την έξοδο;
sobes.tech AI
Απάντηση από AI
Για το fine-tuning του BERT για εργασίες ταξινόμησης, συνήθως λαμβάνεται η έξοδος του ειδικού token [CLS], το οποίο χρησιμοποιείται από το μοντέλο για την συγκέντρωση πληροφοριών ολόκληρης της ακολουθίας.
Βασικά βήματα:
-
Προσθέστε ένα επίπεδο ταξινόμησης πάνω από το BERT — συνήθως ένα γραμμικό επίπεδο που λαμβάνει τον διανυσματικό εκπρόσωπο από το τελευταίο επίπεδο του BERT που αντιστοιχεί στο token [CLS].
-
Τα εισερχόμενα δεδομένα δίνονται στο BERT με το token [CLS] στην αρχή.
-
Εξάγετε το ενσωματωμένο [CLS] από το τελευταίο κρυφό επίπεδο του BERT. Αυτό το διάνυσμα, π.χ., με μέγεθος 768 (για το βασικό μοντέλο), περιέχει την συμπιεσμένη πληροφορία ολόκληρης της ακολουθίας.
-
Περάστε αυτό το διάνυσμα στον ταξινομητή (π.χ., γραμμικό + softmax για πολυταξινόμηση).
-
Εκπαιδεύστε ολόκληρο το μοντέλο (BERT + ταξινομητής) μαζί στην επιλεγμένη εργασία, χρησιμοποιώντας μια κατάλληλη λειτουργία απώλειας (π.χ., CrossEntropyLoss).
Παράδειγμα σε 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
Έτσι, για την ταξινόμηση, λαμβάνεται συγκεκριμένα η έξοδος του token [CLS] από το τελευταίο στρώμα του BERT.