Embedding

Natural Language Processing (NLP) in Python

Fouad Trad

Machine Learning Engineer

Limiti di BoW e TF‑IDF

  • Tratta parole simili come del tutto scollegate
  • Non cattura bene il significato del testo

 

Immagine che mostra come BoW/TF‑IDF trasformano un dataset di testi in un dataset strutturato dove le parole uniche sono feature.

Natural Language Processing (NLP) in Python

Embedding

Immagine che mostra che l'embedding trasforma una parola in un vettore.

  • Rappresenta una parola con un vettore che ne cattura il significato
Natural Language Processing (NLP) in Python

Embedding

Immagine che mostra i vettori di embedding di quattro parole: car, movie, film e king.

  • Rappresenta una parola con un vettore che ne cattura il significato
    • All'inizio assegna valori casuali a ogni parola
Natural Language Processing (NLP) in Python

Embedding

Immagine che mostra il task di completamento frase, es. "I enjoyed watching the" da completare con la parola giusta.

  • Rappresenta una parola con un vettore che ne cattura il significato
    • All'inizio assegna valori casuali a ogni parola
    • Affina i valori prevedendo parole mancanti nelle frasi
Natural Language Processing (NLP) in Python

Embedding

Immagine che mostra che possiamo completare la frase con due parole dal significato simile: movie e film.

  • Rappresenta una parola con un vettore che ne cattura il significato
    • All'inizio assegna valori casuali a ogni parola
    • Affina i valori prevedendo parole mancanti nelle frasi
    • Le parole in contesti simili ottengono rappresentazioni simili
Natural Language Processing (NLP) in Python

Embedding come coordinate GPS delle parole

Immagine che mostra posizioni GPS su una mappa.

Natural Language Processing (NLP) in Python

Gensim

  • Offre modelli di embedding popolari
    • Word2Vec
    • GloVe
word2vec-ruscorpora-300
word2vec-google-news-300
glove-wiki-gigaword-50
glove-wiki-gigaword-100
glove-wiki-gigaword-200
glove-wiki-gigaword-300
...

 

  Logo di Gensim.

Natural Language Processing (NLP) in Python

Caricare un modello di embedding

import gensim.downloader as api

model = api.load('glove-wiki-gigaword-50')
print(type(model))
print(model['movie'])
<class 'gensim.models.keyedvectors.KeyedVectors'>

[ 0.30824 0.17223 -0.23339 0.023105 0.28522 0.23076 -0.41048 -1.0035 -0.2072 1.4327 -0.80684 0.68954 -0.43648 1.1069 1.6107 -0.31966 0.47744 0.79395 -0.84374 0.064509 0.90251 0.78609 0.29699 0.76057 0.433 -1.5032 -1.6423 0.30256 0.30771 -0.87057 2.4782 -0.025852 0.5013 -0.38593 -0.15633 0.45522 0.04901 -0.42599 -0.86402 -1.3076 -0.29576 1.209 -0.3127 -0.72462 -0.80801 0.082667 0.26738 -0.98177 -0.32147 0.99823 ]
Natural Language Processing (NLP) in Python

Calcolare la similarità

similarity = model.similarity("film", "movie")

print(similarity)
0.9310100078582764
Natural Language Processing (NLP) in Python

Trovare le parole più simili

similar_to_movie = model.most_similar('movie', topn=3)

print(similar_to_movie)
[('movies', 0.9322481155395508), 
 ('film', 0.9310100078582764), 
 ('films', 0.8937394618988037)]
Natural Language Processing (NLP) in Python

Visualizzare gli embedding

  • PCA (Principal Component Analysis):
    • Vettori ad alta dimensionalità → vettori 2D o 3D

Una mappa 3D appiattita in 2D.

1 Immagine generata da DALL-E
Natural Language Processing (NLP) in Python

Visualizzare gli embedding con PCA

from sklearn.decomposition import PCA

words = ["film", "movie", "dog", "cat", "car", "bus"]
word_vectors = [model[word] for word in words]
pca = PCA(n_components=2)
word_vectors_2d = pca.fit_transform(word_vectors)
plt.scatter(word_vectors_2d[:, 0], word_vectors_2d[:, 1])
for word, (x, y) in zip(words, word_vectors_2d): plt.annotate(word, (x, y))
plt.show()

Immagine che mostra che parole simili/correlate sono vicine nello spazio degli embedding.

Natural Language Processing (NLP) in Python

Confronto tra embedding

Immagine che mostra che parole simili/correlate nel modello Word2Vec sono vicine nello spazio degli embedding, ma posizionate diversamente rispetto a GloVe.

word2vec-google-news-300

Immagine che mostra che parole simili/correlate nel modello GloVe sono vicine nello spazio degli embedding.

glove-wiki-gigaword-50
Natural Language Processing (NLP) in Python

Ayo berlatih!

Natural Language Processing (NLP) in Python

Preparing Video For Download...