Pular para o conteúdo principal

Aprendizagem de Máquina com WEKA


Estudo de Caso: Aplicação de Aprendizagem de Máquina para a classificação das Classes Processuais das Turmas Recursais do TJPI

Contextualização do Ambiente

Diariamente usuários do Sitema de Controle Processual das Turmas Recursais do TJPI entram em contato com o Service Desk tentando solucionar dúvidas de como fazer a classificação correta das petições iniciais.
Essa classificação é realizada de acordo com as Tabelas Processuais Unificadas do Conselho Nacional de Justiça – CNJ, que foram criadas com o objetivo de padronizar e uniformizar a taxonomia e terminologias dos processos de todos os Tribunais do Brasil. Porém, juntamente com os benefícios criados pela implantação dessas tabelas veio à dificuldade dos usuários conseguirem realizar tal classificação, tendo em vista que para o completo entendimento e domínio da mesma se faz necessário um amplo conhecimento dos códigos processuais.
Essa dificuldade deve-se, principalmente, ao fato de que boa parte dos servidores responsáveis por realizar essa atividade possui apenas o nível médio e nenhuma formação complementar em Direito.
Surge daí a ideia de utilizar a Aprendizagem de Máquina, mais especificamente a Mineração de Dados, para tentar facilitar as atividades de classificação.

Abordagem utilizada

A primeira ideia era obter as petições iniciais existentes na base de dados, extrair o texto e realizar o treinamento, tendo em vista que as petições existentes já se encontram classificadas corretamente.
Os arquivos disponíveis para realizar essa atividade foram digitalizados sem o reconhecimento de caracteres (OCR), com a menor qualidade possível (300 dpi e modo de cor preto e branco), visando a economia de espaço, e salvos no formato PDF.
O primeiro obstáculo enfrentado foi encontrar um software Open Source para realizar o OCR que garantisse uma boa taxa de acerto. Os seguintes softwares para OCR foram encontrados:

Devido o suporte a múltiplas línguas, principalmente a língua portuguesa, o Tesseract obteve um melhor desempenho, porém a entrada de dados é um arquivo de imagem.
Dessa forma foi necessário realizar a conversão dos arquivos PDF para arquivos de imagens. O formato de saída escolhido foi o TIFF (Tagged Image File Format) por realizar a compressão sem perda de dados. A desvantagem desse formato é o tamanho final do arquivo que é bem superior a outros formatos de imagens conhecidos como JPEG e PNG, o que ocasionou diversos estouros de memória da JVM (Máquina Virtual Java) durante a conversão de arquivos PDF com tamanho superior a 10 MB, por isso se fez necessário excluir do conjunto de treinamento as petições com tamanho superiores a esse.
O processo de extração de texto das imagens mostrou-se muito demorado, necessitando em média de 5 segundos para cada página. Cada petição possui em média 20 páginas, o que nos leva a um tempo médio de 100 segundo por petição.
A análise dos textos extraídos revelou uma grande quantidade de caracteres irrelevantes que o software gerou ao se deparar com arquivos contendo imagens, carimbos, assinaturas e outros gráficos que não representam caracteres. A saída seria a remoção desses ruídos, para enfim ter o conteúdo necessário para aplicar os algoritmos de classificação.
Entretanto, por questões de tempo essa ideia não pôde seguir, pois ainda seria necessário um pré-processamento para a remoção de palavras irrelevantes, análise léxica e seleção de termo de indexação para enfim realizar a classificação, como ilustra a imagem abaixo.


A segunda ideia foi tentar utilizar os demais dados dos iniciais dos processos existentes para realizar a classificação. Os mais relevantes levantados foram:
  •  Natureza (Cível e Criminal)
  • Assunto do Processo (Classificado pelas Tabelas Processuais Unificadas)
  • Classe Processual (Objetivo da classificação)


Classificação com WEKA

