{"id":50513918,"url":"https://github.com/artdelpi/classificador-compras-gov","last_synced_at":"2026-06-02T22:03:36.548Z","repository":{"id":359853056,"uuid":"1178919260","full_name":"artdelpi/classificador-compras-gov","owner":"artdelpi","description":"Modelo BERT pré-treinado em português e com Fine Tuning para classificar descrições de materiais em grupos. Treinado com um dataset de 50k registros extraídos da API do compras.gov.","archived":false,"fork":false,"pushed_at":"2026-05-23T18:38:00.000Z","size":16956,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T20:21:37.941Z","etag":null,"topics":["catmat","compras-publicas","comprasgov","embeddings","ncm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/artdelpi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-11T13:58:46.000Z","updated_at":"2026-05-23T18:39:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/artdelpi/classificador-compras-gov","commit_stats":null,"previous_names":["artdelpi/classificador-compras-gov"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/artdelpi/classificador-compras-gov","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdelpi%2Fclassificador-compras-gov","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdelpi%2Fclassificador-compras-gov/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdelpi%2Fclassificador-compras-gov/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdelpi%2Fclassificador-compras-gov/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/artdelpi","download_url":"https://codeload.github.com/artdelpi/classificador-compras-gov/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/artdelpi%2Fclassificador-compras-gov/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33838221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["catmat","compras-publicas","comprasgov","embeddings","ncm"],"created_at":"2026-06-02T22:03:35.312Z","updated_at":"2026-06-02T22:03:36.541Z","avatar_url":"https://github.com/artdelpi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Classificador NCM para Compras Públicas\n\n**DISCLAIMER**: esse é um projeto pessoal que não funciona perfeitamente e está em aprimoramento. Ir na seção **\"Estado atual do modelo\"** pra ver o desempenho atual.\n\nA proposta desse repositório é oferecer um modelo de embeddings fine-tunado que gera vetores próximos pra descrições de CATMATS e NCMs correspondentes, sugerindo o código de NCM mais provável. Montei o dataset compilando dados do Ministério da Saúde e extração da API do comprasgov. \n\nComo a maioria dos mapeamentos era de itens relacionados à saúde, precisei gerar uma minoria de dados sintéticos com o llama:7b pra que CATMATS de outras categorias tivessem algum tipo de representatividade no treino!!\n\n## Como funciona\n\n1. Um modelo de embeddings (BGE-M3 fine-tunado) transforma descrições em vetores\n2. A descrição de um CATMAT é vetorizada e comparada contra todos os subitens NCM (mais de 10k possibilidades...)\n3. O resultado é uma lista rankeada de NCMs com score de similaridade\n\n## Estado atual do modelo\n\n| Métrica | Valor |\n|---|---|\n| Capítulo P@1 (2 dígitos)| 95.1% |\n| Posição P@1 (4 dígitos) | 90.0% |\n| Subitem P@1 (8 dígitos) | 32.8% |\n| Subitem R@5 (8 dígitos) | 51.5% |\n\nO modelo lista até 5 possibilidades mais prováveis de NCM para capítulo, posição e subitem, dada uma descrição de CATMAT. Ele, atualmente, é excelente em detectar o capítulo (95.1% de acerto considerando unicamente o capítulo mais provável) e posição(90%); o gargalo é obter o subitem, que tem mais de 10k possibilidades.\n\n## Pesos do modelo\n\nOs pesos não estão no repositório pq são muito pesados. Para usar o classificador você tem duas opções:\n\n1. **Treinar do zero** rodando o fluxo de retreino abaixo (treinei usando uma RTX 5090 com 32GB de VRAM).\n2. **Entrar em contato com o email artdelpi@gmail.com**, que eu disponibilizo os pesos num link do onedrive.\n\nOs pesos devem ficar em `modelo_retrieval/`. Além do `model.safetensors` e configs do modelo, a pasta precisa dos arquivos `.npy` de índice gerados pelo `indexar.py`.\n\n## Retreino (opcional)\n\n```bash\npython src/treinar.py # fine-tuna o modelo\npython src/indexar.py # indexa os NCMs com o modelo novo\npython src/avaliar.py # mede as métricas\n```\n\n## Como rodar\n\nDado que já tem os pesos do modelo treinado, faça:\n\nInstala as dependências:\n\n```bash\npip install -r requirements.txt\n```\n\nClassificador interativo:\n\n```bash\npython src/classificar.py\n```\n\nAvaliação do modelo no dataset de teste:\n\n```bash\npython src/avaliar.py\n```\n\n## Dataset\n\nOs arquivos estão comprimidos em gzip:\n\n- `dataset/dataset.csv.gz`: pares (descrição CATMAT, NCM) usados no treino\n- `dataset/negativos.csv.gz`: triplas com hard negatives para o treino\n- `dataset/tabela_ncm.csv.gz`: tabela NCM completa com hierarquia e caminhos\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartdelpi%2Fclassificador-compras-gov","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartdelpi%2Fclassificador-compras-gov","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartdelpi%2Fclassificador-compras-gov/lists"}