# Estratégia de Construção do Corpus WOKDEX (Machine Learning Ready)

## 1. O Problema Atual (The "Few-Shot" Problem)
Atualmente, o WOKDEX possui ~45 exercícios rotulados ("Golden Standard"). Para tarefas de Machine Learning, especialmente treinamento de Redes Neurais (Keras) no TP1, 45 amostras causam *overfitting* imediato. O modelo decora as 45 respostas e não generaliza.

Para que o TP1 da disciplina de IA 2 seja cientificamente válido e pedagogicamente rico, precisamos expandir o corpus para milhares de exemplos, além de enriquecer as *features* de entrada.

---

## 2. Estratégia de Augmentation via "Silver Standard" (Weak Supervision)

Em vez de gerar dados 100% sintéticos (que possuem viés estrutural do LLM), a estratégia será minerar problemas reais de programação e usar LLMs apenas como "tradutores de rótulos".

### Fase 1: Data Collection (Crawler)
Construir um crawler para extrair problemas de juízes online (ex: Beecrowd, Codeforces, Neps Academy).
**Dados a serem extraídos:**
- `id_origem`: Identificador original (ex: beecrowd-1001)
- `texto_enunciado`: O texto bruto do problema
- `tags_originais`: As tags/tópicos que o próprio juiz online já marcou (ex: `math`, `greedy`, `implementation`)
- `metadados`: Ano da prova, limite de tempo, nível de dificuldade original.

### Fase 2: LLM Labeling (O Classificador Weak)
Um script Python passará os problemas coletados por uma API de LLM (ex: DeepSeek ou GPT-4o-mini).
- **Entrada no LLM:** Texto do problema + Tags Originais (que servem como "dica" forte).
- **Saída do LLM:** As skills mapeadas diretamente para a taxonomia do WOKDEX (ex: `CS1-LOOP`, `CS2-ARRAY`).
*Por que funciona?* Como o LLM já recebe as tags corretas da plataforma, a taxa de alucinação na classificação despenca. Esse dataset resultante é chamado de **Silver Standard**.

### Fase 3: Golden Test Set
Uma amostra aleatória de ~100 problemas desse Silver Standard será revisada manualmente pelo professor. Esses 100 problemas viram o **Golden Test Set**. Eles são *escondidos* dos alunos e usados apenas para avaliar a rede neural no Demoday.

---

## 3. Estrutura de Features: Abordagem Multi-Input

O TP1 exigirá que os alunos criem uma Rede Neural Multi-Input (usando a Functional API do Keras), capaz de fundir NLP (Processamento de Linguagem Natural) com dados Tabulares.

O Dataset final (CSV) entregue aos alunos terá a seguinte estrutura:

| id_exercicio | enunciado (Texto) | ano (Int) | origem (Cat) | tempo_limite_seg (Float) | target: skills (Array/OHE) |
| :--- | :--- | :--- | :--- | :--- | :--- |
| bc_1001 | "Leia 2 variáveis A e B..." | 2010 | "beecrowd" | 1.0 | `["variaveis", "io", "matematica"]` |
| cf_71A | "Escreva palavras longas..." | 2014 | "codeforces" | 2.0 | `["strings", "condicionais"]` |

### Arquitetura da Rede Neural (TP1)
- **Braço A (Texto):** TF-IDF ou Embedding do `enunciado` $\rightarrow$ Camada Densa.
- **Braço B (Tabular):** Dados como `ano` e `origem` $\rightarrow$ Camada Densa.
- **Fusão (Concatenate):** Junta as representações A e B.
- **Output (Sigmoid):** Previsão Multi-label das skills WOKDEX.

---

## 4. Próximos Passos (Plano de Ação)
1. Construir o script `crawler_judges.py`.
2. Construir o script `llm_weak_labeler.py` conectando à API DeepSeek.
3. Consolidar o dataset em `wokdex_train_silver.csv` e `wokdex_test_golden.csv`.
4. Atualizar as instruções do TP1 para refletir a entrada Multi-Input (Texto + Metadados).
