# Campos Customizados no Dataset (v1.2+) ## Visão Geral A partir da versão 1.2, o OktoScript permite definir campos customizados para input e output no bloco `DATASET`. Além disso, você pode especificar **campos de contexto** que serão automaticamente incluídos no prompt durante o treinamento. Isso oferece flexibilidade total para trabalhar com datasets complexos que incluem informações contextuais (como menu, drinks, promoções, etc.). ## Sintaxe ```okt DATASET { train: "dataset/train.jsonl" validation: "dataset/val.jsonl" format: "jsonl" # Campos customizados (opcional) input_field: "input" # Nome da coluna de entrada output_field: "target" # Nome da coluna de saída (ou use target_field) # Campos de contexto (opcional) - incluídos automaticamente no prompt context_fields: ["menu", "drinks", "promotions"] } ``` ## Resolução Automática de Campos Se você **não especificar** `input_field` e `output_field`, o OktoEngine tentará encontrar os campos automaticamente na seguinte ordem: ### Para modelos Seq2Seq (T5, BART, etc.): 1. **`input` + `output`** (padrão mais comum) 2. **`input` + `target`** (alternativa comum) 3. **`text`** (campo único, usado para ambos) 4. **Primeiro campo string encontrado** (fallback) ### Para modelos Causal (GPT, etc.): 1. **`input` + `output`** (concatenados) 2. **`input` + `target`** (concatenados) 3. **`text`** (campo único) 4. **Primeiro campo string encontrado** (fallback) ## Exemplos de Uso ### Exemplo 1: Dataset com `input` e `target` ```okt DATASET { train: "dataset/train.jsonl" format: "jsonl" input_field: "input" output_field: "target" } ``` **Dataset JSONL:** ```jsonl {"input": "User: Olá", "target": "Assistant: Olá! Como posso ajudar?"} {"input": "User: Tudo bem?", "target": "Assistant: Sim, tudo ótimo!"} ``` ### Exemplo 2: Dataset com campos diferentes ```okt DATASET { train: "dataset/conversations.jsonl" format: "jsonl" input_field: "question" output_field: "answer" } ``` **Dataset JSONL:** ```jsonl {"question": "Qual é a capital do Brasil?", "answer": "Brasília"} {"question": "Quem descobriu o Brasil?", "answer": "Pedro Álvares Cabral"} ``` ### Exemplo 3: Dataset com nomes em português ```okt DATASET { train: "dataset/treino.jsonl" format: "jsonl" input_field: "entrada" output_field: "saida" } ``` **Dataset JSONL:** ```jsonl {"entrada": "Traduza: Hello", "saida": "Olá"} {"entrada": "Traduza: Goodbye", "saida": "Adeus"} ``` ### Exemplo 4: Sem especificar campos (auto-detecção) ```okt DATASET { train: "dataset/train.jsonl" format: "jsonl" # input_field e output_field não especificados # O engine tentará encontrar automaticamente } ``` O engine tentará: - `input` + `output` → se não encontrar - `input` + `target` → se não encontrar - `text` → se não encontrar - Primeiro campo string → fallback ## Compatibilidade ### Retrocompatibilidade Scripts antigos continuam funcionando sem modificação: ```okt # Script v1.0/v1.1 - funciona perfeitamente DATASET { train: "dataset/train.jsonl" validation: "dataset/val.jsonl" } ``` O engine detectará automaticamente `input`/`output` ou `input`/`target`. ### Aliases Suportados - `output_field` e `target_field` são equivalentes - Ambos podem ser usados para definir o campo de saída ```okt DATASET { train: "dataset/train.jsonl" input_field: "input" output_field: "target" # ou target_field: "target" } ``` ## Casos de Uso ### 1. Datasets de Terceiros Quando você usa datasets de repositórios públicos que podem ter nomes de colunas diferentes: ```okt DATASET { train: "datasets/alpaca_pt.jsonl" input_field: "instruction" output_field: "response" } ``` ### 2. Migração de Formatos Ao migrar de outros frameworks que usam convenções diferentes: ```okt DATASET { train: "dataset/old_format.jsonl" input_field: "prompt" output_field: "completion" } ``` ### 3. Datasets Multilíngues Para datasets que misturam idiomas nos nomes das colunas: ```okt DATASET { train: "dataset/mixed.jsonl" input_field: "entrada" output_field: "saida" } ``` ## Validação O OktoEngine valida que: - Os campos especificados existem no dataset - Os campos contêm dados válidos (strings) - O formato do dataset é compatível ## Dicas 1. **Use campos customizados quando necessário**: Se seu dataset já usa `input`/`output` ou `input`/`target`, não precisa especificar. 2. **Teste primeiro**: Use `okto validate` para verificar se os campos estão corretos antes de treinar. 3. **Consistência**: Mantenha os mesmos nomes de campos em train, validation e test. 4. **Documentação**: Documente os nomes de campos customizados no seu projeto para facilitar colaboração. ## Troubleshooting ### Erro: "Field 'X' not found in dataset" **Causa**: O campo especificado não existe no dataset. **Solução**: - Verifique os nomes das colunas no seu dataset - Use `okto validate` para ver quais campos foram detectados - Remova `input_field`/`output_field` para usar auto-detecção ### Erro: "No input/output fields found" **Causa**: O engine não conseguiu encontrar campos válidos. **Solução**: - Especifique explicitamente `input_field` e `output_field` - Verifique se o dataset tem pelo menos um campo string ### Dataset funciona sem especificar campos, mas falha com campos customizados **Causa**: Nome do campo incorreto ou com espaços/caracteres especiais. **Solução**: - Use exatamente o nome da coluna como aparece no JSON - Evite espaços ou caracteres especiais nos nomes das colunas ## Exemplo Completo ```okt # okto_version: "1.2" PROJECT "custom_fields_example" DATASET { train: "dataset/train.jsonl" validation: "dataset/val.jsonl" format: "jsonl" type: "chat" # Campos customizados input_field: "user_message" output_field: "assistant_response" } MODEL { base: "t5-small" device: "auto" } TRAIN { epochs: 3 batch_size: 8 learning_rate: 0.0001 } EXPORT { format: ["okm"] path: "export/" } ``` --- **Versão**: 1.2+ **Última atualização**: 2024