Sobes.tech
Middle — Senior

Jak dostroić BERT do zadania klasyfikacji? Co brać z wyjścia?

sobes.tech AI

Odpowiedź od AI

Aby dostosować BERT do zadania klasyfikacji, zazwyczaj korzysta się z wyjścia specjalnego tokena [CLS], który jest używany przez model do agregacji informacji o całej sekwencji.

Główne kroki:

  1. Dodaj warstwę klasyfikacyjną nad BERT — zazwyczaj jest to warstwa liniowa, która przyjmuje wektor z ostatniej warstwy BERT odpowiadający tokenowi [CLS].

  2. Dane wejściowe są podawane do BERT z tokenem [CLS] na początku.

  3. Wyodrębnij osadzenie [CLS] z ostatniej ukrytej warstwy BERT. Ten wektor, na przykład, o rozmiarze 768 (dla modelu bazowego), zawiera skondensowaną informację o całej sekwencji.

  4. Przekaż ten wektor do klasyfikatora (np. linear + softmax dla klasyfikacji wieloklasowej).

  5. Trenuj cały model (BERT + klasyfikator) razem na docelowym zadaniu, używając odpowiedniej funkcji straty (np. CrossEntropyLoss).

Przykład w 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

Dlatego do klasyfikacji bierze się dokładnie wyjście tokena [CLS] z ostatniej warstwy BERT.