File size: 1,694 Bytes
fb243d8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import gradio as gr
from sentence_transformers import SentenceTransformer
from transformers import pipeline
print("⏳ Loading Models... (This happens once on startup)")
# 1. Load Embedding Model (MiniLM)
# Good for: Semantic search, matching influencers to brands
embedder = SentenceTransformer('all-MiniLM-L6-v2')
# 2. Load Sentiment Model (Twitter-RoBERTa)
# Good for: Checking if influencer content is positive/negative/toxic
sentiment_task = pipeline(
"sentiment-analysis",
model="cardiffnlp/twitter-roberta-base-sentiment-latest",
tokenizer="cardiffnlp/twitter-roberta-base-sentiment-latest"
)
def get_embeddings(text):
# Returns a list of 384 numbers (vector)
vector = embedder.encode(text)
return vector.tolist()
def get_sentiment(text):
# Returns label (Positive/Negative) and score
result = sentiment_task(text)[0]
return {"label": result['label'], "score": float(result['score'])}
# --- UI & API DEFINITION ---
with gr.Blocks() as demo:
gr.Markdown("# Flunzup NLP API")
with gr.Tab("Sentiment Analysis"):
txt_in = gr.Textbox(label="Text to Analyze")
out_sent = gr.JSON(label="Sentiment Result")
btn_sent = gr.Button("Analyze Sentiment")
# EXPOSED API: /sentiment
btn_sent.click(get_sentiment, inputs=txt_in, outputs=out_sent, api_name="sentiment")
with gr.Tab("Embeddings"):
txt_embed = gr.Textbox(label="Text to Embed")
out_embed = gr.JSON(label="Vector Output")
btn_embed = gr.Button("Generate Embedding")
# EXPOSED API: /embedding
btn_embed.click(get_embeddings, inputs=txt_embed, outputs=out_embed, api_name="embedding")
demo.launch()
|