Py-classifica-legal

Gostaria de compartilhar com vocês o meu projeto :brain: py-classifica-legal :robot:. O intuito do programa é auxiliar em uma melhor governança de dados públicos, por meio de sugestõe de classificações de normas infraconstitucionais a partir de suas respectivas ementas. Como sabemos que aqui é uma comunidade mão na massa, eu gostaria de compartilhar com vocês toda a minha jornada de desenvolvimento. Incorporamos o espírito unicórnio :unicorn_face: e construímos o produto de ponta a ponta e documentamos tudo em nosso blog em uma série de posts.

  1. Na primeira etapa fizemos a coleta da base a ser usada no projeto

  2. No próximo post definimos o escopo do projeto, bem como realizamos um recorte na base.

  3. O terceiro post é uma das etapas cruciais de todo projeto, a construção adequada dos datasets de treino, validação e teste.

  4. Na próxima fase relatamos tudo que deu ERRADO no nosso treinamento de machine learning.

  5. Nesse, ressurgirmos das cinzas, e treinamos um classificador a partir de um language model.

  6. O próximo passo ficou a cargo do deploy da solução, utilizamos desde fastapi, docker e tudo o mais para levar a POC para produção.

  7. Por fim, nesse post apresentamos como construímos o frontend da aplicação usando o streamlit. Ufa! É isso aí! Ao longo dessa série pudemos ver como se deu a construção de um projeto de data science ponta a ponta! Espero que vocês gostem de conhecer essa jornada, tanto quanto eu gostei de caminhá-la. Grande Abraços!

1 Curtida

Fantástico, @netoferraz! :exploding_head: :tada: :clap: :clap: :clap:

Estou lendo e acompanhando aos poucos, ainda estou na segunda postagem. Mas achei muito legal você documentar o processo todo.

Encontrei o código-fonte da aplicação no seu repositório aqui. Já pensou em qual licença você vai usar?

Andei brincando com a ferramenta e colei algumas ementas recentes de matérias que recebo de resumo diário do D.O.U. É apenas um caso anedótico, mas ilustrativo:

A ementa recebeu a tag “União Federal”, que é correta. Mas fiquei com a impressão de que deveria ter recebido também a tag “Orçamento Fiscal”, o que não ocorreu.

Provavelmente depois de ler todos os textos terei mais comentários a fazer. Mas, desde já, ficam os meus parabéns! :partying_face:

@herrmann muito obrigado pelos comentários! Começando pela questão da licença, acabou passando batido não ter colocado uma no repo. Mas em geral eu uso MIT nos meu projetos pessoais, mas te confesso que questão de licenciamento não é exatamente algo que eu entenda bem. O meu propósito é ser o mais permissivo possível para uso do trabalho, caso você tenha alguma sugestão, ou entenda que a MIT atenda ao propósito me dá um toque.

Quanto ao exemplo dado, eu concordo com o seu comentário. A curiosidade que me despertou foi qual probabilidade associada a tag ORÇAMENTO FISCAL o modelo obteve? Já que ele não foi superior ao threshold default de 0.50, eu esperaria algo bem próximo a isso.

1 Curtida

Dando continuidade ao seu questionamento, eu fui verificar as probabilidades associadas a predição de cada tag para a PORTARIA Nº 17.531, DE 22 DE JULHO DE 2020 que é o caso em análise, seguem elas:

