Alexvatti's picture
Update app.py
9cb81e0 verified
import gradio as gr
import numpy as np
import pandas as pd
import re
from tensorflow.keras.models import Sequential
from tensorflow.keras.models import load_model
from tensorflow.keras.layers import Dense
from transformers import BertTokenizer, TFBertModel
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report
from nltk.corpus import stopwords
import tensorflow as tf
import nltk
# Download stopwords
nltk.download('stopwords')
# Load tokenizer and model
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
bert_model = TFBertModel.from_pretrained("bert-base-uncased")
# Clean text
def remove_tags(txt):
result = re.sub(r'<[^>]+>', '', txt)
result = re.sub(r'https?://\S+', '', result)
result = re.sub(r'[^a-zA-Z0-9\s]', ' ', result)
return result.lower()
def remove_stop_words(txt):
stop_words = set(stopwords.words('english'))
return ' '.join([word for word in txt.split() if word not in stop_words])
# Load the trained model
classifier=load_model('movie_sentiment_model.h5')
# Single input BERT embeddings
def bert_embeddings(text, max_length=64):
inputs = tokenizer(
[text],
return_tensors="tf",
padding=True,
truncation=True,
max_length=max_length
)
outputs = bert_model(inputs['input_ids'], attention_mask=inputs['attention_mask'])
cls_embeddings = outputs.last_hidden_state[:, 0, :]
return cls_embeddings.numpy()
# Define Gradio function
def fn(test_review):
review = remove_tags(test_review)
review = remove_stop_words(review)
cls_embeddings = bert_embeddings(review)
prediction = classifier.predict(cls_embeddings)
return "Positive" if prediction[0] > 0.5 else "Negative"
# Gradio Interface
description = "Give a review of a movie that you like (or hate, sarcasm ) and the model will let you know just how much your review truly reflects your emotions"
input_text = gr.Textbox(label="Enter Movie Review Text in English")
output_text = gr.Textbox(label="Output Text")
app = gr.Interface(
fn=fn,
inputs=input_text,
outputs=output_text,
title="Sentiment Analysis of Movie Reviews in English",
description=description,
allow_flagging="auto",
flagging_dir='flagging_records'
)
app.launch(inline=False)