Estruturas de Dados Probabilísticas para Processamento de Linguagem Natural
Este projeto é parte de um Trabalho de Conclusão de Curso (TCC) que investiga a aplicação de estruturas de dados probabilísticas (sketches) para tarefas de Processamento de Linguagem Natural.
O objetivo principal é caracterizar, para tarefas específicas de PLN em português (contagem de frequência de palavras e pares de palavras, e ranking de PPMI), o trade-off entre precisão de contagem, complexidade de implementação e tempo de processamento oferecido pelas variantes CMS, CMTS, Count-Less e CMLS, identificando em quais situações cada uma delas é mais adequada.
Mais detalhes presentes no arquivo TCC-GUSTAVO-PAGNOTTA-FARIA.pdf.
TCC-CMS-PLN/
├── biblioteca/ # Implementações das estruturas (Cython)
│ ├── estruturas/ # CMS-CU, CML8S-CU, CMTS, CL, CML8HS-CU
│ └── helpers/ # Hash (CityHash) e BitVector
├── corpus/ # Corpus processado
│ └── tokenizado/ # Partes tokenizadas
├── analise_resultados/ # Resultados das análises (gráficos)
├── resultados_benchmark/ # Resultados do benchmark
├── corpus.py # Preparação do corpus
├── tokenizar_corpus.py # Pipeline de tokenização
├── benchmark_estruturas.py # Execução de benchmarks
├── factory_estruturas.py # Factory para criação de estruturas
└── docs/
├── ESTRUTURAS.md # Documentação das estruturas
└── PIPELINE.md # Documentação do pipeline
- Python 3.12+
- Compilador C/C++ (Visual Studio Build Tools no Windows, GCC no Linux)
- Git
- Clone o repositório:
git clone https://github.com/Pagnottinha/TCC-CMS-PLN.git
cd TCC-CMS-PLN- Crie um ambiente virtual:
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows- Instale as dependências:
pip install -r requirements.txt- Compile as extensões Cython:
python setup.py build_ext --inplace- Configure as variáveis de ambiente:
cp .env.example .env
# Edite o arquivo .env conforme necessário- Preparar o corpus:
python corpus.py- Tokenizar o corpus:
python tokenizar_corpus.py- Analisar corpus tokenizado (opcional):
python analise_tokenizado.pyEtapa realizada para obter a média de tokens por parte. Sendo assim, com base na média de tokens por parte é possível substituir os parâmetros das estruturas em factory_estruturas.py.
- Executar benchmark:
python benchmark_estruturas.py- Analisar resultados:
- analisar_corpus.py: análise do pré-processamento realizado no corpus;
- verificar_zipf.py: análise da lei de zipf no corpus pré-processado;
- gerar_grafico_mre_frequencia.py: análise sobre os MRE de cada frequência dos tokens em cada estrutura;
- comparar_ranking_ppmi.py: comparação das estruturas sobre o ranking de PPMI;
- ESTRUTURAS.md - Documentação das estruturas probabilísticas implementadas
- PIPELINE.md - Documentação do pipeline de processamento
| Estrutura | Descrição | Características |
|---|---|---|
| CMS-CU | Count-Min Sketch com Conservative Update | Baseline, contadores 32-bit |
| CML8S-CU | Count-Min-Log Sketch | Contadores logarítmicos 8-bit |
| CML8HS-CU | CML8S com camadas lineares | Híbrido linear/logarítmico |
| CL-CU/MU | Count-Less | Camadas hierárquicas expansíveis |
| CMTS-CU | Count-Min Tree Sketch | Árvore de bits compacta |
Variáveis de ambiente (.env):
SEED=42 # Semente para reprodutibilidade
JANELA=3 # Tamanho da janela de coocorrênciasOs resultados dos benchmarks são salvos em resultados_benchmark/:
relatorio_completo.json- Métricas detalhadasCounter/- Contagens exatas (ground truth){estrutura}/- Estruturas salvas por parte
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.