- APS 2
pip install -r requirements.txt
Note
O código para essa etapa está em notebook.ipynb
, também é possível visualizar em Google Colab
O dataset utilizado foi o Coronavirus tweets NLP - Text Classification que contém tweets relacionados ao COVID-19. Os tweets foram classificados em 5 categorias: Extremely Negative, Negative, Neutral, Positive e Extremely Positive. Foram utilizadas as colunas OriginalTweet, com o texto do tweet, e Sentiment, com a classificação do tweet.
Para gerar os embeddings, foi utilizado o modelo pré-treinado sentence-transformers/all-MiniLM-L6-v2
do Hugging Face, um modelo do tipo Sentence Transformer
ou sBERT, que pode ser vista na Figura 1. O sBERT foi utilizado, pois diferente do BERT, que gera embeddings para palavras, o sBERT gera embeddings para sentenças, e como o objetivo é processar tweets, que são sentenças, o sBERT é mais adequado. Os hiperparâmetros utilizados foram os padrões do modelo, que podem ser encontrados em: hiperparâmetros.
![]() Fonte: Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks Figura 1 - topologia sBERT |
Para o processo de treinamento foram criados pares de tweets de diferentes sentimentos, podendo ser combinações de extremamente positivos, positivos, neutros, negativos e extremamente negativos. Cada par foi dado um valor que representa sua similaridade, sendo 0 para os extremos, 0.7 para sentimentos similares, 0.2 para sentimentos extremos, sentimentos opostos não extremos e neutros e 0.5 para sentimentos neutros e não extremos. A loss function utilizada foi a CosineSimilarityLoss, ela recebe dois vetores de embeddings e calcula a similaridade por cosseno entre eles, pode ser vista na Equação 1, sendo que para comparar o valor de saída com o label da entrada utiliza-se o MSE. Ela foi utilizada pois o experimento consiste em agrupar tweets de sentimentos similares e separar tweets de sentimentos diferentes, e ao definir esses valores manualmente, a loss function foi utilizada para otimizar os embeddings para essa tarefa.
![]() Fonte: Cosine similarity Equação 1 - Similaridade por cossenos |
Note
O código para essa etapa está em notebook.ipynb
, também é possível visualizar em Google Colab
Para a visualização dos embeddings foi utilizado o TNSE, para reduzi-los para 2 dimensões. Na Figura 2 é possível ver os embeddings pré-treinados, onde os tweets estão bem distribuídos, porém não é possível ver uma separação entre os sentimentos. Já na Figura 3, é possível ver os embeddings agrupados por seus sentimentos, nela é possível notar 3 clusters, um para sentimentos positivos, um para sentimentos negativos e um para sentimentos neutros. Sendo que é notório uma consistência maior no cluster de sentimentos positivos, enquanto principalmente o cluster de sentimentos neutros ocorre uma quebra, em que não a continuidade dos tweets.
Embora ocorra uma menor consistência no cluster de sentimentos neutros, e negativos, comparada ao cluster de sentimentos positivos, ainda assim é possível notar que cada sentimento está para um lado do gráfico. Os sentimentos positivos estão mais a direita, os sentimentos neutros mais para a esquerda e os sentimentos negativos mais para cima. Com isso o modelo foi capaz de gerar embeddings que agrupam por sentimentos.
Note
O código para essa etapa está em src/get_recommendation.py
, e os testes em: test/test_query.py
. Também é possível executar por python src/get_recomendation.py "SUA_QUERY"
Query:
covid is a hoax.
pytest:
pytest test/test_query.py::test_query_yields_10_results
Results:
Document | OriginalTweet | Relevance | |
---|---|---|---|
0 | 17710 | How to annoy everyone | 0.977378 |
1 | 35419 | How to avoid during when it comes to | 0.960058 |
2 | 2917 | An example of a bastard colony in | 0.959493 |
3 | 19546 | All these pedophiles political leaders are all lying to you about the | 0.957530 |
4 | 5506 | the new supermarket wars | 0.954512 |
5 | 29328 | ally Greenberg of National Consumer s League on false claims regarding CBD and | 0.953748 |
6 | 20229 | can tap rising demand worldwide due to 19 | 0.952620 |
7 | 31592 | Gas prices dropping during COVID 19 pandemic | 0.951462 |
8 | 28258 | Demand spikes at tri county food banks due to COVID 19 layoffs | 0.948109 |
9 | 18696 | You cant handle the truth | 0.946387 |
Query:
covid and h1n1.
pytest:
pytest test/test_query.py::test_query_yields_few_results
Results:
Document | OriginalTweet | Relevance | |
---|---|---|---|
0 | 12121 | State your country. https://t.co/X66raoLHva | 0.974832 |
1 | 31018 | Voi taivas varjele. https://t.co/6wNeXbTHvI | 0.972590 |
2 | 24859 | Check out for info from the on | 0.954417 |
3 | 17174 | "The view from Ireland.#coronavirus #LearnEnglish" | 0.953746 |
4 | 1058 | This was Trump eight days ago. https://t.co/1xVFAYbzws | |
5 | 7656 | IK. KOM. NIET. MEER. BIJ. https://t.co/aos0KAYjfr |
Query:
public transport.
pytest:
pytest test/test_query.py::test_query_yields_non_obvious_results
Results:
Document | OriginalTweet | Relevance | |
---|---|---|---|
0 | 39290 | Toilet paper | 0.96510 |
1 | 19410 | BREAKING NEWS | 0.96078 |
2 | 16872 | Cartoon for | 0.95235 |
3 | 15577 | Tissue Issue | 0.95131 |
4 | 12246 | From a supermarket in 19 | 0.94601 |
5 | 25022 | Supermarket lines in | 0.94032 |
O modelo pode ser encontrado em: https://huggingface.co/gianvr/sbert-tunned-covid