web-dev-qa-db-fra.com

Comment trouver le mot le plus proche d'un vecteur à l'aide de Word2vec

Je viens de commencer à utiliser Word2vec et je me demandais comment trouver le mot le plus proche d'un vecteur. J'ai ce vecteur qui est le vecteur moyen d'un ensemble de vecteurs:

array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)

Existe-t-il un moyen simple de trouver le mot le plus similaire dans mes données d'entraînement à ce vecteur?

Ou la seule solution est de calculer la similitude cosinus entre ce vecteur et les vecteurs de chaque mot dans mes données d'apprentissage, puis de sélectionner le plus proche?

Merci.

21
sel

Pour gensim implémentation de Word2vec, il existe une fonction most_similar() qui vous permet de trouver des mots sémantiquement proches d'un mot donné:

>>> model.most_similar(positive=['woman', 'king'], negative=['man'])
[('queen', 0.50882536), ...]

ou à sa représentation vectorielle:

>>> your_Word_vector = array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
>>> model.most_similar(positive=[your_Word_vector], topn=1))

topn définit le nombre souhaité de résultats renvoyés.

Cependant, mon intuition est que la fonction fait exactement la même chose que vous avez proposée, c'est-à-dire qu'elle calcule la similitude en cosinus pour le vecteur donné et chaque autre vecteur dans le dictionnaire (ce qui est assez inefficace ...)

38
Nicolas Ivanov

N'oubliez pas d'ajouter un tableau vide avec des mots négatifs dans la fonction most_similar:

import numpy as np
model_Word_vector = np.array( my_vector, dtype='f')
topn = 20;
most_similar_words = model.most_similar( [ model_Word_vector ], [], topn)
6

Alternativement, model.wv . similar_by_vector (vector, topn = 10, restrict_vocab = None) est également disponible dans le package gensim.

Trouvez les N-mots les plus similaires par vecteur.

Paramètres:

  • vector (numpy.array) - Vecteur à partir duquel les similitudes doivent être calculées.

  • topn ({int, False}, facultatif) - Nombre de N-top mots similaires à renvoyer. Si topn est False, similar_by_vector renvoie le vecteur des scores de similarité.

  • restrict_vocab (int, facultatif) - Entier facultatif qui limite la plage de vecteurs recherchés pour les valeurs les plus similaires . Par exemple, restrict_vocab = 10000 ne vérifierait que les 10000 premiers vecteurs Word dans l'ordre du vocabulaire. (Cela peut être utile si vous avez trié le vocabulaire par fréquence décroissante.)

Renvoie: Séquence de (Word, similitude).

Type de retour: liste de (str, float)

4
Moobie