Python >> Tutoriel Python >  >> Python Tag >> Gensim

Python Gensim lit les incorporations de mots Word2Vec et calcule la similarité des mots

La bibliothèque Python gensim peut charger le modèle word2vec pour lire les incorporations de mots et calculer la similarité des mots. Dans ce didacticiel, nous présenterons comment faire pour les débutants en PNL.

Créer un bin word2vec ou un fichier texte

Vous devez utiliser du texte pour former un fichier d'incorporation de mots à l'aide de word2vec, il a deux types :binaire ou texte . Vous pouvez lire ce tutoriel pour savoir comment faire.

Meilleure pratique pour créer des incorporations de mots à l'aide de Word2Vec - Tutoriel Word2Vec

Installer python gensim

Vous devez installer la bibliothèque python gensim, puis vous pouvez l'utiliser pour charger le fichier d'intégration word2vec.

Installer Python Gensim avec Anaconda sur Windows 10 :Un guide pour débutant - Tutoriel Gensim

Importer la bibliothèque

# -*- coding: utf-8 -*-  
import gensim

Charger le fichier d'intégration word2vc

Nous devrions charger le fichier d'intégration word2vec, puis nous pourrons lire un mot intégré pour calculer la similarité.

Si votre fichier word2vec est binaire, vous pouvez faire comme :

model = gensim.models.KeyedVectors.load_word2vec_format('yelp-2013-embedding-200d.bin', binary=True)

Si le fichier est du texte, vous pouvez le charger en :

model = gensim.models.KeyedVectors.load_word2vec_format('yelp-2013-embedding-200d.txt', binary=False)

où le fichier d'intégration word2vec est yelp-2013-embedding-200d.txt .

Obtenir l'index des mots dans le vocabulaire

Pour obtenir l'index d'un mot dans le vocabulaire, on peut utiliser ce code.

#get word vocabulary
vab = model.vocab
word = vab['bad']
print(word.index)

Ensuite, vous trouverez l'index du mot "mauvais ” est 216 dans le vocabulaire.

Obtenir l'index mot par mot

Nous pouvons également obtenir un mot par son index dans le vocabulaire. Par exemple :

w = model.index2word(216)
print(w)

Nous pouvons classer le mot est "mauvais ” par index de mots 216 .

Calculer la similarité de deux mots

On peut calculer la similarité de deux mots par la distance cosinus, voici un exemple :

sim = model.similarity('love', 'bad')
print("sim = " + str(sim))

À partir du résultat, nous pouvons trouver la similitude (distance cosinus) des mots "amour " et " mauvais ” est :

sim = 0.163886218155

Obtenir des incorporations de mots

Nous pouvons facilement obtenir les plongements d'un mot.

vec = model.word_vec('bad')
print(vec)
print(type(vec))

Ensuite, nous pouvons obtenir les incorporations de mots du mot "mauvais ” est :

[ -2.96425015e-01  -3.69928002e-01   1.06517002e-01  -1.85122997e-01
  -1.12859998e-02  -2.23900005e-01   3.68850008e-02  -2.12399997e-02
  -1.75759997e-02   3.26476008e-01   5.16830012e-02  -7.16490000e-02
  ...
  -3.25680003e-02   3.51186007e-01  -2.08217993e-01   1.31810000e-02
   1.08323999e-01   1.91893995e-01  -2.82000005e-02   2.78019998e-02
   2.08480999e-01  -3.19326997e-01  -5.16390018e-02  -7.68799987e-03]

Le type devec est :

Bien sûr, vous pouvez également obtenir "mauvais ” word embeddings d'une manière simple :

vec = model['bad']
print(vec)

Le résultat est également le même.

Remarque :si le mot n'est pas dans le vocabulaire, une erreur sera générée, par exemple :

vec = model.word_vec('badsdfadafdfawwww')
print(vec)

Cela soulèvera :KeyError :"le mot 'badsdfadafdfawwww' n'est pas dans le vocabulaire"

Obtenir les N premiers mots similaires d'un mot

Si vous souhaitez obtenir les n premiers mots similaires d'un mot "mauvais ', vous pouvez faire comme :

sim_words = model.similar_by_word(word = 'bad')
print(sim_words)

Les mots similaires sont :

[('terrible', 0.6373452544212341), ('horrible', 0.6125461459159851), ('good', 0.5624269843101501), ('either', 0.5428024530410767), ('complain', 0.5027004480361938), ('ok', 0.5009992122650146), ('awful', 0.4978830814361572), ('unspectacular', 0.4900318384170532), ('okay', 0.4786447584629059), ('mediocre', 0.4767637550830841)]

model.similar_by_word() peut obtenir le top 10 des mots par défaut, si vous voulez seulement obtenir le top 5, vous pouvez faire comme :

sim_words = model.similar_by_word(word = 'bad', topn=5)
print(sim_words)

Top 5 des mots similaires à "mauvais ” sont :

[('terrible', 0.6373452544212341), ('horrible', 0.6125461459159851), ('good', 0.5624269843101501), ('either', 0.5428024530410767), ('complain', 0.5027004480361938)]