天天看點

讀《word2vec中的數學原理詳解》的一點了解

這裡添加一個連結,很好的一篇word2vec的文章,叫做《word2vec中的數學原理詳解》

點選打開連結

本人上傳了在知網看到的一篇 language model + RNN的文章,因為自己也是新手,是以上傳,如果需要,可以到我的下載下傳頁看一下,名稱叫 基于循環神經網絡的漢語語言模型模組化方法。

傳統的統計語言模型n-gram發展到神經機率語言模型,主要的一個改進就是網絡能夠以目前詞的上下文作為依據,預測下一個詞出現的機率。另外,因為采用embedding matrix,解決了資料稀疏的問題,是以表現的更好一些。當然神經機率語言模型的缺點也很明顯,就是計算速度慢。

讀《word2vec中的數學原理詳解》的一點了解

即,每根據一段話的上下文來确定中間的一個字,就要運作N次,其中N是詞典的大小,通常不會小于10k。

讀《word2vec中的數學原理詳解》的一點了解

想要訓練模型,必須要訓練詞向量和神經網絡參數,參數總數會非常大。個人估計應該能達到1M吧,因為隻是embedding matrix 就有N*M個參數,N表示詞典大小,M表示詞向量長度,即詞向量包含的特征數。當然,使用神經機率語言模型還有一個好處就當你的語言模型出來以後,

讀《word2vec中的數學原理詳解》的一點了解

就不需要每次都要統計了,而是直接計算出來就可以了,相比之下,統計語言模型就有一種聚類的感覺,現學現用。

而word2vec算是對神經機率語言模型的一種改進,主要是為了實作更快地計算速度。當然主要産物就是語言模型,副産物是embedding matrix。

改進主要針對輸出層進行。一種方式就是 分層模型hierarchical softmax,另一種是負采樣。

讀《word2vec中的數學原理詳解》的一點了解

hierarchical softmax的原理是基于二分法原理,在二叉樹上不斷延伸,當然因為機率本身并不是都相等,是以無法使用平衡二叉樹,基于資訊論隻是,huffman樹更合理一些。這樣上面的

讀《word2vec中的數學原理詳解》的一點了解

就不要一直靠不停周遊然後累加實作了,因為這種做法是O(N)複雜度,而采用二叉樹後,大約變成O(log(N))了,複雜度下降很多。

負采樣的原理是分母上不一定要全部都周遊,隻要周遊部分就可以了,這樣還是使用這個公式,但是計算複雜度也降低了。

通常:小資料集負樣本個數為5~20, 大資料集負樣本個數為2~5.

在negative sampling 的 skip-gram模型中,優化目标函數作出修改:

原目标

讀《word2vec中的數學原理詳解》的一點了解
讀《word2vec中的數學原理詳解》的一點了解

但是這樣會出現要找 w,就要找 u,要找 u,就要找 z,感覺要一直轉下去。

而且個人認為這種找法一個問題是找到w的最好的 contex(w) 個上下文,但是那些上下文單詞之間的上下文關系不一定就是最好的呀,比如,目前次為是 “個”,那麼在查找上下文時可能會出現上下文單詞變成 一、二、三、四、五、六、七,這樣的字,合成一句話就是“一二三四五六七個”,這樣就沒有意義了。

反而不如

讀《word2vec中的數學原理詳解》的一點了解
讀《word2vec中的數學原理詳解》的一點了解

查找contex(w)個字,這些字從單獨的skip-gram看可能不是最好的,但是它們的粘合度是最好的,就是這些字連起來時讓人看起來更舒服一點。

在我看來, CBOW就是小朋友上學時的給一句話,然後扣掉幾個字,讓你填上去,這時你要利用上下文關系來确定。

skip-gram就是,高中生做國文,給你一句古詩,讓你把古詩全文寫下了,你想,一首古詩能被你記住,肯定不是因為你隻是記住了其中一句吧,肯定是你先推出來某一句,然後在結合着幾句再找的。

使用word2vec進行訓練,一般需要大規模的語料(5GB以上),這些語料還需要精确的分詞,最終才能展現出訓練結果。

最後附上關于梯度下降法和梯度上升法的概念:

點選打開連結

繼續閱讀