Yeda AI Tips · #044

English

Formato basura entra, respuestas basura salen

Haces fine-tuning de un modelo de chat, ejecutas la inferencia y obtienes texto roto salpicado de tokens sueltos o turnos interminables que nunca terminan. El instinto es culpar a los datos — más ejemplos, ejemplos más limpios, otra tasa de aprendizaje. A menudo el problema real está antes de todo eso: los ejemplos de entrenamiento nunca se formatearon de la manera en que el modelo base espera ver una conversación.

Qué es realmente una plantilla de chat

Todo modelo base ajustado para chat fue entrenado sobre conversaciones envueltas en un formato específico: tokens especiales que marcan dónde empieza un mensaje, quién habla (system, user o assistant) y dónde termina el turno. Ese formato — la plantilla de chat — no es una convención que puedas improvisar. Está integrado en la forma en que el modelo aprendió a leer la estructura desde el principio, durante su propio supervised fine-tuning.

Si haces más fine-tuning sin reproducir esa estructura exacta, el modelo no tiene una señal confiable de dónde se detiene un turno y empieza el siguiente. No falla de forma evidente — simplemente aprende una versión ligeramente equivocada de "cuándo dejar de hablar" o "de quién es el turno", lo que aparece más tarde como generaciones interminables, límites de turno confusos, o el modelo devolviéndote los marcadores de rol como texto literal.

Cómo aplicarla correctamente

La solución no es escribir la plantilla a mano tú mismo. Todo modelo base viene con una manera de recuperar su propia plantilla de chat, normalmente como un único método expuesto por el tokenizer que toma una lista de mensajes etiquetados por rol y devuelve la cadena correctamente formateada — tokens especiales, marcadores de rol y todo lo demás. El flujo de trabajo es:

  1. Carga el tokenizer de tu modelo base exacto — no uno parecido, el checkpoint exacto que estás ajustando.
  2. Estructura cada ejemplo de entrenamiento como una lista de pares rol/contenido (system, user, assistant) en lugar de un único bloque de texto.
  3. Llama a la función de plantilla de chat del tokenizer en cada ejemplo para producir la cadena final formateada, con los tokens especiales propios del modelo en los lugares correctos.
  4. Alimenta la salida con plantilla al entrenamiento — no tu texto en bruto.

Esto aplica tanto si empiezas desde un dataset en bruto de dos columnas (prompt/respuesta) como si conviertes desde otro formato: el paso de aplicar la plantilla viene justo antes del entrenamiento, aplicado de forma uniforme a cada ejemplo.

tokenizer.apply_chat_template(example)

Errores comunes

El único hábito que atrapa esto a tiempo

Antes de darle a entrenar, imprime un ejemplo completamente formateado — después de aplicar la plantilla — y léelo. Estás comprobando que los tokens especiales están donde esperas, que los roles están etiquetados correctamente y que nada quedó truncado o duplicado. Esta única comprobación atrapa la gran mayoría de los errores de plantilla de chat antes de que te cuesten una corrida de entrenamiento.

Recursos

¿Haciendo fine-tuning de un modelo para producción? Yeda AI diseña, audita y entrega sistemas LLM de producción.

Habla con nosotros · Lee el blog