Spaces:
Running
on
Zero
Running
on
Zero
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) | |
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 | |
) | |