File size: 6,228 Bytes
5df2c77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# 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