Embeddings

Natural Language Processing (NLP) in Python

Fouad Trad

Machine Learning Engineer

Beperkingen van BoW en TF-IDF

  • Soortgelijke woorden als losstaand zien
  • Betekenis van tekst niet vatten

 

Afbeelding die laat zien hoe BoW/TF-IDF een dataset met meerdere teksten omzet in een gestructureerde dataset waarbij unieke woorden features zijn.

Natural Language Processing (NLP) in Python

Embeddings

Afbeelding die laat zien dat een embedding een woord omzet in een vector.

  • Stel een woord voor met een vector die de betekenis vangt
Natural Language Processing (NLP) in Python

Embeddings

Afbeelding met de embedding-vectoren van vier woorden: car, movie, film en king.

  • Stel een woord voor met een vector die de betekenis vangt
    • Wijs willekeurige waarden toe aan elk woord
Natural Language Processing (NLP) in Python

Embeddings

Afbeelding met een zinsaanvultaak: vul "I enjoyed watching the" aan met het juiste woord.

  • Stel een woord voor met een vector die de betekenis vangt
    • Wijs willekeurige waarden toe aan elk woord
    • Verfijn waarden door ontbrekende woorden in zinnen te voorspellen
Natural Language Processing (NLP) in Python

Embeddings

Afbeelding die laat zien dat we de zin kunnen aanvullen met twee woorden met vergelijkbare betekenis: movie en film.

  • Stel een woord voor met een vector die de betekenis vangt
    • Wijs willekeurige waarden toe aan elk woord
    • Verfijn waarden door ontbrekende woorden in zinnen te voorspellen
    • Woorden in vergelijkbare contexten krijgen vergelijkbare representaties
Natural Language Processing (NLP) in Python

Embeddings als GPS-coördinaten voor woorden

Afbeelding met GPS-locaties op een kaart.

Natural Language Processing (NLP) in Python

Gensim

  • Biedt populaire embedding-modellen
    • 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
...

 

  Gensim-logo.

Natural Language Processing (NLP) in Python

Een embedding-model laden

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

Overeenkomst berekenen

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

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

Meest vergelijkbare woorden vinden

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

Embeddings visualiseren

  • Principal Component Analysis (PCA):
    • Hoogdimensionale vectoren → 2D- of 3D-vectoren

Een 3D-kaart die wordt afgevlakt naar 2D.

1 Afbeelding gegenereerd door DALL-E
Natural Language Processing (NLP) in Python

Embeddings visualiseren met 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()

Afbeelding die laat zien dat vergelijkbare/gerelateerde woorden dicht bij elkaar liggen in de embedding-ruimte.

Natural Language Processing (NLP) in Python

Vergelijking van embeddings

Afbeelding die laat zien dat vergelijkbare/gerelateerde woorden in het Word2Vec-model dicht bij elkaar liggen in de embedding-ruimte, maar anders gepositioneerd zijn dan in het GloVe-model.

word2vec-google-news-300

Afbeelding die laat zien dat vergelijkbare/gerelateerde woorden in het GloVe-model dicht bij elkaar liggen in de embedding-ruimte.

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

Laten we oefenen!

Natural Language Processing (NLP) in Python

Preparing Video For Download...