Spaces:
Running
on
Zero
Running
on
Zero
File size: 6,904 Bytes
8c33d3d b97637a 14bdb7b b98df22 9c7049a 8c33d3d b97637a 74a8958 b97637a 8c33d3d 39ea17a 14bdb7b 9d13f0d b98df22 81f1877 b97637a 81f1877 8c33d3d b97637a 81f1877 8c33d3d b97637a 81f1877 8c33d3d b97637a 8c33d3d 9d13f0d ee8e544 b98df22 ff74457 43b0329 7c8ecc7 ff74457 7c8ecc7 ff74457 7c8ecc7 ff74457 7c8ecc7 ff74457 7c8ecc7 ff74457 8b4eecf ff74457 7c8ecc7 ff74457 7c8ecc7 378e2c2 ff74457 ee8e544 ff74457 ee8e544 ff74457 ee8e544 ff74457 b97637a ff74457 ee8e544 ff74457 8c33d3d ee8e544 f0127ed 78d44cd f0127ed ee8e544 d5d6180 78d44cd b98df22 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
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
)
|