balikas / app.py
kiergabelo's picture
Fix examples: remove unreliable Cebuano, use clear-cut Filipino
4a43adc
Raw
History Blame Contribute Delete
2.91 kB
"""Balikas — Filipino Hate Speech Detection (HuggingFace Spaces, Gradio).
XLM-RoBERTa fine-tuned on combined Tagalog + Filipino TikTok corpus.
Loads the model from kiergabelo/balikas-xlm on the HF Hub.
"""
import os
import gradio as gr
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
MODEL_ID = "kiergabelo/balikas-xlm"
tok = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID)
model.eval()
LABELS = {0: "non-hate", 1: "hate"}
def classify(text):
if not text or not text.strip():
return {LABELS[0]: 0.0, LABELS[1]: 0.0}, "_(empty input)_"
inputs = tok(text, return_tensors="pt", truncation=True, max_length=128)
with torch.no_grad():
logits = model(**inputs).logits
probs = torch.softmax(logits, dim=1)[0]
label_id = int(probs.argmax())
conf = float(probs[label_id])
pred_line = f"**{LABELS[label_id].upper()}** ({conf:.1%} confidence)"
return {LABELS[i]: float(probs[i]) for i in range(2)}, pred_line
examples = [
["TANG INA MO talaga eh bobo"],
["Bobo mo naman, ulol ka!"],
["Putang ina ng gobyernong ito, walang silbi!"],
["Salamat sa tulong mo kahapon, laking bagay."],
["Maganda ang panahon ngayon, magandang araw sa lahat."],
["Inaasahan ko na matapos na ang proyekto bukas."],
["Walang silbi ang pulitiko, puro pangako walang ginawa."],
]
with gr.Blocks(title="Balikas — Filipino Hate Speech") as demo:
gr.Markdown("# \U0001f6e1\ufe0f Balikas — Filipino Hate Speech Detection")
gr.Markdown(
"XLM-RoBERTa fine-tuned on **43,892 Filipino social media samples** "
"(election tweets + TikTok transcriptions including code-switched "
"Taglish). **F1 = 0.917** on held-out test. "
"Type any Filipino text to classify it."
)
with gr.Row():
inp = gr.Textbox(placeholder="Type a Filipino tweet or comment...",
label="Input text", lines=3)
with gr.Row():
out_label = gr.Label(num_top_classes=2, label="Confidence")
out_pred = gr.Markdown(label="Prediction")
btn = gr.Button("Classify", variant="primary")
btn.click(fn=classify, inputs=inp, outputs=[out_label, out_pred])
gr.Examples(examples=examples, inputs=inp)
gr.Markdown(
"---\n"
"**Model:** XLM-RoBERTa fine-tuned on combined Filipino corpus (election tweets + TikTok transcriptions).\n\n"
"**Dataset:** [jcblaise/hatespeech_filipino](https://huggingface.co/datasets/jcblaise/hatespeech_filipino) "
"(Cabasag et al. 2019) + "
"[SEACrowd/filipino_hatespeech_tiktok](https://huggingface.co/datasets/SEACrowd/filipino_hatespeech_tiktok) "
"(Hernandez et al. 2021).\n\n"
"**Code:** [github.com/kiergabelo/balikas](https://github.com/kiergabelo/balikas)."
)
if __name__ == "__main__":
demo.launch()