quarta-feira, 25 de maio de 2011

Document classification with Naive Bayes classifier

Uma solução viavel para a classificação de documentos é o algoritmo de Naive Bayes. Classificadores Naive Bayes pode ser treinado de forma muito eficiente em um ambiente de aprendizado supervisionado.
O maior desafio foi codificar os objetos de suporte que possibilitarao o aprendizado e melhoramento continuo dos padrões, efetuando novos mapeamento sob demanda.
O objetivo deste projeto é automatizar 100% das tarefas, eliminando a necessidade de monitorar e treinar para novos padrões de documentos. Os proprios usuarios estarão trabalhando para o continuo aprendizado da rede. Por isso uma tecnica estatistica foi usada para que a classificação ocorresse analisando tendencias submetida a uma arvore de decisão com opção de rankeamento para cada usuario/conjunto de informações.
Apos estar proximo de concluir o projeto, lendo alguns artigos, encontrei algumas tecnicas mais promissoras como Gradient Boosting. Dizem que o seu projeto/produto esta obsoleto no dia que esta pronto mas desta vez ficou obsoleto antes de terminar :o(
Um outro desafio foi criar os spiders para extrair as informações dos mais diversos tipos de documentos. Por exemplo, em um sistema de contabilidade temos alguns documentos como dacon, dctf, dipj, darf, das, contratos sociais, balanços, sped, sefip, etc, etc, etc... que podem estar em diferentes formatos digitais como PDF, Doc, XLS, JPeg, Tiff, etc..
A premissa é receber os documentos, sabendo ja o ambiente de negócio, chavear para um subset de padrões extraindo os atributos para a classificação e submeter ao algoritmo.
Os documentos em PDF usei algumas libs do projeto apache, ja para o OCR o Tesseract, atualmente suportado pelo Google e acredito que é o mesmo OCR usado no GDocs. Precisei criar um dicionario para o pt-BR na versão 3.0 e nao consegui ainda ajusta-lo para um resultado satisfatório para documentos em resolução não muito boa, obrigando a scannear com 300DPI. Como 300DPI não é nada muito excessivo esta tarefa virou um `spike` de baixa prioridade. A implementação do algoritmo é trivial, existem varia bibliotecas prontas mas preferi fazer a minha própria.

Nenhum comentário: