File size: 1,154 Bytes
edcd390
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import torch
from torch import nn
from transformers import AutoModel

class MyTinyBERT(nn.Module):
    def __init__(self):
        super().__init__()
        self.bert = AutoModel.from_pretrained("cointegrated/rubert-tiny2")
        for param in self.bert.parameters():
            param.requires_grad = True
        # Разморозка последних слоёв
        for name, param in self.bert.named_parameters():
            if any(layer in name for layer in ['layer.7', 'layer.8', 'layer.9', 'layer.10', 'layer.11']):
                param.requires_grad = True

        self.linear = nn.Sequential(
            nn.Linear(312, 256),
            nn.ReLU(),
            nn.Dropout(0.3),
            nn.Linear(256, 10))  # Для 10 классов

    def forward(self, input_dict):
        # Ожидается словарь с ключами "input_ids" и "attention_mask"
        bert_out = self.bert(**input_dict)
        # Используем скрытое состояние для [CLS] токена
        normed_bert_out = nn.functional.normalize(bert_out.last_hidden_state[:, 0, :])
        return self.linear(normed_bert_out)