Spaces:
Sleeping
Sleeping
import gradio as gr | |
import joblib | |
# Load models and vectorizer from the models folder | |
logistic_model = joblib.load("models/best_logistic_model.pkl") | |
svm_model = joblib.load("models/best_svc_model.pkl") | |
random_forest_model = joblib.load("models/best_rf_model.pkl") | |
knn_model = joblib.load("models/best_knn_model.pkl") | |
vectorizer = joblib.load("models/vectorizer.pkl") | |
# Model selection mapping | |
models = { | |
"Logistic Regression": logistic_model, | |
"SVM": svm_model, | |
"Random Forest": random_forest_model, | |
"KNN": knn_model, | |
} | |
# Prediction function | |
def predict_sentiment(review, model_name): | |
try: | |
if not review.strip(): | |
return "Error: Review cannot be empty", None | |
if model_name not in models: | |
return "Error: Invalid model selected", None | |
# Preprocess the text | |
text_vector = vectorizer.transform([review]) | |
# Predict using the selected model | |
model = models[model_name] | |
prediction = model.predict(text_vector)[0] | |
probabilities = model.predict_proba(text_vector)[0] if hasattr(model, "predict_proba") else None | |
# Format the output | |
sentiment = "Positive Feedback" if prediction == 1 else "Negative Feedback" | |
probabilities_output = ( | |
{ | |
"Positive": probabilities[1], # Raw probability (0.0 - 1.0) | |
"Negative": probabilities[0], # Raw probability (0.0 - 1.0) | |
} | |
if probabilities is not None | |
else "Probabilities not available" | |
) | |
return sentiment, probabilities_output | |
except Exception as e: | |
# Log the error to the console for debugging | |
print(f"Error in prediction: {e}") | |
return f"Error: {str(e)}", None | |
# Create Gradio Interface | |
inputs = [ | |
gr.Textbox(label="Review Comment", placeholder="Enter your review here..."), | |
gr.Dropdown(choices=["Logistic Regression", "SVM", "Random Forest", "KNN"], label="Model"), | |
] | |
outputs = [ | |
gr.Textbox(label="Predicted Sentiment Class"), | |
gr.Label(label="Predicted Probability"), | |
] | |
# Launch Gradio App | |
gr.Interface( | |
fn=predict_sentiment, | |
inputs=inputs, | |
outputs=outputs, | |
title="Sentiment Analysis", | |
description="Enter a review and select a model to predict sentiment.", | |
).launch() | |