2.7 負採樣-深度學習第五課《序列模型》-Stanford吳恩達教授

負採樣 (Negative Sampling)

在上個視頻中,你見到了Skip-Gram模型如何幫助你構造一個監督學習任務,把上下文映射到了目標詞上,它如何讓你學到一個實用的詞嵌入。但是它的缺點就在於softmax計算起來很慢。在本視頻中,你會看到一個改善過的學習問題叫做負採樣,它能做到與你剛纔看到的Skip-Gram模型相似的事情,但是用了一個更加有效的學習算法,讓我們來看看這是怎麼做到的。

在本視頻中大多數的想法源於Tomas Mikolov,Ilya Sutskever,Kai Chen,Greg CorradoJeff Dean

Mikolov T, Sutskever I, Chen K, et al. Distributed Representations of Words and Phrases and their Compositionality[J]. 2013, 26:3111-3119.)

我們在這個算法中要做的是構造一個新的監督學習問題,那麼問題就是給定一對單詞,比如orangejuice,我們要去預測這是否是一對上下文詞-目標詞(context-target)。

在這個例子中orangejuice就是個正樣本,那麼orangeking就是個負樣本,我們把它標爲0。我們要做的就是採樣得到一個上下文詞和一個目標詞,在這個例子中就是orangejuice,我們用1作爲標記,我把中間這列(下圖編號1所示)叫做詞(word)。這樣生成一個正樣本,正樣本跟上個視頻中生成的方式一模一樣,先抽取一個上下文詞,在一定詞距內比如說正負10個詞距內選一個目標詞,這就是生成這個表的第一行,即orange– juice -1的過程。然後爲了生成一個負樣本,你將用相同的上下文詞,再在字典中隨機選一個詞,在這裏我隨機選了單詞king,標記爲0。然後我們再拿orange,再隨機從詞彙表中選一個詞,因爲我們設想,如果隨機選一個詞,它很可能跟orange沒關聯,於是orange–book–0。我們再選點別的,orange可能正好選到the,然後是0。還是orange,再可能正好選到of這個詞,再把這個標記爲0,注意of被標記爲0,即使of的確出現在orange詞的前面。

在這裏插入圖片描述

總結一下,生成這些數據的方式是我們選擇一個上下文詞(上圖編號2所示),再選一個目標詞(上圖編號3所示),這(上圖編號4所示)就是表的第一行,它給了一個正樣本,上下文,目標詞,並給定標籤爲1。然後我們要做的是給定幾次,比如 KK 次(上圖編號5所示),我們將用相同的上下文詞,再從字典中選取隨機的詞,king、book、the、of等,從詞典中任意選取的詞,並標記0,這些就會成爲負樣本(上圖編號6所示)。出現以下情況也沒關係,就是如果我們從字典中隨機選到的詞,正好出現在了詞距內,比如說在上下文詞orange正負10個詞之內。

接下來我們將構造一個監督學習問題,其中學習算法輸入 xx ,輸入這對詞(上圖編號7所示),要去預測目標的標籤(上圖編號8所示),即預測輸出 yy 。因此問題就是給定一對詞,像orangejuice,你覺得它們會一起出現麼?你覺得這兩個詞是通過對靠近的兩個詞采樣獲得的嗎?或者你覺得我是分別在文本和字典中隨機選取得到的?這個算法就是要分辨這兩種不同的採樣方式,這就是如何生成訓練集的方法。

那麼如何選取 KKMikolov等人推薦小數據集的話, KK 從5到20比較好。如果你的數據集很大, KK 就選的小一點。對於更大的數據集 KK 就等於2到5,數據集越小 KK 就越大。那麼在這個例子中,我們就用 K=4K=4

在這裏插入圖片描述

下面我們講講學習從 xx 映射到 yy 的監督學習模型,這(上圖編號1所示: Softmax:p(tc)=exp(θtTec)j=110,000exp(θjTec)Softmax:p(t|c)=\frac{exp(\theta_t^Te_c)}{\sum_{j=1}^{10,000}exp(\theta_j^Te_c)} )的softmax模型。這是我們從上張幻燈片中得到的訓練集,這個(上圖編號2所示)將是新的輸入 xx ,這個(上圖編號3所示)將是你要預測的值 yy 。爲了定義模型,我們將使用記號 cc 表示上下文詞,記號 tt 表示可能的目標詞,我再用 yy 表示0和1,表示是否是一對上下文-目標詞。我們要做的就是定義一個邏輯迴歸模型,給定輸入的 cctt 對的條件下, y=1y=1 的概率,即:

