sentiment / app.py
Isaiah6b's picture
Deploy space_sentiment from monorepo
1bb7727 verified
Raw
History Blame Contribute Delete
1.34 kB
"""Gradio demo: bag-of-words sentiment via ONNX Runtime."""
import json
from pathlib import Path
import gradio as gr
import numpy as np
import onnxruntime as ort
from preprocess import text_to_bow
VOCAB_PATH = Path(__file__).resolve().parent / "vocab.json"
vocab_data = json.loads(VOCAB_PATH.read_text())
VOCAB: list[str] = vocab_data["vocab"]
LABELS: list[str] = vocab_data["labels"]
session = ort.InferenceSession("sentiment.onnx")
def predict(text: str) -> dict[str, float]:
if not text.strip():
return {label: 0.0 for label in LABELS}
bow = text_to_bow(text, VOCAB)[np.newaxis, :]
logits = session.run(None, {"bow": bow})[0][0]
exp_logits = np.exp(logits - logits.max())
probs = exp_logits / exp_logits.sum()
return {label: float(prob) for label, prob in zip(LABELS, probs)}
demo = gr.Interface(
fn=predict,
inputs=gr.Textbox(label="Text", placeholder="I love this product"),
outputs=gr.Label(num_top_classes=2, label="Sentiment"),
title="ONNX Sentiment Demo",
description=(
"Tiny bag-of-words classifier trained from scratch in PyTorch "
"(no pretrained model). Exported to ONNX for inference."
),
examples=[
["I love this"],
["This is awful"],
["Amazing product"],
["So disappointed"],
],
)
demo.launch()