dejanseo commited on
Commit
4c21ae7
1 Parent(s): 22fe4ec

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +111 -0
app.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ from transformers import AutoModelForSequenceClassification, AutoTokenizer
4
+ import torch
5
+ import random
6
+ import matplotlib.pyplot as plt
7
+
8
+ # Set Streamlit layout to wide
9
+ st.set_page_config(layout="wide")
10
+
11
+ # Load the model and tokenizer
12
+ model_name = 'dejanseo/BERTic-sentiment'
13
+ model = AutoModelForSequenceClassification.from_pretrained(model_name)
14
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
15
+
16
+ # Predefined sentences for testing
17
+ predefined_sentences = [
18
+ "Veseli me što mogu podijeliti vijest da smo danas otvorili novu poslovnicu u centru grada, što će sigurno olakšati dostupnost našim klijentima.",
19
+ "Danas je objavljen izvještaj o prometnoj situaciji u gradu, koji pokazuje blagi pad broja nesreća u odnosu na prošli mjesec.",
20
+ "S velikom tugom moram objaviti da je naša tvrtka pretrpjela značajne gubitke u posljednjem tromjesečju, što će rezultirati otpuštanjima.",
21
+ "Uživao sam čitajući novi članak o inovacijama u tehnologiji, koji pokazuje koliko brzo napredujemo u ovom području.",
22
+ "Jutros je objavljena nova vremenska prognoza koja predviđa stabilne temperature tijekom tjedna.",
23
+ "Nažalost, moram podijeliti da je moja recenzija najnovijeg filma izrazito negativna zbog loše izvedbe glavnih glumaca i slabe radnje.",
24
+ "S velikim zadovoljstvom najavljujemo lansiranje našeg novog proizvoda, koji je rezultat višegodišnjeg istraživanja i razvoja.",
25
+ "Na stranici je objavljena nova studija koja analizira utjecaj društvenih mreža na mlade.",
26
+ "Razočaran sam što moram reći da je kvaliteta usluge u našem lokalnom restoranu značajno opala u posljednje vrijeme.",
27
+ "Presretan sam što mogu podijeliti da smo osvojili prestižnu nagradu za inovativnost u poslovanju, što je velika čast za naš tim.",
28
+ "U današnjem broju novina možete pronaći intervju s poznatim autorom koji govori o svojoj najnovijoj knjizi.",
29
+ "Uz veliko nezadovoljstvo moram reći da su nedavne promjene u zakonodavstvu dovele do mnogih poteškoća za male poduzetnike.",
30
+ "Jako me veseli što smo uspjeli završiti naš projekt prije roka i s izvanrednim rezultatima.",
31
+ "Danas je na blogu objavljen članak o važnosti zdrave prehrane u svakodnevnom životu.",
32
+ "Sa žaljenjem moram objaviti da su najnovije vijesti o ekonomskoj situaciji izrazito nepovoljne za naš sektor.",
33
+ "S velikom radošću najavljujem da će se održati besplatni online seminar o najnovijim trendovima u digitalnom marketingu.",
34
+ "Današnje vijesti donose pregled najvažnijih događaja iz svijeta sporta.",
35
+ "Nažalost, moram podijeliti da su naši napori za prikupljanje sredstava za dobrotvorne svrhe naišli na neočekivane prepreke.",
36
+ "Uzbuđen sam što mogu podijeliti da smo postigli novi rekord u prodaji naših proizvoda ovog kvartala.",
37
+ "Na web stranici je objavljena nova analiza tržišta koja pokazuje stabilan rast u sektoru nekretnina.",
38
+ "S velikim razočaranjem moram reći da su korisničke recenzije našeg najnovijeg proizvoda izrazito negativne.",
39
+ "S velikim ponosom objavljujemo da je naš tim osvojio prvu nagradu na međunarodnom natjecanju inovacija.",
40
+ "Danas je na portalu objavljen članak o najnovijim trendovima u modnoj industriji.",
41
+ "Duboko sam razočaran što moram reći da su naši napori za poboljšanje usluga naišli na ozbiljne izazove.",
42
+ "Presretan sam što mogu podijeliti da smo ostvarili značajan napredak u istraživanju novih tehnologija.",
43
+ "Na stranici su objavljeni rezultati ankete o zadovoljstvu korisnika uslugama javnog prijevoza.",
44
+ "S velikim žaljenjem moram objaviti da su najnoviji financijski izvještaji pokazali gubitke koji će utjecati na naše poslovanje.",
45
+ "Veseli me što mogu podijeliti da smo dobili pohvale za naš rad na međunarodnoj konferenciji.",
46
+ "U današnjem izdanju časopisa možete pročitati pregled najnovijih znanstvenih istraživanja.",
47
+ "S tugom moram reći da su naši planovi za proširenje poslovanja trenutno na čekanju zbog nepredviđenih okolnosti."
48
+ ]
49
+
50
+ # Streamlit interface
51
+ st.title("Croatian Sentiment Analysis by DEJAN")
52
+ 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/)")
53
+
54
+ sentence = st.text_input("Enter a sentence for sentiment analysis:")
55
+
56
+ if st.button("Predict"):
57
+ if sentence:
58
+ inputs = tokenizer(sentence, return_tensors="pt", truncation=True, padding=True, max_length=128)
59
+ with torch.no_grad():
60
+ outputs = model(**inputs)
61
+ logits = outputs.logits
62
+ probabilities = torch.nn.functional.softmax(logits, dim=-1).flatten().tolist()
63
+ prediction = torch.argmax(logits, dim=-1).item()
64
+
65
+ # Map the prediction to sentiment labels (assuming 0: Positive, 1: Neutral, 2: Negative)
66
+ sentiment = {0: "Positive", 1: "Neutral", 2: "Negative"}
67
+ st.write(f"Prediction: {sentiment[prediction]}")
68
+
69
+ # Display probabilities
70
+ st.write("Probabilities:")
71
+ for i, label in sentiment.items():
72
+ st.write(f"{label}: {probabilities[i]*100:.2f}%")
73
+
74
+ # Plot probabilities
75
+ labels = [sentiment[i] for i in range(3)]
76
+ plt.figure(figsize=(8, 4))
77
+ plt.bar(labels, probabilities, color=['green', 'blue', 'red'])
78
+ plt.xlabel('Sentiment')
79
+ plt.ylabel('Probability')
80
+ plt.title('Sentiment Probabilities')
81
+ st.pyplot(plt)
82
+ else:
83
+ st.write("Please enter a sentence.")
84
+
85
+ if st.button("Test a random sentence"):
86
+ sentence = random.choice(predefined_sentences)
87
+ st.write(f"Random sentence: {sentence}")
88
+ inputs = tokenizer(sentence, return_tensors="pt", truncation=True, padding=True, max_length=128)
89
+ with torch.no_grad():
90
+ outputs = model(**inputs)
91
+ logits = outputs.logits
92
+ probabilities = torch.nn.functional.softmax(logits, dim=-1).flatten().tolist()
93
+ prediction = torch.argmax(logits, dim=-1).item()
94
+
95
+ # Map the prediction to sentiment labels (assuming 0: Positive, 1: Neutral, 2: Negative)
96
+ sentiment = {0: "Positive", 1: "Neutral", 2: "Negative"}
97
+ st.write(f"Prediction: {sentiment[prediction]}")
98
+
99
+ # Display probabilities
100
+ st.write("Probabilities:")
101
+ for i, label in sentiment.items():
102
+ st.write(f"{label}: {probabilities[i]*100:.2f}%")
103
+
104
+ # Plot probabilities
105
+ labels = [sentiment[i] for i in range(3)]
106
+ plt.figure(figsize=(8, 4))
107
+ plt.bar(labels, probabilities, color=['green', 'blue', 'red'])
108
+ plt.xlabel('Sentiment')
109
+ plt.ylabel('Probability')
110
+ plt.title('Sentiment Probabilities')
111
+ st.pyplot(plt)