Mahout. Machine Learning - QConSP · 2016. 8. 26. · Exemplo de um recorte de convocação:...
Transcript of Mahout. Machine Learning - QConSP · 2016. 8. 26. · Exemplo de um recorte de convocação:...
Machine Learning
Classificação de documentos com Apache Mahout.
● Contexto
● Objetivo
● Solução
● Resultados
● Prática
Agenda
Contexto
Uma assessoria jurídica separa, classifica e encaminha convocações judiciais
aos advogados associados. Seu processo de trabalho, inclui:
● 200+ diários oficiais publicados entre 06h e 11h.
● Recortar as convocações.
● Classificação manual (cerca de 80% - 14M / mês).
Contexto
Exemplo de um recorte de convocação:
“Fulano Beltrano dos Santos OAB: 119354/SP-A" T.R.T. 00027626820125020072
RO 72ª VT de São Paulo. EDITAL Nº 0006506/2015 - PAUTA DE JULGAMENTO.
Ciclano de Souza Silva X Claro S/A , Xpto Teleservicos S.A.”
Contexto
Exemplo de um recorte de convocação:
“Fulano B Santos OAB: 119354/SP-A" T.R.T. 00027626820125020072 RO 72ª VT
de São Paulo. EDITAL Nº 0006506/2015 - PAUTA DE JULGAMENTO. Ciclano de
Souza Silva X Claro S/A , Xpto Teleservicos S.A.”
Contexto
Exemplo de um recorte de convocação:
“Fulano B Santos T.R.T. 00027626820125020072 RO 72ª VT de São Paulo. EDITAL
Nº 0006506/2015 - PAUTA DE JULGAMENTO. Ciclano de Souza Silva OAB:
119354/SP-A" X Claro S/A , Xpto Teleservicos S.A.”
Contexto
Os principais objetivos deste processo são:
● Minimizar spam (?%) e classificação crítica (< 1%).
● Diferencial de mercado.
Contexto
O volume de trabalho diário dificulta a evolução do processo:
● “Afoga” o departamento de TI e os analistas.
● Muitos “incêndios”, sobra pouco tempo para atividades gerenciais.
Contexto
Objetivo
Melhorar a classificação automatica (~20%) para “desafogar” a TI, os analistas
e a gestão. Premissas, riscos e desafios devem ser considerados:
● [P]: Criar um classificador que complemente o que já existe.
● [R]: Spam e classificação crítica (diferencial de mercado).
● [D]: Ser eficiente sem comprometer o tempo disponível da classificação
automática.
Objetivo
Objetivo
Classificação Aut. Complementar
Inteligência Artificial
Download dosDiários Oficiais
Classificação Aut.Existente
ClassificaçãoManual
Solução
Desenvolver um classificador baseado em inteligência artificial, visto que
regras conhecidas (determinísticas ~20%) já são tratadas. Inicialmente
pensamos em:
● Classificação direta (aprendizado supervisionado).
http://www.infoq.com/br/presentations/machine-learning-em-java-com-apache-mahout
Solução
Experimentos mostraram que os documentos (convocações judiciais) tinham
baixa ocorrência de:
● Palavras específicas de contexto.
● Sequência estruturada (bigramas e trigramas).
● E ai... Desastre!
● Então...
Solução
#fiqueiputo
Suspeita?
Solução
Encontrar uma redução que maximize as diferenças entre os dados, para isso
tentamos:
● Redução de PCA [:(
● Quebrar as convocações em sentenças (separação mais estruturada), para
facilitar a classificação de termos e grupos de substantivos / grupos
verbais. Ex:
Solução
FULANO CICLANO DA SILVA São Paulo 44ª Vara do Trabalho 00006175520145020044
(00617201404402002). BELTRANO DA SILVA, Empresa Brasileira de Cosmeticos LTDA Intimação.
Comparecer na secretaria em 5 dias a fim de retirar alvara.
Sentenças:
1. FULANO CICLANO DA SILVA São Paulo 44ª Vara do Trabalho 00006175520145020044
(00617201404402002).
2. BELTRANO DA SILVA, Empresa Brasileira de Cosmeticos LTDA Intimação.
3. Comparecer na secretaria em 5 dias a fim de retirar alvara.
Solução
FULANO CICLANO DA SILVA São Paulo 44ª Vara do Trabalho 00006175520145020044
(00617201404402002). BELTRANO DA SILVA, Empresa Brasileira de Cosmeticos LTDA Intimação.
Comparecer na secretaria em 5 dias a fim de retirar alvara.
Sentenças:
1. FULANO CICLANO DA SILVA São Paulo 44ª Vara do Trabalho 00006175520145020044
(00617201404402002).
2. BELTRANO DA SILVA, Empresa Brasileira de Cosmeticos LTDA Intimação.
3. Comparecer na secretaria em 5 dias a fim de retirar alvara.
Solução
FULANO CICLANO DA SILVA São Paulo 44ª Vara do Trabalho 00006175520145020044
(00617201404402002). BELTRANO DA SILVA, Empresa Brasileira de Cosmeticos LTDA Intimação.
Comparecer na secretaria em 5 dias a fim de retirar alvara.
Sentenças:
1. FULANO CICLANO DA SILVA São Paulo 44ª Vara do Trabalho 00006175520145020044
(00617201404402002).
2. BELTRANO DA SILVA, Empresa Brasileira de Cosmeticos LTDA Intimação.
3. Comparecer na secretaria em 5 dias a fim de retirar alvara.
Solução
Pré-processar os textos, permitiu caracterizar convocações interessantes e
convocações a serem descartadas. Isso envolveu:
● Detectção de sentenças.
● Classificação de termos.
● Chunking (dividir texto em palavras sintaticamente correlacionadas, tais
como: grupos de substantivos e grupos verbais).
Solução
Preparação das amostras:
● Apache Open NLP○ Separação de sentenças
○ Classificação de termos
○ Chunking
● Scripts próprios○ Disparo e coleta do processamento.
Solução
Classificação de intimações:
● Apache Mahout○ Sequencialização das amostras
○ Vetorização dos dados de treino e teste (bag of words)
○ Treinamento
○ Classificação
● Scripts próprios○ Disparo das rotinas de processamento.
Solução
Resultados
APROVADOS DESCARTADOS ACERTOS
APROVADOS 64.934 667 98.98%
DESCARTADOS 40.300 192.388 82.68%
DESCARTES ERRADOS 0.22%
APROVAÇÕES ERRADAS 13.51%
● Os resultados se mostraram estáveis (pouca variação) em produção
(medição em paralelo com processo existente).
● Analisar manualmente as aprovações resulta em 64.7% menos trabalho.○ Minimizar o número de spam
○ Risco: Assume 0.22% de notificações não recebidas.
● Analisar manualmente as reprovações resulta em 35.3% menos trabalho.○ Minimizar o número de notificações não recebidas.
○ Assume que 13.51% dos associados receberão spam.
Resultados
Prática
● Bag of words○ Sequencialização
○ Vetorização
● Treinamento
● Teste
Prática
Porquê Naive Bayes?
Prática
Porquê treinar o modelo via linha de comando?
● Facilidade e agilidade de manutenção.
● Tratar o treinamento como parte da infraestrutura○ Subir máquina em núvem
○ Carregar imagem Docker
○ Executar script
○ Descarregar modelo treinado
○ Encerrar máquina
Prática
Classificação de novos dados:
...
model = NaiveBayesModel.load("/root/files/model")
label = model.predict(“newFilePath”)
...
Prática
Obrigado