gpt2_medium_prefix_682k / DATASET_PREFIX_CONVERTED_STATUS.md
augustocsc's picture
GPT-2 Medium trained on prefix dataset (682K)
a1190da verified

Dataset Infix→Prefix Convertido ✅

Data: 2026-02-09 Status: COMPLETO


📊 Estatísticas da Conversão

  • Total de Exemplos: 12,221
  • Taxa de Sucesso: 100.00% (12,221/12,221)
  • Tempo de Conversão: ~15 segundos
  • Tamanho do Dataset: 7 MB

📁 Localização

Dataset Convertido: ./1_data/processed/700K_prefix_converted/

Arquivos:

  • data-00000-of-00001.arrow (7 MB)
  • dataset_info.json
  • state.json

🔧 Colunas do Dataset

Colunas Originais

  • infix_expr_n: Expressão infix com números
  • infix_expr_c: Expressão infix com constante C
  • expression_objects: Objeto Expression serializado
  • prefix_expr_c: Expressão prefix original (diferente!)
  • prefix_expr_n: Expressão prefix original com números
  • i_prompt_n: Prompt infix original (usado para conversão)
  • p_prompt_n: Prompt prefix original (expressão diferente!)
  • skeleton: Esqueleto da expressão

Colunas Adicionadas ✨

  • p_prompt_n_converted: Prompt prefix CONVERTIDO do i_prompt_n (mesma expressão!)
  • conversion_success: Boolean indicando sucesso da conversão (todos True)

🎯 Diferença Crítica

ANTES (Problema)

i_prompt_n:  "expr: x_1 + x_2"        (5 variáveis)
p_prompt_n:  "expr: * x_3 x_4"        (10 variáveis, EXPRESSÃO DIFERENTE!)

❌ Não são a mesma expressão!

AGORA (Solução)

i_prompt_n:           "expr: x_1 + x_2"
p_prompt_n_converted: "expr: + x_1 x_2"  (MESMA expressão em prefix!)

✅ Mesma expressão, notações diferentes!


📝 Exemplos de Conversão

Exemplo 1

INFIX:

vars: x_1, x_2, x_3, x_4, x_5
oper: *, +, -, /, abs, asin, cos, exp, log, sin, sqrt, tan
cons: C
expr: x_2 - (x_5 - C)*(x_4 + exp(C*x_2) + C)

CONVERTIDO PARA PREFIX:

vars: x_1, x_2, x_3, x_4, x_5
oper: *, +, -, /, abs, asin, cos, exp, log, sin, sqrt, tan
cons: C
expr: - x_2 * - x_5 C + + x_4 exp * C x_2 C

Exemplo 2

INFIX:

vars: x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8, x_9, x_10
oper: **, +, -, /, cos, exp, sin, sqrt
cons: C
expr: x_2 - x_1 + sin(exp(x_9))

CONVERTIDO PARA PREFIX:

vars: x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8, x_9, x_10
oper: **, +, -, /, cos, exp, sin, sqrt
cons: C
expr: + + x_2 * -1 x_1 sin exp x_9

Exemplo 3

INFIX:

vars: x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8, x_9, x_10
oper: *, +, /, asin, sin, tan
cons: C
expr: (tan(x_7) + C)*(asin(x_5) + C)

CONVERTIDO PARA PREFIX:

vars: x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8, x_9, x_10
oper: *, +, /, asin, sin, tan
cons: C
expr: * + tan x_7 C + asin x_5 C

🚀 Próximos Passos

Opção 1: Upload para HuggingFace Hub (Recomendado)

python scripts/data/convert_infix_to_prefix.py \
  --split test \
  --output_path ./1_data/processed/700K_prefix_converted \
  --upload \
  --repo_id augustocsc/sintetico_natural_prefix_converted

Vantagens:

  • Facilita compartilhamento
  • Pode usar em qualquer lugar
  • Scripts de treinamento já funcionam com HF datasets

Requisitos:

  • Permissão de escrita no repo HuggingFace
  • Login: huggingface-cli login

Opção 2: Treinar Localmente

A. Usando Dataset Local com Scripts Existentes

Problema: Os scripts atuais (2_training/supervised/train.py) carregam direto do HuggingFace Hub.

Solução: Adaptar o script ou criar um novo.

B. Carregar Dataset Local no Python

from datasets import load_from_disk

# Carregar dataset convertido
ds = load_from_disk('./1_data/processed/700K_prefix_converted')

# Usar coluna p_prompt_n_converted para treinar
# (adaptar script de treinamento)

Opção 3: Criar Script de Treinamento Adaptado

Criar 2_training/supervised/train_local_prefix.py que:

  1. Carrega dataset de ./1_data/processed/700K_prefix_converted
  2. Usa coluna p_prompt_n_converted
  3. Treina com formato prefix

📋 Checklist de Validação

  • Dataset convertido (12,221 exemplos)
  • Taxa de sucesso 100%
  • Dataset salvo localmente
  • Documentação criada
  • Upload para HuggingFace Hub
  • Treinamento de modelo teste
  • Comparação infix vs prefix

🔍 Como Verificar o Dataset

# Testar o dataset
cd /c/Users/madeinweb/seriguela

python -c "
from datasets import load_from_disk
ds = load_from_disk('./1_data/processed/700K_prefix_converted')
print(f'Total: {len(ds)} exemplos')
print(f'Colunas: {ds.column_names}')
print(f'Sucesso: {sum(ds[\"conversion_success\"])/len(ds)*100:.1f}%')
print()
print('Exemplo 1:')
print('INFIX:', ds[0]['i_prompt_n'])
print()
print('PREFIX:', ds[0]['p_prompt_n_converted'])
"

📚 Arquivos Relacionados

  • scripts/data/convert_infix_to_prefix.py - Script de conversão
  • 1_data/processed/PREFIX_CONVERSION_README.md - Documentação detalhada
  • classes/expression.py - Classe com parse_prefix() para validação

✅ Qualidade da Conversão

Verificação Automática

Todas as 12,221 expressões foram:

  1. ✅ Parseadas com sucesso usando SymPy
  2. ✅ Convertidas para notação prefix
  3. ✅ Mantendo mesmas variáveis e operadores
  4. ✅ Salvas com sucesso

Validação Manual

3 exemplos verificados manualmente mostraram conversão correta.


Próxima Ação Recomendada:

  1. Fazer upload para HuggingFace Hub (mais fácil para usar)
  2. OU adaptar script de treinamento para carregar dataset local

Você prefere qual opção?