import pickle import torch from transformers import AutoTokenizer import logging class ArgqClassifier: def __init__(self): self.tokenizer = AutoTokenizer.from_pretrained('neuralmind/bert-base-portuguese-cased', do_lower_case=False) device = 'cuda' if torch.cuda.is_available() else 'cpu' self.device = torch.device(device) logging.info(f"Version: {torch.__version__}") logging.info(f"Device being used: {device}") self.models = { 'quality': pickle.load(open('model_cpu.sav', 'rb')), 'clarity': pickle.load(open('model_cla_cpu.sav', 'rb')), 'organization': pickle.load(open('model_org_cpu.sav', 'rb')), 'credibility': pickle.load(open('model_cre_cpu.sav', 'rb')), 'emotional_polarity': pickle.load(open('model_aemp_cpu.sav', 'rb')), 'emotional_intensity': pickle.load(open('model_aemi_cpu.sav', 'rb')) } self.max_length = 180 async def classify_text(self, text): inputs = self.tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=self.max_length).to(self.device) model = self.models["quality"] output = model(**inputs) pred_labels = torch.argmax(output.logits, 1) y_pred = pred_labels[0] return y_pred.item() async def classify_text_by_aspect(self, text, aspect): inputs = self.tokenizer(text, return_tensors='pt', padding=True, truncation=True, max_length=self.max_length).to(self.device) model = self.models[aspect] output = model(**inputs) pred_labels = torch.argmax(output.logits, 1) y_pred = pred_labels[0] return y_pred.item()