import gradio as gr from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch # Cargar tu modelo desde HuggingFace MODEL_NAME = "antonn-dromundo/InclusioCheck-BETO-HateSpeech" print("🔄 Cargando modelo...") tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME) # Mover a CPU (los Spaces gratuitos usan CPU) device = torch.device("cpu") model.to(device) model.eval() print("✅ Modelo cargado exitosamente") # Etiquetas LABELS = { 0: "✅ Lenguaje Inclusivo", 1: "⚠️ Discurso de Odio/Excluyente" } def analizar_texto(texto): """ Analiza un texto y devuelve si es inclusivo o contiene discurso de odio """ if not texto or len(texto.strip()) == 0: return { "⚠️ Error": "Por favor ingresa un texto para analizar" } # Tokenizar inputs = tokenizer( texto, return_tensors="pt", truncation=True, max_length=128, padding=True ) # Mover inputs a CPU inputs = {k: v.to(device) for k, v in inputs.items()} # Predicción with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits probs = torch.nn.functional.softmax(logits, dim=-1) predicted_class = torch.argmax(probs, dim=-1).item() confidence = probs[0][predicted_class].item() # Preparar resultado label = LABELS[predicted_class] # Crear diccionario de resultados para Gradio resultado = { LABELS[0]: float(probs[0][0]), LABELS[1]: float(probs[0][1]) } # Mensaje adicional if predicted_class == 1: mensaje = f"⚠️ Este texto contiene lenguaje potencialmente excluyente u ofensivo (confianza: {confidence:.1%})" else: mensaje = f"✅ Este texto parece inclusivo y respetuoso (confianza: {confidence:.1%})" return resultado, mensaje # Ejemplos para demostración ejemplos = [ ["Me encanta trabajar en equipo con personas diversas"], ["Todos los inmigrantes son delincuentes"], ["La diversidad es nuestra mayor fortaleza"], ["Manejas bien para ser mujer"], ["Respeto y valoro las opiniones de todas las personas"] ] # Crear interfaz demo = gr.Interface( fn=analizar_texto, inputs=gr.Textbox( label="Escribe el texto a analizar", placeholder="Ejemplo: Me gusta trabajar con personas de diferentes culturas...", lines=3 ), outputs=[ gr.Label(label="Análisis del Texto", num_top_classes=2), gr.Textbox(label="Resultado", lines=2) ], title="🔍 SinOdio - Detector de Lenguaje Inclusivo", description=""" **Analiza textos en español para detectar lenguaje excluyente o discurso de odio.** Este modelo está basado en BETO (BERT en español) y fue entrenado para identificar contenido que pueda ser ofensivo, discriminatorio o excluyente. ⚡ Powered by transformers y entrenado con dataset de hate speech en español. """, examples=ejemplos, theme=gr.themes.Soft(), allow_flagging="never" ) if __name__ == "__main__": demo.launch()