Curación de Datasets
Este skill asume que finetuning-method-selection
ya te ha dirigido aquí — el siguiente paso es preparar
los datos, no elegir un método. A continuación: selección
de formato según el método objetivo, los mecanismos de
plantilla/empaquetado detrás de los fallos silenciosos
más comunes en entrenamiento, reglas para mezclar datos
sintéticos sin colapso, y la ficha de dataset que cierra
la Fase 2 antes de que comience una ejecución.
Entrada: ejemplos brutos (demostraciones, juicios de
preferencia o prompts de tarea) más una decisión de
enrutamiento de finetuning-method-selection.
Formato de salida: un dataset JSONL formateado,
empaquetado y validado, más una ficha de dataset
completada — el artefacto de la Fase 2 que /finetune
verifica antes de lanzar el entrenamiento.
Selección de Formato
| Método | Forma | Filas |
|---|---|---|
| SFT, una sola vuelta | Instruct (instruction/response o prompt/completion) | ~1,000+ mínimo |
| SFT, múltiples vueltas | Lista de mensajes de Conversación/ChatML (messages) | ~1,000+ mínimo |
| DPO / ORPO | Par de preferencia (prompt, chosen, rejected) | Depende del método, ver preference-optimization |
| KTO | No apareado (prompt, completion, label) | Depende del método, ver preference-optimization |
| GRPO / RLVR | Solo prompt (prompt + metadatos de verificador) | Depende del método, ver grpo-rlvr-training |
-
~1,000+ filas es el mínimo recomendado para SFT, no un objetivo. Por debajo de eso, un puñado de ejemplos de baja calidad o duplicados pueden dominar el gradiente; por encima, calidad sobre cantidad — un conjunto más pequeño, verificado y deduplicado supera a uno más grande y ruidoso.
-
La forma ChatML, para orientación; los otros cuatro formatos más una nota de conversión a ShareGPT están en
references/formats-and-templates.md:{"messages": [ {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."} ]}
Plantillas de Chat y Enmascaramiento de Pérdida
Aplica la plantilla de chat del modelo objetivo antes de cualquier concatenación o empaquetado, nunca después — empaquetar texto bruto y luego aplicar la plantilla al bloque empaquetado corrompe los límites de las vueltas, colocando los marcadores de rol en el lugar incorrecto con respecto a cada ejemplo.
-
Entrena solo en respuestas del asistente. Enmascara la pérdida (
-100en el tensor de etiquetas) sobre los turnos del sistema/usuario y los marcadores de rol de la propia plantilla — solo los tokens de contenido del asistente contribuyen a la pérdida. -
Los desajustes plantilla/tokenizador son el principal modo de fallo silencioso. Un modelo entrenado con una plantilla de chat pero servido o evaluado con otra diferente se degrada sin dar error. Verifica que la misma cadena de plantilla utilizada en el entrenamiento se aplique en inferencia y evaluación.
-
Mantén el dataset en forma de
messagesy deja que el entrenador aplique la plantilla y el enmascaramiento (assistant_only_loss=Trueen TRL actual) — prerenderizar a un campo de texto plano destruye los límites de vueltas que el enmascaramiento necesita. Bosquejo de código completo:references/formats-and-templates.md. Haz una verificación de cordura antes del entrenamiento — decodifica solo las posiciones no enmascaradas; espera solo texto del asistente:keep = batch["labels"][0] != -100 print(tokenizer.decode(batch["input_ids"][0][keep]))
Empaquetado
Sin empaquetado, el 40–70% del cómputo se gasta en relleno — ejemplos de longitud variable agrupados en una longitud fija de secuencia desperdician el espacio entre la longitud de cada ejemplo y el máximo del lote. El empaquetado concatena múltiples ejemplos en una sola secuencia hasta la longitud máxima, reduciendo la mayor parte de ese desperdicio.
-
El empaquetado cambia la semántica de los lotes. Una secuencia empaquetada puede contener varios ejemplos originales, por lo que "pasos por época" y cualquier programación de tasa de aprendizaje (LR schedule) ligada al conteo de ejemplos cambian una vez que se activa el empaquetado — recalcula los hitos del programa contra el conteo de secuencias empaquetadas.
-
OBLIGATORIO: decodifica e inspecciona manualmente 5–10 secuencias empaquetadas antes de escalar a una ejecución completa. Confirma que los límites de los ejemplos estén donde se espera, que los marcadores de plantilla estén intactos por sub-ejemplo, y que la máscara de pérdida siga siendo solo del asistente dentro de cada secuencia empaquetada. No es opcional — los errores de empaquetado son silenciosos (la curva de pérdida parece normal) y solo se manifiestan en la calidad de evaluación, horas después:
for seq in packed_dataset.select(range(10)): print(tokenizer.decode(seq["input_ids"]))
Reglas para Datos Sintéticos
- Mantén ≥25% de datos reales como protección contra
colapso. Entrenar con una proporción creciente de datos
generados por el modelo sin un mínimo de datos reales
provoca un colapso medible de calidad en generaciones
sucesivas — el 25% real es el mínimo que mantiene la
línea. Las filas de repetición de dominio general
cuentan para este mínimo — "real" significa "no generado
para esta tarea desde este estudiante," no "creado por un
humano." Un dataset completamente sintético por
construcción puede cumplir el mínimo del ≥25% solo
mediante repetición (ver la receta de Construcción de
Mezcla de Repetición en
references/synthetic-data.md); indica qué filas cuentan como "reales" en la ficha del dataset en lugar de dejar el mínimo estructuralmente inalcanzable. - Magpie y el muestreo por rechazo son los caballos de batalla. Magpie extrae prompts del prior de plantilla del propio modelo; el muestreo por rechazo genera varios candidatos por prompt y conserva solo aquellos que pasan un filtro. Ambos superan a la generación simple de una sola pasada.
- La generación dirigida y consciente del estudiante es 1.3–2x más eficiente en muestras que la generación estática — apuntar a los modos de fallo reales del estudiante alcanza un nivel de calidad con menos ejemplos filtrados.
- Las tasas de aceptación típicas después del filtrado oscilan entre el 10% y el 30%. Planifica el volumen en consecuencia — un objetivo de 10,000 filas con un 15% de aceptación necesita ~65,000+ generaciones brutas.
- Ranking de métodos de generación, embudo de filtrado,
construcción de mezcla de repetición y patrón de
destilación:
references/synthetic-data.md.
La Ficha del Dataset
Cada dataset que llega al entrenamiento recibe una ficha —
el artefacto requerido de la Fase 2 que /finetune verifica
antes de lanzar. La ficha no es documentación libre; DEBE
incluir estos campos:
- Procedencia — de dónde vino cada fila (fuente(s)
real(es), método(s) sintético(s) o ambos), trazable
hasta la salida de
trace-to-training-data. - Conteos — total de filas, y filas por división (entrenamiento/evaluación/retención) si está dividido.
- Proporción sintético/real — la proporción medida, verificada contra el mínimo del ≥25% real anterior.
- Método de deduplicación — coincidencia exacta,
semántica (umbral de embedding) o ambas; ver el embudo
de filtrado en
references/synthetic-data.md. - Plantilla utilizada — la cadena/identificador exacto
de la plantilla de chat, mantenido consistente a través
de inferencia y evaluación — esto es lo que vincula una
ejecución de
eval-harness-firstcon el checkpoint. - Configuración de empaquetado — si se usó empaquetado, longitud máxima de secuencia, y confirmación de que se realizó la inspección manual de 5–10 secuencias anterior.
Un dataset que carezca de alguno de estos seis campos no
está listo para /finetune — la ficha es una puerta de
control, no un resumen escrito después del hecho.
Lista de Verificación de Salida de la Fase 2
Antes de pasar a /finetune, confirma:
- El formato coincide con el método (tabla anterior).
- La plantilla se aplicó antes de la concatenación.
- La pérdida está enmascarada solo a los turnos del asistente.
- Se decodificaron y leyeron 5–10 secuencias empaquetadas.
- ≥25% de datos reales en la mezcla final.
- La ficha del dataset está completa — los seis campos.
Referencias
references/formats-and-templates.md— ejemplos JSONL por formato, código de enmascaramiento con TRL actual, y la nota de conversión a ShareGPT.references/synthetic-data.md— ranking de métodos de generación, embudo de filtrado, construcción de mezcla de repetición, y patrón de destilación profesor→alumno.
Skills relacionados: finetuning-method-selection te
enruta aquí; lora-qlora-recipes, vision-sft y
preference-optimization consumen los datasets que este
skill produce; trace-to-training-data es la fuente de
procedencia para datasets de trayectorias calificadas;
eval-harness-first evalúa el checkpoint resultante.