Skip to content

gianvr/embeddings

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

APS 2

Sumário

0. Dependências

pip install -r requirements.txt

1. Encontrando embeddings

Note

O código para essa etapa está em notebook.ipynb, também é possível visualizar em Google Colab

1.1 Dataset

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.

1.2 Processo para gerar embeddings

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.

1.3 Processo de treinamento

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

2. Visualização dos embeddings

Note

O código para essa etapa está em notebook.ipynb, também é possível visualizar em Google Colab


Figura 2 - Pretrained Embeddings

Figura 3 - Tunned Embeddings

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.

3. Sistema de busca

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"

Teste que retorna 10 tweets

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

Teste que retorna mais que 1 e menos que 10 tweets

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

Teste que retorna algo não óbvio

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

4. Hugging Face

O modelo pode ser encontrado em: https://huggingface.co/gianvr/sbert-tunned-covid

5. Referências

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published