Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import nltk | |
| from nltk.sentiment.vader import SentimentIntensityAnalyzer | |
| from transformers import pipeline | |
| from joblib import load | |
| from transformers import AutoModelForSequenceClassification, AutoTokenizer | |
| import torch.nn.functional as F | |
| from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay | |
| import matplotlib.pyplot as plt | |
| # global variables to load models | |
| lr_model = load("lr_model.joblib") | |
| lr_vectorizer = load("vectorizer.joblib") | |
| sentiment_pipe = pipeline("text-classification", model="finiteautomata/bertweet-base-sentiment-analysis") | |
| bert_model = AutoModelForSequenceClassification.from_pretrained("./imdb-bert") | |
| bert_tokenizer = AutoTokenizer.from_pretrained("./imdb-bert") | |
| def greet(name): | |
| return "Hello " + name + "!!" | |
| def classify(text): | |
| return {"cat": 0.3, "dog": 0.7} | |
| def predict_sentiment(text, model): | |
| if model == "finiteautomata/bertweet-base-sentiment-analysis": | |
| out = sentiment_pipe(text, return_all_scores=True) | |
| return {pred["label"]: pred["score"] for pred in out[0]} | |
| elif model == "vader": | |
| nltk.download('vader_lexicon') | |
| sia = SentimentIntensityAnalyzer() | |
| return sia.polarity_scores(text) | |
| elif model == "custom logistic regression": | |
| x = lr_vectorizer.transform([text]) | |
| pred = lr_model.predict_proba(x)[0] | |
| return {"neg": pred[0], "pos": pred[1]} | |
| elif model == "custom BERT": | |
| pred = F.softmax(bert_model(**bert_tokenizer(text, return_tensors="pt")).logits[0], dim=0).tolist() | |
| return {"neg": pred[0], "pos": pred[1]} | |
| def plot(): | |
| actual = ["pos", "pos", "neg", "neg", "pos"] | |
| pred = ["pos", "neg", "pos", "neg", "pos"] | |
| cm = confusion_matrix(actual, pred) | |
| disp = ConfusionMatrixDisplay(confusion_matrix=cm) | |
| disp.plot() | |
| return (plt.gcf(), f"Accuracy: {accuracy_score(actual, pred)}") | |
| demo = gr.Blocks() | |
| with demo: | |
| gr.Markdown("A bunch of different Gradio demos in tabs.\n\nNote that generally, the code that is in each tab could be its own Gradio application!") | |
| with gr.Tabs(): | |
| with gr.TabItem("Basic Hello"): | |
| gr.Markdown('The most basic "Hello World"-type demo you can write') | |
| interface = gr.Interface(fn=greet, inputs="text", outputs="text") | |
| with gr.TabItem("Label Output"): | |
| gr.Markdown("An example of a basic interface with a classification label as output") | |
| interface = gr.Interface(fn=classify, inputs="text", outputs="label") | |
| with gr.TabItem("Multiple Inputs"): | |
| gr.Markdown("A more complex interface for sentiment analysis with multiple inputs, including a dropdown, and some examples") | |
| interface = gr.Interface( | |
| predict_sentiment, | |
| [ | |
| gr.Textbox(placeholder="Your text input"), | |
| gr.Dropdown( | |
| ["finiteautomata/bertweet-base-sentiment-analysis", "vader", | |
| "custom logistic regression", "custom BERT"], label="Model" | |
| ), | |
| ], | |
| "label", | |
| examples=[ | |
| ["Happy smile", "vader"], | |
| ["Happy smile", "finiteautomata/bertweet-base-sentiment-analysis"], | |
| ["Happy smile", "custom logistic regression"], | |
| ["Happy smile", "custom BERT"], | |
| ["Sad frown", "vader"], | |
| ["Sad frown", "finiteautomata/bertweet-base-sentiment-analysis"], | |
| ["Sad frown", "custom logistic regression"], | |
| ["Sad frown", "custom BERT"], | |
| ] | |
| ) | |
| with gr.TabItem("Image Output"): | |
| gr.Markdown("A more complex demo showing a plot and two outputs") | |
| interface = gr.Interface( | |
| plot, | |
| [], | |
| ["plot", "text"] | |
| ) | |
| demo.launch() | |