Alexandra Zapko-Willmes
Update app.py
f081761 verified
import gradio as gr
from transformers import pipeline
import pandas as pd
MODEL_MAP = {
"MoritzLaurer/deberta-v3-large-zeroshot-v2.0": "MoritzLaurer/deberta-v3-large-zeroshot-v2.0",
"MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7": "MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7",
"joeddav/xlm-roberta-large-xnli": "joeddav/xlm-roberta-large-xnli"
}
def classify_items(model_name, items_text, labels_text):
classifier = pipeline("zero-shot-classification", model=MODEL_MAP[model_name])
items = [item.strip() for item in items_text.split("\n") if item.strip()]
labels = [label.strip() for label in labels_text.split(",") if label.strip()]
results = []
for item in items:
out = classifier(item, labels, multi_label=True)
scores = {label: prob for label, prob in zip(out["labels"], out["scores"])}
scores["item"] = item
results.append(scores)
df = pd.DataFrame(results).fillna(0)
return df, gr.File.update(value=df.to_csv(index=False), visible=True)
with gr.Blocks() as demo:
gr.Markdown("## 🧠 Zero-Shot Questionnaire Classifier")
with gr.Row():
model_choice = gr.Dropdown(choices=list(MODEL_MAP.keys()), label="Choose a zero-shot model")
item_input = gr.Textbox(label="Enter questionnaire items (one per line)", lines=6, placeholder="I enjoy social gatherings.\nI prefer planning over spontaneity.")
label_input = gr.Textbox(label="Enter response options (comma-separated)", placeholder="Strongly disagree, Disagree, Neutral, Agree, Strongly agree")
run_button = gr.Button("Classify")
output_table = gr.Dataframe(label="Classification Results")
download_csv = gr.File(label="Download CSV", visible=False)
run_button.click(fn=classify_items,
inputs=[model_choice, item_input, label_input],
outputs=[output_table, download_csv])
demo.launch()