Enem Flow — tipos de layout de questões do ENEM

Rede neural convolucional que recebe a imagem de uma questão do ENEM e devolve um JSON com o tipo de layout de impressão, segundo o catálogo layout-types-v2: como os blocos do enunciado se sucedem (texto, crédito, figura, tabela), como as alternativas estão dispostas e se há marcas como texto compartilhado, linhas numeradas ou blocos lado a lado.

Faz parte do Enem Flow, plataforma aberta de estudos para o ENEM, onde o tipo de layout orienta a apresentação de cada questão com a mesma diagramação do caderno.

Autores: Cassio Lima Silva e Diogo Vieira de Castro
Código, dados de treino e protocolo: https://github.com/LemonCandles/enem-flow
Versão: 1.0.0 · catálogo layout-types-v2 · licença MIT

Aviso. No teste, esta rede acerta o tipo exato em 71,4% das questões, abaixo do adaptador que lê o PDF original (93,5%) e da regra sobre o JSON de conteúdo (87,3%). Se você tem o PDF ou o JSON estruturado da questão, prefira esses métodos, que estão no repositório do projeto. Esta rede serve quando só há a imagem da questão, e a saída needs_review indica quando conferir.

Uso

pip install -U huggingface_hub
hf download diogovc/enem-layout-types --local-dir enem-layout-types && cd enem-layout-types
pip install -r requirements.txt
python -m enem_layout.predict exemplos/enem-2024-dia2-azul-q093.png --model .
# Dentro da pasta baixada: o catálogo (layout-types.json) preenche descrição, in_catalog e needs_review.
from PIL import Image
from enem_layout import EnemLayoutClassifier, predict_images
from enem_layout.predict import load_catalog

model = EnemLayoutClassifier.from_pretrained(".")
print(predict_images(model, [Image.open("questao.png")], load_catalog(".")))

A imagem deve conter uma questão inteira (do título "QUESTÃO n" até a última alternativa), sem o resto da página. O modelo foi treinado com recortes renderizados do PDF a 150 dpi.

Saída

Campo Significado
type Identificador do tipo, por exemplo texto-figura+credito-texto.alt-texto; null quando o corpo é outro.
axes Rótulo de cada eixo: corpo, alternativas, marcas.
probabilities Probabilidades calibradas por eixo (marcas são independentes).
confidence Produto das probabilidades escolhidas.
needs_review Verdadeiro abaixo de 0,905 de confiança, fora do catálogo ou com corpo outro.
in_catalog, representable Se o tipo existe no catálogo e se o contrato de conteúdo do Enem Flow já o representa.

Desempenho

Teste: 370 questões revisadas das provas de 2024 e 2025, nenhuma vista no treino. O treino usa o acervo de 2009 a 2023.

Método Acurácia do tipo exato IC 95%
Esta rede (imagem) 71,4% 67,0–75,7%
Adaptador do PDF 93,5% 91,1–95,9%
Maioria (tipo mais comum do treino) 44,9% 39,7–49,7%
Regra sobre o JSON 87,3% 84,1–90,5%

Média de três seeds no teste: 68,8% (desvio 4,6 p.p.). A seed publicada foi escolhida pelo desenvolvimento, sem olhar o teste.

O adaptador lê o PDF original (texto, vetores e imagem) e foi a fonte dos rótulos automáticos; ele é uma referência, não um concorrente justo. A regra sobre o JSON exige o conteúdo já estruturado.

Eixo Macro-F1 (teste) Acurácia (teste) Macro-F1 (desenvolvimento)
corpo 0,270 73,8% 0,257
alternativas 0,848 98,1% 0,604
marcas 0,247 97,6% 0,496

Calibração (ECE) no teste: 0,068. Com o limiar de revisão, o modelo aceita 16,2% das questões de teste, com 98,3% de acerto nelas.

Por fatia do teste:

