jeffliulab's picture
Initial deploy
eb767b3 verified
"""
Sentiment Analysis — Positive / Negative / Neutral
Course: 100 Deep Learning ch4
"""
import gradio as gr
from transformers import pipeline
# Multi-language sentiment model
classifier = pipeline(
"sentiment-analysis",
model="lxyuan/distilbert-base-multilingual-cased-sentiments-student",
)
LABEL_MAP = {
"positive": "Positive",
"negative": "Negative",
"neutral": "Neutral",
}
EMOJI_MAP = {
"positive": "😊",
"negative": "😞",
"neutral": "😐",
}
def analyze(text: str):
if not text.strip():
return {}, ""
results = classifier(text, top_k=3)
label_dict = {
f"{EMOJI_MAP.get(r['label'], '')} {LABEL_MAP.get(r['label'], r['label'])}": round(r["score"], 4)
for r in results
}
top = results[0]
emoji = EMOJI_MAP.get(top["label"], "")
summary = (
f"**Prediction: {emoji} {LABEL_MAP.get(top['label'], top['label'])}** "
f"({top['score']:.1%} confidence)\n\n"
f"| Label | Score |\n|---|---|\n"
)
for r in results:
bar_len = int(r["score"] * 30)
bar = "█" * bar_len + "░" * (30 - bar_len)
summary += f"| {LABEL_MAP.get(r['label'], r['label'])} | {bar} {r['score']:.1%} |\n"
return label_dict, summary
with gr.Blocks(title="Sentiment Analysis") as demo:
gr.Markdown(
"# Sentiment Analysis\n"
"Enter text in any language to analyze its sentiment.\n"
"Uses a multilingual DistilBERT model.\n"
"*Course: 100 Deep Learning ch4 — RNN & Sequence Models*"
)
with gr.Row():
with gr.Column():
text_input = gr.Textbox(
label="Input Text",
placeholder="Type or paste text here...",
lines=4,
)
btn = gr.Button("Analyze Sentiment", variant="primary")
with gr.Column():
label_out = gr.Label(num_top_classes=3, label="Sentiment Scores")
detail_md = gr.Markdown()
btn.click(analyze, [text_input], [label_out, detail_md])
text_input.submit(analyze, [text_input], [label_out, detail_md])
gr.Examples(
examples=[
"I absolutely love this product! It exceeded all my expectations.",
"The movie was terrible. Worst 2 hours of my life.",
"The weather today is partly cloudy with temperatures around 72°F.",
"这个餐厅的食物非常好吃,服务也很棒!",
"I'm not sure how I feel about the new update. It has some good features but also some bugs.",
"Das Essen war hervorragend und die Bedienung sehr freundlich.",
],
inputs=[text_input],
)
if __name__ == "__main__":
demo.launch()