Para tareas de generación de texto (chat, instrucciones, QA), el formato más común es el formato Alpaca, que consiste en un JSON con tres campos por ejemplo:
{
"instruction": "Escribe una descripción corta para un producto tecnológico.",
"input": "Producto: Auriculares inalámbricos con cancelación de ruido. Precio: $129.99.",
"output": "Disfruta de tu música sin distracciones con estos auriculares inalámbricos de alta fidelidad. Con cancelación activa de ruido y hasta 30 horas de duración de batería, son ideales para viajar, trabajar o simplemente relajarse. Solo $129.99."
}
instruction: La tarea que el modelo debe realizar.input: Contexto o entrada adicional (opcional).output: La respuesta deseada.Este formato debe convertirse en tensores que el modelo pueda entender. El tokenizer del modelo convierte el texto en IDs, y se aplica una plantilla de chat si es necesario (como en Qwen o Llama 3).
def format_instruction(example):
return f"""### Instrucción:
{example['instruction']}
### Entrada:
{example['input']}
### Respuesta:
{example['output']}"""
# Tokenización
def tokenize_function(example):
text = format_instruction(example)
tokenized = tokenizer(
text,
truncation=True,
max_length=512,
padding="max_length",
)
tokenized["labels"] = tokenized["input_ids"].copy()
return tokenized
Importante: En modelos instruct, es común enmascarar los tokens de entrada (instrucción + entrada) en
labels, para que el modelo calcule la pérdida solo en la salida. Esto se hace asignando-100a esos tokens (ignorados por la función de pérdida de PyTorch).