Fatia Questões Acurácia do tipo
ano:2024 185 68,6%
ano:2025 185 74,1%
conteudo:estruturado 362 71,5%
conteudo:imagem-unica 8 62,5%
rotulo:automatic-reviewed 336 74,7%
rotulo:manual 34 38,2%

Por tipo no teste (suporte = questões do tipo):

Tipo Precisão Revocação F1 Suporte
texto-credito-texto.alt-texto 0,912 0,880 0,896 166
texto.alt-texto 0,740 0,864 0,797 66
texto-figura-texto.alt-texto 0,543 0,610 0,575 41
texto-figura+credito-texto.alt-texto 0,391 0,310 0,346 29
figura+credito-texto.alt-texto 0,737 0,778 0,757 18
texto-tabela-texto.alt-texto 0,667 0,750 0,706 8
texto-figura-texto-credito-texto.alt-texto 0,000 0,000 0,000 6
texto-credito-texto.alt-texto.compartilhado.linhas-numeradas 0,000 0,000 0,000 5
texto-credito-texto-figura+credito-texto.alt-texto 0,000 0,000 0,000 4
texto-figura-texto.alt-grade 1,000 0,500 0,667 4
texto-figura+credito-texto.alt-figura 0,000 0,000 0,000 3
texto-figura-texto.alt-figura 0,200 0,333 0,250 3
texto.alt-figura 0,429 1,000 0,600 3
texto-credito-texto-figura-texto-credito-texto.alt-texto 0,000 0,000 0,000 2
texto-figura+credito-texto-credito-texto.alt-texto 0,000 0,000 0,000 2
texto-figura-texto-tabela-credito-texto.alt-texto 0,000 0,000 0,000 2
texto-credito-texto.alt-texto.lado-a-lado 0,000 0,000 0,000 1
texto-credito-texto.alt-texto.linhas-numeradas 0,000 0,000 0,000 1
texto-figura-credito-texto.alt-texto.lado-a-lado 0,000 0,000 0,000 1
texto-figura-texto-tabela-texto.alt-texto 0,000 0,000 0,000 1
texto-tabela-credito-texto.alt-texto 0,000 0,000 0,000 1
texto-tabela-figura-texto.alt-texto.lado-a-lado 0,000 0,000 0,000 1
texto-tabela-texto.alt-grade 0,000 0,000 0,000 1
texto.alt-grade 1,000 1,000 1,000 1

Dados de treino

  • Treino e desenvolvimento: 2855 e 503 questões de provas impressas do acervo oficial do Inep (2009–2023), com rótulo fraco automático: o adaptador de layout do Enem Flow lê o PDF original e só rotula as questões em que os canais vetorial e raster concordam e nenhuma invariante falha. As demais ficam fora do treino.
  • Teste: 370 questões impressas únicas de seis cadernos de 2024 e 2025, com rótulos revisados, incluindo decisões manuais justificadas.
  • Sem vazamento: questões agrupadas por identidade do conteúdo, texto repetido e texto de apoio compartilhado; questões do acervo que reaparecem no teste ficam fora do treino.
  • Partições e rótulos: manifesto layout-types-archive-v1 (hashes de fonte, conteúdo e imagem) no repositório do projeto. As imagens não são redistribuídas; são geradas dos PDFs oficiais.

Arquitetura e treino

CNN de cerca de 10 milhões de parâmetros treinada do zero (sem pesos pré-treinados de terceiros), entrada em tons de cinza de 384×1024 com a proporção preservada, grade de posições verticais que preserva a ordem dos blocos, três cabeças (corpo e alternativas com softmax; marcas multirrótulo), perda ponderada por classe (peso das marcas limitado), aumentos leves sem espelhamento, precisão simples (fp32) e escolha da época e da seed pela acurácia do tipo exato no desenvolvimento. Temperatura, limiar das marcas e limiar de revisão calibrados no desenvolvimento.

