詞向量的發展

1、n-gram-modelhtml

談到詞向量則必需要從語言模型講起,傳統的統計語言模型是對於給定長度爲m的句子,計算其機率分佈P(w1, w2, ..., wm),以表示該句子存在的可能性。該機率可由下列公式計算獲得:網絡

但實際過程當中句子的長度稍長便會爲估計帶來很大難度,所以n-gram 模型對上述計算進行簡化:假定第i個詞的出現僅與其前n-1個詞有關,即:函數

實際計算中,一般採用n元短語在語料中出現的頻率來估計其機率:學習

爲保留句子原有的順序信息,咱們固然但願n越大越好,但實際上當n略大時,該n元短語在語料中出現的頻率就會越低,用上式估計獲得的機率就容易出現數據稀疏的問題。而神經網絡語言模型的出現,有效地解決了這個問題。優化

2、Neural Network Language Model(NNLM)ui

神經網絡語言模型不使用頻率來估計n元短語出現的機率,而是經過神經網絡訓練獲得一個語言模型,因此會有以下優點:編碼

首先將原始文本進行one-hot編碼,在分別乘以詞嵌入矩陣,獲得每一個詞的詞向量表示,拼接起來做爲輸入層。輸出層後加上softmax,將y轉換爲對應的機率值。模型採用隨機梯度降低對atom

進行最大化。spa

3、CBOW(continous Bag of words)3d

CBOW的主要思想是將一句話中的某個詞挖去,用其上下文對其進行預測,輸出的時候是一個哈夫曼樹,或者稱之爲分層softmax,採用的也是隨機梯度降低法進行優化。

4、CBOW的優化-Hierarchical Softmax

爲何要用Hierarchical Softmax?

未優化的CBOW和Skip-gram中,輸出層後採用通常的softmax層,在預測每一個詞的機率時都要累加一次分母的歸一化項,而指數計算的複雜度又比較高,所以一旦詞典的規模比較大,預測的效率將會極其低下。

 

Hierarchical Softmax首先以詞典中的每一個詞在語料中出現的次數(或頻率)爲權重,構建一棵哈夫曼樹,葉子節點爲詞典中的每一個詞的one-hot表示,每一個非葉子結點也表示爲一個向量。此時,從根節點到每個葉子節點的路徑均可以由一串哈夫曼編碼來表示,如假設向左結點爲0,向右結點爲1,上圖中的「cat」就能夠表示爲01.

 

在預測過程當中,每個非葉子結點都用自身的向量表示來作一次二分類(如使用邏輯迴歸),分類的結果便導向其是去到左結點仍是右結點,這樣一來,預測爲"cat"的機率就可表示爲P(結點1==0)*P(結點5==1)了,更復雜的樹結構也以此類推。此法在預測某一個特定的詞的機率時就只需考慮從根節點到該葉子結點這幾步了,從O(V)級別降到O(log(v)),使預測的效率大大提高

 

 

原始模型須要計算

因爲使用的是softmax()函數,時間複雜度爲 O(|V|),所以計算代價很大,對大規模的訓練語料來講,很是不切實際的。

 

Hierarchical Softmax是一種對輸出層進行優化的策略,輸出層從原始模型的利用softmax計算機率值改成了利用Huffman樹計算機率值以詞表中的所有詞做爲葉子節點,詞頻做爲節點的權,構建Huffman樹,做爲輸出。Huffman樹是二叉樹,在葉子節點及葉子節點的權給定的狀況下,該樹的帶權路徑長度最短(一個節點的帶權路徑長度指根節點到該節點的路徑長度乘以該節點的權,樹的帶權路徑長度指所有葉子節點的帶權路徑長度之和)。

直觀上能夠看出,葉子節點的權越大,則該葉子節點就應該離根節點越近。所以對於模型來講就是,詞頻越高的詞,距離根節點就越近。從根節點出發,到達指定葉子節點的路徑是惟一的。Hierarchical Softmax正是利用這條路徑來計算指定詞的機率,而非用softmax來計算。改爲樹結構後,平均時間複雜度爲 O(log⁡|V|) ,相比於使用softmax()函數有很大提升。

5、Negative Sampling 負採樣

 負採樣的目的依然是爲改善在預測每個詞的機率時,普通softmax須要累加一次歸一化項帶來的高計算成本問題,其核心思想是將對每個詞機率的預測都轉化爲小規模的監督學習問題。具體地,對於語料中的某個句子,如「I want a glass of orange juice to go along with my cereal.」選取"orange"爲上文,而後把預測爲"juice"標記爲1(即正樣本),再選取句子中的k個其餘詞爲負樣本,假如k=4,就像這樣:

再將採樣到的這些樣本用來訓練一個邏輯迴歸模型。這樣一來,在預測"orange"一詞下文出現的詞的機率時,儘管仍是須要迭代比較屢次來看哪一個詞的機率最大,但在每次迭代時,計算softmax時:

分母的歸一化項就不用再像上式這樣累加詞典中全部的詞,僅須要累加採樣到的5個詞就行了,一樣大大地提升了訓練效率。至於k的選取,Mikolov的論文中說起對於規模比較小的語料,k通常選在5到20之間,規模較大則控制在5之內。

 關鍵是如何採樣?

 

參考:http://www.javashuo.com/article/p-githdxms-bq.html

          http://www.javashuo.com/article/p-pxbqyvyv-mg.html

相關文章
相關標籤/搜索