天天看點

python3下如何使Word2Vec每次運作結果一緻

    最近在使用Word2Vec時發現一個奇怪的問題,那就是每次運作出來的結果不一緻,這就是得程式複現帶來了很多麻煩。多方查閱資料後終于解決了這個難題,下面說一下我的解決方案。

     查閱Word2Vec的官方文檔,在seed參數哪裡可以發現這樣的解釋:

seed (int) – Seed for the random number generator. Initial vectors for each word are seeded with a hash of the concatenation of word + str(seed). Note that for a fully deterministically-reproducible run, you must also limit the model to a single worker thread (workers=1), to eliminate ordering jitter from OS thread scheduling. (In Python 3, reproducibility between interpreter launches also requires use of the PYTHONHASHSEED environment variable to control hash randomization)

也就是說在python2中想要使Word2Vec每次運作結果一緻,隻要設定seed并且将workers設為1就可以了,但是在python3中還要設定PYTHONHASHSEED的環境變量。

    接下來就是設定PYTHONHASHSEED的環境變量。在設定環境變量時,在python程式内通過os.environ好像并不能起到作用,必須把PYTHONHASHSEED設定到環境變量中。

右擊計算機(我的電腦)-》選擇屬性-》在彈出的面闆中選擇進階系統設定-》選擇環境變量

在使用者變量哪裡建立一個使用者變量,添加PYTHONHASHSEED,并随機設定一個整數值就可以了。

python3下如何使Word2Vec每次運作結果一緻

然後确定退出,重新運作python程式,發現每次跑出結果一緻,問題解決。