|
import gradio as gr |
|
from transformers import pipeline |
|
|
|
|
|
classifier = pipeline("zero-shot-classification", model="tasksource/ModernBERT-base-nli") |
|
|
|
def zeroShotClassification(text_input, candidate_labels): |
|
|
|
labels = [label.strip() for label in candidate_labels.split(',')] |
|
|
|
|
|
prediction = classifier(text_input, labels) |
|
|
|
|
|
results = {label: score for label, score in zip(prediction['labels'], prediction['scores'])} |
|
|
|
|
|
return results, '' |
|
|
|
|
|
demo = gr.Interface( |
|
fn=zeroShotClassification, |
|
inputs=[ |
|
gr.Textbox( |
|
label="βοΈ Input Text", |
|
placeholder="Enter the text you want to classify...", |
|
lines=3, |
|
elem_classes=["example-text"] |
|
), |
|
gr.Textbox( |
|
label="π·οΈ Category Labels", |
|
placeholder="Enter comma-separated categories (e.g., happy, sad, excited, confused)", |
|
lines=2, |
|
elem_classes=["example-text"] |
|
) |
|
], |
|
outputs=[ |
|
gr.Label(label="π Classification Results"), |
|
gr.Markdown(label="π Detailed Analysis", elem_classes=["markdown-text"]) |
|
], |
|
title="π€ Zero-Shot Text Classification with ModernBERT", |
|
description=""" |
|
Classify any text into categories of your choice using advanced AI! |
|
|
|
**How to use:** |
|
1. Enter your text in the first box |
|
2. Add comma-separated category labels in the second box |
|
3. Click submit to see how your text matches each category |
|
|
|
Try the examples below or create your own classifications! |
|
""", |
|
examples=[ |
|
["One day I will see the world", "travel, adventure, dreams, future"], |
|
["The movie had amazing special effects but a weak plot", "entertainment, technology, criticism, story"], |
|
["This new phone has an amazing camera and great battery life", "technology, photography, consumer, review"], |
|
["Mix flour, sugar, and eggs until well combined", "cooking, baking, instructions, food"], |
|
["Scientists discovered a new species of butterfly in the Amazon", "science, nature, discovery, environment"], |
|
["The team scored in the final minute to win the championship", "sports, victory, competition, excitement"], |
|
["The painting uses vibrant colors to express deep emotions", "art, emotion, creativity, analysis"] |
|
], |
|
cache_examples=False, |
|
css=""" |
|
footer {display:none !important} |
|
.output-markdown{display:none !important} |
|
.gradio-container { |
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important; |
|
max-width: 1200px !important; |
|
} |
|
.gr-button-primary { |
|
background: linear-gradient(90deg, #11142D, #253885) !important; |
|
border: none !important; |
|
color: white !important; |
|
border-radius: 12px !important; |
|
transition: all 0.3s ease !important; |
|
} |
|
.gr-button-primary:hover { |
|
transform: translateY(-2px) !important; |
|
box-shadow: 0 4px 12px rgba(17, 20, 45, 0.3) !important; |
|
background: linear-gradient(90deg, #253885, #4285F4) !important; |
|
} |
|
.gr-input, .gr-textarea { |
|
border-radius: 8px !important; |
|
border: 2px solid #E2E8F0 !important; |
|
padding: 12px !important; |
|
font-size: 16px !important; |
|
} |
|
.gr-input:focus, .gr-textarea:focus { |
|
border-color: #253885 !important; |
|
box-shadow: 0 0 0 3px rgba(37, 56, 133, 0.2) !important; |
|
} |
|
.gr-panel { |
|
border-radius: 16px !important; |
|
box-shadow: 0 4px 15px -1px rgba(0, 0, 0, 0.1) !important; |
|
background: white !important; |
|
} |
|
.gr-box { |
|
border-radius: 12px !important; |
|
background: white !important; |
|
} |
|
.markdown-text { |
|
font-size: 16px !important; |
|
line-height: 1.6 !important; |
|
} |
|
.example-text { |
|
font-family: 'Inter', sans-serif !important; |
|
color: #11142D !important; |
|
} |
|
""" |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |