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