NLP-BERT / src /Bert_class.py
maratale's picture
.
d25442c
Raw History Blame Contribute Delete
1.57 kB
import torch
from torch import nn
from transformers import AutoModel
class MyPersonalTinyBert(nn.Module):
def __init__(self) -> None:
super().__init__()
# и снова грузим
self.bert = AutoModel.from_pretrained("cointegrated/rubert-tiny2")
# заморозим параметры
for param in self.bert.parameters():
param.requires_grad = False
# делаем свой слой для классификации
self.linear = nn.Sequential(
nn.Linear(312, 256), # начинаем с длины embedding, которые делает модель
nn.ReLU(),
nn.Dropout(p=0.5),
nn.Linear(256, 64), # это добавил для души))
nn.ReLU(),
nn.Linear(64, 1), # заканчиваем кол-вом классов
)
def forward(self, input_ids, attention_mask):
bert_out = self.bert(input_ids=input_ids, attention_mask=attention_mask)
vector = bert_out.last_hidden_state[:, 0, :]
classes = self.linear(vector)
return classes
class BertInputs(torch.utils.data.Dataset):
def __init__(self, encoded_text):
super().__init__()
self.inputs = encoded_text
def __len__(self):
return self.inputs.shape[0]
def __getitem__(self, idx):
# print(self.inputs[idx])
return (
torch.Tensor(self.inputs[idx]["input_ids"]).long(),
torch.Tensor(self.inputs[idx]["attention_mask"]).long(),
)