Projeto de análise de sentimentos em tweets utilizando técnicas de NLP e Machine Learning.
Imagem de storyset no Freepik
A pandemia de COVID-19 trouxe consigo uma série de mudanças na vida das pessoas, desde a forma de trabalhar até a forma de se comunicar. Com o isolamento social, as redes sociais se tornaram um dos principais meios de comunicação entre as pessoas, e com isso, a quantidade de informações e opiniões compartilhadas aumentou consideravelmente.
A análise de sentimentos em textos é uma assunto dentro da área Processamento de Linguagem Natural (NLP) que tem como objetivo identificar e extrair informações sobre as emoções e opiniões expressas em textos. Neste projeto, realizamos a análise dos tweets e a classificação dos sentimentos expressos neles, utilizando técnicas de NLP e aprendizado de máquina.
Explorar e analisar os dados do conjunto de tweets coletados sobre a COVID-19, buscando identificar padrões e insights relevantes sobre a percepção da população durante a pandemia.
- Análise Exploratória de Dados:
- Descrever as características estatísticas do conjunto de dados, como distribuição de frequências dos sentimentos, localização dos usuários e datas dos tweets.
- Visualizar os dados por meio de gráficos e tabelas para compreender distribuição dos sentimentos.
- Pré-processamento de Texto:
- Aplicar técnicas de pré-processamento como remoção de stopwords, lematização e normalização para minúsculas para a análise.
- Avaliar o impacto do pré-processamento na performance dos modelos de classificação de sentimentos.
- Extração de Características:
- Testar diferentes técnicas de vetorização, como Bag of Words (BOW), TF-IDF, Word Embeddings e Sentence Embeddings, para identificar a melhor representação do texto para a tarefa.
- Comparar o desempenho dos modelos de classificação com as diferentes técnicas de vetorização, usando métricas de avaliação como acurácia, precisão, cobertura e F1-score.
- Classificação de Sentimentos:
- Treinar e avaliar diferentes modelos de classificação de sentimentos, como Máquina de Vetores de Suporte (SVM), Regressão Logística e Floresta Aleatória, para identificar o modelo com melhor desempenho. Usamos o modelo Mixtral-8x7B-Instruct-v0.1, e fizemos fine-tuning no BERT para classificação de sentimentos para comparar com os modelos tradicionais.
- Análise de Resultados:
- Interpretar os resultados da classificação de sentimentos e identificar os principais tópicos e sentimentos presentes nos tweets.
Para esse estudo, usamos os dados coletados do Twitter, disponível no Kaggle. Foi utilizado conjunto de treino, composto por 41.557 tweets, foi coletado entre os dias 16 de março e 14 de abril de 2020. As 6 colunas presentes nele são:
-
OriginalTweet
: O texto original do tweet, contendo a mensagem relacionada à pandemia de COVID-19. Esse campo é o principal objeto de análise do projeto. -
Sentiment
: O sentimento predominante no tweet, categorizado em 5 classes:- Extremamente Negativo
- Negativo
- Neutro
- Positivo
- Extremamente Positivo
-
TweetAt
: A data em que o tweet foi publicado, permitindo a análise temporal dos dados. -
Location
: A localização cadastrada pelo usuário que publicou o tweet. -
ScreenName
: O nome de usuário do Twitter codificado, protegendo a identidade dos autores dos tweets. -
UserName
: A arroba (@) do usuário do Twitter codificada, complementando a informação doScreenName
.
Analisando por dia da semana, na Figura 1, vemos que a quarta-feira foi o dia com mais tweets, seguido pela quinta-feira. Já o domingo foi o dia com menos tweets.
Quanto à distribuição dos sentimentos, a Figura 2 mostra que a maioria dos tweets está rotulada como Positive, seguido por Negative e Neutral. Os sentimentos Extremamente Negativo e Extremamente Positivo são minoria no conjunto de dados.
Ainda no tema de tweets por dia da semana, a Figura 3 mostra a variação de quantidade de tweets por sentimento. Vemos que o sentimento Positivo é o mais frequente em todos os dias da semana, seguido por Negativo .
Para entender melhor o conteúdo dos tweets, selecionamos 5 exemplos de tweets para cada sentimento:
a) Extremamente Negativo:
Matters have gotten desperate in Not a single shop grocery provision store has been allowed to open for 3 days inspite of assurances by If we step out looking for bread we are beaten by cops Starvation will kill is before
b) Negativo:
Just because the sun is shining doesn't mean it's going to save you, your neighbours nor your family and friends from covid-19. I have to work at a supermarket so people can still get food. Just stay the fuck inside or have you not heard that nearly 5000 Britons have died?
c) Neutro:
Here we go. Today the #Coronavirus has arrived in the next county over, and my regular grocery store is starting to get cleaned out.
d) Positivo
Stay home this is a #pandemic #churches need to do the services online do your grocery shopping online and tip well I will be doing the same if you do go out wear a mask #stayhome #coronavirus #covid19 #CoronavirusPandemic
e) Extremamente Positivo
The Berkshire Dream Center in is working to help families in need stock up and stay prepared with basic necessities amid the outbreak Food diaper distribution is taking place today on Tyler Street Details here
A análise das amostras revelou que os textos dos tweets analisados compartilham um tema comum, centrado nas dificuldades associadas às compras. Para validar esta suposição, procedemos à extração e contagem da frequência das palavras e hashtags presentes nos textos. A Figura 4 ilustra uma nuvem de palavras, onde o tamanho de cada palavra reflete a sua frequência de ocorrência. Observamos que as palavras que mais se destacam são "grocery", "store", "supermarket" e "covid19". Quanto às hashtags, as mais comuns são "#coronaviru", "#covid19", "#coronavirus" e suas variações. Esses resultados indicam uma preocupação significante dos usuários com esse tema.
- Python
- Pandas
- Matplotlib
- Scikit-Learn
- Spacy
- E outras bibliotecas de Python
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
Além disto é bom ter um editor para trabalhar com o código como VSCode
# Clone este repositório
$ git clone https://github.com/jessicacardoso/sentiment-analysis-tweets.git
# Acesse a pasta do projeto no terminal/cmd
$ cd sentiment-analysis-tweets
# Instale as dependências
$ pip install -r requirements.txt
# Execute o Jupyter Notebook
$ jupyter notebook
Os resultados da análise exploratória de dados e da modelagem de classificação de sentimentos foram dividos em 4 notebooks, que podem ser acessados nos links abaixo:
- Análise exploratória de dados
- Análise usando embeddings
- Modelagem e previsão com BoW, TF-IDF e Embeddings
- Previsão via Zero-shot prompt usando Mixtral-8x7B comparado com Fine-Tuning no BERT
Este projeto esta sobe a licença MIT.