經典的語言模型是n-gram模型,該模型假設每個詞的生成只依賴於前N個詞,因此可以從大規模語料庫中統計每個詞的概率和基於前N個詞的條件概率來計算句子的概率。對於沒有出現的條件概率,采用平滑法進行估計。這種方法的假設太強,無法考慮更多的語境。而且訓練需要大量的語料,壹般的統計也只是到三元模型。
後來出現了神經網絡語言模型,可以在訓練語言模型的同時輸出詞向量。
也就是說,所有的詞向量模型的目標都是訓練壹個語言模型,最大化訓練數據中每個句子的概率。詞向量作為參數壹起訓練,當語言模型訓練好了,詞向量就有了。
2003年,bengio推出了神經概率語言模型,該模型使用每個單詞的分布式表示,即單詞向量表示,用三層神經網絡訓練出壹個好的語言模型。
第壹層是詞向量層,每個詞用詞向量代替,作為查找表的輸入。第二層是與第壹層連接的tanh層(隱藏層),第三層是與第壹層和第二層都連接的softmax輸出層。
網絡估計ngram片段的概率。輸入層是由n-1個單詞的單詞向量拼接而成的向量,輸出是|V|個單詞的概率,對應壹個|V|維向量。
假設單詞向量是m維的,隱藏層節點數是h,單詞列表大小是|V|,那麽
訓練目標是最大化所有ngram片段(n個連續單詞)的似然性,可以添加常規項。
詞向量也是壹個參數,用隨機梯度下降法訓練。訓練結束後,語言模型可用,詞向量也可用。
更多的詞向量模型可以參考Licstar在NLP (I)詞向量和語言模型中的深度學習。
與Bengio的模型相比,Word2Vec去掉了最耗時的非線性隱層計算,改為簡單的和隱層,提出了兩種模型:
壹種是CBOW模型,通過前後N個詞(上下文)預測當前詞的概率,隱含層對上下文詞的詞向量求和,所以節點數和詞向量的維數是相同的。
壹種是Skip-gram模型,通過單詞W來預測每個單詞在上下文中出現的概率,所以Skip-gram中的每個單詞向量代表了上下文的分布。
每個模型都有兩個選擇:分級softmax或負采樣。
分層Softmax結合了霍夫曼編碼,每個單詞的編碼對應的是從樹根到單詞的路徑。由路徑的每個節點計算的概率的乘積是當前預測單詞的概率。
事實上,分層softmax的思想借鑒了Hinton的分層對數雙線性模型。N元分層對數雙線性模型通過上下文預測下壹個單詞W的概率:單詞W對應的代碼中每壹位的條件概率的乘積。
負采樣的思想是隨機找壹些負樣本,通過計算對比度損失來優化。理論上稱為噪聲對比估計,損失函數為:
公式的推導可以參考:
其他參考: