Spaces:
Sleeping
Sleeping
import gradio as gr | |
import torch | |
from peft import PeftModel | |
from transformers import AutoModelForSequenceClassification, AutoTokenizer | |
import json | |
# Load model and tokenizer | |
base_model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=6) | |
model = PeftModel.from_pretrained(base_model, "katsuchi/bert-dair-ai-emotion") | |
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased") | |
def predict_emotion(text): | |
# Tokenize input | |
tokens = tokenizer(text, return_tensors="pt", truncation=True, max_length=128) | |
# Get model prediction | |
with torch.no_grad(): | |
outputs = model(tokens['input_ids']) | |
probs = torch.softmax(outputs.logits, dim=-1) | |
# Convert probabilities to percentages | |
percentages = (probs * 100).squeeze().tolist() | |
# Create emotion-percentage mapping | |
emotions = ['sadness', 'joy', 'love', 'anger', 'fear', 'surprise'] | |
emotion_probs = { | |
emotion: f"{percentage:.1f}%" | |
for emotion, percentage in zip(emotions, percentages) | |
} | |
# Sort by probability in descending order | |
sorted_emotions = dict( | |
sorted(emotion_probs.items(), | |
key=lambda x: float(x[1].rstrip('%')), | |
reverse=True) | |
) | |
# Format output | |
return json.dumps(sorted_emotions, indent=2) | |
# Create Gradio interface | |
iface = gr.Interface( | |
fn=predict_emotion, | |
inputs=gr.Textbox( | |
lines=3, | |
placeholder="Enter text here..." | |
), | |
outputs=gr.JSON(), | |
title="Emotion Classifier", | |
description="Predict emotions in text with confidence percentages", | |
examples=[ | |
["I am so happy to see you!"], | |
["I'm really disappointed with the results."], | |
["That's absolutely terrifying!"], | |
["I love spending time with my family."] | |
] | |
) | |
if __name__ == "__main__": | |
iface.launch() |