cs751 / app.py
fajarah's picture
Create app.py
23e46f5 verified
raw
history blame
2.47 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from torch.nn.functional import softmax
import torch
# Load model and tokenizer
model_name = "bhadresh-savani/distilbert-base-uncased-emotion"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# Emotion label to icon mapping
emotion_icons = {
"admiration": "๐Ÿ˜",
"amusement": "๐Ÿ˜…",
"anger": "๐Ÿ˜ก",
"annoyance": "๐Ÿ˜‘",
"approval": "๐Ÿ‘",
"caring": "๐Ÿ’—",
"confusion": "๐Ÿค”",
"curiosity": "๐Ÿ˜ฎ",
"desire": "๐Ÿคค",
"disappointment": "๐Ÿ˜ž",
"disapproval": "๐Ÿ‘Ž",
"disgust": "๐Ÿคฎ",
"embarrassment": "๐Ÿ˜ณ",
"excitement": "๐ŸŽ‰",
"fear": "๐Ÿ˜ฑ",
"gratitude": "๐Ÿ™",
"grief": "๐Ÿ˜ญ",
"joy": "๐Ÿ˜ƒ",
"love": "โค๏ธ",
"nervousness": "๐Ÿคง",
"optimism": "๐Ÿ˜Š",
"pride": "๐Ÿ˜Ž",
"realization": "๐Ÿคฏ",
"relief": "๐Ÿ˜Œ",
"remorse": "๐Ÿ˜”",
"sadness": "๐Ÿ˜ข",
"surprise": "๐Ÿ˜ฒ",
"neutral": "๐Ÿ˜"
}
# Prediction function
def get_emotion(text):
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
probs = softmax(outputs.logits, dim=1)
predicted_class = torch.argmax(probs).item()
label = model.config.id2label[predicted_class]
icon = emotion_icons.get(label, "")
return f"{icon} {label.capitalize()}"
# Gradio UI
custom_css = """
body {
background: linear-gradient(to right, #f9f9f9, #d4ecff);
font-family: 'Segoe UI', sans-serif;
}
.gr-button {
background-color: #007BFF !important;
color: white !important;
border-radius: 8px !important;
font-weight: bold;
}
.gr-button:hover {
background-color: #0056b3 !important;
}
.gr-textbox {
border-radius: 8px !important;
border: 1px solid #ccc !important;
padding: 10px !important;
}
.output-textbox {
font-size: 1.5rem;
font-weight: bold;
color: #333;
background-color: #f1f9ff;
border-radius: 8px;
padding: 10px;
border: 1px solid #007BFF;
}
"""
demo = gr.Interface(
fn=get_emotion,
inputs=gr.Textbox(lines=3, placeholder="What's on your mind today?", label="Your Text"),
outputs=gr.Textbox(label="Detected Emotion", elem_classes=["output-textbox"]),
title="๐Ÿฅฐ Emotion Detector",
description="Type a sentence below and hit Submit to reveal the emotion behind your words.",
theme="default",
css=custom_css
)
demo.launch()