Catalogando Itens com PLN
Nota: uma versão em inglês deste artigo pode ser encontrada em “Classifying Items with NLP”
Texto é uma das formas de dados mais importantes hoje em dia, e uma das mais difíceis de trabalhar. Ao contrário das imagens e audios, textos não são compostos de valores numéricos, além disso, eles podem fornecer informações diferentes dependendo do idioma, do contexto, e até da ordem em que as palavras aparecem. Mas existe uma área de pesquisa que foca em desenvolver ferramentas que possam decifrar desses textos, o Processamento de Linguagem Natural (PLN), que vem avançando bastante ao longos dos anos. Basta ver os avanços do Google Tradutor desde que foi criado.
Muitas empresas já vêm usando estas ferramentas para entender seus clientes e automatizar seus processos. A análise de sentimentos é bastante usada para analisar avaliações de clientes sobre seus produtos. Essas técnicas também são muito usadas em campanhas publicitárias e recomendação de produtos baseado em seus comentários em redes sociais. Ao longo deste artigo vamos mostrar o uso dessas ferramentas para um modelo de classificação de produtos, uma aplicação muito útil para um E-Commerce.
Analisando seu Dataset
A primeira coisa a ser feita em um problema de machine learning é analisar o seu Dataset. Essa análise pode ter informações básicas como tamanho do Dataset e o número de categorias, até coisas mais avançadas como as palavras mais frequentes, tamanho médio dos textos, etc. Para este projeto, usaremos o dataset da Amazon, fornecido pela dataword, que contém em torno de 10mil exemplos de produtos e seus detalhes catalogados. Abaixo temos algumas informações extraídas sobre o dataset citado:
É possível perceber que as categorias não estão balanceadas. Isso pode ser um problema, nosso modelo pode aprender a distribuição dos dados em vez de usar o conteúdo dos textos. Para isso podemos filtrar as categorias com poucos exemplos ou usar técnicas de data augmentation para aumentar o número de exemplos.
Outra coisa legal de analisar é o conteúdo dos seus textos, uma forma de visualizar isso é fazendo uma nuvem das palavras mais utilizadas no dataset. Abaixo temos as 150 palavras mais utilizadas, depois de limpar o dataset como descreveremos mais tarde.
Pré-Processamento
Antes de começar o modelo, vamos fazer uma limpeza dos dados a serem utilizados. Quando trabalhamos com textos, normalmente transformamos todos os caracteres em letra minúscula, removemos acentos, sinais de pontuação e caracteres especiais. Outra remoção que fazemos é a de stopwords, palavras como artigos, preposições, dentre outros que são muito comuns mas não trazem quase nenhuma informação para o texto. Vale lembrar que cada idioma tem um conjunto de stopwords diferente.
Depois de limpar o texto, precisamos transformar nossos textos em valores numéricos para que nossos modelos consigam usá-los. Podemos resumir esta etapa, chamada de Embedding, em duas atividades: tokenização e vetorização. A primeira consiste limitar o vocabulário do seus textos. Normalmente limitamos o tamanho deste vocabulário para um número máximo de 20mil tokens, que neste caso criaremos a partir palavras. A segunda consiste em definir valores numéricos para esses tokens de forma que seu modelo de classificação possa trabalhar com esses texto e caracteriza-los.
A forma mais simples de vetorização é usando o conceito de bag of words. Nele cada palavra tem uma informação por si só e não informa o contexto em que ela está inserida. Ou seja, basta atribuir um valor para cada palavra de dentro do texto, podemos usar uns e zeros para dizer se ela aparece ou não no texto, contar quantas vezes ela aparece ou ver a relação de sua frequência no texto com sua frequência em todo o dataset (tf-idf).
Outra forma mais elaborada de vetorização é analisar o contexto em que cada palavras está inserido. Para isso transformamos cada palavra do texto em um vetor de palavras. Cada elemento desse vetor representa um token, normalmente usamos os 100 mais relevantes, e o seu valor é baseado em um score que relaciona a palavra com o token. Existem diversos algoritmos hoje dia que analisam vários textos e criam um para cada palavra um vetor, sendo o mais famoso o Word2Vec.
Modelos de Classificação
Catalogar os produtos de uma loja é extremamente útil tanto pra ajudar seus clientes, como para agrupar seus produtos e gerar melhores informações sobre eles. Por mais importante que seja, é um trabalho mecânico e cansativo, que pode ser automatizado com as ferramentas que citamos acima.
Para classificar esses produtos podemos usar seus nomes, descrições, detalhes técnicos, todos estes textos com informações sobre o mesmo. Baseado no tamanho dos textos e do seu dataset podemos determinar o quão sofisticado nosso modelo deve ser. Antes de utilizar uma rede neural, é sempre bom criarmos um benchmark com modelos mais simples. É muito comum em problemas envolvendo textos usar o método chamado Multinomial Naive Bayes, um modelo probabilístico. Depois de estabelecer uma "meta" a ser alcançada, podemos partir para modelos mais sofisticados. Neste caso usaremos CNNs e RNNs que são as melhores arquiteturas para trabalhar com dados que dependem de contexto. Mais detalhes sobre as arquiteturas usadas e sua implementação podem ser encontradas no link do projeto no GitHub no final do artigo.
Podemos observar que tivemos resultados bem satisfatórios. Apesar de não haverem melhoras significativas do primeiro modelo para os mais complexos, há a possibilidade de fazer ajustes na arquitetura e hiper-parâmetros para que os resultados fiquem ainda melhores, uma característica limitada nos primeiro modelo.
Conclusões
Apesar se não serem tipos de dados fáceis de trabalhar, textos são extremamente úteis e podem agilizar diversos processos dentro de uma empresa. Hoje em dia, existem diversas ferramentas que facilitam trabalhar com esse tipo de dado, cabe a nós sermos criativos e descobrir onde podemos usá-las.
Referências
Google Machine Learning Guide, Text Classification