Como fazer uma análise de sentimentos com Vader
O passo a passo para performar uma análise de sentimentos com uma lib importante de NLP
Olá, leitores! Bem vindos novamente a mais um Turing Talks de NLP. No texto de hoje, vamos aprender como realizar uma análise de sentimentos usando Vader — uma biblioteca famosa de Processamento de Linguagem Natural usada para analisar o sentimento das frases de um texto.
Para esse artigo é importante que você já possua conhecimentos básicos de Processamento de Linguagem Natural, para isso recomendamos a leitura deste texto.
Primeiro, o que é uma Análise de Sentimentos?
Essa é uma tarefa de NLP que visa classificar os sentimentos de um texto dividindo-os, por exemplo, em Positivo, Negativo ou Neutro (podendo ter mais ou menos categorias, dependendo da tarefa). Mas antes, vamos entender qual seria o benefício de utilizar uma Análise de Sentimentos:
Imagine que você trabalha em uma empresa que vende um produto X e gostaria de saber o que o público está achando do seu produto: se estão gostando ou se não estão gostando, ou seja, se as opiniões estão sendo negativas ou positivas. Esse trabalho pode ser automatizado e realizado através da extração de dados sobre o produto das redes sociais (como twitter, facebook, etc) e com uma Análise de Sentimentos desses dados. Interessante, né?
Nossos dados
Quando queremos assistir um filme podemos pesquisar o que as pessoas estão falando dele na internet, ou seja, se é um filme ruim ou bom. Nesse texto é exatamente isso que ensinaremos o computador a definir: Se a review de um filme foi boa (positiva) ou ruim (negativa). Para isso, usaremos um dataset famoso do site IMDB que possui 50 mil reviews de filmes já rotuladas como positivas ou negativas. Aqui, em um primeiro momento, nós ignoraremos os labels (rótulos) e utilizaremos apenas a coluna das reviews, onde está o texto. Nosso intuito é ensinar o computador a prever esses rótulos sozinho. Depois vamos utilizar as labels reais para medir o quanto nosso computador acertou ao utilizar vader.
Em resumo os passos são:
- Pegar somente a coluna das reviews (onde está o texto);
- Fazer uma análise de sentimentos com vader nessa coluna, gerando assim uma nova coluna com o label positivo ou negativo;
- Comparar a coluna gerada pela análise usando vader com a coluna com os labels reais para ver o quanto acertamos na análise (chamamos isso de calcular a acurácia, mas veremos isso mais detalhadamente mais para frente).
Então vamos começar lendo nossos dados! Faremos isso usando a biblioteca pandas
do python e lendo nosso DataFrame (nossa tabela de dados), vamos aproveitar e já importar a biblioteca BeautifulSoup
para pré-processar o texto:
Como podemos ver algumas das reviews estão com tags HTML, isso acontece porque nossos dados foram retirados diretamente de um site e não foram processados, ou seja, limpos. Portanto, para isso, vamos usar a biblioteca BeautifulSoup
que importamos para retirar as tags com uma função que pega somente o texto:
Para a análise com vader não precisamos realizar mais nenhum tipo de pré-processamento. Então vamos continuar!
A biblioteca vader
vaderSentiment (Valence Aware Dictionary and sEntiment Reasoner) é uma biblioteca do Python de código aberto construída para ser usada em tarefas de análise de sentimentos, principalmente aquelas que envolvem dados de mídias sociais. Ela foi construída originalmente para funcionar em inglês — tanto que nesse texto usaremos a biblioteca com dados em inglês — mas existem adaptações para o português e você pode dar uma olhada aqui neste link.
A vader funciona de maneira bem simples: ela tem um léxico (uma coleção de palavras) em que cada palavra já possuí uma nota atribuída, e quando passado um documento (frase) retorna os seguintes valores em porcentagem:
pos:
o quão positiva é aquele frase/documento;neu:
o quão neutra é a frase/documento;neg:
o quanto é negativa;compound:
uma pontuação composta que é calculada somando as pontuações de valência de cada palavra no léxico, o que gera um número entre -1 (muito negativo) e +1 (muito positivo).
O compound
é a métrica mais importante quando você apenas quer saber se aquela frase é positiva ou negativa, porque seu valor pode ser convertido nessas respectivas categorias e é exatamente isso que vamos aprender a fazer aqui!
Instalação e importação
Para instalar a biblioteca vader podemos usar um pip install:
!pip install vaderSentiment
Da biblioteca vamos usar apenas a classe SentimentIntensityAnalyzer
, então vamos importá-la:
Calculando o compound
Com a biblioteca instalada e importada podemos começar a análise de sentimentos! Para essa análise usaremos o valor compound
, como dito anteriormente. Basicamente vamos construir uma função que passa por cada review e calcula seu compound, ou seja, o quanto aquela review é positiva ou negativa.
Começando pela função! Vamos criá-la e aplicá-la a coluna “review”, porém guardaremos a resposta numa nova coluna chamada “new_review”:
Vamos ver como ficou nossa coluna:
Podemos ver que o valor de cada review foi computado corretamente na coluna, lembrando que -1 é uma review muito negativa e +1 é uma review muito positiva, podemos ver que a primeira review (-0.9916) é negativa, enquanto a segunda (0.9670) é positiva.
Entretanto, o valor do compound
é numérico, e queremos aqui que as reviews estejam classificadas como categorias. Portanto, vamos criar uma função que transforma os valores > 0 (maiores que zero) em labels iguais a “positivo” e < 0 (menores que zero) em “negativo":
Função pronta e aplicada! Agora vamos printar nossa nova coluna new_sentiment:
Acurácia
Certo. Análise feita, sentimentos preditos. E agora? O próximo passo é avaliar se a análise desses sentimentos foram boas. Para isso podemos usar uma função da biblioteca sklearn — uma biblioteca própria para tarefas de Machine Learning — que nos retorna o valor da acurácia. A acurácia é uma métrica para avaliar a quantidade de acertos em porcentagem. Aqui ela nos mostrará quantos por cento dos nossos sentimentos foram previstos corretamente. Vamos lá:
Conclusão
No Turing Talks de hoje você aprendeu como fazer uma análise de sentimentos do zero utilizando a biblioteca vader! Vimos também uma forma de calcular a acurácia quando você já tem uma base de dados rotulada, onde, por fim, constatamos que nosso modelo conseguiu uma taxa de acerto que ficou por volta de 70%, o que não é um número perfeito, mas já é uma quantidade muito boa.
Para fixar os assuntos vistos aqui recomendamos que você treine cada um desses passos com seus próprios dados! Também, se você quiser se aprofundar mais nas outras inúmeras funções da biblioteca vader, incentivamos que você dê uma olhada na documentação dela.
Por fim, não deixe de acompanhar o Grupo Turing no Facebook, Linkedin, Instagram e nossos posts do Medium =)
Bons estudos e até a próxima!
Agradecimentos especiais à Julia Pociotti e ao Guilherme Fernandes.