finbot-slm

Modelo pequeño destilado en el taller Destilación en pequeño (CPU) del Máster en IA de la Universidad Adolfo Ibáñez (Tópicos Avanzados en IA II). Un LLM grande actuó como profesor (gpt-6-luna, API de OpenAI) y generó preguntas y respuestas de un dominio acotado; un modelo pequeño (estudiante, Qwen/Qwen2.5-1.5B-Instruct) se ajustó con LoRA sobre esas respuestas, en CPU y en menos de una hora. Es un adaptador LoRA (≈ 74 MB) que se carga con peft sobre el modelo base Qwen/Qwen2.5-1.5B-Instruct; solo contiene las capas que se entrenaron (r = 16, α = 32, sobre q_proj, o_proj, k_proj, up_proj, v_proj, down_proj, gate_proj). Necesitas descargar el base por separado (lo hace from_pretrained automáticamente).

finbot-slm es el nombre genérico que usa el taller para el modelo publicado; el dominio real de este modelo es el que se describe a continuación.

Dominio

Asistente que explica conceptos de inteligencia artificial generativa a ejecutivos de empresas chilenas, con ejemplos de negocio. El caso de uso es un asistente de apoyo a la formación ejecutiva: gerentes y directores de empresas chilenas que necesitan entender qué es un LLM, RAG, un agente o el ajuste fino para decidir inversiones, sin bajar a código. Las respuestas buscan ser breves (unas 90 palabras), en español neutro y con ejemplos de negocio locales (minería, retail, banca, isapres), tal como las escribió el profesor durante la destilación.

Temas cubiertos: Fundamentos de LLM, Ingeniería de prompts, RAG, Agentes de IA, Ajuste fino, Evaluación y LLMOps. Idioma: español neutro (Chile).

Datos de entrenamiento

  • 60 pares pregunta-respuesta generados por el profesor gpt-6-luna (OpenAI), con respuestas de hasta 90 palabras, repartidos por tema: Evaluación y LLMOps (12), Ajuste fino (10), RAG (10), Fundamentos de LLM (10), Agentes de IA (9), Ingeniería de prompts (9).
  • 12 preguntas de examen fijo, del mismo dominio, que nunca se usaron para entrenar. Las respondió el estudiante antes y después del ajuste, y el mismo LLM (gpt-6-luna) las calificó como juez de 1 a 10 contra la respuesta de referencia del profesor.
  • Los datos no se publican en este repositorio. Fueron generados por un LLM comercial: los términos de OpenAI restringen usar sus salidas para desarrollar modelos que compitan con OpenAI, así que revísalos antes de cualquier uso que no sea educativo o interno.
  • No se usaron datos personales ni documentos de ninguna empresa.

Resultados en el examen fijo

Antes (base) Después (destilado)
Nota media del juez (1–10) 4.17 6.08
Aprobación (nota ≥ 7) 8 % (1/12) 33 % (4/12)
Pérdida de entrenamiento (entropía cruzada) 2.6878 (paso 1) 0.8347 (paso 45)

Nota media por tema (n = preguntas del examen en ese tema):

Tema Antes Después n
Agentes de IA 4.0 6.0 3
Ajuste fino 4.0 5.0 2
Fundamentos de LLM 5.5 6.0 2
Ingeniería de prompts 5.0 7.0 3
RAG 2.0 6.0 2

Pérdida, nota media y nota por tema

Lectura honesta: es una sola corrida (semilla 42) sobre 12 preguntas, calificadas por un LLM, no por personas. Diferencias de ±1 punto por tema entran en el ruido. La mejora más clara está en el formato: el modelo base contestaba con listas largas que se cortaban; el destilado responde en prosa breve, al estilo del profesor. En contenido sigue cometiendo errores (ver Limitaciones).

Uso

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

base = "Qwen/Qwen2.5-1.5B-Instruct"
tok = AutoTokenizer.from_pretrained(base)
modelo = PeftModel.from_pretrained(AutoModelForCausalLM.from_pretrained(base), "mangc95/finbot-slm")
modelo.eval()

SISTEMA = "Eres un asistente experto en IA generativa. Responde en español, de forma clara y breve."
pregunta = "¿Qué es RAG y cuándo le conviene a una empresa de retail chilena usarlo?"
msgs = [{"role": "system", "content": SISTEMA}, {"role": "user", "content": pregunta}]
texto = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
entrada = tok(texto, return_tensors="pt", add_special_tokens=False)
salida = modelo.generate(**entrada, max_new_tokens=230, do_sample=False,
                         repetition_penalty=1.15, pad_token_id=tok.eos_token_id)
print(tok.decode(salida[0][entrada["input_ids"].shape[1]:], skip_special_tokens=True))

Usa el mismo mensaje de sistema y decodificación voraz con repetition_penalty=1.15, que es como se entrenó y evaluó. Corre en CPU (≈ 6 GB de RAM en float32); en GPU carga con dtype=torch.bfloat16.

Entrenamiento

Parámetro Valor
Método LoRA con peft 0.21.2 (r = 16, α = 32, dropout 0.05)
Módulos adaptados q_proj, o_proj, k_proj, up_proj, v_proj, down_proj, gate_proj
Épocas · lote · tasa de aprendizaje 3 · 4 · 0.0005
Pasos de optimización 45
Largo máximo por ejemplo / respuesta 320 / 230 tokens
Hardware · tiempo CPU (sin GPU) · 41.7 min de entrenamiento (52.7 min la corrida completa con los dos exámenes)
Precisión float32

El código del taller (destila.py) genera los datos, evalúa antes, entrena, evalúa después y compara; este repositorio solo contiene el resultado.

Limitaciones y uso responsable

  • Es un ejercicio educativo, no un producto. Qwen2.5-1.5B-Instruct tiene 1,5 mil millones de parámetros y se ajustó con solo 60 ejemplos: repite, se equivoca e inventa. El juez anotó en el examen respuestas genéricas que omiten lo que se pregunta, explicaciones confusas y afirmaciones incorrectas dichas con seguridad (por ejemplo, que el ajuste fino reduce el sobreajuste, o que un agente es menos flexible que un chat). La nota media de 6.1/10 lo dice: dos de cada tres respuestas siguen bajo el umbral de aprobación.
  • No lo uses para decisiones reales de inversión, tecnología, legales o de personas. Si quieres usarlo para apoyar formación, haz que una persona revise cada respuesta.
  • Solo conoce el dominio de la tarjeta y responde en español. Fuera de él (otros idiomas, matemática, código, hechos actuales) se comporta como el modelo base o peor.
  • Hereda los sesgos del modelo base y del profesor (OpenAI). Los ejemplos de negocio reflejan el contexto chileno.
  • Sin filtros de seguridad adicionales a los del base.

Licencia y origen

  • Modelo base Qwen/Qwen2.5-1.5B-Instruct: Apache 2.0. Este derivado se redistribuye con la misma licencia.
  • Datos de entrenamiento generados con la API de OpenAI (gpt-6-luna): sujetos a los términos de uso de OpenAI; no se incluyen en el repositorio.
  • Autor: mangc95, Máster en IA, Universidad Adolfo Ibáñez (2026). Publicado con subir_hf.py desde Claude Code.
Downloads last month
14
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mangc95/finbot-slm

Adapter
(1673)
this model