Comment utiliser word2vec pour calculer la distance de similarité en donnant 2 mots

Word2vec est un outil open source pour calculer la distance de mots fournis par Google.Il peut être utilisé en saisissant un mot et en produisant les listes de mots classés selon la similitude. par exemple,

Entrée:

france

Sortie:

            Word       Cosine distance

            spain              0.678515
          belgium              0.665923
      netherlands              0.652428
            italy              0.633130
      switzerland              0.622323
       luxembourg              0.610033
         portugal              0.577154
           russia              0.571507
          germany              0.563291
        catalonia              0.534176

cependant, ce que je dois faire est de calculer la distance de similarité en donnant 2 mots. Si je donne la "france" et l' "Espagne", Comment puis-je obtenir la note de 0,678515 sans lire toute la liste des mots en donnant juste "france".

22
demandé sur Franck Dernoncourt 2014-02-24 09:58:34

4 réponses

gensim a une implémentation Python de Word2Vec qui fournit un utilitaire intégré pour trouver la similarité entre deux mots donnés en entrée par l'utilisateur. Vous pouvez consulter les pages suivantes:

  1. Intro:http://radimrehurek.com/gensim/models/word2vec.html
  2. Tutoriel: http://radimrehurek.com/2014/02/word2vec-tutorial/

la syntaxe en Python pour trouver la similitude entre deux mots va comme ceci:

>> from gensim.models import Word2Vec
>> model = Word2Vec.load(path/to/your/model)
>> model.similarity('france', 'spain')
24
répondu Satarupa Guha 2016-10-31 01:21:48

Comme vous le savez word2vec peut représenter un mot comme un vecteur mathématique. Donc, une fois que vous vous entraînez le modèle, vous pouvez obtenir les vecteurs des mots spain et france et calculer la distance cosinus (produit dot).

un moyen facile de faire ceci est d'utiliser Python wrapper de word2vec. Vous pouvez obtenir le vecteur en utilisant ceci:

>>> model['computer'] # raw numpy vector of a word
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)

pour calculer les distances entre deux mots, vous pouvez faire ce qui suit:

>>> import numpy    
>>> cosine_similarity = numpy.dot(model['spain'], model['france'])/(numpy.linalg.norm(model['spain'])* numpy.linalg.norm(model['france']))
23
répondu phyrox 2016-10-30 17:13:26

j'ai juste trébuché sur ce tout en cherchant comment faire cela en modifiant la distance d'origine.version c, pas en utilisant une autre bibliothèque comme gensim.

Je n'ai pas trouvé de réponse donc j'ai fait quelques recherches, et je les partage ici pour d'autres qui veulent aussi savoir comment le faire dans la mise en œuvre originale.

après avoir regardé à travers la source C, vous verrez que ' bi ' est un tableau d'index. Si vous fournissez deux mots, l'index pour word1 sera en bi[0] et l'index de word2 sera en bi[1].

Le modèle " M " est un tableau de vecteurs. Chaque mot est représenté comme un vecteur avec la dimension "taille".

en utilisant ces deux index et le modèle des vecteurs, cherchez - les et calculez la distance cosinus (qui est la même que le produit de point) comme ceci:

dist = 0;
for (a = 0; a < size; a++) {
    dist += M[a + bi[0] * size] * M[a + bi[1] * size];
}

après cela, la valeur 'dist' est la similitude cosinus entre les deux mots.

3
répondu binarymax 2016-03-18 16:52:26

j'ai développé un code pour aider à calculer la similarité cosinus pour 2 phrases / SKUs en utilisant gensim. Le code se trouve ici https://github.com/aviralmathur/Word2Vec

Le code est d'utiliser les données pour Kaggle de la concurrence sur Crowdflower

il a été développé en utilisant le code pour le tutoriel Kaggle sur Word2Vec disponible ici https://www.kaggle.com/c/word2vec-nlp-tutorial

j'espère que cela aide

-1
répondu Aviral Mathur 2015-08-19 14:18:45