|
|
import streamlit as st |
|
|
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline |
|
|
import torch |
|
|
|
|
|
@st.cache_resource |
|
|
def load_model(): |
|
|
model_name = "finiteautomata/bertweet-base-sentiment-analysis" |
|
|
cache_dir = "/app/hf_cache" |
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir) |
|
|
model = AutoModelForSequenceClassification.from_pretrained(model_name, cache_dir=cache_dir) |
|
|
return pipeline("sentiment-analysis", model=model, tokenizer=tokenizer) |
|
|
|
|
|
|
|
|
sentiment_pipeline = load_model() |
|
|
|
|
|
|
|
|
st.title("📝 Text Sentiment Analyzer") |
|
|
st.write("Enter your text and click **Analyze** to see if it's Positive, Neutral, or Negative.") |
|
|
|
|
|
|
|
|
user_input = st.text_area("Enter text here:", height=150) |
|
|
|
|
|
|
|
|
if st.button("Analyze"): |
|
|
if not user_input.strip(): |
|
|
st.warning("Please enter some text.") |
|
|
else: |
|
|
result = sentiment_pipeline(user_input)[0] |
|
|
label = result["label"] |
|
|
|
|
|
if label == "NEG": |
|
|
sentiment = "Negative" |
|
|
elif label == "NEU": |
|
|
sentiment = "Neutral" |
|
|
elif label == "POS": |
|
|
sentiment = "Positive" |
|
|
else: |
|
|
sentiment = "Unknown" |
|
|
|
|
|
st.success(f"**Sentiment:** {sentiment}") |
|
|
|
|
|
|