skip-gram是word2vec中的主要模型之一(另乙個模型是cbow)。簡單來說,cbow是給定上下文,來**input-word;而skip-gram是給定input-word,來**上下文。
下面我們來理解skip-gram模型。首先,給定句子如下
the man who passes the sentence should swing the sword.-
選擇passes為中心詞,window-size設定為3,則訓練過程如下圖
通過該圖可以大致理解skip-gram的過程。
通過上圖可知,skip-gram中需要使用softmax來計算語料中各個詞出現的概率。並且字典的大小決定了神經網路的權重也會很大,更新權重非常耗時。
這是乙個非常耗時的計算。一般語料中都有幾千萬個單詞,計算量非常的大,所以才要引入負取樣來降低計算量。
負取樣(negative sampling)是構造了乙個新的有監督學習問題:給定兩個單詞,比如orange和juice,去**這是否是一對上下文詞-目標詞對(context-target),即是否這兩個詞會在一句話中相連出現,這也是乙個二分類問題。
負取樣其實是改變了1中的整個資料構建-訓練過程的,他的具體過程如下:
假設給定乙個text
通過對這個text中的詞對進行取樣,組成正負樣本對
context
word
target
orange
juice
1orange
king
0orange
book
0orange
the0
orange
off0
接下來,構造乙個有監督學習任務
要解決這個任務,我們有很多種訓練方式,比如
(1). 用上一步構建的所有語料來訓練乙個複雜神經網路,輸入context,輸出其與字典中各個詞是否為context-target的概率。但這樣的做法,訓練模型的代價很高。
(2)訓練很多個二分類器,每個二分類器只需要計算給定context與k+1個詞是否屬於context-target。這樣做的優點在於,每個二分類器都很容易計算,所以這比計算乙個很大的softmax代價要低。
所以我們選擇(2)進行訓練,每個二分類器(logistic),只需要輸入k+1個詞。比如對句子中的每乙個詞(選中某乙個詞作為context),進行訓練時,給定的資料集為上面2中所示。
就是對orange訓練乙個二分類器,其輸入為(juice,king,book,the,off),輸出為target(1,0,0,0,0)。此時只更新網路中對應部分的權重,其他部分的權重不更新。
所謂負取樣,就是你有乙個正樣本,比如orange和juice,然後你再隨機採用得到k個負樣本,比如orange和king。最終對每個context(比如這裡是orange)按照「訓練乙個小型二分類器」的思路來更新網路中對應部分的權重。
小議負取樣(Negative sampling)
訓練乙個神經網路意味著要輸入訓練樣本並且不斷調整神經元的權重,從而不斷提高對目標的準確 每當神經網路經過乙個訓練樣本的訓練,它的權重就會進行一次調整。所以,詞典的大小決定了我們的skip gram神經網路將會擁有大規模的權重矩陣,所有的這些權重需要通過數以億計的訓練樣本來進行調整,這是非常消耗計算資...
雜訊對比估計 負樣本取樣
目錄gutmann m u,hyvarinen a.noise contrastive estimation a new estimation principle for unnormalized statistical models c international conference on ar...
CBOW與Skip Gram模型基礎
用distributed representation我們可以較容易的分析詞之間的關係了,比如將我們的詞降到二維,我們會發現 其資料的輸入輸出分為cbow和skip gram 這樣我們這個cbow的例子裡,輸入八個詞向量,輸出的是所有詞的softmax概率 訓練的目標的期望訓練樣本特定次對應的sof...