Obtenir la plupart des mots similaires, étant donné le vecteur de la parole (pas le mot lui-même)
À l'aide de la gensim.models.Word2Vec
de la bibliothèque, vous avez la possibilité de fournir un modèle et un "mot" pour lequel vous souhaitez trouver la liste de la plupart des mots similaires:
model = gensim.models.Word2Vec.load_word2vec_format(model_file, binary=True)
model.most_similar(positive=[WORD], topn=N)
Je me demande si il est possible de donner le système en entrée du modèle et un "vecteur", et de demander au système de retour au top des mots similaires (qui de leurs vecteurs est très proche du vecteur donné). Quelque chose de similaire à:
model.most_similar(positive=[VECTOR], topn=N)
J'ai besoin de cette fonctionnalité pour un milieu bilingue, dans lequel j'ai 2 modèles (anglais et allemand), ainsi que quelques mots d'anglais pour laquelle j'ai besoin de trouver la plupart de leurs semblables des candidats allemands.
Ce que je veux faire est d'obtenir le vecteur de chaque mot en anglais à partir du modèle anglais:
model_EN = gensim.models.Word2Vec.load_word2vec_format(model_file_EN, binary=True)
vector_w_en=model_EN[WORD_EN]
et ensuite d'interroger 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 mis en œuvre, dans C à l'aide de la distance initiale de la fonction dans le word2vec paquet. Mais, maintenant, j'ai besoin qu'il soit en python, afin d'être en mesure de l'intégrer avec mes autres scripts.
Savez-vous si il existe déjà une méthode dans gensim.models.Word2Vec
de la bibliothèque ou d'autres bibliothèques qui fait cela? Dois-je la mettre en œuvre en moi-même?
most_similar(..)
retour des scores pour vous? Je suis représentant d'une fonction personnalisée que vous écrivez, qui appelle most_similar
pour chaque mot dans le vecteur, ajoute les résultats de TOUS à la même liste et puis trie sur le score et les retours.Grâce nbryans. Si il n'y a aucune méthode qui fait cela, je dois la mettre en œuvre comme suit: pour chaque mot dans le vocabulaire obtenir son correspondant vecteur à partir du modèle. Calculer la similarité cosinus du vecteur d'entrée et le retour. Et puis retour au haut de la plupart des autres similaires. Mais, j'ai pensé qu'une telle méthode pourrait exister; ce qui ne semble pas.
Salut amin, avez-vous mis en place votre méthode? si oui, alors je suis intéressé à savoir pourquoi utilisez-vous de la similarité cosinus au lieu de la distance euclidienne?
Salut @MiNdFrEaK, j'ai mis en œuvre par moi-même. eh bien, en fait c'était pas une grosse affaire, mais à l'époque, je me demandais juste si il a déjà été mis en œuvre et que je puisse l'utiliser de la tablette. Malheureusement, très peu de temps après que j'ai cessé de travailler sur ce sujet. J'ai besoin de regarder dans mes codes pour trouver ma mise en œuvre. Je vais vous laisser savoir une fois que j'ai trouver.
OriginalL'auteur amin | 2016-06-14
Vous devez vous connecter pour publier un commentaire.
La méthode
similar_by_vector
renvoie les N premiers la plupart des mots similaires par vecteur:OriginalL'auteur user48135
Je ne pense pas que ce que vous essayez d'atteindre pourrait jamais donner une réponse précise. Tout simplement parce que les deux modèles sont formés séparément. Et bien qu'à la fois l'anglais et le modèle allemand aura des distances similaires entre leurs mot de vecteurs. Il n'y a aucune garantie que le vecteur de mot "Maison" va dans la même direction que le vecteur de mot pour "Haus'.
En termes simples, si vous avez suivi les deux modèles avec un vecteur de taille=3.
Et 'Maison' a vecteur [0.5,0.2,0.9], il n'y a aucune garantie que la "Haus" vecteur [0.5,0.2,0.9] ou même quelque chose de proche de que les.
Afin de résoudre ce problème, vous pourriez d'abord traduire le mot anglais vers l'allemand et ensuite utiliser le vecteur de ce mot à rechercher des mots semblables dans le modèle allemand.
TL:DR;
Vous ne pouvez pas il suffit de le brancher dans des vecteurs à partir d'un modèle de langue dans une autre et s'attendre à avoir des résultats précis.
OriginalL'auteur Dachrimar