Sobes.tech
Middle — Senior
40

Как файнтюнить BERT под задачу классификации? Что брать из выхода?

Сұралған компаниялар
ПАО Газпром нефть

AI-дан жауап

sobes.tech AI

Для файнтюнинга BERT под задачу классификации обычно берут выход из специального токена [CLS], который используется моделью для агрегации информации о всей последовательности.

Основные шаги:

  1. Добавить классификационный слой поверх BERT — обычно это полносвязный слой (linear layer), который принимает вектор из выходного слоя BERT, соответствующий токену [CLS].

  2. Входные данные подаются в BERT с токеном [CLS] в начале.

  3. Извлечь эмбеддинг [CLS] из последнего скрытого слоя BERT. Этот вектор размерности, например, 768 (для базовой модели), содержит свёрнутую информацию о всей последовательности.

  4. Передать этот вектор в классификатор (например, linear + softmax для многоклассовой классификации).

  5. Обучать всю модель (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] токен
        logits = self.classifier(cls_output)
        return logits

Таким образом, для классификации берут именно выход [CLS]-токена из последнего слоя BERT.