2016-01-16 36 views
2

LDA model generates different topics everytime i train on the same corpus中,通過設置np.random.seed(0),LDA模型將始終以完全相同的方式進行初始化和訓練。確保gensim爲同一數據上的不同運行生成相同的Word2Vec模型

gensim開始的Word2Vec型號是否一樣?通過將隨機種子設置爲常量,相同數據集上的不同運行會生成相同的模型嗎?

但奇怪的是,它已經給我相同的載體在不同的情況下。

>>> from nltk.corpus import brown 
>>> from gensim.models import Word2Vec 
>>> sentences = brown.sents()[:100] 
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4) 
>>> model[word0] 
array([ 0.04985042, 0.02882229, -0.03625415, -0.03165979, 0.06049283, 
     0.01207791, 0.04722737, 0.01984878, -0.03026265, 0.04485954], dtype=float32) 
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4) 
>>> model[word0] 
array([ 0.04985042, 0.02882229, -0.03625415, -0.03165979, 0.06049283, 
     0.01207791, 0.04722737, 0.01984878, -0.03026265, 0.04485954], dtype=float32) 
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4) 
>>> model[word0] 
array([ 0.02596745, 0.01475067, -0.01839622, -0.01587902, 0.03079717, 
     0.00586761, 0.02367715, 0.00930568, -0.01521437, 0.02213679, 
     0.01043982, -0.00625582, 0.00173071, -0.00235749, 0.01309298, 
     0.00710233, -0.02270884, -0.01477827, 0.01166443, 0.00283862], dtype=float32) 
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4) 
>>> model[word0] 
array([ 0.02596745, 0.01475067, -0.01839622, -0.01587902, 0.03079717, 
     0.00586761, 0.02367715, 0.00930568, -0.01521437, 0.02213679, 
     0.01043982, -0.00625582, 0.00173071, -0.00235749, 0.01309298, 
     0.00710233, -0.02270884, -0.01477827, 0.01166443, 0.00283862], dtype=float32) 
>>> exit() 
[email protected]:~$ python 
Python 2.7.11 (default, Dec 15 2015, 16:46:19) 
[GCC 4.8.4] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from nltk.corpus import brown 
>>> from gensim.models import Word2Vec 
>>> sentences = brown.sents()[:100] 
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4) 
>>> word0 = sentences[0][0] 
>>> model[word0] 
array([ 0.04985042, 0.02882229, -0.03625415, -0.03165979, 0.06049283, 
     0.01207791, 0.04722737, 0.01984878, -0.03026265, 0.04485954], dtype=float32) 
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4) 
>>> model[word0] 
array([ 0.02596745, 0.01475067, -0.01839622, -0.01587902, 0.03079717, 
     0.00586761, 0.02367715, 0.00930568, -0.01521437, 0.02213679, 
     0.01043982, -0.00625582, 0.00173071, -0.00235749, 0.01309298, 
     0.00710233, -0.02270884, -0.01477827, 0.01166443, 0.00283862], dtype=float32) 

這是真的,那麼默認的隨機種子是固定的嗎?如果是這樣,那麼默認的隨機種子數是多少?還是因爲我正在測試一個小數據集?

如果該隨機種子是固定的,對相同的數據不同的運行返回相同的矢量這是真的,爲規範的代碼或文檔的鏈接,將不勝感激。

回答

2

是,默認隨機種子被固定到1,如在https://radimrehurek.com/gensim/models/word2vec.html由作者描述。每個單詞的矢量使用單詞+ str(種子)連接的散列進行初始化。

散列使用的功能,但是,是Python的初步建於散列函數,並且可以產生不同的結果,如果兩個機器在

上面所列內容並非詳盡無遺。它是否涵蓋你的問題?

編輯

如果你想確保一致性,您可以提供自己的散列函數在word2vec

一個非常簡單的(壞的)例子說法是:

def hash(astring): 
    return ord(aastring[0]) 

model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4, hashfxn=hash) 

print model[sentences[0][0]] 
2

按Gensim的文檔,執行完全確定性,可重複的運行,你必須限制模式,一個工作線程,以elimin從OS線程調度中訂購抖動。

一個簡單的參數修改您的代碼應該做的伎倆。

model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=1) 
1

只是對隨機性的評論。

如果一個人正在與gensim的W2V模型,並使用Python版本> = 3.3,請記住,散列隨機默認情況下開啓。如果您在兩次執行之間尋求一致性,請確保設置PYTHONHASHSEED環境變量。例如。當你運行你的代碼時,下一次你生成一個模型(使用相同的散列種子),它將與先前生成的模型相同(假設所有其他隨機控制步驟如上所述 - 隨機狀態和單身工作者)。 有關詳細信息,請參閱gensim's W2V sourcePython docs

相關問題