Análise de sentimentos relacionados aos candidatos a Eleição para a presidência de 2018.
Este é o projeto realizado para a conclusão da disciplina IA369-Y Computação Afetiva realizada na Unicamp durante o 2°Semestre 2018, oferecida pela Prof. Paula Dornhofer Paro Costa (mais informações).
Os integrantes do projeto são:
- Edgar Lopes Banhesse
- Rodolfo De Nadai
-
Nova forma de fazer campanha política, da TV e Rádio para Redes Sociais
-
Eleição presidencial dos Estados Unidos em 2016 foi marcada pelo uso das redes sociais como forma de se aproximar e entender os anseios do eleitorado americano
-
No Brasil em 2018, as redes sociais foram utilizadas na divulgação de propostas dos candidatos e na conquista do eleitorado brasileiro
-
Portanto, a análise de valências e emoções nos comentários nas redes sociais do Brasil (Instagram, Facebook, Twitter e Youtube), referentes a eleição presidencial Brasileira, pode contribuir para entender o papel das emoções no resultado da eleição e apresentar um panorama de influência entre o eleitorado (BERMINGHAM; SMEATON, 2011) (PÉREZ-ROSAS et al., 2017)
Analisar as valências e emoções em comentários (textos) das principais redes sociais utilizadas no Brasil: Instagram, Facebook, Twitter (Tweets e Tendências) e Youtube referentes a eleição para presidente do Brasil em 2018.
Utilizar modelo de emoção categórico baseado em valências e emoções com uma abordagem supervisionada composta por três etapas:
-
Coleta dos comentários - coletar comentários cinco candidatos melhor classificados nas pesquisas eleitorais para presidente (Jair Bolsonaro, Geraldo Alckmin, Fernando Haddad (Lula), Marina Silva e Ciro Gomes) nas redes sociais (Facebook, Instagram, Twitter e Youtube)
-
Classificação dos comentários - tratar os comentários e realizar testes para escolher o melhor classificador e os melhores datasets a serem utilizados para gerar as valências e emoções para os comentários coletados
-
Análise dos resultados - analisar os resultados obtidos, após a classificação dos comentários para tentar entender o papel das emoções no resultado da eleição para presidente no Brasil e apresentar um panorama de influência entre o eleitorado
Inicialmente para analisar as valências e as emoções nos comentários foi decidido fazer uma busca na internet por datasets com frases em português do Brasil rotuladas com valências e emoções.
Alguns datasets com rótulos de valências foram encontrados no site Minerando Dados, são eles:
-
Títulos de notícias, aproximadamente 2.000 linhas.
-
Tweets de Minas Gerais, aproximadamente 3.000 linhas.
Nessa busca inicial nenhum dataset rotulado com emoções foi encontrado. Dessa forma, optou-se a utilizar um método não supervisionado de identificação de emoções em textos curtos para o português proposto pela mestranda Barbara Martinazzo. Foi aplicado o procedimento descrito para validação e análise de sentimentos em mensagens coletadas pela internet e em uma base de tweets coletados, os quais foram amostrados e definidos sentimentos prévios no trabalho do mestrando Henrico Brum.
Os resultados preliminares do proposto acima podem ser observado neste jupyter notebook.
O trabalho realizado pela Barbara Martinazzo, for expandido, levando em consideração também uma emoção de neutralidade, algo que é mencionado em seu trabalho, mas não fora abordado.
Além disso, o algoritmo implementado, não aborda a questão discutida por ela, com relação a usar essa implementação para novas mensagens. A abordagem utilizada por ela, leva em consideração o uso de contagem de palavras apenas (termo-documento), mas no algoritmo é possível optar pelo uso do TF-IDF para o cálculo das emoções.
Entretanto após a implementação do método proposto por Martinazzo, os resultados ficaram aquém do esperado, com taxa de identificação na faixa dos 30%. Em contato com o grupo de pesquisa da Pontifícia Universidade Católica do Paraná no site Emoções foi obtido um dataset rotulado com as seis emoções de Ekman:
- Títulos de notícias, aproximadamente 1.000 linhas.
Mesmo tendo em mãos essa base, os resultados ficaram aquém do esperado. Neste sentido, crer-se que em alguma parte o algoritmo não fora implementado corretamente.
Procurou-se aplicar uma nova abordagem baseada na clusterização de textos (Topic Modeling). Existem diversas abordagens para a clusterização, como descrito por (MOODY, 2015) e (YUAN; HUANG; WU, 2016). Para validar a possibilidade de identificação de emoções usando o conceito de modelagem por tópicos, utilizou-se o algoritmo t-SNE (t-Distributed Stochastic Neighbor Embedding) (MAATEN; HINTON, 2007), o qual permite redução de dimensionalidade e agrupamento das estruturas por tópicos dentro do espaço vetorial.
Apesar dos resultados preliminares terem sido medianos e promissores, com uma acurácia em torno de 65%, o método é demasiadamente “caótico” devido a natureza do algoritmo. Neste sentido, seria necessário um estudo melhor e mais profundo das implicações necessárias a sua utilização.
Entretanto com essa base de dados, e outros datasets (ver seção datasets abaixo), optou-se por experimentar a utilização de métodos de aprendizado supervisionado.
Os resultados no reconhecimento de emoções (As 6 emoções de Eckman), podem ser observadas neste jupyter notebook o qual acarretou em resultados na faixa dos 54%.
Outra tentativa de treinamento supervisionado pode ser observado neste outro jupyter notebook, neste caso busca-se a valência de positivo/negativo/neutro, utilizando-se de várias técnicas chega-se a uma acurácia de aproximadamente 57%.
O presente projeto, apresenta todo o código do desenvolvimento descrito acima, além de todo o conteúdo de apoio ao desenvolvimento da aplicação final proposta.
- python 3.6+
Caso não possua o python 3.6+ (sugiro o 3.7), veja como instalar. Você pode usar o pyenv para instalar várias versões paralelamente.
- Faça o git clone deste repositório;
- Execute os seguintes comandos (depois de ter instalado o python 3.6+)
$> virtualenv venv $> pip install -r requirements.txt $> source venv/bin/activate $> python -m nltk.downloader stopwords $> python -m nltk.downloader punkt $> python -m nltk.downloader rslp $> python -m nltk.downloader perluniprops $> python -m spacy download en $> python -m spacy download pt $> python cython_setup.py build_ext --inplace
-
DATABASE_PATH=/home/root/sentiment_analysis.db FACEBOOK_USER= FACEBOOK_PASSWORD=
- Extraia e copie o conteúdo da pasta selenium_driver caso queira executar o passo 4.
- Execute o arquivo extractor.py caso queira extrair novamente os dados das redes sociais.
$> python scraping/extractor.py $> python sanitization/clean.py
Para a validação final sobre o sentimentos dos eleitores com relação aos candidatos a eleição do Brasil para 2018, foi realizado a raspagem de comentários das seguintes páginas de redes sociais.
- YouTube
- Twitter treding hashtags
- eleicoes2018
- eleições2018
- Eleições2018
- eleicao2018
- Eleição2018
- DebateNaBand
- DebateRedeTv
- GNEleicoes2018
- CiroNoJornalNacional
- CiroNaGloboNews
- gneleicoes2018
- BolsonaroNoJornalNacional
- bolsonaronaglobonews
- GeraldoNoJN
- AlckminNoJornalNacional
- GERALDONAGLOBONEWS
- MarinaNoJornalNacional
- Marinanaglobonews
- HaddadPresidente
- HaddadÉLulaNoJN
- QuemMandouMatarBolsonaro
- Bolsonaro17
- Geraldo45
- Marina18
- Haddad13
- Ciro12
- CiroGomes
- GeraldoAlckmin
- MarinaSilvaeEduardoJorge18
- HaddadELula
- JairBolsonaro17
- EleSim
- EleNão
- BolsonaroNaJovemPan
- AlckminELula
- Vote13
- RuanetNÃO
- DebateSBT
- bolsonaroladrão
- bolsonaronacadeia
- veja600milhoes
- elesimeno1turno
- ÉPelaVidadasMulheres
- mudabrasilcombolsonaro
- OVotoNaRecord
- OVotoNaRecordNews
- DebateNaRecord
- DebateNaGlobo
- ViraViraCiro
- BolsonaroNaRecord
- Dia7é17
- EuVotoBolsonaro
- ManuNoJaburu
- Haddadé13
- GeraldoPresidente
- 17Neles
- FraudeNasUrnasEletronicas
- FicaTemer
- AgoraÉHaddad
- Nordeste17
- HaddadSim
- VemProDebate
- BolsonaroCagao
- LulaTaPresoBabaca
- DitaduraNuncaMais
- Caixa2doBolsonaro
- MarketeirosDoJair
- Bolsolao
- AtentadoFakeDoPT
- HaddadNaoECristao
- SuasticaFake
- BolsonaroPredsidente
- FakeNewsDoHaddad
- brasilcombolsonaro17
- CagueiproIbope
- NãoAceitaremosFraudes
- BolsonaroPresidenteEleito
- OBrasilFelizDeNovo
- BrasilViraHaddad
- AndradeJaEra
- ViraVotoHaddad13
- AcabouaPiranhagemPT
- OBrasilVota17
- ViraVirouHaddad
- HadadPresidente13
- APesardoPToBrasilVaiVencerB17
- PrayForBrazil
- RIPBrasil
- EleNaoEMeuPresidente
- meubolsominionsecreto
Coletamos e analisamos o uso dos seguintes possíveis léxicos para a língua portuguesa.
No momento presente o trabalho se baseia na união do SentiLex + OpLexicon + Conjuntos de palavras por sentimentos.
1 . WordNetAffectBR
Essa base foi construída para aplicações que utilizam vocabulário de palavras de emoções. Esse trabalho é relacionado ao estudo da análise de sentimentos em discurso da língua portuguesa.
2 . SentiLex-PT
SentiLex-PT01 é um léxico de sentimentos para o português constituído por 6.321 lemas adjectivais (por convenção, na forma masculina singular) e 25.406 formas flexionadas.
SentiLex-PT02 is a sentiment lexicon for Portuguese, made up of 7,014 lemmas, and 82,347 inflected forms. In detail, the lexicon describes: 4,779 (16,863) adjectives, 1,081 (1,280) nouns, 489 (29,504) verbs, and 666 (34,700) idiomatic expressions. The sentiment entries correspond to human predicates, i.e. predicates modifying human nouns, compiled from different publicly available resources (corpora and dictionaries). SentiLex-PT is especially useful for opinion mining applications involving Portuguese, in particular for detecting and classifying sentiments and opinions targeting human entities.
OpLexicon é um léxico de sentimento para a língua portuguesa.
1 . TweetSentBR
TweetSentBR is a corpus of Tweets in Brazilian Portuguese. It was labeled by several annotators following steps stablished on the literature for improving reliability on the task of Sentiment Analysis. Each Tweet was annotated in one of the three following classes: Positive - tweets where a user meant a positive reaction or evaluation about the main topic on the post; Negative - tweets where a user meant a negative reaction or evaluation about the main topic on the post; * Neutral - tweets not belonging to any of the last classes, usually not making a point, out of topic, irrelevant, confusing or containing only objective data.
2 . EMOÇÕES.BR
Projeto desenvolvido no Programa de Pós-Graduação em Informática da Pontifícia Universidade Católica do Paraná
3 . MinerandoDados
Repositório para armazenamento de código e notebooks de postagens do blog e cursos.
4 . ViesNoticias
Este repositório conta com um corpus de notícias sobre política obtido de alguns produtores de notícias no Brasil.
5 . Projeto Floresta Sintá(c)tica
Chamamos de "Floresta Sintáctica" um conjunto de frases (corpus) analisadas (morfo)sintaticamente. Como, além da indicação das funções sintácticas, a análise também explicita hierarquicamente informação relativa à estrutura de constituintes, dizemos que uma frase sintaticamente analisada se parece com uma árvore, donde um conjunto de árvores constitui uma floresta sintáctica (em inglês, treebank).
1 . Para realizar toda a operação estamos utilizando as seguintes bibliotecas:
- selenium
Utlizada para realizar a raspagem dos comentários e outros dados das páginas apresentadas abaixo. Infelizmente as api's das redes sociais são bem mais restritivas agora, ou mesmo tem um tempo moroso para habilitação de uso.
- peewee
ORM em python para realizar a conexão com a base de dados. No caso estamos utilizando sqlite como base de dados.
- NLTK
Natural Language Toolkit em python, foi utilizada em alguns pontos específicos para realizar o tratamento e análise de textos.
- spaCy
É uma exceleten biblioteca para NLP, adiciona várioas algoritmos e ferramental para análise de textos.
- gensim
Topic Modelling for Humans
- scikit-learn
Excelente ferramenta para Machine Learning, mas possui diversas funções matemáticas prontas. Usamos suas operações para trabalhar com texto.
- Cython
Converte código python para C, permitindo melhorias na performance de execução.
- numba
Compilador JIT que converte código python para C, permitindo melhorias na performance de execução.
- numpy
- scipy
- matplotlib
- pandas
Ferramentas padrão e essenciais para projetos de data science e machine learning.
1 . Dados Extras:
2 . Tutoriais
- Utilizando processamento de linguagem natural para criar uma sumarização automática de textos
- Latent Semantic Analysis (LSA) for Text Classification Tutorial
- Machine Learning :: Cosine Similarity for Vector Space Models (Part III)
- My Notes for Singular Value Decomposition with Interactive Code
- Principal Component Analysis in Python
- Euclidean vs. Cosine Distance
- Word embeddings: exploration, explanation, and exploitation
- Complete Guide to Word Embeddings
- An Intuitive Understanding of Word Embeddings: From Count Vectors to Word2Vec
- torchtext
3 . Topic Modelling
- Topic Modeling with LSA, PLSA, LDA & lda2Vec
- Integrating Topics and Syntax (HHM-LDA)
- Visualizing MNIST: An Exploration of Dimensionality Reduction
- How to Use t-SNE Effectively
- sense2vec
4 . LSA + Others
- Um Método de Identificação de Emoções em Textos Curtos para o Português do Brasil
- An Introduction to Latent Semantic Analysis
- Unsupervised Emotion Detection from Text using Semantic and Syntactic Relations
- An Efficient Method for Document Categorization Based on Word2vec and Latent Semantic Analysis
- Sentiment Classification of Documents Based on Latent Semantic Analysis
- Applying latent semantic analysis to classify emotions in Thai text
- Text Emotion Classification Research Based on Improved Latent Semantic Analysis Algorithm
- PANAS-t: A Pychometric Scale for Measuring Sentiments on Twitter
BERMINGHAM, A.; SMEATON, A. F. On using Twitter to monitor political sentiment and predict election results, 1 jan. 2011.
EKMAN, P.; FRIESEN, W. V. The facial action coding system. Palo Alto, CA: Consulting Psychologists Press, 1976.
JU, R. et al. An Efficient Method for Document Categorization Based on Word2vec and Latent Semantic Analysis, 1 jan. 2015.
LANDAUER, T. K.; FOLTZ, P. W.; LAHAM, D. An introduction to latent semantic analysis. Discourse Processes, v. 25, n. 2-3, p. 259-284, 1 jan. 1998.
MAATEN, L. VAN DER; HINTON, G. Visualizing Data using t-SNE. Journal of Machine Learning Research, v. 9, n. Nov, p. 2579-2605, 2007.
MARTINAZZO, B.; PARAISO, E. C. Um Método de Identificação de Emoções em Textos Curtos para o Português do Brasil. [s.l: s.n.].
MIKOLOV, T. et al. Distributed representations of words and phrases and their compositionality text mining. 2012.
MOODY, C. E. Mixing Dirichlet Topic Models and Word Embeddings to Make lda2vec. arXiv: 1605.02019, p. 8, 2015.
PÉREZ-ROSAS, V. et al. Automatic Detection of Fake News, 23 ago. 2017.
PICARD, R. . Affective Computing. 2nd. ed. Cambridge, MA: MIT Press, 1995.
PIYATIDA INRAK; SUKREE SINTHUPINYO. Applying latent semantic analysis to classify emotions in Thai text. 2010 2nd International Conference on Computer Engineering and Technology. Anais...IEEE, [s.d.]
STRAPPARAVA, C.; MIHALCEA, R. Learning to identify emotions in text. Proceedings of the 2008 ACM symposium on Applied computing - SAC ’08. Anais...ACM Press, 2006. Acesso em: 2006
WANG, X.; ZHENG, Q. Text Emotion Classification Research Based on Improved Latent Semantic Analysis Algorithm. Proceedings of the 2nd International Conference on Computer Science and Electronics Engineering (ICCSEE 2013). Anais...Atlantis Press, 2011. Acesso em: 2011
YUAN, S.; HUANG, H.; WU, L. Use of Word Clustering to Improve Emotion Recognition from Short Text. Journal of Computing Science and Engineering, v. 10, n. 4, 30 dez. 2016.