Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import shap | |
| import torch | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| from transformers import pipeline | |
| # Load lightweight model | |
| classifier = pipeline( | |
| "sentiment-analysis", | |
| model="distilbert-base-uncased-finetuned-sst-2-english" | |
| ) | |
| # Create explainer | |
| explainer = shap.Explainer(classifier) | |
| def analyze(text): | |
| if not text.strip(): | |
| return "Please enter text", None | |
| # Prediction | |
| result = classifier(text)[0] | |
| label = result["label"] | |
| score = result["score"] | |
| # SHAP values | |
| shap_values = explainer([text]) | |
| tokens = shap_values[0].data | |
| values = shap_values[0].values | |
| # Create bar plot | |
| plt.figure() | |
| plt.barh(tokens, values) | |
| plt.xlabel("SHAP Value") | |
| plt.title("Word Contribution to Sentiment") | |
| return f"Prediction: {label} (Confidence: {score:.2f})", plt.gcf() | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Sentiment Analysis with SHAP") | |
| inp = gr.Textbox(lines=4, placeholder="Enter text here...") | |
| prediction = gr.Textbox(label="Prediction") | |
| shap_plot = gr.Plot(label="SHAP Explanation") | |
| btn = gr.Button("Analyze") | |
| btn.click(analyze, inp, [prediction, shap_plot]) | |
| demo.launch() |