Gensim - Développement de l'intégration de mots

Le chapitre nous aidera à comprendre le développement de l'intégration de mots dans Gensim.

L'incorporation de mots, approche pour représenter des mots et un document, est une représentation vectorielle dense pour le texte où les mots ayant la même signification ont une représentation similaire. Voici quelques caractéristiques de l'incorporation de mots -

  • C'est une classe de technique qui représente les mots individuels sous forme de vecteurs à valeur réelle dans un espace vectoriel prédéfini.

  • Cette technique est souvent regroupée dans le domaine du DL (apprentissage en profondeur) car chaque mot est mappé sur un vecteur et les valeurs vectorielles sont apprises de la même manière qu'un NN (Neural Networks).

  • L'approche clé de la technique d'incorporation de mots est une représentation distribuée dense pour chaque mot.

Différentes méthodes / algorithmes d'incorporation de mots

Comme indiqué ci-dessus, les méthodes / algorithmes d'incorporation de mots apprennent une représentation vectorielle à valeur réelle à partir d'un corpus de texte. Ce processus d'apprentissage peut être utilisé avec le modèle NN sur des tâches telles que la classification de documents ou est un processus non supervisé tel que les statistiques de documents. Ici, nous allons discuter de deux méthodes / algorithmes qui peuvent être utilisés pour apprendre un mot incorporé à partir de texte -

Word2Vec par Google

Word2Vec, développé par Tomas Mikolov, et. Al. chez Google en 2013, est une méthode statistique pour apprendre efficacement un mot incorporé à partir d'un corpus de texte. Il est en fait développé pour rendre la formation basée sur NN sur l'incorporation de mots plus efficace. C'est devenu la norme de facto pour l'intégration de mots.

L'incorporation de mots par Word2Vec implique l'analyse des vecteurs appris ainsi que l'exploration des mathématiques vectorielles sur la représentation des mots. Voici les deux méthodes d'apprentissage différentes qui peuvent être utilisées dans le cadre de la méthode Word2Vec -

  • Modèle CBoW (Continuous Bag of Words)
  • Modèle Skip-Gram continu

GloVe par Standford

GloVe (Global vectors for Word Representation), est une extension de la méthode Word2Vec. Il a été développé par Pennington et al. à Stanford. L'algorithme GloVe est un mélange des deux -

  • Statistiques globales des techniques de factorisation matricielle comme LSA (Latent Semantic Analysis)
  • Apprentissage local basé sur le contexte dans Word2Vec.

Si nous parlons de son fonctionnement, au lieu d'utiliser une fenêtre pour définir le contexte local, GloVe construit une matrice de co-occurrence de mot explicite en utilisant des statistiques sur l'ensemble du corpus de texte.

Développement de l'intégration de Word2Vec

Ici, nous développerons l'incorporation de Word2Vec en utilisant Gensim. Afin de travailler avec un modèle Word2Vec, Gensim nous fournitWord2Vec classe qui peut être importée depuis models.word2vec. Pour sa mise en œuvre, word2vec nécessite beaucoup de texte, par exemple l'ensemble du corpus de critiques Amazon. Mais ici, nous appliquerons ce principe au texte de petite mémoire.

Exemple d'implémentation

Nous devons d'abord importer la classe Word2Vec de gensim.models comme suit -

from gensim.models import Word2Vec

Ensuite, nous devons définir les données d'entraînement. Plutôt que de prendre un gros fichier texte, nous utilisons des phrases pour implémenter ce principe.

sentences = [
   ['this', 'is', 'gensim', 'tutorial', 'for', 'free'],
   ['this', 'is', 'the', 'tutorials' 'point', 'website'],
   ['you', 'can', 'read', 'technical','tutorials', 'for','free'],
   ['we', 'are', 'implementing','word2vec'],
   ['learn', 'full', 'gensim', 'tutorial']
]

Une fois les données de formation fournies, nous devons former le modèle. cela peut être fait comme suit -

model = Word2Vec(sentences, min_count=1)

Nous pouvons résumer le modèle comme suit -;

print(model)

Nous pouvons résumer le vocabulaire comme suit -

words = list(model.wv.vocab)
print(words)

Ensuite, accédons au vecteur pour un mot. Nous le faisons pour le mot «tutoriel».

print(model['tutorial'])

Ensuite, nous devons enregistrer le modèle -

model.save('model.bin')

Ensuite, nous devons charger le modèle -

new_model = Word2Vec.load('model.bin')

Enfin, imprimez le modèle enregistré comme suit -

print(new_model)

Exemple d'implémentation complet

from gensim.models import Word2Vec
sentences = [
   ['this', 'is', 'gensim', 'tutorial', 'for', 'free'],
   ['this', 'is', 'the', 'tutorials' 'point', 'website'],
   ['you', 'can', 'read', 'technical','tutorials', 'for','free'],
   ['we', 'are', 'implementing','word2vec'],
   ['learn', 'full', 'gensim', 'tutorial']
]
model = Word2Vec(sentences, min_count=1)
print(model)
words = list(model.wv.vocab)
print(words)
print(model['tutorial'])
model.save('model.bin')
new_model = Word2Vec.load('model.bin')
print(new_model)

