word2vec的學習思路

夜裏坐在椅子上發着呆,想着到底接下來學點什麼比較合適,大腦裏把知識列舉了一遍,卻突然間把之前一直沒有想通的word2vec明白了一些。
大致說一下該算法的學習順序所及參考文獻。不會Latex的人只能截圖了…..

1. 多層神經網絡

 

 


熟悉神網的人就不用再看了,總之就是一個簡單的FeedForward運算, 然後通過基本的BP算法來做訓練。

2. 概率語言模型

需讀的paper:http://machinelearning.wustl.edu/mlpapers/paper_files/BengioDVJ03.pdf
該paper算是使用神經網絡來做概率語言模型的始祖之作了,學習過LDA的同學不妨對照LDA來理解這篇paper的思路,不看其具體實現算法,其最不同的地方應該是通過N-gram引入了context的概念。
paper在第二節最初的時候就指明瞭我們需要優化的目標函數:

 


第六頁的尾部及其第七頁的頂部給出了待優化的參數:

 

 


優化算法就是基本的BP算法,雖然參數很多,但是別害怕,整體思路依舊是個鏈式的積分法則而已。

3. 通過分層優化語言模型
需讀的paper:http://www.iro.umontreal.ca/labs/neuro/pointeurs/hierarchical-nnlm-aistats05.pdf
這篇paper的核心思想是如何解決所有詞遍歷的時間複雜度問題,可以看第三頁的右側中部:

 


paper將上一篇paper中的優化問題通過編碼改成了一個優化編碼位的問題,而接下來則是將該問題作爲了一個二分類問題來解,可以看第四頁的右側中部:

 


在paper的第五節中使用wordnet對詞進行編碼:
A very important component of the whole model is the choice of the words binary encoding, i.e. of the hierarchical word clustering. In this paper we combine empirical statistics with prior knowledge from the WordNet resource (Fellbaum, 1998). Another option would have been to use a purely data-driven hierarchical clustering of words, and there are many other ways in which the WordNet resource could have been used to influence the resulting clustering
這個略作了解就可以了,並不重要。

4. Extensions of recurrent neural network language model
這篇paper從google上只能找到對應的slide,paper是麻煩在校的同學幫我下的,各位不妨去搜一下。
這篇paper主要講了一些recurrent neural network來做language model的一些基礎的方法及其優化函數,另外很重要的一點是該文在Speedup techniques的時候指出了,詞出現的頻率是不等的,如果將詞分成20類的話,則第一類會出現很多類似“The”這種高頻詞,而最後一類則會是很多低頻詞。這也是word2vec優化效率的一個很重要的基礎。
此外,該文章很重要的一個優化技術則是將詞之間的條件概率模型轉換成了類和詞之間的條件概率模型,感興趣的同學不妨看一下。

5. Word2vec
需讀的paper:http://arxiv.org/pdf/1301.3781.pdf
嗯,就是Word2vec最基礎的那篇paper,其實paper上沒有講什麼內容。
2.1部分說明了時間複雜度的主要瓶頸:

 

在新的模型改進時,主要是做了如下的兩點:

 


6. 工程化實現
先吐個槽,Google的這個代碼寫的真心是讓人不忍過目,所以讀代碼之間各位不妨先自行整理一下代碼,把方法該拆的拆開,該刪的刪掉,該換行的給換個行.......


<1> ExpTable:這個地方如果讀過LibFm代碼的人應該清楚,就是利用了Pre-Computing的思想對一些之前的東西來做緩存。
<2> 霍夫曼編碼,這個地方是我之前看的最糾結的一個地方,但是讀了上面第三段說的paper各位應該就明白意思了,其實通過頻率對詞進行霍夫曼編碼的一個好處是大多數的詞編碼長度都很短,所以在做 P(a,b,c) = P(a | b,c) * P(b|c) * P(c) 這種運算的時候所需的次數都比較少,有效地降低了時間複雜度。

最後關於Skip-gram實現原理上沒有什麼區別,只是優化函數上略有不同,看一下paper的3.2節以及第五頁的配圖應該就很容易懂了。
發佈了55 篇原創文章 · 獲贊 16 · 訪問量 46萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章