web-dev-qa-db-fra.com

Obtenez le plus de mots similaires, étant donné le vecteur du mot (pas le mot lui-même)

En utilisant la bibliothèque gensim.models.Word2Vec, vous avez la possibilité de fournir un modèle et un "mot" pour lesquels vous souhaitez trouver la liste des mots les plus similaires:

model = gensim.models.Word2Vec.load_Word2vec_format(model_file, binary=True)
model.most_similar(positive=[Word], topn=N)

Je me demande s’il est possible de donner au système en entrée le modèle et un "vecteur", et de demander au système de renvoyer les premiers mots similaires (dont les vecteurs sont très proches du vecteur donné). Quelque chose de semblable à:

model.most_similar(positive=[VECTOR], topn=N)

J'ai besoin de cette fonctionnalité pour un environnement bilingue, dans lequel j'ai deux modèles (anglais et allemand), ainsi que des mots anglais pour lesquels je dois trouver leurs candidats allemands les plus similaires . le vecteur de chaque mot anglais du modèle anglais:

model_EN = gensim.models.Word2Vec.load_Word2vec_format(model_file_EN, binary=True)
vector_w_en=model_EN[Word_EN]

puis interrogez le modèle allemand avec ces vecteurs.

model_DE = gensim.models.Word2Vec.load_Word2vec_format(model_file_DE, binary=True)
model_DE.most_similar(positive=[vector_w_en], topn=N)

J'ai implémenté cela en C en utilisant la fonction de distance d'origine dans le package Word2vec. Mais maintenant, j'ai besoin que ce soit en python pour pouvoir l'intégrer à mes autres scripts.

Savez-vous s'il existe déjà une méthode dans la bibliothèque gensim.models.Word2Vec ou une autre bibliothèque similaire pour le faire? Dois-je le mettre en œuvre moi-même?

14
amin

La méthode similar_by_vector renvoie les N premiers mots les plus similaires par vecteur:

similar_by_vector(vector, topn=10, restrict_vocab=None)
14
user48135

Je ne pense pas que ce que vous essayez de réaliser puisse jamais donner une réponse précise. Tout simplement parce que les deux modèles sont formés séparément. Et bien que les modèles anglais et allemand aient des distances similaires entre leurs vecteurs Word respectifs. Rien ne garantit que le vecteur Word pour 'Maison' aura la même direction que le vecteur Word pour 'Haus'.

En termes simples, si vous avez formé les deux modèles avec une taille de vecteur = 3 . Et si «Maison» a le vecteur [0.5,0.2,0.9], rien ne garantit que «Haus» aura le vecteur [0.5,0.2,0,9] ou même quelque chose proche de cela. 

Afin de résoudre ce problème, vous pouvez d'abord traduire le mot anglais en allemand, puis utiliser le vecteur de ce mot pour rechercher des mots similaires dans le modèle allemand.

TL: DR; Vous ne pouvez pas simplement connecter des vecteurs d'un modèle de langage à un autre et vous attendre à des résultats précis.

0
Dachrimar