天天看點

skip-gram負采樣原理skip-gram負采樣

skip-gram負采樣

自然語言處理領域中,判斷兩個單詞是不是一對上下文詞(context)與目标詞(target),如果是一對,則是正樣本,如果不是一對,則是負樣本。

采樣得到一個上下文詞和一個目标詞,生成一個正樣本(positive example),生成一個負樣本(negative example),則是用與正樣本相同的上下文詞,再在字典中随機選擇一個單詞,這就是負采樣(negative sampling)。

下圖為cbow和skip-gram模型:

skip-gram負采樣原理skip-gram負采樣

skip-gram模型輸入:

舉個例子:

我們知道對于每個input word來說,有多個output word(上下文)。例如我們的輸入是【熟悉】,上下文是[熟練掌握, java, python, shell],那麼【熟悉】這一個batch中就有四個訓練樣本[熟悉, 熟練掌握], [熟悉, java], [熟悉, python], [熟悉, shell]。

但是神經網絡模型隻能接受數值輸入,是以必須進行one-hot編碼,假設我們在訓練資料中隻能取出10000個不重複的單詞作為詞彙表,那麼我們對每個單詞編碼都是1 *10000的向量。

模型的輸入是10000維的向量,那麼輸出也是10000維(詞彙表的大小)向量,它包含了10000個機率,每一個機率代表着目前詞是輸入樣本中output word的機率大小。如下圖,神經網絡架構:

skip-gram負采樣原理skip-gram負采樣

對于輸出層用softmax,計算量很大,通常用“nagative sampling"(負采樣)計算,這樣,每個訓練樣本 隻能更新一小部分模型權重,進而減輕計算負擔。

當我們用訓練樣本(input word:“fox”, output word:“quick”)來訓練我們的神經網絡時,“fox”和“quick”都是經過one-hot編碼的。如果我們的vocabulary大小為10000時,在輸出層,我們希望“quick”單詞那個位置輸出1,其餘都是0。這些其餘我們期望輸出0的位置所對應的單詞我們成為“negative” word。

當使用負采樣時,我們将随機選擇一小部分的negative words(比如選5個negative words)來更新對應的權重。我們也會對我們的positive word進行權重更新(上面的例子指的是"quick")

在論文中,作者指出指出對于小規模資料集,選擇5-20個negative words會比較好,對于大規模資料集可以僅選擇2-5個negative words。

繼續閱讀