Houve três rodadas de ajuste antes do treino final. A primeira mediu o teste; nas seguintes, que mudaram o peso e o limiar das marcas, o número de épocas, o critério de escolha e a resolução (512 px não ajudou), só o desenvolvimento foi usado.

Tipos do catálogo

Tipo Descrição Representável
texto-credito-texto.alt-texto Enunciado com texto, crédito e texto; alternativas em texto, uma por linha. sim
texto.alt-texto Enunciado com texto; alternativas em texto, uma por linha. sim
texto-figura-texto.alt-texto Enunciado com texto, figura e texto; alternativas em texto, uma por linha. sim
figura+credito-texto.alt-texto Enunciado com figura com crédito e texto; alternativas em texto, uma por linha. sim
texto-figura+credito-texto.alt-texto Enunciado com texto, figura com crédito e texto; alternativas em texto, uma por linha. sim
texto-tabela-texto.alt-texto Enunciado com texto, tabela e texto; alternativas em texto, uma por linha. sim
figura-texto.alt-texto Enunciado com figura e texto; alternativas em texto, uma por linha. sim
texto-figura-texto-credito-texto.alt-texto Enunciado com texto, figura, texto, crédito e texto; alternativas em texto, uma por linha. sim
figura-texto-credito-texto.alt-texto Enunciado com figura, texto, crédito e texto; alternativas em texto, uma por linha. sim
texto-figura-texto.alt-texto.lado-a-lado Enunciado com texto, figura e texto; alternativas em texto, uma por linha. Blocos impressos lado a lado. não
texto.alt-figura Enunciado com texto; alternativas em figura, uma abaixo da outra. sim
texto-tabela-credito-texto.alt-texto Enunciado com texto, tabela, crédito e texto; alternativas em texto, uma por linha. sim
texto-figura+credito-texto-credito-texto.alt-texto Enunciado com texto, figura com crédito, texto, crédito e texto; alternativas em texto, uma por linha. sim
texto-figura-texto.alt-grade Enunciado com texto, figura e texto; alternativas em figura, dispostas em colunas. sim
texto-figura-texto.alt-figura Enunciado com texto, figura e texto; alternativas em figura, uma abaixo da outra. sim
texto-credito-texto-figura+credito-texto.alt-texto Enunciado com texto, crédito, texto, figura com crédito e texto; alternativas em texto, uma por linha. sim
texto.alt-grade Enunciado com texto; alternativas em figura, dispostas em colunas. sim
texto-credito-texto.alt-texto.compartilhado.linhas-numeradas Enunciado com texto, crédito e texto; alternativas em texto, uma por linha. Texto de apoio compartilhado com outras questões. Texto com as linhas numeradas. não
texto-figura+credito-texto.alt-figura Enunciado com texto, figura com crédito e texto; alternativas em figura, uma abaixo da outra. sim
texto-figura-texto-tabela-texto.alt-texto Enunciado com texto, figura, texto, tabela e texto; alternativas em texto, uma por linha. sim
texto-credito-texto-figura-texto-credito-texto.alt-texto Enunciado com texto, crédito, texto, figura, texto, crédito e texto; alternativas em texto, uma por linha. sim
texto-figura-credito-texto.alt-texto.lado-a-lado Enunciado com texto, figura, crédito e texto; alternativas em texto, uma por linha. Blocos impressos lado a lado. não
texto-figura-texto-tabela-credito-texto.alt-texto Enunciado com texto, figura, texto, tabela, crédito e texto; alternativas em texto, uma por linha. sim
texto-credito-texto.alt-texto.lado-a-lado Enunciado com texto, crédito e texto; alternativas em texto, uma por linha. Blocos impressos lado a lado. não
texto-credito-texto.alt-texto.linhas-numeradas Enunciado com texto, crédito e texto; alternativas em texto, uma por linha. Texto com as linhas numeradas. não
texto-tabela-figura-texto.alt-texto.lado-a-lado Enunciado com texto, tabela, figura e texto; alternativas em texto, uma por linha. Blocos impressos lado a lado. não
texto-tabela-texto.alt-grade Enunciado com texto, tabela e texto; alternativas em figura, dispostas em colunas. sim

