ml-playground / app.py
Sasidhar's picture
Create app.py
f888248
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 17 22:46:12 2022
@author: conny
"""
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
import plotly.express as px
import streamlit as st
from streamlit_option_menu import option_menu
st. set_page_config(layout="wide")
from transformers import pipeline
import pandas as pd
@st.cache(allow_output_mutation = True)
def init_text_summarization_model():
MODEL = 'facebook/bart-large-cnn'
pipe = pipeline("summarization", model=MODEL)
return pipe
@st.cache(allow_output_mutation = True)
def init_zsl_topic_classification():
MODEL = 'facebook/bart-large-mnli'
pipe = pipeline("zero-shot-classification", model=MODEL)
template = "This text is about {}."
return pipe, template
# Model initialization
pipeline_summarization = init_text_summarization_model()
pipeline_zsl, template = init_zsl_topic_classification()
st.header('Customer Review Analysis')
# Review text box
default_review = \
"""I attempted to attend the Bank Alpha Eastbank branch last Friday to open a Kids Savings Account for my 3 year old son. I was informed by the Bank Alpha staffer that I was "too close to closing time" and that "I'd have to come back another time". It was about 20 minutes prior to close and there was no one else in the branch except the staff. I did say that I had my son's birth certificate and a Medicare card to establish his identity. Still, no dice. Come back later. No worries, can do.
I returned today (Monday) to the same branch at 1130, with more than enough time for the account opening to occur. I confirmed with another Bank Alpha staffer that I had my son's birth certificate and Medicare card. However, he went out the back "just to check something". Upon coming back, I was informed that they would not be able to open the account for me today as they required my son, a 3 year old, to be present. The staffer on Friday failed to mention this to me. Equally, the Bank Alpha website for the Kids Savings Account does not list the physical presence of the child as a requirement for opening said account.
I have never come across a bank so committed to not providing services to prospective customers as Bank Alpha. As a result, my son won't be banking with Bank Alpha, and I probably won't be recommending the use of Bank Alpha to any family or friends either."""
review = st.text_area("Paste/write a review here..", value=default_review, height=250)
tabs = option_menu(menu_title=None,
options=[
"Text Summarization",
"Zero-Shot-Learning",
],
default_index=0,
orientation='horizontal'
)
### Text Summarization
if tabs == 'Text Summarization':
button = st.button('Summarize review')
if button:
# Text summarization inference
with st.spinner("Summarizing review..."):
summary_text = pipeline_summarization(review, max_length=130, min_length=30, do_sample=False)
# Show output
st.write(summary_text[0]['summary_text'])
### Zero-Shot-Learning
elif tabs == 'Zero-Shot-Learning':
col_product, col_topic = st.columns(2)
# Set product classes
products = col_product.multiselect(
label='Available Products and Services:',
options=[
'Bank Account',
'Credit Card',
'Home Loan',
'Insurance',
],
default=[
'Bank Account',
'Credit Card',
'Home Loan',
'Insurance',
]
)
product_is_multi_label = col_product.checkbox("Can have more than one classes", value=True)
# Set topic classes
topics = col_topic.multiselect(
label="Possible Review Topics:",
options=[
"Excellent Customer Service",
"Great Product Feature",
"Poor Service",
"Unclear Procedure",
"Other"
],
default=[
"Excellent Customer Service",
"Great Product Feature",
"Poor Service",
"Unclear Procedure",
]
)
topic_is_multi_label = col_topic.checkbox("Can have more than one classes", value=False)
button = st.button('Classify')
if button:
# ZSL inference
with st.spinner("Identifying product/service and classifying review..."):
product_classification_output = pipeline_zsl(review, products, hypothesis_template=template, multi_label=product_is_multi_label)
topic_classification_output = pipeline_zsl(review, topics, hypothesis_template=template, multi_label=topic_is_multi_label)
# Show output
col_output_product, col_output_topic = st.columns(2)
data = {
'Product': product_classification_output['labels'],
'Scores': product_classification_output['scores']
}
df = pd.DataFrame(data)
df = df.sort_values(by='Scores', ascending=True)
fig = px.bar(df, x='Scores', y='Product', orientation='h')
col_output_product.plotly_chart(fig, use_container_width=True)
data = {
'Topic': topic_classification_output['labels'],
'Scores': topic_classification_output['scores']
}
df = pd.DataFrame(data)
df = df.sort_values(by='Scores', ascending=True)
fig = px.bar(df, x='Scores', y='Topic', orientation='h')
col_output_topic.plotly_chart(fig, use_container_width=True)