https://blog.csdn.net/itplus/article/details/37969519html
https://blog.csdn.net/itplus/article/details/37969635算法
https://blog.csdn.net/itplus/article/details/37969817編程
https://blog.csdn.net/itplus/article/details/37969979多線程
https://blog.csdn.net/itplus/article/details/37998797工具
https://blog.csdn.net/itplus/article/details/37999613post
word2vec 是 Google 於 2013 年開源推出的一個用於獲取 word vector 的工具包,它簡單、高效,所以引發了不少人的關注。因爲 word2vec 的做者 Tomas Mikolov 在兩篇相關的論文 [3,4] 中並無談及太多算法細節,於是在必定程度上增長了這個工具包的神祕感。一些按捺不住的人因而選擇了經過解剖源代碼的方式來一窺究竟。學習
第一次接觸 word2vec 是 2013 年的 10 月份,當時讀了復旦大學鄭驍慶老師發表的論文[7],其主要工做是將 SENNA 的那套算法([8])搬到中文場景。以爲挺有意思,因而作了一個實現(可參見[20]),但苦於其中字向量的訓練時間太長,便選擇使用 word2vec 來提供字向量,沒想到中文分詞效果還不錯,立馬對 word2vec 另眼相看了一把,好奇心也隨之增加。url
後來,陸陸續續看到了 word2vec 的一些具體應用,而 Tomas Mikolov 團隊自己也將其推廣到了句子和文檔([6]),所以以爲確實有必要對 word2vec 裏的算法原理作個瞭解,以便對他們的後續研究進行追蹤。因而,沉下心來,仔細讀了一回代碼,算是基本搞明白裏面的作法了。第一個感受就是,「明明是個很簡單的淺層結構,爲何會被那麼多人沸沸揚揚地說成是 Deep Learning 呢?」spa
解剖 word2vec 源代碼的過程當中,除了算法層面的收穫,其實編程技巧方面的收穫也頗多。既然花了功夫來讀代碼,仍是把理解到的東西整理成文,給有須要的朋友提供點參考吧。.net
在整理本文的過程當中, 和深度學習羣的羣友@北流浪子([15,16])進行了屢次有益的討論,在此表示感謝。另外,也參考了其餘人的一些資料,都列在參考文獻了,在此對他們的工做也一併表示感謝。
做者:peghoty