sergeyfeldman's picture
Update app.py
cef4787 verified
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
# set up model
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], reverse=True)
feelings = sorted(feelings, key=lambda x: x[1], reverse=True)
harm = sorted(harm, key=lambda x: x[1], reverse=True)
sentiment = sorted(sentiment, key=lambda x: x[1], reverse=True)
top = issues + feelings + harm + sentiment
d = {i: j for i, j in top}
return d
iface = gr.Interface(
fn=predict,
inputs=gr.Textbox(label="Enter text"),
outputs=gr.Label(label="Predictions"),
title="Emotion and Issue Predictor",
description="Enter a text to predict emotions and issues.",
)
if __name__ == "__main__":
iface.launch()