Curadoria de Dataset
Este skill assume que a seleção-de-método-de-ajuste-fino
já foi direcionada para cá — o próximo passo é preparar
dados, não escolher um método. O que vem a seguir: seleção
de formato pelo método alvo, os mecanismos de template/empacotamento
por trás das falhas silenciosas de treinamento mais comuns,
regras para misturar dados sintéticos sem colapso, e o cartão
de dataset que encerra a Fase 2 antes de uma execução começar.
Entrada: exemplos brutos (demonstrações, julgamentos
de preferência ou prompts de tarefa) mais uma decisão de roteamento
vinda de seleção-de-método-de-ajuste-fino.
Formato de saída: um dataset JSONL formatado, empacotado,
validado, mais um cartão de dataset completo — o
artefato da Fase 2 que /finetune verifica antes de lançar
o treinamento.
Seleção de Formato
| Método | Forma | Linhas |
|---|---|---|
| SFT, turno único | Instrução (instrução/resposta ou prompt/completamento) | ~1.000+ mínimo |
| SFT, múltiplos turnos | Lista de mensagens Conversa/ChatML | ~1.000+ mínimo |
| DPO / ORPO | Par de preferência (prompt, escolhido, rejeitado) | Depende do método, veja otimização-de-preferência |
| KTO | Não pareado (prompt, completamento, rótulo) | Depende do método, veja otimização-de-preferência |
| GRPO / RLVR | Apenas prompt (prompt + metadados de verificador) | Depende do método, veja treinamento-grpo-rlvr |
-
~1.000+ linhas é o mínimo recomendado para SFT, não um alvo. Abaixo disso, um punhado de exemplos de baixa qualidade ou duplicados pode dominar o gradiente; acima disso, qualidade sobre quantidade — um conjunto menor, verificado e desduplicado, supera um maior e ruidoso.
-
O formato ChatML, para orientação; os outros quatro formatos, mais uma nota de conversão ShareGPT, estão em
referências/formatos-e-templates.md:{"mensagens": [ {"papel": "usuário", "conteúdo": "..."}, {"papel": "assistente", "conteúdo": "..."} ]}
Templates de Chat e Mascaramento de Perda
Aplique o template de chat do modelo alvo antes de qualquer concatenação ou empacotamento, nunca depois — empacotar texto bruto e aplicar o template no bloco empacotado posteriormente corrompe os limites entre turnos, colocando marcadores de papel no lugar errado em relação a cada exemplo.
-
Treine apenas nas respostas do assistente. Masque a perda (
-100no tensor de rótulos) nas viradas de sistema/usuário e nos próprios marcadores de papel do template — apenas tokens de conteúdo dos turnos do assistente contribuem para a perda. -
Incompatibilidades template/tokenizador são uma das principais falhas silenciosas. Um modelo treinado com um template de chat, mas servido ou avaliado com outro, degrada sem emitir erros. Verifique se a mesma string de template usada no treinamento é aplicada na inferência e na avaliação.
-
Mantenha o dataset no formato
mensagense deixe o trainer aplicar o template e mascarar (perda_apenas_assistente=Trueno TRL atual) — pré-renderizar para um campo de texto simples destrói os limites de turno que o mascaramento precisa. Esboço completo do código:referências/formatos-e-templates.md. Faça uma verificação de sanidade antes do treinamento — decodifique apenas posições não mascaradas; espere apenas texto do assistente:manter = lote["rótulos"][0] != -100 print(tokenizador.decodificar(lote["ids_entrada"][0][manter]))
Empacotamento
Sem empacotamento, 40–70% do computacional é gasto em preenchimento — exemplos de comprimento variável agrupados em um comprimento de sequência fixo desperdiçam a lacuna entre o comprimento de cada exemplo e o máximo do lote. O empacotamento concatena vários exemplos em uma sequência até o comprimento máximo, cortando a maior parte desse desperdício.
-
O empacotamento altera a semântica do lote. Uma sequência empacotada pode conter vários exemplos originais, então "passos por época" e qualquer agenda de taxa de aprendizado baseada na contagem de exemplos muda quando o empacotamento é ativado — recalcule os marcos da agenda em relação à contagem de sequências empacotadas.
-
OBRIGATÓRIO: decodifique e inspecione manualmente 5–10 sequências empacotadas antes de escalar para uma execução completa. Confirme que os limites dos exemplos estão onde esperado, que os marcadores de template estão intactos por sub-exemplo, e que a máscara de perda ainda é apenas do assistente dentro de cada sequência empacotada. Não é opcional — bugs de empacotamento são silenciosos (a curva de perda parece normal) e só aparecem na qualidade da avaliação, horas depois:
for seq in dataset_empacotado.selecionar(intervalo(10)): print(tokenizador.decodificar(seq["ids_entrada"]))
Regras para Dados Sintéticos
- Mantenha ≥25% de dados reais como proteção contra colapso.
Treinar com uma parcela crescente de dados gerados por modelo
sem um piso de dados reais leva a um colapso de qualidade mensurável
ao longo de gerações sucessivas — 25% reais é o mínimo que
segura a linha. Linhas de repetição de domínio geral
contam para este piso —
"real" significa "não gerado
para esta tarefa a partir deste
aluno," não "escrito por humano."
Um dataset totalmente sintético por construção
pode atender ao piso de ≥25%
apenas através de repetição (veja
a receita de Construção de Mistura com Repetição em
referências/dados-sintéticos.md); declare quais linhas contam como "reais" no cartão do dataset em vez de deixar o piso estruturalmente inatingível. - Magpie e amostragem por rejeição são os cavalos de batalha. Magpie extrai prompts do template anterior do próprio modelo; a amostragem por rejeição gera vários candidatos por prompt e mantém apenas aqueles que passam em um filtro. Ambos superam a geração ingênua de tiro único.
- Geração direcionada e ciente do aluno supera a geração estática em 1.3–2x de eficiência de amostragem — mirando nos modos de falha reais do aluno atinge um patamar de qualidade com menos exemplos filtrados.
- Taxas de aceitação típicas após filtragem ficam em 10–30%. Planeje o volume de acordo — um alvo de 10.000 linhas com 15% de aceitação precisa de ~65.000+ gerações brutas.
- Classificação de métodos de geração, funil de filtro, construção
de mistura com repetição e padrão de destilação:
referências/dados-sintéticos.md.
O Cartão do Dataset
Todo dataset que chega ao treinamento recebe um cartão —
o artefato obrigatório da Fase 2 que /finetune verifica
antes de lançar. O cartão não é documentação livre;
ele DEVE conter estes campos:
- Proveniência — de onde veio cada linha (fonte(s)
real(is), método(s) sintético(s), ou ambos),
rastreável até a saída de
rastrear-para-dados-de-treinamento. - Contagens — total de linhas e linhas por divisão (treino/avaliação/separado) se dividido.
- Proporção sintético/real — a proporção medida, verificada contra o piso de ≥25% reais acima.
- Método de dedup — correspondência exata, semântica
(limiar de incorporação), ou ambos; veja o funil de
filtro em
referências/dados-sintéticos.md. - Template usado — a string/identificador exato do
template de chat, mantido consistente durante a inferência
e avaliação — é isso que vincula uma execução de
avaliação-primeiroao checkpoint. - Configuração de empacotamento — se o empacotamento foi usado, comprimento máximo de sequência e confirmação de que a inspeção manual de 5–10 sequências acima foi feita.
Um dataset que não tenha algum desses seis campos não está
pronto para /finetune — o cartão é uma porta, não um
resumo escrito depois do fato.
Lista de Verificação de Saída da Fase 2
Antes de passar para /finetune, confirme:
- Formato corresponde ao método (tabela acima).
- Template aplicado antes da concatenação.
- Perda mascarada apenas para turnos do assistente.
- 5–10 sequências empacotadas decodificadas e lidas.
- ≥25% de dados reais na mistura final.
- Cartão do dataset completo — todos os seis campos.
Referências
referências/formatos-e-templates.md— exemplos JSONL por formato, código de mascaramento do TRL atual e a nota de conversão ShareGPT.referências/dados-sintéticos.md— classificação de métodos de geração, funil de filtro, construção de mistura com repetição e padrão de destilação professor→aluno.
Skills relacionados: seleção-de-método-de-ajuste-fino roteia
para cá; lora-qlora-receitas, visão-sft e
otimização-de-preferência consomem os datasets que este
skill produz; rastrear-para-dados-de-treinamento é a fonte
de proveniência para datasets de trajetória graduada;
avaliação-primeiro avalia o checkpoint resultante.