|
import gradio as gr |
|
import torch |
|
import os |
|
from spaces import GPU |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
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] |
|
""" |
|
|
|
|
|
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)"), |
|
], |
|
) |
|
|
|
|
|
demo.launch( |
|
show_api=False, |
|
share=False |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|