როგორ გავაკეთოთ 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] ტოკენის გამოსავალს.