Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
import torch | |
import numpy as np | |
# Page config | |
st.set_page_config( | |
page_title="Amazon Review Sentiment Analysis", | |
page_icon="π", | |
layout="wide" | |
) | |
def load_model(): | |
"""Load the model and tokenizer.""" | |
model_name = "LiYuan/amazon-review-sentiment-analysis" | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModelForSequenceClassification.from_pretrained(model_name) | |
return tokenizer, model | |
def predict_sentiment(text, tokenizer, model): | |
"""Predict sentiment for given text.""" | |
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512) | |
outputs = model(**inputs) | |
predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) | |
return predictions.detach().numpy()[0] | |
def main(): | |
st.title("π Amazon Review Sentiment Analysis") | |
st.write(""" | |
This application analyzes the sentiment of product reviews and predicts ratings (1-5 stars). | |
Enter your review text below to get started! | |
""") | |
# Load model | |
with st.spinner("Loading model..."): | |
tokenizer, model = load_model() | |
# Text input | |
text_input = st.text_area("Enter your review text:", height=150) | |
if st.button("Analyze Sentiment"): | |
if text_input.strip(): | |
with st.spinner("Analyzing..."): | |
# Get prediction | |
predictions = predict_sentiment(text_input, tokenizer, model) | |
predicted_rating = np.argmax(predictions) + 1 # Add 1 since ratings are 1-5 | |
# Display results | |
col1, col2 = st.columns(2) | |
with col1: | |
st.subheader("Predicted Rating") | |
st.markdown(f"<h1 style='text-align: center; color: #1f77b4;'>{'β' * predicted_rating}</h1>", unsafe_allow_html=True) | |
with col2: | |
st.subheader("Confidence Scores") | |
for i, score in enumerate(predictions, 1): | |
st.progress(float(score)) | |
st.write(f"{i} Stars: {score:.2%}") | |
else: | |
st.warning("Please enter some text to analyze.") | |
# Additional information | |
with st.expander("About this Model"): | |
st.write(""" | |
This application uses the LiYuan/amazon-review-sentiment-analysis model from HuggingFace. | |
The model is based on DistilBERT and was trained on a large dataset of Amazon product reviews. | |
It can predict ratings from 1 to 5 stars based on the review text. | |
Supported languages: | |
- English | |
- Dutch | |
- German | |
- French | |
- Spanish | |
- Italian | |
""") | |
if __name__ == "__main__": | |
main() |