Os dados necessários foram extraídos diretamente da base de dados, através da conexão com o banco de dados SQL Server 2008, portanto nenhum arquivo .arff foi gerado para esse problema. A quantidade de instâncias (linhas do banco de dados) utilizadas foram 3882.
Após a obtenção dos dados iniciou-se a tentativa de classificação, os seguintes algoritmos foram utilizados:
  • Árvore de decisão - J48
  • Vizinhos mais próximos (k-nearest neighbor) – Ibk
  • Rede Bayesiana - BayesNet


Resultados

Os três algoritmos utilizados mostraram-se bastantes eficientes na classificação dos processos. A tabela a seguir apresenta os resultados:


O melhor desempenho ficou com o algoritmo BayesNet, a rede bayesiana criada pelo algoritmo é bastante simples, como podemos ver na imagem abaixo.



Através da Confusion Matrix podemos verificar as classificações incorretas que foram realizadas:


Os Mandados de Segurança obtiveram um índice de acerto muito baixo, quase 50% foram classificados incorretamente, um dos possíveis motivos para esse desempenho fraco é que essa classe é bastante genérica. Processos com essa classificação podem ter os mais variados tipos de assunto.

Conclusão

Esse estudo de caso discutiu a aplicação de Aprendizagem de Máquina em um problema real, apresentando as abordagens utilizadas e os resultados obtidos com a aplicação dos algoritmos de classificação.
A abordagem inicial continua interessante e será estudada mais detalhadamente, mas nesse momento, foi inviável para esse estudo de caso.
A segunda abordagem foi bastante satisfatória, através dela conclui-se que a classificação dos processos pode ser realizada com um ótimo índice de acerto, bastando para isso possuir dados mais simples de se obter: a natureza e o assunto do processo.



Comentários

Postagens mais visitadas deste blog

Hot swapping no Eclipse usando DECVM

Recentemente, após um amigo avisar que a versão final do framework VRaptor4 estava disponível, resolvi atualizar o projeto que acabávamos de começar e que utilizava a versão anterior desse framework. Após alguns dias sofrendo com a migração para a nova versão, finalmente, tudo estava funcionando e continuamos o desenvolvimento. A nova versão do VRaptor trouxe mudanças significativas, a principal delas foi a utilização do CDI 1.1 como container de DI (Dependency Injection).  Como estávamos utilizando o Tomcat 8 tivemos que habilitar o suporte ao CDI utilizando o Weld . Logo vimos que o tempo de inicialização do servidor estava muito demorado, cerca de 30 segundos, e a cada modificação realizada um restart do servidor acontecia e lá se iam mais 30 segundos. Ao final do dia, o tempo perdido com o redeploy da aplicação era bastante considerável, gastávamos cerca de 1/5 do dia só esperando as modificações realizadas surtirem efeito. Não conformado, resolvi buscar uma forma de di...

Quebrar o quê?

Por: Rafael Viana --> Minha mãe realiza trabalhos de artesanato e sempre eu ou meu pai fotografamos tais trabalhos para servir de referência para futuros clientes ou até mesmo para ela. Tento organizar as fotos por temas, como por exemplo lembrancinhas de aniversário, peças de anatomia, pois ela mesma diz “eu não entendo nada dessas coisas de computador”. Ontem aconteceu algo que chamou minha atenção e me deixou bastante intrigado. Narrarei o fato nos próximos parágrafos e irei mostrar algumas conclusões interessantes sobre o ocorrido. Eu e minha mãe, realizávamos um levantamento de todas as fotos e ela me acusou de desorganizar as fotos e que eu também tinha sumido com algumas fotos que haviam sido tiradas recentemente. Esse levantamento me fez sugerir que ela mesma catalogasse as fotos ou que ela pelo menos participasse de tal catalogação. Também sugeri que ela colocasse tais fotos na internet, coisa que só é feita por mim, pois como ela mesma diz “eu não entendo nada des...