Pontos Principais
- Uma tendência recente na análise de textos vai além da detecção de tópicos e tenta identificar a emoção por trás de um texto. Isso é chamado de análise de sentimentos, ou mineração de opinião e IA de emoções.
- A análise de sentimentos é amplamente aplicada em aplicações de voz do cliente (VOC), como na análise de respostas de um questionário ou comentários em uma avaliação.
- Extrair sentimento de um texto pode ser feito usando técnicas como processamento de linguagem natural (NLP), linguística computacional e mineração de texto.
- A mineração de texto pode ser executada usando machine learning ou alguma abordagem lexical.
- A abordagem lexical depende das palavras no texto e do sentimento que carregam. Essa técnica usa conceitos de NLP e um dicionário para extrair o tom de voz.
- A abordagem com machine learning precisa de uma coleção de documentos com sentimentos registrados; esta é uma coleção na qual cada documento foi avaliado manualmente e rotulado em termos de sentimento. Após algum pré-processamento, um algoritmo supervisionado por ML é treinado para reconhecer o sentimento em cada texto.
Além de entender o que as pessoas estão falando, às vezes é importante entender o tom de voz.
Análise de sentimentos
Uma tendência relativamente mais recente na análise de textos vai além da detecção de tópicos e tenta identificar a emoção por trás de um texto. Isso é chamado de análise de sentimentos, ou também de mineração de opinião e IA de emoção.
Por exemplo, a frase "Amo chocolate" é muito positiva no que diz respeito ao chocolate como alimento. "Odeio este novo telefone" também dá uma indicação clara das preferências do cliente sobre o produto. Nestes dois casos particulares, as palavras "amor" e "ódio" carregam uma clara polaridade de sentimentos. Um caso mais complexo poderia ser a frase "Não gosto do novo telefone", onde a polaridade positiva de "gosto/gostar" é invertida em uma polaridade negativa pela negação. O mesmo para "Não desgosto de chocolate", onde a negação de uma palavra negativa como "desgostar" traz uma sentença positiva.
Algumas vezes, a polaridade (por exemplo, positividade ou negatividade) de uma palavra depende do contexto. "Estes cogumelos são comestíveis" é uma sentença positiva em relação à saúde. No entanto, "Este bife é comestível" é uma sentença negativa em relação a um restaurante. Às vezes a polaridade de uma palavra é delimitada no tempo, como "gosto de viajar, às vezes". Onde 'às vezes' limita a polaridade positiva da palavra "gosto". E assim por diante, com exemplos mais sutis como "Não penso que esse chocolate seja realmente bom" ou ainda pior como "Este show foi realmente tão fantástico?".
Falamos aqui sobre sentimentos positivos e negativos. No entanto, POSITIVO e NEGATIVO não são os únicos rótulos que podem ser usados para definir o sentimento em uma sentença. Geralmente, todo o intervalo MUITO NEGATIVO, NEGATIVO, NEUTRO, POSITIVO e MUITO POSITIVO é usado. Às vezes, no entanto, rótulos adicionais menos óbvios também são usados, como IRONIA, EUFEMISMO, INCERTEZAS, etc.
Como podemos extrair sentimento de um texto? Às vezes até os humanos não têm certeza da emoção real nas entrelinhas. Mesmo se conseguirmos extrair o recurso associado ao sentimento, como podemos medi-lo? Há várias abordagens para isso, envolvendo NLP, linguística computacional e, finalmente, mineração de texto. Vamos nos preocupar aqui com as abordagens de mineração de texto, que são principalmente duas: uma abordagem com machine learning e uma abordagem lexical.
A abordagem lexical se baseia nas palavras do texto e no sentimento que carregam. Essa técnica usa conceitos de NLP e um dicionário para extrair o tom de voz.
A abordagem baseada em ML precisa de uma coleção de documentos com sentimentos marcados; esta é uma coleção na qual cada documento foi avaliado manualmente e rotulado em termos de sentimento. Após algum pré-processamento, um algoritmo supervisionado por ML é treinado para reconhecer o sentimento em cada texto.
Uma mão na roda
KNIME Analytics Platform - Usaremos as ferramentas KNIME de análise de dados para mostrar como desenvolver uma solução de análise de sentimentos.
O KNIME Analytics Platform é um software de código aberto de ciência de dados para cientistas de dados, analistas de dados, usuários de big data e analistas de negócios. O KNIME abrange todas as suas necessidades de dados, desde o processamento e a mesclagem de dados até a visualização, desde algoritmos de machine learning à organização de dados, de relatórios à implantação e muito mais. Possui uma interface gráfica para programação visual, o que o torna muito intuitivo e fácil de usar, reduzindo consideravelmente o tempo de aprendizado.
O KNIME foi projetado para ser aberto a diferentes formatos, tipos, fontes e plataformas de dados, bem como a ferramentas externas, como bibliotecas Apache Tika, Keras e Python. Também inclui várias extensões para a análise de dados não estruturados, como textos ou gráficos.
Para processamento de texto, a extensão KNIME Text Processing oferece uma ampla variedade de I/O, limpeza, processamento, stemming, extração de palavras-chave e mais "nós" relacionados ao processamento de texto.
Dadas todas essas características - código aberto, programação visual e integração de processamento de texto sem código - selecionamos o KNIME para implementar um aplicativo de análise de sentimentos.
O KNIME Analytics Platform é de código aberto, ou seja, pode ser baixado e usado gratuitamente.
Baixe o instalável aqui. Em seguida, instale-o seguindo as seguintes instruções em vídeo:
As unidades de computação no KNIME Analytics Platform são pequenos blocos coloridos, chamados "nós". Montar nós em um pipeline, um após o outro, implementa um aplicativo de processamento de dados. Um pipeline é chamado de "fluxo de trabalho" (Figura 1).
O conjunto de dados do IMDb - Para avaliar o sentimento em frases ou textos, precisamos de alguns exemplos, é claro. Usamos aqui o conjunto de dados de críticas de filmes fornecidas pelo IMDb. Esse conjunto de dados inclui 50.000 críticas, cada uma com os sentimentos rotulados manualmente. As classes de sentimentos são equilibradas: 25.000 são críticas negativas e 25.000 são críticas positivas.
Se buscarmos a abordagem lexical da NLP, também precisamos de um dicionário de palavras com o sentimento que carregam; ou seja, pelo menos uma lista de palavras negativas e uma lista de palavras positivas. Conseguimos essas listas do MPQA Corpus.
Se seguirmos a abordagem baseada em machine learning, precisaremos de um rótulo de sentimento para cada um dos nossos exemplos de texto. O conjunto de dados do IMDb fornece um rótulo positivo ou um negativo, avaliado manualmente para cada crítica.
Os fluxos de trabalho
Análise de opinião baseada em NLP - O fluxo de trabalho para a análise lexical de sentimento precisa de:
- Limpeza e padronização dos textos na coleção de documentos.
- Registro de todas as palavras como positivas ou negativas de acordo com as listas de dicionários fornecidas pelo MPQA Corpus (para isso, usamos o nó do marcador de dicionário duas vezes; todas as outras palavras são removidas).
- Extração de todas as palavras restantes de cada documento com um nó "Create BoW".
- Cálculo do score do sentimento para cada documento como:
- Score do sentimento = (no. de palavras positivas - no. de palavras negativas) / (no. de palavras no documento)
- Definição de um valor limite como o score médio de sentimento.
- Em seguida, classificação dos documentos como:
- positivo, se o score do sentimento > valor limite
- negativo, caso contrário
- Se quiser ser mais cauteloso, defina limites positivos e negativos como:
- valores limite = média (score do sentimento) ± stddev (score do sentimento)
Assim, todos os documentos com scores de sentimento entre os dois limites podem ser classificados como neutros.
Figura 1. Abordagem lexical da NLP para análise de sentimentos. Aqui é preciso de um conjunto de regras baseadas em NLP, que a simples modo é baseado em apenas duas listas de palavras: uma lista de palavras positivas e uma lista de palavras negativas. Aqui, as duas listas de palavras são tiradas do MPQA Corpus.
Se atribuirmos cores às resenhas do IMDb de acordo com o sentimento previsto - verde para positivo e vermelho para sentimento negativo - obtemos a tabela de resultados da figura 2.
Nota: Este é um cálculo muito grosseiro do score de sentimento. É claro que regras mais complexas poderiam ser aplicadas, por exemplo, invertendo a palavra polaridade de sentimento após uma negação e levando em conta a evolução temporal da sentença.
Figura 2. Críticas de filmes com sentimento previsto por uma abordagem baseada em NLP: vermelho para sentimento negativo e verde para sentimento positivo.
O fluxo de trabalho na Figura 1, com apenas uma amostra do conjunto original de dados do IMDb, pode ser baixado gratuitamente dos exemplos do KNIME em
Other Analytics Types/Text Processing/Sentiment Analysis Lexicon based Approach
ou dentro do KNIME Analytics Platform na lista EXEMPLOS em:
08_Other_Analytics_Types/01_Text_Processing/26_Sentiment_Analysis_Lexicon_Based_Approach
(veja o vídeo sobre como acessar e baixar fluxos de trabalho do servidor KNIME EXAMPLES).
Análise de sentimentos com base em ML - O aplicativo que implementa a abordagem baseada em machine learning para análise de sentimentos precisa de:
- Novamente, limpeza e padronização dos textos nos documentos.
- Extração de todas as palavras dos documentos com um nó "Create BoW".
- Produção de uma vetorização de texto do documento com um nó "Document Vector".
- Treinamento de um algoritmo de ML para reconhecer textos positivos vs. negativos.
- Avaliação do modelo criado em documentos de teste.
Nota: As fases de treino e teste são implementadas exatamente como em qualquer outra análise baseada em machine learning. Aqui usamos uma árvore de decisão porque o conjunto de dados é muito pequeno, mas qualquer outro algoritmo ML supervisionado pode ser usado: deep learning, random forest, SVM ou qualquer outro.
Figura 3. Abordagem baseada em machine learning para análise de sentimentos. Aqui treinamos uma árvore de decisão, mas qualquer outro modelo ML supervisionado para classificação pode ser usado.
Em vez de extrair todas as palavras do texto, pela velocidade de execução e tamanho da tabela de entrada, poderíamos extrair apenas as principais palavras-chave com um dos nós de extração de palavras-chave. A extração de palavras-chave, no entanto, poderia limitar o conjunto original de palavras e cortar palavras importantes relacionadas ao sentimento, o que poderia levar a um desempenho menor em termos de classificação. Se decidir por um conjunto menor de palavras, apenas certifique-se de que a performance não seja terrivelmente afetada.
O nó "Document Vector", seguindo o estágio de pré-processamento, executa uma codificação simples dos textos de entrada, sem preservar a ordem das palavras na sentença.
O nó "Scorer" no final do fluxo de trabalho calcula um número de medidas de precisão no conjunto de teste produzido anteriormente pelo nó "Partitioning". A precisão final é de cerca de 71%, e o índice de Cohen é 0,42 com base em uma partição aleatória estratificada de 70% contra 30% dos dados originais, respectivamente, para o conjunto de treino e teste.
Normalmente, a abordagem baseada em machine learning funciona melhor do que a abordagem baseada em dicionário, especialmente ao usar a pontuação de sentimento simples adotada em nossa abordagem de NLP. No entanto, às vezes não há escolha porque um conjunto de dados com sentimentos rotulados não está disponível.
Este fluxo de trabalho pode ser baixado gratuitamente nos exemplos KNIME em
Other Analytics Types/Text Processing/Sentiment Classification
ou dentro da KNIME Analytics Platform na lista EXEMPLOS em
08_Other_Analytics_Types/01_Text_Processing/03_Sentiment_Classification
(veja o vídeo sobre como acessar e baixar fluxos de trabalho do servidor de KNIME EXAMPLES).
Implantação
O fluxo de trabalho de implantação para uma análise de sentimentos baseada em NLP é praticamente o mesmo que o fluxo de trabalho de treino da Figura 1. A única diferença ocorre no cálculo do limite. De fato, o limite é calculado apenas no fluxo de trabalho de treino no conjunto de treino e depois é adotado apenas no fluxo de trabalho de implantação.
O fluxo de trabalho de implantação para uma análise de sentimentos baseada em machine learning se parece com qualquer outro fluxo de trabalho de implantação baseado em ML. Os dados são importados e pré-processados conforme necessário, o modelo é adquirido e os dados são inseridos no modelo para produzir previsões que são apresentadas ao usuário final.
Sequências de palavras e Deep Learning
A vetorização de texto utilizada na abordagem baseada em ML transforma palavras em vetores de 0/1 (codificação quente / one-hot encoding), onde 1 mostra a presença de uma palavra e 0 a sua ausência. A sequência de tempo das palavras na frase não é necessariamente preservada. Isso também é aceitável, desde que utilizemos algoritmos de ML que não levem em consideração a ordem de seqüência, como por exemplo, uma árvore de decisão.
Uma variação da codificação quente é a codificação baseada em frequência, onde em vez de usar 0/1 para ausência/presença da palavra, a frequência da palavra é usada para a presença e 0 novamente para a ausência da palavra.
Outro tipo de codificação é baseado em índice. Neste caso, uma palavra é codificada por meio de um ID, geralmente um índice inteiro progressivo.
Um algoritmo especial de machine learning que funciona bem para a análise de sentimentos é uma rede de deep learning com uma camada LSTM (Long Short-Term Memory). De fato, Redes Neurais Recorrentes (RNN) e especialmente redes LSTM foram recentemente utilizadas para explorar a dinâmica da evolução de séries temporais. Poderíamos usá-los para explorar a dinâmica da sequência de palavras para melhor prever também o sentimento do texto.
As unidades e camadas LSTM estão disponíveis na plataforma KNIME Analytics através da extensão KNIME Deep Learning - Keras Integration.
O KNIME Deep Learning Extension integra funcionalidades de deep learning, redes e arquiteturas do TensorFlow e Keras em Python. Mesmo que esta extensão permita escrever código Python para executar as bibliotecas TensorFlow/Keras, também permite montar, treinar e aplicar redes Keras através da interface gráfica do KNIME, baseada em nós, permitindo arrastar e soltar, cliques, exibição de janelas de configuração e status. Esta última opção torna todo o processo de montagem e treinamento sem código e, portanto, muito mais fácil e rápido, especialmente para prototipagem e experimentação. Também é possível misturar e combinar abordagens.
Enfim, para construir uma rede de deep learning com uma camada de entrada, uma camada de incorporação, uma camada LSTM e uma camada densa, precisamos apenas de quatro nós:
- Keras Input Layer,
- Keras Embedding Layer,
- Keras LSTM Layer, e
- Keras Dense Layer (Figura 4).
O treino de rede é obtido através do nó "Keras Network Learner" (Figura 4), que também inclui a conversão para a codificação apropriada, conforme exigido pela primeira camada, e a seleção da função de perda (entropia cruzada binária).
Por fim, o aplicativo de rede para novos dados é implementado com o nó genérico de deep learning "Network Executor", que pega qualquer rede Keras ou TensorFlow treinada e a executa nos novos dados.
Observe que o nó "Network Executor" não é o único nó capaz de executar uma rede de deep learning TensorFlow/Keras. O nó de deep learning Python "Network Executor" também pode fazer isso. A diferença entre os dois nós está no uso de interface gráfica (GUI) ou script. As definições de configuração no primeiro nó são transmitidas via GUI, enquanto a configuração no segundo nó é apenas um script Python. O primeiro nó é então mais fácil de usar, mas, claro, menos flexível. O segundo nó requer conhecimento de Python, mas permite personalizar a execução da rede mais detalhadamente.
E aqui estamos! Reunimos, treinamos e aplicamos uma rede neural de quatro camadas, incluindo uma camada LSTM, com apenas seis nós de deep learning Keras.
Como as unidades LSTM são capazes de evoluir seu aprendizado ao longo do tempo - isto é, a evolução sobre uma sequência ordenada de vetores de entrada - isso pode se tornar útil ao aprender negações ou outras estruturas de linguagem onde a ordem das palavras na sequência é importante.
Figura 4. Os primeiros quatro meta-nós cinzentos no fluxo de trabalho pré-processam os textos para construir seqüências de comprimento igual de palavras codificadas por índice. Truncamento e preenchimento com zero são aplicados para preencher ou cortar sentenças que são muito curtas ou muito longas, respectivamente. O resultado desse pré-processamento e a entrada na rede neural podem ser vistos na Figura 5, uma rede de deep learning baseada em Keras para análise de sentimentos. A rede consiste em quatro camadas: uma camada de entrada, uma camada de incorporação, uma camada LSTM e uma camada densa, como pode ser visto nos nós marrons superiores. Esta estrutura de rede é então treinada pelo nó “Network Learner” do Keras e aplicada através do nó de deep learning “Network Executor”.
Figura 5. Sequências de palavras codificadas por índice de entrada para a rede de deep learning.
A exatidão e o índice de Cohen para esta rede de deep learning foram avaliados no conjunto de testes, respectivamente, como 81 por cento e 0,62 para a mesma partição usada com a árvore de decisão.
Neste exemplo, trabalhamos em um pequeno conjunto de dados com apenas 50.000 críticas. Em tal conjunto de dados, a árvore de decisão já está apresentando um desempenho bastante satisfatório (71% de precisão), mas a rede de deep learning acrescenta um aumento de 10% no desempenho (81% de precisão). De qualquer forma, esperamos que tenha sido útil ver as etapas práticas da implementação da abordagem de machine learning com ambos os algoritmos. O fluxo de trabalho de deep learning, com todo o conjunto de dados do IMDb, pode ser baixado gratuitamente no servidor público KNIME EXAMPLES em:
04_Analytics/14_Deep_Learning/02_Keras/08_Sentiment_Classification_with_Deep_Learning_KNIME_nodes
Conclusões
Descrevemos duas técnicas básicas para a análise de sentimentos.
A primeira é baseada em NLP e requer um dicionário de palavras com sentimentos rotulados e um conjunto de regras mais ou menos complexas para determinar o sentimento de uma sentença a partir das palavras e da gramática nele contidas. As regras podem ser complexas para estabelecer (negações, sarcasmo, sentenças dependentes, etc.), mas, na ausência de um conjunto de dados com rótulo de sentimento, às vezes essa é a única opção viável.
A segunda é baseada em ML. Aqui, treinamos um modelo ML para reconhecer o sentimento em uma sentença com base nas palavras nele contidas e um conjunto de treino com sentimentos rotulados. Essa abordagem depende muito do algoritmo ML usado e da representação numérica do documento. Uma tendência atual é usar algoritmos de seqüência de tempo para reconhecer não apenas as palavras, mas também suas respectivas ordens na sentença. Como um exemplo dessa abordagem em particular, mostramos uma rede neural de deep learning incluindo uma camada LSTM.
Todos os fluxos de trabalho deste artigo estão disponíveis gratuitamente no servidor público KNIME EXAMPLES em:
08_Other_Analytics_Types/01_Text_Processing e 04_Analytics/14_Deep_Learning/02_Keras
(veja o vídeo de como acessar e baixar os fluxos de trabalho no servidor KNIME EXAMPLES).
Sobre as autoras
Rosaria Silipo, é Ph.D., principal data scientist no KNIME, autora de 13 publicações técnicas, incluindo seu mais recente livro "Praticando Ciência de Dados: Uma Coleção de Estudos de Caso". Doutora em bioengenharia, tendo passado a maior parte de sua vida profissional trabalhando em projetos de ciência de dados para empresas em uma ampla gama de áreas, incluindo IoT, inteligência de clientes, setor financeiro e segurança cibernética. Veja mais em seu Twitter, LinkedIn e no blog KNIME.
Kathrin Melcher é cientista de dados no KNIME. Possui mestrado em matemática pela Universidade de Konstanz, na Alemanha. Gosta de ensinar e aplicar seus conhecimentos em ciência de dados, machine learning e algoritmos. Veja mais em seu LinkedIn e no blog KNIME.