|
from pathlib import Path |
|
import torch |
|
import numpy as np |
|
|
|
from .tokenizer import load_tokenizer, preprocessing_text |
|
from .model import load_model |
|
|
|
|
|
NUM_VARAIBLES = 3 |
|
NUM_LABELS = 3 |
|
num_labels = NUM_LABELS * NUM_VARAIBLES |
|
divice = torch.device('cuda' if torch.cuda.is_available() else 'cpu') |
|
num_labels = NUM_LABELS * NUM_VARAIBLES |
|
model_name = "pysentimiento/robertuito-sentiment-analysis" |
|
|
|
checkpoint_path = Path(__file__).parent.parent / "checkpoints" / "model.ckpt" |
|
tokenizer = load_tokenizer(model_name) |
|
model = load_model(checkpoint_path, model_name, num_labels, divice) |
|
|
|
|
|
RETURN_VALUES =[ |
|
"target_sentiment_negative", |
|
"target_sentiment_neutral", |
|
"target_sentiment_positive", |
|
"companies_sentiment_negative", |
|
"companies_sentiment_neutral", |
|
"companies_sentiment_positive", |
|
"consumers_sentiment_negative", |
|
"consumers_sentiment_neutral", |
|
"consumers_sentiment_positive" |
|
] |
|
|
|
def filter(preds, threshold=0.5): |
|
bool = preds > threshold |
|
indices = np.where(bool)[0] |
|
filtered_values = {RETURN_VALUES[index]: preds[index] for index in indices} |
|
return filtered_values |
|
|
|
def get_predict(text): |
|
inputs = preprocessing_text(text, tokenizer) |
|
input_ids = inputs["input_ids"].to(divice) |
|
attention_mask = inputs["attention_mask"].to(divice) |
|
token_type_ids = inputs["token_type_ids"].to(divice) |
|
outputs = model(input_ids, attention_mask, token_type_ids) |
|
preds = torch.sigmoid(outputs).detach().cpu().numpy() |
|
preds = filter(preds[0]) |
|
return preds |
|
|