Gosto de trabalhar com Limpa Fossa em Valinhos. Quanto à Visão por Computador, na PNL hoje em dia existem muitos recursos acessíveis e projetos de código aberto, que podemos baixar ou consumir diretamente. Alguns deles são legais e nos permitem acelerar e elevar a outro patamar nossos projetos.
O mais importante que não devemos esquecer é que todos esses instrumentos não são mágicos. Alguns deles declaram alto desempenho, mas eles não são nada se não permitirmos que façam o melhor. Esta é uma dura verdade, especialmente no campo da PNL, onde frequentemente enfrentamos um alto nível de ruído nos dados que é muito difícil de remover (mais difícil do que trabalhar com imagens).
Neste post, proponho minha solução para melhorar a qualidade dos dados textuais à minha disposição. Desenvolvo um workflow que visa limpar os dados AUTOMATICAMENTE e de forma NÃO SUPERVISIONADA. Digo “automaticamente” porque é inútil seguir uma abordagem não supervisionada se tivermos que verificar manualmente o tempo todo os dados para entender o que o modelo produz. Precisamos de certezas e não queremos perder nosso tempo.
O CONJUNTO DE DADOS
Aqui, meu objetivo é ‘limpar’ documentos de pesquisa. Nessa situação, limpar significa segurar a parte relevante do texto, jogando fora pedaços que contenham informações não valiosas. No subconjunto de artigos de aprendizagem de máquina, considero como parte relevante as frases textuais e como inúteis as peças que contêm, em sua maioria, álgebra e notações. O acesso direto a essas peças pode facilitar tarefas como modelagem de tópicos, resumo, armazenamento em cluster e assim por diante.
Encontrei o conjunto de dados ‘NIPS 2015 Papers’ no Kaggle. Eu faço o download diretamente do Paper.csv. Este conjunto de dados contém 403 artigos do NIPS 2015 (Neural Information Processing Systems; uma das principais conferências de aprendizado de máquina do mundo, cobrindo tópicos de aprendizado profundo e visão computacional a ciência cognitiva e aprendizado por reforço).
FLUXO DE TRABALHO
Selecione um artigo e divida-o em frases / parágrafos aplicando um pré-processo básico
Crie embeddings ponderados de frases
Modelização não supervisionada de frases no espaço de incorporação
Detecção e representação de pedaços de texto barulhentos
O poder é fornecido pelo uso de um modelo pré-treinado para incorporação de palavras e seu vocabulário profundo relativo.
PREPROCESSO
Eu calculo um pré-processo padrão removendo números, não caracteres alfanuméricos e palavras irrelevantes de um único papel de interesse. Os pontos-chave aqui são fornecidos pela criação de sentenças / parágrafos. Existem alguns pacotes que fornecem essa funcionalidade; Eu tentei, mas eles não me convenceram muito. Então, eu pessoalmente escrevi minhas próprias funções simples que atendem melhor às minhas necessidades, quando lido com corpus textuais provenientes de documentos inteiros.
EMBEDDINGS DE SENTENÇA
Uma boa representação numérica das frases é fundamental para o sucesso de todo o procedimento. Queremos que as frases significativas sejam semelhantes e mais próximas umas das outras no espaço incorporado, ao mesmo tempo que queremos que as frases com ruído estejam distantes das significativas e também semelhantes entre elas. Para realizar esta etapa crucial, usamos poderosos embeddings de palavras pré-treinados, eu escolhi GloVe.
Criamos embeddings de frases como um meio ponderado de embeddings de palavras no singular. O peso é dado pelo cálculo do TfIdf no corpus de papel composto por frases. Durante o ensembling, para cada palavra em uma frase específica, selecionamos o embedding GloVe relativo (se houver) e o multiplicamos pelo peso da palavra TfIdf. A soma dos embeddings de palavras ponderadas em cada frase é normalizada dividindo-se pela soma dos pesos das palavras TfIdf na frase.
EMBEDDINGS DE SENTENÇA
Uma boa representação numérica das frases é fundamental para o sucesso de todo o procedimento. Queremos que as frases significativas sejam semelhantes e mais próximas umas das outras no espaço incorporado, ao mesmo tempo que queremos que as frases com ruído estejam distantes das significativas e também semelhantes entre elas. Para realizar esta etapa crucial, usamos poderosos embeddings de palavras pré-treinados, eu escolhi GloVe.
Criamos embeddings de frases como um meio ponderado de embeddings de palavras no singular. O peso é dado pelo cálculo do TfIdf no corpus de papel composto por frases. Durante o ensembling, para cada palavra em uma frase específica, selecionamos o embedding GloVe relativo (se houver) e o multiplicamos pelo peso da palavra TfIdf. A soma dos embeddings de palavras ponderadas em cada frase é normalizada dividindo-se pela soma dos pesos das palavras TfIdf na frase.
Calculando os embeddings de frases desta forma, já alcançamos o primeiro resultado importante livremente. Palavras que não estão presentes no vocabulário GloVe (3000000 palavras únicas) não são levadas em consideração (senão no GloVe não existe), ou seja, são termos extremamente incomuns e podemos considerá-los como ruído. Agora imagine uma frase de todos os tokens incomuns, ela termina com uma incorporação de todos os zeros e podemos excluí-la imediatamente.
MODELIZAÇÃO E REPRESENTAÇÃO NÃO SUPERVISIONADA
A criação de embeddings de frase, como acima, é computada para cada frase do corpus. Terminamos com um array de dimensões (N, 300), onde N é o número de sentenças e 300 é a dimensão de incorporação de GloVe. Para gerenciá-los facilmente, reduzimos suas dimensões com PCA e aplicamos, no espaço reduzido, um algoritmo de detecção de anomalias não supervisionadas. Nossas anomalias estão claramente localizadas longe do centro de densidade.
A detecção desses pontos anormais (sentenças) é uma tarefa perfeita para a Floresta de Isolamento. Este modelo de conjunto opera partições do espaço em subgrupos: menor o número de divisões necessárias para isolar uma amostra das outras e maior a probabilidade dessa observação ser uma anomalia.
Nosso trabalho acabou, só falta verificar os resultados! Em amarelo temos as frases valiosas e fora as partes ruidosas do texto. Para alcançar este resultado, só temos que definir o “parâmetro de contaminação”, que nos diz o quão severo somos em jogar informações fora. Abaixo, anexei um exemplo do artigo que acabei de analisar. O primeiro fragmento mostra frases valiosas, que contêm informações úteis.
O segundo fragmento é uma coleção de frases que provavelmente contêm muito ruído.
RESUMO
Neste post, desenvolvo uma solução para limpeza automática de dados de texto. Dado um corpus de texto, somos capazes de selecionar as frases mais valiosas, jogando fora partes de texto barulhentas. Esta solução visa não ser computacionalmente cara; usamos embeddings de palavras pré-treinados e ajustamos um algoritmo simples para detecção de frases de anomalia. Todo o fluxo de trabalho pode ser estendido a uma coleção de corpus de texto, sempre seguindo uma abordagem não supervisionada.