雜訊對比估計加速詞向量訓練
導語
PaddlePaddle提供了豐富的運算單元,幫助大家以模塊化的方式構建起千變萬化的深度學習模型來解決不同的應用問題。這裡,我們針對常見的機器學習任務,提供了不同的神經網路模型供大家學習和使用。本周推文目錄如下:
周三:【詞向量】Hsigmoid加速詞向量訓練
周四:【詞向量】 雜訊對比估計加速詞向量訓練
周五:【RNN】使用RNN語言模型生成文本
詞向量用一個實向量表示詞語,向量的每個維都表示文本的某種潛在語法或語義特徵,是深度學習應用於自然語言處理領域最成功的概念和成果之一。廣義的,詞向量也可以應用於普通離散特徵。詞向量的學習通常都是一個無監督的學習過程,因此,可以充分利用海量的無標記數據以捕獲特徵之間的關係,也可以有效地解決特徵稀疏、標籤數據缺失、數據雜訊等問題。然而,在常見詞向量學習方法中,模型最後一層往往會遇到一個超大規模的分類問題,是計算性能的瓶頸。
在詞向量任務中,我們向大家展示如何使用Hierarchical-Sigmoid 和雜訊對比估計(Noise Contrastive Estimation,NCE)來加速詞向量的學習。
02
雜訊對比估計加速詞向量訓練
|1. 為什麼需要雜訊對比估計
語言模型是許多自然語言處理任務的基礎,也是獲得詞向量表示的一種有效方法。神經概率語言模型(Neural Probabilistic Language Model, NPLM)刻畫了詞語序列 ω1,...,ωT 屬於某個固定語言的概率 P(ωT1) :
為了降低建模和求解的難度,通常會引入一定條件獨立假設:詞語wtwt的概率只受之前n?1n?1個詞語的影響,於是有:
從式(1)中看到,可以通過建模條件概率 P(ωt|wt?n?1,...,ωt?1) 進而計算整個序列 ω1,...,ωT 的概率。於是,我們可以將語言模型求解的任務簡單地概括為:
給定詞語序列的向量表示 h ,稱之為上下文(context),模型預測下一個目標詞語 ω 的概率。
在n-gram 語言模型中,上下文取固定的 n?1 個詞,RNN 語言模型可以處理任意長度的上下文。
給定上下文 h,NPLM 學習一個分值函數(scoring function)sθ(ω,h),s 刻畫了上下文 h 向量和所有可能的下一個詞的向量表示 ω′ 之間的相似度,再通過在全詞表空間對打分函數 s 的取值進行歸一化(除以歸一化因子 Z),得到目標詞 ω 的概率分布,其中:θ 是可學習參數,這一過程用式(2)表示,也就是Softmax函數的計算過程。
極大似然估計(MLE,Maximum Likelihood Estimation)是求解概率(2)最常用的學習準則。然而,不論是估計概率 Phθ(ω) 還是計算似然(likelihood)的梯度時,都要計算歸一化因子Z。Z 的計算隨著詞典大小線性增長,當訓練大規模語言模型時,例如,當詞典增長到百萬級別甚至更大,訓練時間將變得十分漫長,因此,我們需要其它可能的學習準則,他的求解過程從計算上應該更加輕便可解。
上一篇介紹了使用Hsigmoid加速詞向量訓練 ,這裡我們介紹另一種基於採樣的提高語言模型訓練速度的方法:使用雜訊對比估計(Noise-contrastive estimation, NCE)[1]
|2. 什麼是雜訊對比估計
雜訊對比估計是一種基於採樣思想的概率密度估計準則,用於估計/擬合:概率函數由非歸一化的分值函數和歸一化因子兩部分構成,這樣一類特殊的概率函數[1] 。雜訊對比估計通過構造下面這樣一個輔助問題避免在全詞典空間計算歸一化因子 Z ,從而降低計算代價:
給定上下文 h 和任意已知的雜訊分布 Pn ,學習一個二類分類器來擬合:目標 ω 來自真實分布 Pθ (D=1) 還是雜訊分布 Pn(D=0)的概率。假設來自雜訊分布的負類樣本的數量 k 倍於目標樣本,於是有:
我們直接用Sigmoid函數來刻畫式(33)這樣一個二分類概率:
有了上面的問題設置便可以基於二分類來進行極大似然估計:增大正樣本的概率同時降低負樣本的概率[2,3],也就是最小化下面這樣一個損失函數:
式(5)便是基於雜訊對比估計而定義的NCE損失函數,至此,我們還剩下兩個問題: 1. 式(5)中的 sθ(w,h) 是什麼? - 在神經網路的實現中,sθ(h,ω) 是未歸一化的分值。 - NCE cost 層的可學習參數 W 是一個 |V|×d 維度的矩陣,|V| 是詞典大小,d 是上下文向量h的維度; - 訓練時下一個詞的真實類別 t 是正類,從指定的雜訊分布中採樣 k 個負類樣本它們的類別分別記作: ; - 抽取 W 中第 行(共計 k+1 行)分別與 h 計算分值 sθ(w,h) ,再通過(5)式計算最終的損失; 2. 雜訊分布如何選擇? - 實踐中,可以任意選擇合適的雜訊分布(雜訊分布暗含著一定的先驗)。 - 最常用選擇有:使用基於全詞典之上的unigram分布(詞頻統計),無偏的均勻分布。 - 在PaddlePaddle中用戶如果用戶未指定雜訊分布,默認採用均勻分布。
使用NCE準確訓練時,最後一層的計算代價只與負採樣數目線性相關,當負採樣數目逐漸增大時,NCE 估計準則會收斂到極大似然估計。因此,在使用NCE準則訓練時,可以通過控制負採樣數目來控制對歸一化的概率分布近似的質量。
|3.實驗數據
|4. 網路結構
在 5-gram 神經概率語言模型詳細網路結構見圖1:
圖1. 5-gram 網路配置結構
模型主要分為如下幾個部分構成:
|5. 訓練
在命令行窗口運行命令python train.py可以直接開啟訓練任務。
程序第一次運行會檢測用戶緩存文件夾中是否包含 ptb 數據集,如果未包含,則自動下載。
運行過程中,每10個 batch 會列印模型訓練在訓練集上的代價值
每個 pass 結束後,會計算測試數據集上的損失,並同時會保存最新的模型快照。
在模型文件network_conf.py中 NCE 調用代碼如下:
NCE 層的一些重要參數解釋如下:
|6. 預測
(1)在命令行運行 :
python infer.py
--model_path"models/XX"
--batch_size1
--use_gpufalse
--trainer_count1
參數含義如下:
model_path:指定訓練好的模型所在的路徑。必選。
batch_size:一次預測並行的樣本數目。可選,默認值為1。
use_gpu:是否使用 GPU 進行預測。可選,默認值為False。
trainer_count: 預測使用的線程數目。可選,默認為1。注意:預測使用的線程數目必選大於一次預測並行的樣本數目。
(3)預測的輸出格式如下:
0.6734 their may want to move
每一行是一條預測結果,內部以「t」分隔,共計3列: - 第一列:下一個詞的概率。 - 第二列:模型預測的下一個詞。 - 第三列:輸入的 n 個詞語,內部以空格分隔。
【參考文獻】
Gutmann M, Hyv?rinen A. Noise-contrastive estimation: A new estimation principle for unnormalized statistical models[C]//Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics. 2010: 297-304.
Mnih A, Kavukcuoglu K. Learning word embeddings efficiently with noise-contrastive estimation[C]//Advances in neural information processing systems. 2013: 2265-2273.
Mnih A, Teh Y W. A Fast and Simple Algorithm for Training Neural Probabilistic Language Models[J]. Computer Science, 2012:1751-1758.
end
*原創貼,版權所有,未經許可,禁止轉載
*值班小Paddle:wangp
*歡迎在留言區分享您的觀點
TAG:PaddlePaddle |