2016-06-10 14 views
0

Ich versuche, das Word2vec-Modell in der Bibliothek Gensim in Python implementiert anzuwenden. Ich habe eine Liste von Sätzen (jeder Satz ist eine Liste von Wörtern).Verschiedene Modelle mit Gensim Word2Vec auf Python

Zum Beispiel lassen Sie uns:

sentences=[['first','second','third','fourth']]*n 

und ich zwei identische Modelle implementieren:

model = gensim.models.Word2Vec(sententes, min_count=1,size=2) 
model2=gensim.models.Word2Vec(sentences, min_count=1,size=2) 

Ich stelle fest, dass die Modelle manchmal die gleichen sind, und manchmal unterschiedlich sind, je nach dem Wert von n.

Zum Beispiel, wenn n = 100 I erhalten

print(model['first']==model2['first']) 
True 

während für n = 1000:

print(model['first']==model2['first']) 
False 

Wie es möglich ist?

Vielen Dank!

+0

Eigentlich der zweite Fall, wenn das Ergebnis des Textes True ist, ist mit n = 5000 – Valentina

+0

In Der Code, den Sie eingefügt haben, 'Modell' trainiert auf' sententes' und Modell2 trainiert auf 'sätzen'. Ist das ein Kopierfehler oder ist das Ihr tatsächlicher Code? –

+0

Leider ist es nur ein Kopierfehler. – Valentina

Antwort

1

am gensim Suche documentation, gibt es einige Randomisierung, wenn Sie Word2Vec laufen:

seed = für den Zufallszahlengenerator. Anfangsvektoren für jedes Wort werden mit einem Hash der Verkettung von Wort + Str (Seed) versehen. Beachten Sie, dass Sie für einen vollständig deterministisch reproduzierbaren Lauf auch das Modell auf einen einzelnen Worker-Thread beschränken müssen, um den Jitter der Bestellung aus der OS-Thread-Planung zu eliminieren.

Wenn Sie also reproduzierbare Ergebnisse haben wollen, müssen Sie die Samen setzen:

In [1]: import gensim 

In [2]: sentences=[['first','second','third','fourth']]*1000 

In [3]: model1 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2) 

In [4]: model2 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2) 

In [5]: print(all(model1['first']==model2['first'])) 
False 

In [6]: model3 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2, seed = 1234) 

In [7]: model4 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2, seed = 1234) 

In [11]: print(all(model3['first']==model4['first'])) 
True 
+0

In Python 3 erfordert die Reproduzierbarkeit zwischen Interpreter-Starts auch die Verwendung der PYTHONHASHSEED-Umgebungsvariablen, um Hash-Randomisierung zu steuern. Also, müssen Sie Evan.oman Skript ausführen, indem Sie Terminal eingeben 'PYTHONHASHSEED = 0 Python .py' – Andrei