Corpos com menos de 10 exemplos no treino saem como outro; o vocabulário do modelo está em config.json.

Exemplos

Questões reais do Inep, de autoria do próprio Inep (sem textos ou imagens de terceiros), em exemplos/; origem e SHA-256 de cada caderno em exemplos/fontes.json.

Imagem Questão Tipo revisado Previsão desta rede Confiança Revisar
enem-2024-dia2-azul-q093.png enem-2024-dia2-azul, questão 93 texto.alt-texto texto.alt-texto ✓ 0,965 não
enem-2024-dia2-azul-q096.png enem-2024-dia2-azul, questão 96 texto-figura-texto.alt-texto texto-figura-texto.alt-texto ✓ 0,994 não
enem-2024-dia2-azul-q139.png enem-2024-dia2-azul, questão 139 texto-tabela-texto.alt-texto texto-figura-texto.alt-texto ✗ 0,440 sim
enem-2024-dia2-azul-q161.png enem-2024-dia2-azul, questão 161 texto-figura-texto.alt-grade texto-figura-texto.alt-grade ✓ 0,253 sim
enem-2024-dia2-azul-q131.png enem-2024-dia2-azul, questão 131 texto-figura-texto.alt-figura null (corpo outro) ✗ 0,420 sim
enem-2025-regular-dia2-caderno-7-azul-q108.png enem-2025-regular-dia2-caderno-7-azul, questão 108 texto.alt-figura texto.alt-figura ✓ 0,637 sim
enem-2024-dia2-azul-q150.png enem-2024-dia2-azul, questão 150 texto-figura-texto-tabela-texto.alt-texto texto-figura-texto.alt-texto ✗ 0,266 sim

A rede acerta 4 de 7 exemplos; os exemplos cobrem tipos variados, inclusive raros, e não representam a distribuição do teste.

Uso pretendido e limites

  • Uso pretendido: organizar e apresentar questões do ENEM com a diagramação do caderno, e triagem de provas novas na ingestão. Não avalia conteúdo pedagógico nem corrige respostas.
  • Treinado só em provas impressas (regular, reaplicação e segunda aplicação) a partir de 2009; provas anteriores, digitais e formatos acessíveis estão fora.
  • Os rótulos de treino são automáticos e podem repetir erros do adaptador; o teste revisado mede isso.
  • Tipos raros e marcas têm pouco suporte; use needs_review e as probabilidades.
  • A imagem precisa ser o recorte de uma questão; páginas inteiras ou fotos de celular não foram avaliadas.

Licença e fontes

Código e pesos sob a licença MIT (LICENSE). As provas são publicações do Inep; as imagens de exemplo são questões de autoria do Inep e trazem a fonte. O treino usou os cadernos oficiais listados no manifesto do projeto, vinculados por URL e SHA-256.

Citação

@software{enem_flow_layout_types,
  author = {Cassio Lima Silva and Diogo Vieira de Castro},
  title = {Enem Flow: tipos de layout de questões do ENEM},
  year = {2026},
  version = {1.0.0},
  url = {https://huggingface.co/diogovc/enem-layout-types},
  note = {Código: https://github.com/LemonCandles/enem-flow}
}
Downloads last month
-
Safetensors
Model size
9.9M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Evaluation results

  • Acurácia do tipo exato on Questões revisadas do ENEM 2024 e 2025
    self-reported
    0.714
  • Macro-F1 (corpo) on Questões revisadas do ENEM 2024 e 2025
    self-reported
    0.270
  • Macro-F1 (alternativas) on Questões revisadas do ENEM 2024 e 2025
    self-reported
    0.848
  • Macro-F1 (marcas) on Questões revisadas do ENEM 2024 e 2025
    self-reported
    0.247