|
from transformers import RobertaTokenizer, AutoModelForSequenceClassification |
|
from scipy.special import expit |
|
import numpy as np |
|
import os |
|
import gradio as gr |
|
import requests |
|
from datetime import datetime |
|
|
|
|
|
authtoken = os.environ.get("TOKEN") |
|
tokenizer = RobertaTokenizer.from_pretrained("guidecare/feelings_and_issues_large_v2", token=authtoken, use_safetensors=True) |
|
tokenizer.do_lower_case = True |
|
model = AutoModelForSequenceClassification.from_pretrained("guidecare/feelings_and_issues_large_v2", token=authtoken, use_safetensors=True) |
|
all_label_names = list(model.config.id2label.values()) |
|
|
|
|
|
def predict(text): |
|
probs = expit(model(**tokenizer([text], return_tensors="pt", padding=True)).logits.detach().numpy()) |
|
|
|
probs = [float(np.round(i, 2)) for i in probs[0]] |
|
|
|
zipped_list = list(zip(all_label_names, probs)) |
|
print(text, zipped_list) |
|
issues = [(i, j) for i, j in zipped_list if i.startswith('issue')] |
|
feelings = [(i, j) for i, j in zipped_list if i.startswith('feeling')] |
|
harm = [(i, j) for i, j in zipped_list if i.startswith('harm')] |
|
sentiment = [(i, j) for i, j in zipped_list if i.startswith('sentiment')] |
|
|
|
issues = sorted(issues, key=lambda x: x[1])[::-1] |
|
feelings = sorted(feelings, key=lambda x: x[1])[::-1] |
|
harm = sorted(harm, key=lambda x: x[1])[::-1] |
|
sentiment = sorted(sentiment, key=lambda x: x[1])[::-1] |
|
|
|
top = issues + feelings + harm + sentiment |
|
|
|
d = {i: j for i, j in top} |
|
return d |
|
|
|
|
|
iface = gr.Interface( |
|
fn=predict, |
|
inputs="text", |
|
outputs="label", |
|
|
|
) |
|
|
|
iface.launch() |