TP1: O Classificador de Habilidades

Redes Neurais, NLP e MLOps (Fases 1 e 2 do Pipeline)

Published

25/07/2026

Modified

25/07/2026

🧭 Por que este TP existe?

Volte ao metadata.yaml do exercício “Divisão” que você viu na página de Visão Geral. Repare no campo skills:

skills:
  - "matematica"
  - "io"

Esses rótulos dizem quais habilidades cognitivas um aluno precisa dominar para resolver aquele exercício. Hoje, quem classifica essas skills é o professor, manualmente. Isso é lento, subjetivo e não escala para centenas de exercícios.

A missão do TP1 é construir uma Rede Neural Clássica que leia o texto bruto de um enunciado de programação e preveja automaticamente quais skills ele exige. Esse modelo será o motor das Fases 1 e 2 do Pipeline WOKDEX.


📖 Leitura Obrigatória (Fundamentação)

Antes de programar, vocês precisam ler e entender estes dois artigos científicos. Eles serão a base do Draft 1 na seção de Trabalhos Relacionados.

Artigo 1: Kim, Y. (2014). “Convolutional Neural Networks for Sentence Classification”. arXiv:1408.5882

Por que ler: É exatamente o que vocês vão construir — uma rede neural que recebe uma frase e classifica em categorias. O paper tem apenas 6 páginas e mostra como vetorizações de texto (Word2Vec, TF-IDF) alimentam um classificador profundo. A arquitetura descrita é a referência mais citada do mundo para classificação de texto com Deep Learning.

Artigo 2: Feng, Z. et al. (2020). “CodeBERT: A Pre-Trained Model for Programming and Natural Language”. arXiv:2002.08155

Por que ler: Enquanto o artigo anterior trata de classificação de textos genéricos, este mostra que existe um campo de pesquisa inteiro dedicado a aplicar NLP especificamente em código-fonte e enunciados de programação. Vocês não vão usar o CodeBERT em si (ele é pesado demais para o escopo do TP), mas entender que o problema que vocês estão atacando já é estudado por grandes labs (Microsoft Research) dá lastro científico ao Draft 1.


📚 O que é uma Skill no WOKDEX?

As skills são um vocabulário controlado definido no JSON Schema oficial do WOKDEX. Abaixo estão algumas das skills mais relevantes para os exercícios de nível CS1 e CS2:

Skill Significado Exemplo de Exercício
io Entrada e saída de dados “Leia dois números e imprima a soma”
condicionais Estruturas if/else “Diga se o número é par ou ímpar”
lacos Estruturas de repetição (for/while) “Imprima os N primeiros termos de Fibonacci”
vetores Manipulação de arrays “Encontre o maior valor de um vetor”
matrizes Arrays bidimensionais “Multiplique duas matrizes”
matematica Operações aritméticas e fórmulas “Calcule a área de um triângulo”
strings Manipulação de texto “Inverta uma palavra”
recursividade Chamadas recursivas “Calcule o fatorial de N”
ordenacao Algoritmos de ordenação “Ordene um vetor de inteiros”
grafos Estruturas de grafos “Encontre o caminho mínimo entre dois vértices”

[!NOTE] O seu modelo não precisa prever todas as skills. Para o TP1, o professor definirá um subconjunto (por exemplo, 5 a 8 skills de CS1) que será o alvo de classificação da sua Rede Neural.


📦 O Dataset (Corpus de Exercícios)

O professor fornecerá um Corpus estruturado de exercícios de programação. Este corpus pode vir em dois formatos:

  • Pasta com arquivos .md: Cada arquivo Markdown contém o enunciado de um problema no corpo do texto e as skills corretas no cabeçalho YAML (frontmatter).
  • Arquivo .csv consolidado: Uma tabela com colunas enunciado e skills.

Exemplo de um arquivo .md do corpus:

---
skills: ["lacos", "vetores"]
level: "CS1"
---
# Maior Valor

Leia um inteiro N, seguido de N números inteiros. 
Imprima o maior valor lido.

As skills que estão no cabeçalho YAML são o Ground Truth (gabarito do professor). Este gabarito vem diretamente do YAML original da tese WOKDEX. Vocês usarão esses rótulos para:

  1. Treinar a Rede Neural (como dados de treinamento supervisionado).
  2. Medir a acurácia do modelo (comparando a predição da rede contra o gabarito).
  3. Comparar com LLMs no TP3 (quem classifica melhor: a sua rede ou o ChatGPT?).

Data Limite de Entrega (Checkpoint 1): 31/08 (Segunda-feira)

Valor: 10 Pontos (5 em Grupo, 5 Individual)


👥 A Divisão de Tarefas na Equipe (4 Alunos)

Sua equipe deverá se dividir em duas grandes forças-tarefa.

🔬 Dupla 1: Ciência e Dados (O Cérebro)

