Projeto de Reconhecimento de Padrões — aplicação de classificação de texto com deep learning que implementa o método do artigo "An Efficient Data Classification Decision Based on Multimodel Deep Learning" (Hu et al., 2022).
O sistema combina múltiplas arquiteturas (DNN, RNN, CNN) e otimizadores com Model Fusion (fusão por votação majoritária) para classificação de texto.
- Objetivo: classificação de texto usando várias redes neurais e fusão de modelos.
- Arquiteturas: DNN (6 camadas, 512 neurônios), RNN (GRU, 4 camadas), CNN (6 conv + pooling).
- Otimizadores: AdamDeviationCorrection, ImprovedSGD, RMSPropNesterov.
- Model Fusion: ensemble de 9 modelos (3 arquiteturas × 3 otimizadores) com majority voting.
- Dataset: 20Newsgroups (20 categorias, ~20k documentos); outros planejados (Reuters, WOS).
- Stack: Streamlit (UI), PyTorch (modelos), SQLAlchemy/SQLite (dados), NLTK (pré-processamento), GloVe (embeddings).
- Python 3.10+ (recomendado 3.12+)
- pip (ou outro gerenciador de pacotes)
Opcional para GPU:
- CUDA (para treino com GPU)
git clone git@github.com:macoaure/prp.gitpython -m venv .venv
source .venv/bin/activate # Linux/macOS
# ou: .venv\Scripts\activate # Windowspip install -r requirements.txtO app usa SQLite em database/database.sqlite. Crie a pasta e as tabelas:
mkdir -p database
./bin/prp --create-tablesSe o bin/prp não for executável ou estiver em outro ambiente:
python -c "
from app.database import engine
from app.models.base import Base
from app.models.job import Job
from app.models.training import Training
from app.models.trained_data import TrainedData
Base.metadata.create_all(bind=engine)
print('Tabelas criadas.')
"Opção A – script do projeto:
./bin/prp --run-streamlitOpção B – Streamlit direto:
streamlit run app/app.pyA interface abre no navegador (geralmente http://localhost:8501).
Os jobs de treino são processados por um worker. Em outro terminal, com o mesmo ambiente ativado:
./bin/prp --run-workerVários workers (ex.: 4):
./bin/prp --run-worker --num-workers 4Polling a cada 10 segundos:
./bin/prp --run-worker --polling-interval 10- Configurações — Criar/editar configurações de treino (dataset, modelo, otimizador, hiperparâmetros, fusion).
- Enfileirar job — Na configuração desejada, usar “Queue Training Job”.
- Worker — Manter o worker rodando para processar jobs pendentes.
- Trabalhos — Acompanhar status (pending → running → completed/failed).
- Dados Treinados — Ver métricas, gráficos e comparações após jobs concluídos.
| Comando | Descrição |
|---|---|
--run-streamlit |
Sobe o app Streamlit |
--run-worker |
Inicia o worker de jobs |
--run-worker --num-workers N |
N workers em paralelo |
--create-tables |
Cria tabelas no SQLite |
--seed-db |
Popula banco com jobs de exemplo |
--reset-db |
Recria banco e opcionalmente faz seed |
--reset-db --no-seed |
Só recria tabelas, sem seed |
--clear-jobs |
(com --seed-db) limpa jobs antes de seedar |
--job-status pending|completed|failed|running|mixed |
Status dos jobs no seed |
--num-jobs N |
N jobs no seed (ou um por config se omitir) |
--polling-interval N |
Intervalo de polling do worker (segundos) |
--version |
Mostra versão |
--help |
Lista opções |
prp/
├── app/
│ ├── app.py # Entrada do Streamlit
│ ├── database.py # Config SQLite/SQLAlchemy
│ ├── navigation.py # Páginas e menu
│ ├── worker.py # Processador de jobs
│ ├── command/ # Comandos (ex.: train)
│ ├── models/ # Modelos de dados e ML (DNN/RNN/CNN, training, job)
│ ├── pages/ # Páginas Streamlit (Configurações, Jobs, Dados Treinados)
│ └── utils/ # Pré-processamento, embeddings, loaders, migrações
├── database/ # SQLite (database.sqlite); criar manualmente
├── bin/
│ └── prp # CLI (streamlit, worker, create-tables, seed, reset)
├── requirements.txt
└── README.md
- SQLALCHEMY_ECHO=1 — Ativa log de SQL (debug).
- CUDA — PyTorch usa GPU se disponível; caso contrário, CPU.
- Hu et al. (2022), "An Efficient Data Classification Decision Based on Multimodel Deep Learning"
- 20Newsgroups
- GloVe
- Streamlit
- PyTorch