Downloads · 30 days
19
30% of all-time downloads
somosnlp-hackathon-2026/chaskiayuda-model-dpo
chaskiayuda-model-dpo is a text generation model from somosnlp-hackathon-2026. Use it when you need the model to write or continue text. It is set up for peft. The card lists the license as apache-2.0.
Modelo post-entrenado con DPO + QLoRA para respuesta humanitaria en español, especializado en el contexto peruano. Desarrollado para el SomosNLP Hackathon 2026.
Downloads · 30 days
19
30% of all-time downloads
All-time downloads
64
Public
Repo size
92.2 MB
Likes
0
Public
Click a slice to open those files.
.safetensors80.8 MB · 87%
From the Hugging Face model README
Modelo post-entrenado con DPO + QLoRA para respuesta humanitaria en español, especializado en el contexto peruano. Desarrollado para el SomosNLP Hackathon 2026.
ODS: 11 (Ciudades sostenibles) · 13 (Acción climática) · 10 (Reducción de desigualdades)
Cuando ocurre un desastre en Perú, las personas afectadas enfrentan una doble crisis: el desastre en sí y la desinformación sobre qué ayuda les corresponde y cómo acceder a ella. Los modelos genéricos responden con lenguaje burocrático e inaplicable al contexto peruano.
ChasquiAyuda responde con:
Input:
"Hubo inundaciones en mi comunidad en Piura, perdimos todo. ¿Qué hacemos?"
ChasquiAyuda:
"Entendemos que están viviendo una situación muy difícil. Hay varias rutas simultáneas:
- INDECI — línea 115 (gratuita, 24h): reporta daños y te informan de puntos de distribución activos en tu zona.
- Cruz Roja Peruana (01-266-6978): busca sus carpas de registro en los primeros días — distribuyen kits de higiene y agua.
- MIDIS — Programa Contigo: se activa automáticamente en emergencias declaradas. El registro es gratuito, nadie puede cobrarte. ¿En qué distrito exactamente estás? Así confirmo qué operaciones están activas."
Modelo base (Qwen2.5-7B sin entrenar):
"Contacte a las autoridades locales o al gobierno regional para informarles sobre la situación y solicitar ayuda de emergencia..."
| Métrica | Modelo base | ChasquiAyuda DPO |
|---|---|---|
| Reward Accuracy | 50.0% | 96.8% |
| Mean Reward Margin | — | 0.4212 |
| Mean R(chosen) | — | -2.0887 |
| Mean R(rejected) | — | -2.5099 |
Mejora relativa: +94% vs modelo base
| Step | Training Loss |
|---|---|
| 10 | 0.3064 |
| 20 | 0.0598 |
| 30 | 0.0182 |
| 40 | 0.0044 |
| 50 | 0.0092 |
| 60 | 0.0043 |
Entrenado con ChasquiAyuda DPO Dataset — 620 pares chosen/rejected derivados de 8 fuentes:
| Fuente | Pares | Rol en DPO |
|---|---|---|
| Sphere Handbook 2018 | 180 | Define el chosen (estándares min.) |
| INDECI (manuales oficiales) | 140 | Procedimientos peruanos oficiales |
| Programas gobierno Perú | 110 | MIDIS, MINSA, MINEDU, SIS, Pensión 65 |
| ReliefWeb / OCHA | 90 | Contexto de crisis reales en Perú |
| CHS 2024 | 30 | Accountability y participación |
| ONGs (Cruz Roja, Cáritas, CARE) | 40 | Primeros auxilios y respuesta comunit. |
| HDX / IDMC | 30 | Eventos reales de desplazamiento Perú |
| Fenómeno El Niño 2026 | 42 | Preparación/respuesta/recuperación FEN |
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel
import torch
# 1. Cargar modelo base
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_quant_type="nf4"
)
base = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-7B-Instruct",
quantization_config=bnb_config,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B-Instruct")
# 2. Aplicar adaptador ChasquiAyuda
model = PeftModel.from_pretrained(
base,
"somosnlp-hackathon-2026/chaskiayuda-model"
)
# 3. Generar respuesta
SYSTEM = ("Eres ChasquiAyuda, un asistente humanitario para Perú. "
"Responde con empatía, pasos concretos y recursos reales.")
messages = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": "Hubo un terremoto en Arequipa. ¿Qué hacemos?"}
]
text = tokenizer.apply_chat_template(messages, tokenize=False,
add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=300,
temperature=0.3, do_sample=True)
print(tokenizer.decode(out[0][inputs.input_ids.shape[1]:],
skip_special_tokens=True))
| Parámetro | Valor |
|---|---|
| Modelo base | Qwen/Qwen2.5-7B-Instruct |
| Técnica | DPO + QLoRA |
| LoRA rank (r) | 16 |
| LoRA alpha | 32 |
| Quantización | 4-bit NF4 (bitsandbytes) |
| Beta DPO | 0.1 |
| Épocas | 1 |
| Batch efectivo | 8 (batch=1, grad_accum=8) |
| Learning rate | 5e-5 |
| GPU | T4 16GB (Google Colab) |
| Tiempo entrenamiento | 2h 42min |
| Huella CO₂ | ~0.08 kg CO₂eq (estimado) |
| Librería | Rol |
|---|---|
transformers | Carga del modelo base y generación |
trl | DPOTrainer para el entrenamiento por preferencias |
peft | QLoRA — adaptadores de bajo rango |
bitsandbytes | Cuantización 4-bit NF4 |
accelerate | Distribución en GPU |
datasets | Carga y procesamiento del dataset |
codecarbon | Medición de huella de carbono |
Entrenamiento v1 (este modelo):
Intento v2 (no completado):
max_length a 768Medido con CodeCarbon integrado en el entrenamiento.
Para minimizar el impacto: QLoRA 4-bit reduce el cómputo vs entrenamiento completo; 1 sola época en lugar de múltiples iteraciones.
El dataset sobrerepresenta inundaciones (25%) respecto a otros desastres. Las fuentes internacionales (Sphere, CHS) pueden no reflejar capacidades reales de respuesta en zonas remotas de Perú.
Entrenado en Google Colab (T4, mix energético EE.UU.). Huella estimada: ~0.08 kg CO₂eq para 1 época sobre 620 pares.
chaskiayuda_training.ipynb — entrenamiento DPO completoChasquiAyuda · SomosNLP Hackathon 2026 · Apache 2.0