|
import torch |
|
import transformers |
|
from transformers import BertModel, BertTokenizer, AutoTokenizer |
|
from torch import nn, optim |
|
from torch.utils.data import Dataset, DataLoader |
|
import torch.nn.functional as F |
|
|
|
|
|
review_text = "I love you" |
|
|
|
|
|
|
|
PRE_TRAINED_MODEL_NAME = 'nreimers/BERT-Tiny_L-2_H-128_A-2' |
|
class_names = ["Normal", "Abusive"] |
|
MAX_LEN = "max_length" |
|
|
|
class CyberbullyingClassifier(nn.Module): |
|
|
|
def __init__(self, n_classes): |
|
super(CyberbullyingClassifier, self).__init__() |
|
self.bert = BertModel.from_pretrained(PRE_TRAINED_MODEL_NAME).to("cpu") |
|
|
|
self.out = nn.Linear(self.bert.config.hidden_size, n_classes) |
|
|
|
def forward(self, input_ids, attention_mask): |
|
bert_out = self.bert( |
|
input_ids=input_ids, |
|
attention_mask=attention_mask |
|
) |
|
pooled_output = bert_out[1] |
|
|
|
return self.out(pooled_output) |
|
|
|
tokenizer = AutoTokenizer.from_pretrained(PRE_TRAINED_MODEL_NAME) |
|
model = CyberbullyingClassifier(2) |
|
model.load_state_dict(torch.load('./best_model_state.bin', map_location=torch.device('cpu'))) |
|
|
|
def classify(review_text): |
|
encoded_review = tokenizer(review_text, padding=MAX_LEN, truncation=True, return_tensors="pt") |
|
|
|
input_ids = encoded_review['input_ids'].to('cpu') |
|
attention_mask = encoded_review['attention_mask'].to('cpu') |
|
|
|
output = model(input_ids, attention_mask) |
|
_, prediction = torch.max(output, dim=1) |
|
|
|
print(f'Review text: {review_text}') |
|
print(f'Sentiment : {class_names[prediction]}') |
|
|
|
return class_names[prediction] |