Esta dupla é focada puramente na matemática, no processamento de linguagem natural (NLP) clássico e no treinamento da Rede Neural. O output final dessa dupla é um arquivo .h5 ou .keras com os pesos do modelo treinado, além dos relatórios de acurácia.

  • Aluno A (Engenheiro de Dados):
    • Trabalho Individual: Receber o Dataset fornecido pelo professor (que pode ser um consolidado em .csv ou uma pasta com múltiplos arquivos .md). O aluno construirá o pipeline de carga e limpeza de texto (remover stopwords, realizar stemming/lemmatization) e vetorizará os enunciados para formato numérico (ex: TF-IDF ou Word2Vec).
  • Aluno B (Engenheiro de Machine Learning):
    • Trabalho Individual: Construir a arquitetura da Rede Neural profunda usando a biblioteca Keras. Definir o número de camadas densas, a função de ativação, a camada de saída multiclasse (Softmax) e rodar as épocas de treinamento. Validar o modelo gerando a Matriz de Confusão.

⚙️ Dupla 2: Engenharia de Software (A Casca)

Modelos parados no Jupyter Notebook não viram produto. A função desta dupla é aplicar MLOps: pegar a rede neural da Dupla 1 e criar um servidor Web moderno que receba requisições de outros sistemas.

  • Aluno C (Dev Backend Python):
    • Trabalho Individual: Importar o modelo da dupla anterior dentro do microframework FastAPI. Criar a rota de inferência (POST /predict). Garantir que os dados de entrada e saída sigam contratos rígidos de segurança utilizando a biblioteca Pydantic.
  • Aluno D (DevOps e Cloud):
    • Trabalho Individual: Conteinerizar todo o ambiente usando o Docker. Escrever o Dockerfile ideal, leve e seguro. Implementar os testes unitários (pytest) da API e orquestrar a integração contínua (GitLab CI) para que a imagem rode sem quebrar em qualquer máquina.

🔌 A API que você vai construir

O produto final de engenharia do TP1 é uma API REST que recebe o texto de um enunciado e retorna as skills previstas. Abaixo está o contrato exato:

Requisição: POST /predict

{
  "enunciado": "Leia dois números inteiros A e B. Imprima o resultado da divisão de A por B com duas casas decimais."
}

Resposta esperada:

{
  "skills": [
    { "skill": "io", "confidence": 0.92 },
    { "skill": "matematica", "confidence": 0.88 },
    { "skill": "variaveis", "confidence": 0.71 }
  ],
  "model_version": "v1.0",
  "input_length": 95
}

[!IMPORTANT] No TP3, o Agente Autônomo vai chamar esta API como uma ferramenta (predict_skills()). Se a sua API não estiver de pé e respondendo neste formato, o agente do TP3 não funciona. É por isso que o Docker é obrigatório.


📝 A Entrega Global (O Grupo)

1. O Código Unificado

Os códigos individuais devem ser commitados no repositório do grupo no GitLab. A entrega de Engenharia é o projeto finalizado. * Auditoria: O professor irá clonar o repositório e executar um docker build e um docker run. A API deve estar de pé e responder a um pacote JSON no endpoint /predict.

2. O Rascunho Científico (Draft 1)

O grupo, em conjunto, entregará um Rascunho de Artigo Científico (formato SBC) de 2 a 3 páginas. O escopo do TP1 foca nas seguintes seções: * Trabalhos Relacionados: Cite e explique brevemente as literaturas base (ex: papéis clássicos sobre NLP em código-fonte, como CodeBERT ou abordagens via deep learning). * Metodologia Preditiva: Descreva exatamente a arquitetura que a Dupla 1 escolheu para a Rede Neural, justifique a função de Loss escolhida, e exiba os gráficos de convergência. * Aferição contra o Gabarito (Ground Truth): O Corpus fornecido pelo professor possui as habilidades corretas já definidas (YAML original do WOKDEX). O grupo deve reportar a precisão da rede contra esse gabarito, pois esses números serão usados na batalha final contra os LLMs no TP3.


📊 Rubrica de Avaliação Detalhada (10 Pontos)

Nota Individual (5 pts)

Critério Pontos Detalhes
Commits individuais na branch correta 1 Avaliado via Git Blame
Pipeline de dados funciona (Aluno A) OU Rede treina (Aluno B) OU API responde (Aluno C) OU Docker sobe (Aluno D) 3 O módulo individual funciona isoladamente
Qualidade e organização do código 1 Docstrings, nomes de variáveis, ausência de código morto

Nota do Grupo (5 pts)

Critério Pontos Detalhes
API integrada responde no formato correto 2 docker run + curl POST /predict funciona
Acurácia da Rede Neural contra o Ground Truth 1 Mínimo esperado: > 50% de acurácia no dataset de teste
Draft 1 com gráficos e metodologia 2 Matriz de confusão, curva de loss, justificativa de arquitetura

(O professor fornecerá um Dataset estruturado (CSV) ou um Corpus de arquivos Markdown (.md). Caso a base original seja pequena, o professor utilizará Data Augmentation para gerar centenas de problemas sintéticos, garantindo volume para o treino da Rede).

Back to top