Ինչպե՞ս կատարել 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] նշան
logits = self.classifier(cls_output)
return logits
Այսպիսով՝ դասակարգման համար վերցվում է հենց վերջին շերտի [CLS] նշանի ելքը։