CAPSTONE / app (2).py
Jedida's picture
Upload app (2).py
7accab4
raw
history blame
3.42 kB
import streamlit as st
import streamlit.components.v1 as com
#import libraries
from transformers import AutoModelForSequenceClassification, AutoTokenizer, AutoConfig
import numpy as np
#convert logits to probabilities
from scipy.special import softmax
from transformers import pipeline
#Set the page configs
st.set_page_config(page_title='Movie Sentiments Analysis',page_icon='🎬',layout='wide')
# Movie Sentiment Analysis Animation
st.markdown("<h1 style='text-align: center'> Movie Sentiment Analysis </h1>", unsafe_allow_html=True)
st.image("https://media.istockphoto.com/id/1055587418/vector/banner-for-online-cinema-with-old-movie-projector.jpg?s=612x612&w=0&k=20&c=ZsMSmd6CZfuUVDAvUSTb9XHBqeg4ucb43n52xV5-y1c=", use_column_width=True)
st.write("<h2 style='font-size: 24px;'> Analyze movie reviews and discover the sentiment of the audience </h2>", unsafe_allow_html=True)
# Create a form to take user inputs
with st.form(key='sentence', clear_on_submit = True):
# Input text
text = st.text_area('Copy and paste a sentence(s) or type one',
placeholder='I really enjoyed the movie, it was so entertaining.')
# Set examples related to movie sentiments
alt_text = st.selectbox("Can't Type? Select an Example below", (
'The movie was amazing, I loved every moment of it.',
'I found the acting in the movie to be quite impressive.',
'This film was a complete waste of my time, terrible.',
'The plot of the movie was confusing and hard to follow.',
'The cinematography in this film is outstanding.'))
# Select a model
models = {
'Bert': 'UholoDala/sentence_sentiments_analysis_bert',
'Distilbert': 'UholoDala/sentence_sentiments_analysis_distilbert',
'Roberta': 'UholoDala/sentence_sentiments_analysis_roberta'
}
model = st.selectbox('Which model would you want to Use?', ('Bert', 'Distilbert', 'Roberta'))
# Submit
submit = st.form_submit_button('Predict', 'Continue processing input')
# Clear button
clear = st.button('Clear')
selected_model=models[model]
#create columns to show outputs
col1,col2,col3=st.columns(3)
col1.write('<h2 style="font-size: 24px;"> Sentiment Emoji </h2>',unsafe_allow_html=True)
col2.write('<h2 style="font-size: 24px;"> How this user feels about the movie </h2>',unsafe_allow_html=True)
col3.write('<h2 style="font-size: 24px;"> Confidence of this prediction </h2>',unsafe_allow_html=True)
if submit:
#Check text
if text=="":
text=alt_text
st.success(f"Input text is set to: '{text}'")
else:
st.success('Text received',icon='βœ…')
#import the model
pipe=pipeline(model=selected_model)
#pass text to model
output=pipe(text)
output_dict=output[0]
lable=output_dict['label']
score=output_dict['score']
#output
if lable=='NEGATIVE' or lable=='LABEL_0':
with col1:
com.iframe("https://embed.lottiefiles.com/animation/125694")
col2.write('NEGATIVE')
col3.write(f'{score:.2%}')
else:
lable=='POSITIVE'or lable=='LABEL_2'
with col1:
com.iframe("https://embed.lottiefiles.com/animation/148485")
col2.write('POSITIVE')
col3.write(f'{score:.2%}')
# Clear button action
text = "" # Clear the input text
if clear:
st.success('Input fields cleared', icon='βœ…')