Production

Word2Vec(vocab=20, size=100, alpha=0.025)
[
   'this', 'is', 'gensim', 'tutorial', 'for', 'free', 'the', 'tutorialspoint', 
   'website', 'you', 'can', 'read', 'technical', 'tutorials', 'we', 'are', 
   'implementing', 'word2vec', 'learn', 'full'
]
[
   -2.5256255e-03 -4.5352755e-03 3.9024993e-03 -4.9509313e-03
   -1.4255195e-03 -4.0217536e-03 4.9407515e-03 -3.5925603e-03
   -1.1933431e-03 -4.6682903e-03 1.5440651e-03 -1.4101702e-03
   3.5070938e-03 1.0914479e-03 2.3334436e-03 2.4452661e-03
   -2.5336299e-04 -3.9676363e-03 -8.5054158e-04 1.6443320e-03
   -4.9968651e-03 1.0974540e-03 -1.1123562e-03 1.5393364e-03
   9.8941079e-04 -1.2656028e-03 -4.4471184e-03 1.8309267e-03
   4.9302122e-03 -1.0032534e-03 4.6892050e-03 2.9563988e-03
   1.8730218e-03 1.5343715e-03 -1.2685956e-03 8.3664013e-04
   4.1721235e-03 1.9445885e-03 2.4097660e-03 3.7517555e-03
   4.9687522e-03 -1.3598346e-03 7.1032363e-04 -3.6595813e-03
   6.0000515e-04 3.0872561e-03 -3.2115565e-03 3.2270295e-03
   -2.6354722e-03 -3.4988276e-04 1.8574356e-04 -3.5757164e-03
   7.5391348e-04 -3.5205986e-03 -1.9795434e-03 -2.8321696e-03
   4.7155009e-03 -4.3349937e-04 -1.5320212e-03 2.7013756e-03
   -3.7055744e-03 -4.1658725e-03 4.8034848e-03 4.8594419e-03
   3.7129463e-03 4.2385766e-03 2.4612297e-03 5.4920948e-04
   -3.8912550e-03 -4.8226118e-03 -2.2763973e-04 4.5571579e-03
   -3.4609400e-03 2.7903817e-03 -3.2709218e-03 -1.1036445e-03
   2.1492650e-03 -3.0384419e-04 1.7709908e-03 1.8429896e-03
   -3.4038599e-03 -2.4872608e-03 2.7693063e-03 -1.6352943e-03
   1.9182395e-03 3.7772327e-03 2.2769428e-03 -4.4629495e-03
   3.3151123e-03 4.6509290e-03 -4.8521687e-03 6.7615538e-04
   3.1034781e-03 2.6369948e-05 4.1454583e-03 -3.6932561e-03
   -1.8769916e-03 -2.1958587e-04 6.3395966e-04 -2.4969708e-03
]
Word2Vec(vocab=20, size=100, alpha=0.025)

Visualiser l'incorporation de mots

Nous pouvons également explorer le mot intégration avec la visualisation. Cela peut être fait en utilisant une méthode de projection classique (comme PCA) pour réduire les vecteurs de mots de haute dimension à des tracés 2D. Une fois réduits, nous pouvons ensuite les tracer sur un graphique.

Tracer des vecteurs de mots à l'aide de PCA

Tout d'abord, nous devons récupérer tous les vecteurs d'un modèle entraîné comme suit -

Z = model[model.wv.vocab]

Ensuite, nous devons créer un modèle PCA 2D de vecteurs de mots en utilisant la classe PCA comme suit -

pca = PCA(n_components=2)
result = pca.fit_transform(Z)

Maintenant, nous pouvons tracer la projection résultante en utilisant le matplotlib comme suit -

Pyplot.scatter(result[:,0],result[:,1])

Nous pouvons également annoter les points sur le graphique avec les mots lui-même. Tracez la projection résultante en utilisant le matplotlib comme suit -

words = list(model.wv.vocab)
for i, word in enumerate(words):
   pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))

Exemple d'implémentation complet

from gensim.models import Word2Vec
from sklearn.decomposition import PCA
from matplotlib import pyplot
sentences = [
   ['this', 'is', 'gensim', 'tutorial', 'for', 'free'],
	['this', 'is', 'the', 'tutorials' 'point', 'website'],
	['you', 'can', 'read', 'technical','tutorials', 'for','free'],
	['we', 'are', 'implementing','word2vec'],
	['learn', 'full', 'gensim', 'tutorial']
]
model = Word2Vec(sentences, min_count=1)
X = model[model.wv.vocab]
pca = PCA(n_components=2)
result = pca.fit_transform(X)
pyplot.scatter(result[:, 0], result[:, 1])
words = list(model.wv.vocab)
for i, word in enumerate(words):
   pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))
pyplot.show()

Production