P(y=1c,t)=σ(θtTec)P(y=1|c,t)=\sigma(\theta_t^Te_c)

這個模型基於邏輯迴歸模型,但不同的是我們將一個sigmoid函數作用於 θtTec\theta_t^Te_c ,參數和之前一樣,你對每一個可能的目標詞有一個參數向量 θt\theta_t 和另一個參數向量 ece_c ,即每一個可能上下文詞的的嵌入向量,我們將用這個公式估計 y=1y=1 的概率。如果你有 KK 個樣本,你可以把這個看作 1K\frac{1}{K} 的正負樣本比例,即每一個正樣本你都有 KK 個對應的負樣本來訓練一個類似邏輯迴歸的模型。

我們把這個畫成一個神經網絡,如果輸入詞是orange,即詞6257,你要做的就是輸入one-hot向量,再傳遞給 EE ,通過兩者相乘獲得嵌入向量 e6527e_{6527} ,你就得到了10,000個可能的邏輯迴歸分類問題,其中一個(上圖編號4所示)將會是用來判斷目標詞是否是juice的分類器,還有其他的詞,比如說可能下面的某個分類器(上圖編號5所示)是用來預測king是否是目標詞,諸如此類,預測詞彙表中這些可能的單詞。把這些看作10,000個二分類邏輯迴歸分類器,但並不是每次迭代都訓練全部10,000個,我們只訓練其中的5個,我們要訓練對應真正目標詞那一個分類器,再訓練4個隨機選取的負樣本,這就是 K=4K=4 的情況。所以不使用一個巨大的10,000維度的softmax,因爲計算成本很高,而是把它轉變爲10,000個二分類問題,每個都很容易計算,每次迭代我們要做的只是訓練它們其中的5個,一般而言就是 K+1K+1 個,其中 KK 個負樣本和1個正樣本。這也是爲什麼這個算法計算成本更低,因爲只需更新 K+1K+1 個邏輯單元, K+1K+1 個二分類問題,相對而言每次迭代的成本比更新10,000維的softmax分類器成本低。

你也會在本週的編程練習中用到這個算法,這個技巧就叫負採樣。因爲你做的是,你有一個正樣本詞orangejuice,然後你會特意生成一系列負樣本,這些(上圖編號6所示)是負樣本,所以叫負採樣,即用這4個負樣本訓練,4個額外的二分類器,在每次迭代中你選擇4個不同的隨機的負樣本詞去訓練你的算法。

在這裏插入圖片描述

這個算法有一個重要的細節就是如何選取負樣本,即在選取了上下文詞orange之後,你如何對這些詞進行採樣生成負樣本?一個辦法是對中間的這些詞進行採樣,即候選的目標詞,你可以根據其在語料中的經驗頻率進行採樣,就是通過詞出現的頻率對其進行採樣。但問題是這會導致你在like、the、of、and諸如此類的詞上有很高的頻率。另一個極端就是用1除以詞彙表總詞數,即 1v\frac{1}{|v|} ,均勻且隨機地抽取負樣本,這對於英文單詞的分佈是非常沒有代表性的。所以論文的作者Mikolov等人根據經驗,他們發現這個經驗值的效果最好,它位於這兩個極端的採樣方法之間,既不用經驗頻率,也就是實際觀察到的英文文本的分佈,也不用均勻分佈,他們採用以下方式:

P(wi)=f(wi)34j=110,000f(wj)34P(w_i)=\frac{f(w_i)^{\frac34}}{\sum_{j=1}^{10,000}f(w_j)^{\frac34}}

進行採樣,所以如果 f(wi)f(w_i) 是觀測到的在語料庫中的某個英文詞的詞頻,通過 34\frac34 次方的計算,使其處於完全獨立的分佈和訓練集的觀測分佈兩個極端之間。我並不確定這是否有理論證明,但是很多研究者現在使用這個方法,似乎也效果不錯。

總結一下,你已經知道了在softmax分類器中如何學到詞向量,但是計算成本很高。在這個視頻中,你見到了如何通過將其轉化爲一系列二分類問題使你可以非常有效的學習詞向量。如果你使用這個算法,你將可以學到相當好的詞向量。當然和深度學習的其他領域一樣,有很多開源的實現,當然也有預訓練過的詞向量,就是其他人訓練過的然後授權許可發佈在網上的,所以如果你想要在NLP問題上取得進展,去下載其他人的詞向量是很好的方法,在此基礎上改進。

Skip-Gram模型就介紹到這裏,在下個視頻中,我會跟你分享另一個版本的詞嵌入學習算法GloVe,而且這可能比你之前看到的都要簡單。

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