2016-10-16 3 views
5

Den Tensorflow lesen word2vec model output Wie kann ich die Wörter ausgeben, die zu einem bestimmten Wort gehören?word2vec - die nächsten Wörter erhalten

Lesen der src: https://github.com/tensorflow/tensorflow/blob/r0.11/tensorflow/examples/tutorials/word2vec/word2vec_basic.py kann sehen, wie das Bild geplottet wird.

Gibt es eine Datenstruktur (z. B. Wörterbuch), die im Rahmen des Modelltrainings erstellt wurde, um auf die nächstgelegenen n Wörter zuzugreifen, die dem angegebenen Wort am nächsten sind? Zum Beispiel, wenn word2vec Bild erzeugt:

enter image description here

Bild src: https://www.tensorflow.org/versions/r0.11/tutorials/word2vec/index.html

In diesem Bild werden die Worte "auf, er, es in demselben Cluster enthalten sind, gibt es eine Funktion, die als nimmt Eingabe 'to' und gibt 'he, it' aus (in diesem Fall n = 2)?

Antwort

4

Dieser Ansatz gilt für word2vec im Allgemeinen. Wenn Sie das Word2vec in Text/Binär-Datei wie Google/GloVe Word-Vektor speichern können. Dann brauchen Sie nur die gensim.

zu installieren:

Via github

Python-Code:

from gensim.models import Word2Vec 

gmodel=Word2Vec.load_word2vec_format(fname) 
ms=gmodel.most_similar('good',10) 
for x in ms: 
    print x[0],x[1] 

Dies wird jedoch alle Worte sucht, um die Ergebnisse zu geben, gibt es ungefähren nächsten Nachbarn (ANN), die Sie das Ergebnis schneller, aber mit einem Kompromiss in der Genauigkeit.

In der neuesten Gensim, annoy wird verwendet, um die ANN durchzuführen, siehe hierzu notebooks für weitere Informationen.

Flann is another library for Approximate Nearest Neighbors.

0

Get gensim und similar_by_word Methode auf gensim.models.Word2Vec Modell verwenden.

similar_by_word dauert 3 Parameter,

  1. Das Eingangswort
  2. n - für Top n ähnliche Wörter (optional, Standard = 10)
  3. restrict_vocab (optional, default = None)

Beispiel

import gensim, nltk 

class FileToSent(object): 
    """A class to load a text file efficiently """ 
    def __init__(self, filename): 
     self.filename = filename 
     # To remove stop words (optional) 
     self.stop = set(nltk.corpus.stopwords.words('english')) 

    def __iter__(self): 
     for line in open(self.filename, 'r'): 
      ll = [i for i in unicode(line, 'utf-8').lower().split() if i not in self.stop] 
      yield ll 

Dann auf Ihre Eingabe Sätze abhängig (sentence_file.txt),

sentences = FileToSent('sentence_file.txt') 
model = gensim.models.Word2Vec(sentences=sentences, min_count=2, hs=1) 
print model.similar_by_word('hack', 2) # Get two most similar words to 'hack' 
# [(u'debug', 0.967338502407074), (u'patch', 0.952264130115509)] (Output specific to my dataset)