Equipo_LeIA_GO / app.py
susanazhou's picture
Update app.py
b98df22 verified
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
)