word2vector學習筆記(一)


word2vector學習筆記(一)


 最近研究了一下google的開源項目word2vector,http://code.google.com/p/word2vec/。

其實這玩意算是神經網絡在文本挖掘的一項成功應用。

本文是看了論文《Distributed Representations of Words and Phrases and their Compositionality》的學習筆記。


論文中,展示了幾種原始skip-gram模型的擴展。

頻繁詞下采樣可以加速訓練和提高了詞頻較少的詞語的特徵表示的精確度。

此外,對NCE做了簡單的變化來訓練skip-gram模型,對比於此前採用的hierarchical softmax,加速了訓練,優化了詞頻較高的詞語的特徵表示。

 

一 Skip-gram模型(傳統原始模型)

給定一串待訓練的詞語:

w1,w2,w3, . . . ,wT

我們的目標是最大化log概率的平均值,如下:


其中,

1 c是訓練上下文的大小。比如c是5,我們一次就拿5個連續的詞語來訓練。C越大,效果越好,但花的時間越多。

2 p(wt+j |wt)是表示wt條件下出現wt+j的概率。

 

基本的skip-gram模型的p(wt+j |wt)公式是用softmax函數:


這個公式是不切實際的,因爲W太大了,通常是105–107


二 Hierarchical Softmax

這種是原始skip-gram模型的變形。

我們假設有這麼一棵二叉樹,每個葉子節點對應詞彙表的詞語,一一對應。所以我們可以通過這棵樹來找到一條路徑來找到某個詞語。比如我們可以對詞彙表,根據詞頻,建立一棵huffman樹。每個詞語都會對應一個huffman編碼,huffman編碼就反映了這個詞語在huffman樹的路徑。對於每個節點,都會定義孩子節點概率,左節點跟右節點的概率不同的,具體跟輸入有關。

我之前知道huffman樹就是用來壓縮的。沒想到用在這裏這麼神奇。

因此,給定一個詞,我們就知道該詞的編碼,就知道該詞在這個樹的路徑。我們的目的就是使得,給定一個輸入(這個輸入肯定不是目標詞語本身,而是它的上下文),使得該條路徑的概率最大。

 

拿一個具體的例子來分析。

比如,待訓練的詞組“我 愛 藍藍”。

我們要用“愛”的向量去預測“我”的向量。

輸入:愛

預測:我

假設,“我”的huffman編碼是:1 1 0 1。

於是,我們就在huffman樹上從跟節點沿着往下走,

每次走的時候,我們會根據當前節點和“愛”的向量算出(具體怎麼算先不管),走到下一個節點的概率是多少。於是,我們得到一連串的概率,我們的目標就是使得這些概率的連乘值(聯合概率)最大。


圖示左右節點的概率:



顯然,我們計算這個聯合概率的複雜度取決了詞語在huffman樹的路徑長度,顯然她比W小得多了。另外,由於按詞頻建立的huffman樹,詞頻高的,huffman編碼短,計算起來就比較快。詞頻高的需要計算概率的次數肯定多,而huffman讓高頻詞計算概率的速度比低頻詞的快。這也是很犀利的一個設計。

 

 

三 Negative Sampling

另一種可以取代hierarchical softmax的是Noise ContrastiveEstimation

 

Neg是nce的一種簡化


相當於換了目標函數。

函數前半部分表示一個正樣本,後半部分是若干個負樣本。



四 subsampling of Frequent Words

高頻詞二次抽樣

the vector representations of frequent words do not change significantly

after training on several million examples.

經過很多次迭代訓練之後,再次更新的時候高頻詞的向量不應該改變太大。

 

To counter the imbalance between the rare and frequent words, we used asimple subsampling approach:

each word wi in the training set is discarded with probabilitycomputed by the formula

爲了平衡低頻詞和高頻詞,使用了一種二次抽樣的方法。對於每個詞語,如果由以下公式算出的概率少某個值,則丟棄。



其中,t是一個設定的閾值,f是詞頻。



Learning Phrases

對於某些詞語,經常出現在一起的,我們就判定他們是短語。那麼如何衡量呢?用以下公式。


輸入兩個詞向量,如果算出的score大於某個閾值時,我們就認定他們是“在一起的”。

爲了考慮到更長的短語,我們拿2-4個詞語作爲訓練數據,依次降低閾值。






本文作者:linger

本文鏈接:http://blog.csdn.net/lingerlanlan/article/details/38048335



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章