Как да финетюним BERT за задача за класификация? Какво да вземем от изхода?
sobes.tech AI
Отговор от AI
За фина настройка на BERT за задачи за класификация обикновено се взема изходът от специалния токен [CLS], който моделът използва за агрегиране на информацията за цялата последователност.
Основни стъпки:
-
Добавете слой за класификация върху BERT — обикновено линейно слой, което приема вектора от последния слой на BERT, съответстващ на токена [CLS].
-
Входните данни се подават към BERT с токена [CLS] в началото.
-
Извлечете ембединга [CLS] от последния скрит слой на BERT. Този вектор, например, с размер 768 (за базов модел), съдържа компресирана информация за цялата последователност.
-
Пратете този вектор към класификатора (например, linear + 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
Затова за класификация се взема точно изходът на токена [CLS] от последния слой на BERT.