ACORDO INTERNACIONAL tensor(0.0033)
ALTERAÇÃO tensor(0.0385)
AMBITO tensor(0.3067)
APROVAÇÃO tensor(0.0141)
AREA PRIORITARIA tensor(3.8529e-05)
ATO tensor(0.0010)
AUTORIZAÇÃO tensor(0.0169)
BRASIL tensor(0.0077)
COMPETENCIA tensor(0.3188)
COMPOSIÇÃO tensor(0.0212)
CONCESSÃO tensor(0.0050)
CORRELAÇÃO tensor(0.0601)
CREDITO SUPLEMENTAR tensor(0.0075)
CRIAÇÃO tensor(0.0073)
CRITERIOS tensor(0.0605)
DECLARAÇÃO tensor(0.0004)
DESAPROPRIAÇÃO tensor(0.0001)
DESTINAÇÃO tensor(0.0362)
DISPOSITIVOS tensor(0.0134)
DOTAÇÃO ORÇAMENTARIA tensor(0.0513)
EMPRESA DE TELECOMUNICAÇÕES tensor(0.0006)
ESTADO DE MINAS GERAIS MG tensor(0.0006)
ESTADO DE SÃO PAULO SP tensor(0.0004)
ESTADO DO PARANA PR tensor(0.0007)
ESTADO DO RIO GRANDE DO SUL RS tensor(0.0011)
EXECUTIVO tensor(0.0588)
EXECUÇÃO tensor(0.0035)
FIXAÇÃO tensor(0.0388)
FUNCIONAMENTO tensor(0.0037)
HIPOTESE tensor(0.0251)
IMOVEL RURAL tensor(0.0001)
INSTITUTO NACIONAL DE COLONIZAÇÃO E REFORMA AGRARIA INCRA tensor(0.0002)
INTERESSE SOCIAL tensor(0.0004)
MUNICIPIO tensor(0.0015)
NORMAS tensor(0.0267)
OBJETIVO tensor(0.0189)
ORÇAMENTO DA SEGURIDADE SOCIAL tensor(0.0346)
ORÇAMENTO FISCAL tensor(0.0272)
PAIS ESTRANGEIRO tensor(0.0010)
RADIODIFUSÃO tensor(0.0008)
REFORMA AGRARIA tensor(8.3496e-05)
REFORÇO tensor(0.0169)
RENOVAÇÃO tensor(0.0004)
SERVIÇO tensor(0.0077)
TEXTO tensor(0.0011)
UNIÃO FEDERAL tensor(0.6603)
UTILIDADE PUBLICA tensor(0.0002)

E para minha surpresa as probabilidades relativas as tags orçamentárias foram muito baixas:

ORÇAMENTO DA SEGURIDADE SOCIAL tensor(0.0346)
ORÇAMENTO FISCAL tensor(0.0272)

A segunda tag com maiores chances de ter aparecido foi AMBITO tensor(0.3067). Agora a questão porque algo claramente orçamentário não foi associado a isso? A minha primeira hipótese seria que as ementas de dispositivos infralegais - como é o caso da Portaria - tenham uma estrutura de redação diferente do corpus que foi usado para treinamento.

E você tem alguma opinião a respeito?

1 Curtida

São realmente surpreendentes essas probabilidades, @netoferraz.

Acho que a sua hipótese faz sentido. É provável que tipo de Portaria nem mesmo esteja presente na base do LexML.

Não sei como está hoje mas, há alguns anos atrás, quando fui atrás da informação, o único sistema do então Ministério do Planejamento que tinha integração com o LexML era o Conlegis (acho que hoje se chama Sigepe Legis), que trata exclusivamente de normas infralegais da área de recursos humanos. Então uma portaria da área do orçamento estaria no SIOP Legis, que nunca teve integração com o LexML (embora eu sempre tenha reforçado com pessoas da área a importância de se fazer essa integração).

Por outro lado, mesmo assim, a presença de expressões como “planos orçamentários” e “Leis Orçamentárias Anuais”, deveria puxar uma probabilidade maior para essas tags, mesmo se fossem utilizadas métricas mais simples que o seu modelo, como o TF-IDF. Eu sugeriria dar uma olhada nos documentos que possuem essa tag.

  1. Quantos documentos têm a tag ORÇAMENTO FISCAL? Um número muito reduzido de documentos (por exemplo, se houver apenas a LDO e LOA de cada ano e o PPA de cada período, assim como os respectivos projetos de lei que os aprovaram, seriam poucos documentos) pode causar um problema de dataset desbalanceado.
  2. Os documentos que têm a tag ORÇAMENTO FISCAL possuem as expressões “plano orçamentário” e “Leis Orçamentárias Anuais”? Se não possuírem, e tiverem apenas “Lei Orçamentária Anual”, no singular, talvez um pré-processamento que inclua uma etapa de lematização possa resolver o problema. Por outro lado, se você estiver utilizando um modelo de linguagem ou a codificação Word2vec, a lematização pode ser uma etapa supérflua ou até que prejudique o desempenho. Desculpe, ainda não tive tempo de ler todos os seus artigos, parei no segundo. Provavelmente a metodologia utilizada está clara lá. :slight_smile:
1 Curtida