Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
from transformers import AutoModelForSequenceClassification, AutoTokenizer | |
import torch | |
import random | |
import matplotlib.pyplot as plt | |
# Set Streamlit layout to wide | |
st.set_page_config(layout="wide") | |
# Load the model and tokenizer | |
model_name = 'dejanseo/BERTic-sentiment' | |
model = AutoModelForSequenceClassification.from_pretrained(model_name) | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
# Predefined sentences for testing | |
predefined_sentences = [ | |
"Veseli me što mogu podijeliti vijest da smo danas otvorili novu poslovnicu u centru grada, što će sigurno olakšati dostupnost našim klijentima.", | |
"Danas je objavljen izvještaj o prometnoj situaciji u gradu, koji pokazuje blagi pad broja nesreća u odnosu na prošli mjesec.", | |
"S velikom tugom moram objaviti da je naša tvrtka pretrpjela značajne gubitke u posljednjem tromjesečju, što će rezultirati otpuštanjima.", | |
"Uživao sam čitajući novi članak o inovacijama u tehnologiji, koji pokazuje koliko brzo napredujemo u ovom području.", | |
"Jutros je objavljena nova vremenska prognoza koja predviđa stabilne temperature tijekom tjedna.", | |
"Nažalost, moram podijeliti da je moja recenzija najnovijeg filma izrazito negativna zbog loše izvedbe glavnih glumaca i slabe radnje.", | |
"S velikim zadovoljstvom najavljujemo lansiranje našeg novog proizvoda, koji je rezultat višegodišnjeg istraživanja i razvoja.", | |
"Na stranici je objavljena nova studija koja analizira utjecaj društvenih mreža na mlade.", | |
"Razočaran sam što moram reći da je kvaliteta usluge u našem lokalnom restoranu značajno opala u posljednje vrijeme.", | |
"Presretan sam što mogu podijeliti da smo osvojili prestižnu nagradu za inovativnost u poslovanju, što je velika čast za naš tim.", | |
"U današnjem broju novina možete pronaći intervju s poznatim autorom koji govori o svojoj najnovijoj knjizi.", | |
"Uz veliko nezadovoljstvo moram reći da su nedavne promjene u zakonodavstvu dovele do mnogih poteškoća za male poduzetnike.", | |
"Jako me veseli što smo uspjeli završiti naš projekt prije roka i s izvanrednim rezultatima.", | |
"Danas je na blogu objavljen članak o važnosti zdrave prehrane u svakodnevnom životu.", | |
"Sa žaljenjem moram objaviti da su najnovije vijesti o ekonomskoj situaciji izrazito nepovoljne za naš sektor.", | |
"S velikom radošću najavljujem da će se održati besplatni online seminar o najnovijim trendovima u digitalnom marketingu.", | |
"Današnje vijesti donose pregled najvažnijih događaja iz svijeta sporta.", | |
"Nažalost, moram podijeliti da su naši napori za prikupljanje sredstava za dobrotvorne svrhe naišli na neočekivane prepreke.", | |
"Uzbuđen sam što mogu podijeliti da smo postigli novi rekord u prodaji naših proizvoda ovog kvartala.", | |
"Na web stranici je objavljena nova analiza tržišta koja pokazuje stabilan rast u sektoru nekretnina.", | |
"S velikim razočaranjem moram reći da su korisničke recenzije našeg najnovijeg proizvoda izrazito negativne.", | |
"S velikim ponosom objavljujemo da je naš tim osvojio prvu nagradu na međunarodnom natjecanju inovacija.", | |
"Danas je na portalu objavljen članak o najnovijim trendovima u modnoj industriji.", | |
"Duboko sam razočaran što moram reći da su naši napori za poboljšanje usluga naišli na ozbiljne izazove.", | |
"Presretan sam što mogu podijeliti da smo ostvarili značajan napredak u istraživanju novih tehnologija.", | |
"Na stranici su objavljeni rezultati ankete o zadovoljstvu korisnika uslugama javnog prijevoza.", | |
"S velikim žaljenjem moram objaviti da su najnoviji financijski izvještaji pokazali gubitke koji će utjecati na naše poslovanje.", | |
"Veseli me što mogu podijeliti da smo dobili pohvale za naš rad na međunarodnoj konferenciji.", | |
"U današnjem izdanju časopisa možete pročitati pregled najnovijih znanstvenih istraživanja.", | |
"S tugom moram reći da su naši planovi za proširenje poslovanja trenutno na čekanju zbog nepredviđenih okolnosti." | |
] | |
# Streamlit interface | |
st.title("Croatian Sentiment Analysis by DEJAN") | |
st.write("BERTic-based Croatian language text classification transformer fine-tuned for sentence-level sentiment analysis. Developed and released by [Dejan Marketing](https://dejanmarketing.com/)") | |
sentence = st.text_input("Enter a sentence for sentiment analysis:") | |
if st.button("Predict"): | |
if sentence: | |
inputs = tokenizer(sentence, return_tensors="pt", truncation=True, padding=True, max_length=128) | |
with torch.no_grad(): | |
outputs = model(**inputs) | |
logits = outputs.logits | |
probabilities = torch.nn.functional.softmax(logits, dim=-1).flatten().tolist() | |
prediction = torch.argmax(logits, dim=-1).item() | |
# Map the prediction to sentiment labels (assuming 0: Positive, 1: Neutral, 2: Negative) | |
sentiment = {0: "Positive", 1: "Neutral", 2: "Negative"} | |
st.write(f"Prediction: {sentiment[prediction]}") | |
# Display probabilities | |
st.write("Probabilities:") | |
for i, label in sentiment.items(): | |
st.write(f"{label}: {probabilities[i]*100:.2f}%") | |
# Plot probabilities | |
labels = [sentiment[i] for i in range(3)] | |
plt.figure(figsize=(8, 4)) | |
plt.bar(labels, probabilities, color=['green', 'blue', 'red']) | |
plt.xlabel('Sentiment') | |
plt.ylabel('Probability') | |
plt.title('Sentiment Probabilities') | |
st.pyplot(plt) | |
else: | |
st.write("Please enter a sentence.") | |
if st.button("Test a random sentence"): | |
sentence = random.choice(predefined_sentences) | |
st.write(f"Random sentence: {sentence}") | |
inputs = tokenizer(sentence, return_tensors="pt", truncation=True, padding=True, max_length=128) | |
with torch.no_grad(): | |
outputs = model(**inputs) | |
logits = outputs.logits | |
probabilities = torch.nn.functional.softmax(logits, dim=-1).flatten().tolist() | |
prediction = torch.argmax(logits, dim=-1).item() | |
# Map the prediction to sentiment labels (assuming 0: Positive, 1: Neutral, 2: Negative) | |
sentiment = {0: "Positive", 1: "Neutral", 2: "Negative"} | |
st.write(f"Prediction: {sentiment[prediction]}") | |
# Display probabilities | |
st.write("Probabilities:") | |
for i, label in sentiment.items(): | |
st.write(f"{label}: {probabilities[i]*100:.2f}%") | |
# Plot probabilities | |
labels = [sentiment[i] for i in range(3)] | |
plt.figure(figsize=(8, 4)) | |
plt.bar(labels, probabilities, color=['green', 'blue', 'red']) | |
plt.xlabel('Sentiment') | |
plt.ylabel('Probability') | |
plt.title('Sentiment Probabilities') | |
st.pyplot(plt) | |