import gradio as gr import torch import os from spaces import GPU from transformers import AutoModelForCausalLM, AutoTokenizer # Configuración del modelo model_id = "somosnlp-hackathon-2025/leia_preference_model_social_norms" device = "cuda" if torch.cuda.is_available() else "cpu" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id).to(device) @GPU def respond(message, history, system_message, max_tokens, temperature, top_p): prompt = system_message + "\n" for user, assistant in history: prompt += f"Usuario: {user}\nAsistente: {assistant}\n" prompt += f"Usuario: {message}\nAsistente:" inputs = tokenizer(prompt, return_tensors="pt").to(device) output = model.generate( **inputs, max_new_tokens=max_tokens, temperature=temperature, top_p=top_p, pad_token_id=tokenizer.eos_token_id, ) decoded = tokenizer.decode(output[0], skip_special_tokens=True) respuesta = decoded[len(prompt):].strip() return respuesta # Descripción del proyecto descripcion = """ # 💬 LeIA GO: Explorando las variedades del español con NLP El proyecto **LeIA GO** surge con la visión de impulsar una inteligencia artificial que refleje la riqueza y diversidad del idioma español en todas sus formas. Aunque el español es una de las lenguas más habladas a nivel global, sus múltiples variantes regionales y culturales no siempre están bien representadas en los modelos de lenguaje actuales, que tienden a centrarse en el inglés o en una versión estándar del español. Buscamos crear una herramienta accesible y práctica que permita explorar y entender las diferentes variedades dialectales del español, desde expresiones coloquiales hasta estructuras gramaticales específicas de distintas regiones. Así, pretendemos democratizar el acceso a recursos lingüísticos avanzados, fomentando el conocimiento, la educación y la preservación cultural en las comunidades hispanohablantes. ### 🚀 Motivación El proyecto nace con el propósito de analizar y representar las diferencias lingüísticas y culturales entre las distintas variedades del español. Al entender mejor estas variaciones, aspiramos a desarrollar modelos de lenguaje natural que sean más precisos, inclusivos y adaptados a las necesidades reales de los hablantes de español en todas sus formas. ### 🌍 Impacto En la actualidad, gran parte del desarrollo en procesamiento del lenguaje natural está dominado por el inglés, dejando al español y sus múltiples variantes con recursos limitados. **LeIA GO** busca contribuir a cerrar esta brecha, mejorando la calidad y diversidad de los datos disponibles en español. Esto facilitará la creación de tecnologías lingüísticas más justas, inclusivas y efectivas, beneficiando a millones de usuarios en todo el mundo y apoyando la diversidad cultural y lingüística del idioma. ## 🧠 Proceso de entrenamiento y pruebas Para el desarrollo de LeIA GO, utilizamos el modelo preentrenado **BSC-LT/salamandra-7b-instruct**, una arquitectura de lenguaje causal basada en 7 mil millones de parámetros especializada en español. El entrenamiento y ajuste fino se realizaron usando técnicas de LoRA (Low-Rank Adaptation) mediante la librería `peft`, configurando un `LoraConfig` para adaptar el modelo sin necesidad de reentrenarlo completamente. La librería `transformers` se usó para cargar el modelo y el tokenizador, mientras que `datasets` sirvió para gestionar los datos de entrenamiento. Los datos consistieron en **prompts creados manualmente por nuestro equipo**, diseñados para capturar diversidad lingüística y estructural del español. El proceso de entrenamiento se ejecutó con `DPOTrainer` y configuración `DPOConfig` de la librería `trl`, optimizando el modelo para mejor desempeño en tareas instructivas. Además, se implementó optimización con `BitsAndBytesConfig` para manejo eficiente de memoria y velocidad. Como herramientas de soporte utilizamos `transformers`, `datasets`, `gradio` para la interfaz, y `jupyterlab` para el desarrollo y experimentación. ### 🧪 Funcionalidades actuales - Evaluación y corrección de textos - Análisis lingüístico con enfoque cultural - Adaptación del lenguaje a regiones - Demo interactiva con Gradio ### 🎯 Objetivo de desarrollo sostenible (ODS) Este proyecto contribuye al ODS 4: Educación de Calidad, promoviendo el acceso a recursos lingüísticos diversos que favorezcan la educación y la inclusión cultural a través del lenguaje. ## 📜 Licencia Este proyecto está licenciado bajo la Licencia Apache 2.0, que permite el uso, modificación y distribución libres, garantizando al mismo tiempo protección legal y reconocimiento a los autores. Puedes consultar el texto completo de la licencia en el archivo [LICENSE](./LICENSE). ## ⚖️ Evaluación de sesgos del modelo En **LeIA GO**, somos conscientes de que los modelos de lenguaje pueden reflejar sesgos presentes en los datos de entrenamiento. Para minimizar estos riesgos: - Los datos de entrenamiento consistieron en prompts creados manualmente por nuestro equipo, intentando cubrir diversidad lingüística y cultural dentro del español, para evitar la predominancia de un solo dialecto o registro. - Reconocemos que, pese a estas precauciones, el modelo puede reflejar sesgos por la naturaleza limitada y selectiva del dataset. - Estamos abiertos a retroalimentación para identificar y corregir posibles sesgos en futuras iteraciones. - Próximamente planeamos implementar análisis cuantitativos más formales para evaluar sesgos específicos en el modelo. ### 👥 Equipo - Susana Zhou (Español peninsular) - Constanza Jeldres (Español de Chile) ### 💻 Datasets y modelos utilizados - Dataset: [https://huggingface.co/datasets/somosnlp-hackathon-2025/dataset-preferencias-v0] """ # Interfaz con Gradio with gr.Blocks() as demo: with gr.Tab("Descripción del Proyecto"): gr.Markdown(descripcion) with gr.Tab("Chatbot LeIA GO"): gr.Markdown("### 👋 Bienvenida a LeIA GO\nChatea con una IA especializada en normas sociales y variantes del español.") gr.ChatInterface( respond, additional_inputs=[ gr.Textbox( value="Eres una asistente lingüística especializada en español regional.", label="Mensaje del sistema" ), gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"), gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"), ], ) # Lanzamiento demo.launch( show_api=False, share=False )