Sobes.tech
Middle — Senior

Ինչպե՞ս կատարել BERT-ի ֆայնթյունը դասակարգման խնդիրների համար: Ինչ վերցնել ելքից?

sobes.tech AI

Պատասխան AI-ից

BERT-ի մանրամասնեցումը դասակարգման առաջադրանքների համար սովորաբար վերցնում է հատուկ նշանի [CLS] ելքը, որը մոդելը օգտագործում է ամբողջ հաջորդականության մասին տեղեկատվությունը հավաքելու համար:

Հիմնական քայլեր՝

  1. Ավելացնել դասակարգման շերտ BERT-ի վերևում — սովորաբար մի ամբողջական գծային շերտ, որը ստանում է 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] նշանի ելքը։