Sobes.tech
Middle — Senior

BERTти классификациялык тапшырма үчүн кантип финетюн кылса болот? Чыгыштан эмне алуу керек?

sobes.tech AI

AIден жооп

BERT-тин такырлаштыруу үчүн, адатта, [CLS] атайын токенинин чыгышы алынат, ал модель тарабынан бүтүндөй үзүндү жөнүндө маалыматтарды топтоо үчүн колдонулат.

Негизги кадамдар:

  1. BERT үстүнө классификациялык катмары кошуу — адатта, бул, BERTтин акыркы катмарынын [CLS] токенине туура келген векторду кабыл алган линейдүү катмары.

  2. Кирүү маалыматтары BERTке [CLS] токен менен башталып берилет.

  3. BERTтин акыркы жашыруун катмарынын [CLS] embeddingsин чыгарыңыз. Бул вектор, мисалы, 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] токенинин чыгышы алынат.