2017-07-19 75 views
1

在word2vec中,有3層:輸入層,隱藏層和輸出層。分層輸出層中的單元數Softmax

如果我們使用傳統的softmax方法, 對於大小爲V的語料庫,輸出層的單元數也將是V(單熱矢量輸入)。

如果我們使用Hierarchical Softmax, 文章說只有V-1節點(在Huffman二叉樹中)。 這是否意味着在這種情況下輸出層只有V-1單元?

這裏是我閱讀參考: https://arxiv.org/pdf/1411.2738.pdf

非常感謝你。

回答

1

實際上,word2vec分層softmax實現會創建一個輸出層,其中的詞彙量與詞彙量一樣多。例如見原谷歌word2vec.c行:

https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L356

還是在gensim Python實現線:

https://github.com/RaRe-Technologies/gensim/blob/f3bf792ee1344ed17ad2836ab3c38b4210f59889/gensim/models/word2vec.py#L1171

然後,您可以看到字被分配單獨的霍夫曼碼和節點('點')在CreateBinaryTree(C)或create_binary_tree函數的輸出層中。

+1

但在頁面[CreateBinaryTree](https://github.com/tmikolov/word2vec/blob/20c129af10659f7c50e86e3be406df663beff438/word2vec.c#L218)中,節點數= V-1,與數字不一樣詞彙的詞彙? –

+0

啊,是的,你是對的。因此,原始的word2vec.c和gensim的實現都爲HS輸出權重分配了一個完整的詞表數組......但不使用最後一個插槽。所以,你的問題的答案可能似乎是,「是的,有V-1個活動節點,但還有一個是分配和未使用的」。您可能想嘗試更改現有代碼以少分配一個,並查看是否有任何事情中斷,以確認此解釋。 – gojomo

+0

我同意你的意見。感謝您的大力幫助! :P –