關於word2vec,首先須要弄清楚它並非一個模型或者DL算法,而是描述從天然語言到詞向量轉換的技術。詞向量化的方法有不少種,最簡單的是one-hot編碼,可是one-hot會有維度災難的缺點,並且one-hot編碼中每一個單詞都是互相獨立的,不能刻畫詞與詞之間的類似性。目前最具備表明性的詞向量化方法是Mikolov基於skip-gram和negative sampling開發的,也是你們一般所認爲的word2vec。這種方法基於分佈假設(Distributed Hypothesis)理論,認爲不一樣的詞語若是出如今相同的上下文環境中就會有的類似的語義。word2vec最終將向量表示爲低維的向量,具備類似語義的單詞的向量之間的距離會比較小,部分詞語之間的關係可以用向量的運算表示。例如 vec("Germany")+vec("capital")=vec("Berlin")。tensorflow官網中有關於word2vec的教程,可視化的結果很是直接的表現了word2vec的優勢。這篇筆記嘗試一步一步梳理word2vec,主要是skip-gram和negative sampling,大部分的內容來自於參考資料1,資料1是國外MIT博士word2vec的解讀,最爲總結學習很是適合。html
skip-gram是簡單的三層網絡模型,由輸入、映射和輸出三層組成。skip-gram是神經網絡語言模型的一種,與CBOW相反,skip-gram是由目標詞彙來預測上下文詞彙,最終目標是最大化語料庫Text出現的機率。例如:語料庫爲「the quick brown fox jumped over the lazy dog」(實際語料庫中單詞的數量會很很是大),當上下文窗口爲1時,skip-gram的任務是從‘quick’預測‘the’和‘brown’,從‘brown’預測‘quick’和‘fox’...所以訓練skip-gram的輸入輸出對(input,output)爲:(quick, the), (quick, brown), (brown, quick), (brown, fox), ...算法
假設給定語料庫Text,w是Text中的一個單詞,c是w的上下文,skip-gram的目標是最大化語料庫Text的機率。theta 是模型的參數,C(w)是單詞w的上下文,skip-gram的目標函數以下:api
使用softmax表示條件機率p(c|w),Vc,Vw分別表示單詞c和w的向量表示,C表示全部可能的上下文,就是語料庫Text中全部不一樣的單詞。網絡
取對數,最終獲得skip-gram的目標函數:wordpress
這個目標函數因爲須要對全部可能的c‘求和,c’的數量爲整個語料庫Text中的詞,通常會很是大,所以優化上述的目標是的計算代價是很是大的。有兩種方法解決這個問題,一是使用層級softmax(Hierarchy softmax)代替softmax,另外一種使用Negative sampling。看paper發現兩種方法的效果都挺不錯的,可是Mikolov挺推薦使用Negative sampling的。函數
Mikolov 在paper證明了Negative sampling 很是高效。實際上,negative sampling 基於skip-gram模型的,可是使用了另外一個優化函數。它的基本思想是考慮(w,c)對是否是來自訓練數據,p(D=1|w,c)表示這個(w,c)隊來自於語料庫,p(D=0|w,c)=1-p(D=1|w,c)表示(w,c)隊不是來自於語料庫Text。如今優化的目標是:學習
p(D=1|w,c)可使用sofmax,準確的來講是邏輯迴歸表示:優化
這個目標函數有一個很是簡單的解,迭代調整theta使得Vc=Vw,Vc.Vw=k,當比較大的時候k≈40時,p(D=1|w,c)=1,很顯然這並非咱們所要的解。咱們須要一種機制去防止全部的向量都相等,一種方法是給模型提供一些(w,c)對,使得p(D=1|w,c)=1很小,例如這些(w,c)對並非Text中真實存在的,而是隨機產生的,這就稱之爲「Negative sampling」。這些隨機產生的(w,c)對組成集合D‘。所以最終的Negative sampling 的優化函數以下所示,能夠看出求解的計算量並非很大。Mikolov 在論文中提到,對高頻詞彙作二次抽樣(subsampling)和去除出現次數很是少的詞(pruning rare-word)不只能加快訓練的速度,並且能提升模型的準確度,效果會更好。ui
參考tennsorflow官方教程:https://www.tensorflow.org/versions/r0.9/tutorials/word2vec/index.html編碼
[1]. word2vec Explained: Deriving Mikolov et al.'s Negative-Sampling Word-Embedding Method
[2]. Distributed Representations of Words and Phrases and their Compositionality
[3]. Vector Representations of Words
[4]. 深度學習word2Vec筆記