Para tarefas de geração de texto (chat, instruções, QA), o formato mais comum é o formato Alpaca, que consiste em um JSON com três campos por exemplo:
{
"instruction": "Escreva uma descrição curta para um produto tecnológico.",
"input": "Produto: Fones de ouvido sem fio com cancelamento de ruído. Preço: $129,99.",
"output": "Aproveite sua música sem distrações com estes fones de ouvido sem fio de alta fidelidade. Com cancelamento ativo de ruído e até 30 horas de duração da bateria, são ideais para viajar, trabalhar ou simplesmente relaxar. Apenas $129,99."
}
instruction: A tarefa que o modelo deve realizar.input: Contexto ou entrada adicional (opcional).output: A resposta desejada.Este formato deve ser convertido em tensores que o modelo possa entender. O tokenizer do modelo converte texto em IDs, e um modelo de chat é aplicado se necessário (como em Qwen ou Llama 3).
def format_instruction(example):
return f"""### Instrução:
{example['instruction']}
### Entrada:
{example['input']}
### Resposta:
{example['output']}"""
# Tokenização
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: Em modelos instrutivos, é comum mascarar tokens de entrada (instrução + entrada) em
labels, para que o modelo calcule a perda apenas na saída. Isso é feito atribuindo-100a esses tokens (ignorados pela função de perda do PyTorch).