2.7 负采样-深度学习第五课《序列模型》-Stanford吴恩达教授
負采樣 (Negative Sampling)
在上個視頻中,你見到了Skip-Gram模型如何幫助你構造一個監督學習任務,把上下文映射到了目標詞上,它如何讓你學到一個實用的詞嵌入。但是它的缺點就在于softmax計算起來很慢。在本視頻中,你會看到一個改善過的學習問題叫做負采樣,它能做到與你剛才看到的Skip-Gram模型相似的事情,但是用了一個更加有效的學習算法,讓我們來看看這是怎么做到的。
在本視頻中大多數的想法源于Tomas Mikolov,Ilya Sutskever,Kai Chen,Greg Corrado 和 Jeff Dean。
(Mikolov T, Sutskever I, Chen K, et al. Distributed Representations of Words and Phrases and their Compositionality[J]. 2013, 26:3111-3119.)
我們在這個算法中要做的是構造一個新的監督學習問題,那么問題就是給定一對單詞,比如orange和juice,我們要去預測這是否是一對上下文詞-目標詞(context-target)。
在這個例子中orange和juice就是個正樣本,那么orange和king就是個負樣本,我們把它標為0。我們要做的就是采樣得到一個上下文詞和一個目標詞,在這個例子中就是orange 和juice,我們用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。然后我們要做的是給定幾次,比如 KKK 次(上圖編號5所示),我們將用相同的上下文詞,再從字典中選取隨機的詞,king、book、the、of等,從詞典中任意選取的詞,并標記0,這些就會成為負樣本(上圖編號6所示)。出現以下情況也沒關系,就是如果我們從字典中隨機選到的詞,正好出現在了詞距內,比如說在上下文詞orange正負10個詞之內。
接下來我們將構造一個監督學習問題,其中學習算法輸入 xxx ,輸入這對詞(上圖編號7所示),要去預測目標的標簽(上圖編號8所示),即預測輸出 yyy 。因此問題就是給定一對詞,像orange和juice,你覺得它們會一起出現么?你覺得這兩個詞是通過對靠近的兩個詞采樣獲得的嗎?或者你覺得我是分別在文本和字典中隨機選取得到的?這個算法就是要分辨這兩種不同的采樣方式,這就是如何生成訓練集的方法。
那么如何選取 KKK ?Mikolov等人推薦小數據集的話, KKK 從5到20比較好。如果你的數據集很大, KKK 就選的小一點。對于更大的數據集 KKK 就等于2到5,數據集越小 KKK 就越大。那么在這個例子中,我們就用 K=4K=4K=4 。
下面我們講講學習從 xxx 映射到 yyy 的監督學習模型,這(上圖編號1所示: Softmax:p(t∣c)=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:p(t∣c)=∑j=110,000?exp(θjT?ec?)exp(θtT?ec?)? )的softmax模型。這是我們從上張幻燈片中得到的訓練集,這個(上圖編號2所示)將是新的輸入 xxx ,這個(上圖編號3所示)將是你要預測的值 yyy 。為了定義模型,我們將使用記號 ccc 表示上下文詞,記號 ttt 表示可能的目標詞,我再用 yyy 表示0和1,表示是否是一對上下文-目標詞。我們要做的就是定義一個邏輯回歸模型,給定輸入的 ccc , ttt 對的條件下, y=1y=1y=1 的概率,即:
P(y=1∣c,t)=σ(θtTec)P(y=1|c,t)=\sigma(\theta_t^Te_c)P(y=1∣c,t)=σ(θtT?ec?)
這個模型基于邏輯回歸模型,但不同的是我們將一個sigmoid函數作用于 θtTec\theta_t^Te_cθtT?ec? ,參數和之前一樣,你對每一個可能的目標詞有一個參數向量 θt\theta_tθt? 和另一個參數向量 ece_cec? ,即每一個可能上下文詞的的嵌入向量,我們將用這個公式估計 y=1y=1y=1 的概率。如果你有 KKK 個樣本,你可以把這個看作 1K\frac{1}{K}K1? 的正負樣本比例,即每一個正樣本你都有 KKK 個對應的負樣本來訓練一個類似邏輯回歸的模型。
我們把這個畫成一個神經網絡,如果輸入詞是orange,即詞6257,你要做的就是輸入one-hot向量,再傳遞給 EEE ,通過兩者相乘獲得嵌入向量 e6527e_{6527}e6527? ,你就得到了10,000個可能的邏輯回歸分類問題,其中一個(上圖編號4所示)將會是用來判斷目標詞是否是juice的分類器,還有其他的詞,比如說可能下面的某個分類器(上圖編號5所示)是用來預測king是否是目標詞,諸如此類,預測詞匯表中這些可能的單詞。把這些看作10,000個二分類邏輯回歸分類器,但并不是每次迭代都訓練全部10,000個,我們只訓練其中的5個,我們要訓練對應真正目標詞那一個分類器,再訓練4個隨機選取的負樣本,這就是 K=4K=4K=4 的情況。所以不使用一個巨大的10,000維度的softmax,因為計算成本很高,而是把它轉變為10,000個二分類問題,每個都很容易計算,每次迭代我們要做的只是訓練它們其中的5個,一般而言就是 K+1K+1K+1 個,其中 KKK 個負樣本和1個正樣本。這也是為什么這個算法計算成本更低,因為只需更新 K+1K+1K+1 個邏輯單元, K+1K+1K+1 個二分類問題,相對而言每次迭代的成本比更新10,000維的softmax分類器成本低。
你也會在本周的編程練習中用到這個算法,這個技巧就叫負采樣。因為你做的是,你有一個正樣本詞orange和juice,然后你會特意生成一系列負樣本,這些(上圖編號6所示)是負樣本,所以叫負采樣,即用這4個負樣本訓練,4個額外的二分類器,在每次迭代中你選擇4個不同的隨機的負樣本詞去訓練你的算法。
這個算法有一個重要的細節就是如何選取負樣本,即在選取了上下文詞orange之后,你如何對這些詞進行采樣生成負樣本?一個辦法是對中間的這些詞進行采樣,即候選的目標詞,你可以根據其在語料中的經驗頻率進行采樣,就是通過詞出現的頻率對其進行采樣。但問題是這會導致你在like、the、of、and諸如此類的詞上有很高的頻率。另一個極端就是用1除以詞匯表總詞數,即 1∣v∣\frac{1}{|v|}∣v∣1? ,均勻且隨機地抽取負樣本,這對于英文單詞的分布是非常沒有代表性的。所以論文的作者Mikolov等人根據經驗,他們發現這個經驗值的效果最好,它位于這兩個極端的采樣方法之間,既不用經驗頻率,也就是實際觀察到的英文文本的分布,也不用均勻分布,他們采用以下方式:
P(wi)=f(wi)34∑j=110,000f(wj)34P(w_i)=\frac{f(w_i)^{\frac34}}{\sum_{j=1}^{10,000}f(w_j)^{\frac34}}P(wi?)=∑j=110,000?f(wj?)43?f(wi?)43??
進行采樣,所以如果 f(wi)f(w_i)f(wi?) 是觀測到的在語料庫中的某個英文詞的詞頻,通過 34\frac3443? 次方的計算,使其處于完全獨立的分布和訓練集的觀測分布兩個極端之間。我并不確定這是否有理論證明,但是很多研究者現在使用這個方法,似乎也效果不錯。
總結一下,你已經知道了在softmax分類器中如何學到詞向量,但是計算成本很高。在這個視頻中,你見到了如何通過將其轉化為一系列二分類問題使你可以非常有效的學習詞向量。如果你使用這個算法,你將可以學到相當好的詞向量。當然和深度學習的其他領域一樣,有很多開源的實現,當然也有預訓練過的詞向量,就是其他人訓練過的然后授權許可發布在網上的,所以如果你想要在NLP問題上取得進展,去下載其他人的詞向量是很好的方法,在此基礎上改進。
Skip-Gram模型就介紹到這里,在下個視頻中,我會跟你分享另一個版本的詞嵌入學習算法GloVe,而且這可能比你之前看到的都要簡單。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的2.7 负采样-深度学习第五课《序列模型》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.6 Word2Vec-深度学习第五课
- 下一篇: 2.8 GloVe词向量-深度学习第五课