漫談詞向量之基於Softmax與Sampling的方法

2021-03-02 CSDN

原文: On word embeddings 

作者: Sebastian Ruder 

譯者: KK4SBB 審校:王藝 

責編:王藝 若您有想要分享的行業案例、技術筆記、請聯繫 wangyi@csdn.net 

本文經作者授權CSDN翻譯發布,未經允許不得轉載。

目錄:

基於softmax的方法 

Hierarchical Softmax

Differentiated Softmax

CNN softmax

基於sampling的方法 

各種方法對比

小結

Bengio等人2003年提出的神經語言模型,Collobert和Weston在2008年提出的C&W模型,以及Mikolov等人在2013年提出的word2vec模型。作者認為,降低最後的softmax層的計算複雜度是設計更好詞向量模型所面臨的主要挑戰,同時也是機器翻譯(Jean等[10])和語言建模(Jozefowicz等[6])的共性挑戰。

本篇文章列舉了近幾年內新提出的幾種替代softmax層的方法。其中一些方法目前還只在語言建模和機器學習中嘗試過。關於超參數的討論將安排在後續的系列文章中介紹。

先來說明一下文章裡用到的符號:假設有一份訓練文檔集,它包括了T個訓練詞語w1,w2,w3,⋯,wT,它們構成大小為|V|的詞語集合V。語言模型通常只考慮由當前詞語wi的左右n個詞語組成的上下文ci。每個詞語有一個d維的輸入詞向量vW(即embedding層的詞向量)和輸出詞向量v』W(即softmax層的權重矩陣所表示的詞語)。最後,針對模型參數θ來優化目標函數Jθ。

若指定上下文c,用softmax方法計算詞語w出現的概率可以用公式表示為:

h是網絡倒數第二層的輸出向量。為了簡化表示,上式中用c表示上下文內容,並且省略了目標詞語wt的下標t。為了得到上式的分母部分,需要計算向量h與詞典V中每個詞語向量之間的內積。因此,計算softmax的代價非常昂貴。

接下來,我們將討論幾種能夠近似替代softmax的策略。這些方法可以歸納為基於softmax的和基於sampling的兩大類。基於softmax的方法仍舊保留了模型的softmax層,但是通過調整其結構來提高效率。基於sampling的方法則完全拋棄了softmax層,而是優化其它形式的損失函數來代替softmax。

基於softmax的方法

分層Softmax

Hierarchical softmax (H-Softmax)是由Morin和Bengio[3]受到二叉樹的啟發而提出。H-Softmax本質上是用層級關係替代了扁平化的softmax層,如圖1所示,每個葉子節點表示一個詞語。於是,計算單個詞語概率值的計算過程被拆解為一系列的概率計算,這樣可以避免對所有詞語進行標準化計算。用H-Softmax替換softmax層之後,詞語的預測速度可以提升至少50倍,速度的提升對於低延時要求的實時系統至關重要,比如谷歌新推出的消息應用Allo。

圖1:Hierarchical softmax

我們可以把原來的softmax看做深度為1的樹,詞表V中的每一個詞語表示一個葉子節點。計算一個詞語的softmax概率需要對|V|個節點的概率值做標準化。如果把softmax改為二叉樹結構,每個word表示葉子節點,那麼只需要沿著通向該詞語的葉子節點的路徑搜索,而不需要考慮其它的節點。

平衡二叉樹的深度是log2(|V|),因此,最多只需要計算log2(|V|)個節點就能得到目標詞語的概率值。注意,得到的概率值已經經過了標準化,因為二叉樹所有葉子節點組成一個概率分布,所有葉子節點的概率值總和等於1。我們可以簡單地驗證一下,在圖1的根節點(Node o)處,兩個分枝的概率和必須為1。之後的每個節點,它的兩個子節點的概率值之和等於節點本身的概率值。因為整條搜索路徑沒有概率值的損失,所以最底層所有葉子節點的概率值之和必定等於1,hierarchical softmax定義了詞表V中所有詞語的標準化概率分布。

具體說來,當遍歷樹的時候,我們需要能夠計算左側分枝或是右側分枝的概率值。為此,給每個節點分配一個向量表示。與常規的softmax做法不同,這裡不是給每個輸出詞語w生成詞向量v』w,而是給每個節點n計算一個向量v』n。總共有|V|-1個節點,每個節點都有自己獨一無二的向量表示,H-Softmax方法用到的參數與常規的softmax幾乎一樣。於是,在給定上下文c時,就能夠計算節點n左右兩個分枝的概率:

上式與常規的softmax大致相同。現在需要計算h與樹的每個節點的向量v』n的內積,而不是與每個輸出詞語的向量計算。而且,現在只需要計算一個概率值,這裡就是偏向n節點右枝的概率值。相反的,偏向左枝的概率值是1−p(right|n,c)

圖2:Hierarchical softmax的計算過程(來自Hugo Lachorelle的YouTube課件)

如圖2所示,假設已知出現了詞語「the」、「dog」、「and」、「the」,則出現詞語「cat」的概率值就是在節點1向左偏的概率值、在節點2向右偏的概率以及在節點5向右偏的概率值的乘積。Hugo Lachorelle在他的視頻教程中給了更詳細的解釋。Rong[7]的文章也詳細地解釋了這些概念,並推導了H-Softmax。

顯然,樹形的結構非常重要。若我們讓模型在各個節點的預測更方便,比如路徑相近的節點概率值也相近,那麼憑直覺系統的性能肯定還會提升。沿著這個思路,Morin和Bengio使用WordNet的同義詞集作為樹簇。然而性能依舊不如常規的softmax方法。Mnih和Hinton[8]將聚類算法融入到樹形結構的學習過程,遞歸地將詞集分為兩個集合,效果終於和softmax方法持平,計算量有所減小。

值得注意的是,此方法只是加速了訓練過程,因為我們可以提前知道將要預測的詞語(以及其搜索路徑)。在測試過程中,被預測詞語是未知的,仍然無法避免計算所有詞語的概率值。

在實踐中,一般不用「左節點」和「右節點」,而是給每個節點賦一個索引向量,這個向量表示該節點的搜索路徑。如圖2所示,如果約定該位為0表示向左搜索,該位為1表示向右搜索,那詞語「cat」的向量就是011。

上文中提到平衡二叉樹的深度不超過log2(|V|)。若詞表的大小是|V|=10000,那麼搜索路徑的平均長度就是13.3。因此,詞表中的每個詞語都能表示為一個平均長度為13.3比特的向量,即信息量為13.3比特。

關於信息量:

在資訊理論中,人們習慣於將詞語w概率值的負對數定義為信息量I(w):

I(w)=−log2p(w)

而熵H則是詞表中所有詞語的信息量的期望值:

H=∑i∈Vp(wi)I(wi)

熵也代表著根據信息的概率分布對信息編碼所需要的最短平均編碼長度。 拋硬幣事件需要用1比特來編碼正反兩個時間,對於永恆不變的事件則只需0比特。若用平衡二叉樹的節點來表示詞表中的詞語,還是假設詞表的大小|V|=10000,詞表中詞語的概率值均相等,那麼熵H與平均搜索路徑的長度恰好相等:

之前我們一再強調了樹結構的重要性,因為利用好樹結構不僅能提升系統的性能,還能加快運算速度。若我們給樹加入額外的信息,就能縮短某些攜帶信息量少的詞語的搜索路徑。Morin和Bengio就是利用了詞表中各個詞語出現概率不相等這一信息。他們認為詞表中的一些詞語出現的概率總是大於其它詞語,那這些詞語就應該用更短的向量編碼。他們所用的文檔集(|V|=10000)的熵大約是9.16。

於是,考慮詞頻之後,文檔集中每個詞語的平均編碼長度從13.3比特減為9.16比特,運算速度也提升了31%。Mikolov等人在他們關於hierarchical softmax的論文[1]裡就用到了霍夫曼樹,即詞頻越高的詞語編碼長度越短。比如,「the」是英語中最常見的詞語,那「the」在霍夫曼樹中的編碼長度最短,詞頻第二高的詞語編碼長度僅次於「the」,以此類推。整篇文檔的平均編碼長度因此降低。

霍夫曼編碼通常也被稱作熵編碼,因為每個詞語的編碼長度與它的熵幾乎成正比。香農通過實驗[5]得出英語字母的信息量通常在0.6~1.3之間。假設單詞的平均長度是4.5個字母,那麼所攜帶的信息量就是2.7~5.85比特。

再回到語言模型:衡量語言模型好壞的指標perplexity是2H,H表示熵。熵為9.16的unigram模型的perplexity達到29.16=572.0。我們可以直觀的理解為,平均情況下用該unigram模型預測下一個詞語時,有572個詞語是等可能的候選詞語。目前,Jozefowicz在2016年的論文中提到最好的模型perplexity=24.2。因為24.6=24.2,所以這個模型平均只需要4.6比特來表示一個詞語,已經非常接近香農記錄的實驗下限值了。這個模型是否能用於改進網絡的hierarchical softmax層,仍需要人們進一步探索。

分片Softmax

Chen等人在論文中介紹了一種傳統softmax層的變換形式,稱作Differentiated Softmax (D-Softmax)。D-Softmax基於的假設是並不是所有詞語都需要相同數量的參數:多次出現的高頻詞語需要更多的參數去擬合,而較少見的詞語就可以用較少的參數。

傳統的softmax層用到了dx|V|的稠密矩陣來存放輸出的詞向量表示v′w∈ℝd,論文中採用了稀疏矩陣。他們將詞向量v′w按照詞頻分塊,每塊區域的向量維度各不相同。分塊數量和對應的維度是超參數,可以根據需要調整。

圖3: Differentiated softmax (Chen et al. (2015))

圖3中,A區域的詞向量維度是dA(這個分塊是高頻詞語,向量的維度較高),B和C區域的詞向量維度分別是dB和dC。其餘空白區域的值為0。

隱藏層h的輸出被視為是各個分塊的級聯,比如圖3中h層的輸出是由三個長度分別為dA、dB、dC的向量級聯而成。D-Softmax只需計算各個向量段與h對應位置的內積,而不需整個矩陣和向量參與計算。

由於大多數的詞語只需要相對較少的參數,計算softmax的複雜度得到降低,訓練速度因此提升。相對於H-Softmax方法,D-Softmax的優化方法在測試階段仍然有效。Chen在2015年的論文中提到D-Softmax是測試階段最快的方法,同時也是準確率最高的之一。但是,由於低頻詞語的參數較少,D-Softmax對這部分數據的建模能力較弱。

CNN-Softmax

傳統softmax層的另一種改進是受到Kim[3]的論文啟發,Kim對輸入詞向量vw採用了字符級別的CNN模型。相反,Jozefowicz在2016年將同樣的方法用於輸出詞向量v′w,並將這種方法稱為CNN-Softmax。如圖4所示,如果我們在輸入端和輸出端加上CNN模型,輸出端CNN生成的向量v′w與輸入端CNN生成的向量必然不相同,因為輸入和輸出的詞向量矩陣就不一樣。

圖4:CNN-Softmax (Jozefowicz et al. (2016))

儘管這個方法仍需要計算常規softmax的標準化,但模型的參數卻大大的減少:只需要保留CNN模型的參數,不需要保存整個詞向量矩陣dx|V|。在測試階段,輸出詞向量v′w可以提前計算,所以性能損失不大。

但是,由於字符串是在連續空間內表示,而且模型傾向於用平滑函數將字符串映射到詞向量,因此基於字符的模型往往無法區分拼寫相似但是含義不同的詞語。為了消除上述影響,論文的作者增加了一個矯正因數,顯著地縮小了CNN-Softmax與傳統方法的性能差距。通過調整矯正因數的維度,作者可以方便地取捨模型的大小與計算性能。

論文的作者還提到,前一層h的輸出可以傳入字符級別的LSTM模型,這個模型每次預測輸出詞語的一個字母。但是,這個方法的性能並不令人滿意。Ling等人在2014年的論文中採用類類似的方法來解決機器翻譯任務,取得了不錯的效果。

基於採樣的方法

至此,我們所討論的方法仍舊保持了softmax的結果。然而,基於採樣的方法完全摒棄了softmax層結構。後者採用了更方便計算的損失值來逼近softmax的分母項。基於採樣的方法也僅在訓練階段有效,在預測階段仍需要按部就班地計算softmax層,從而得到標準化的概率值。

為了直觀地感受softmax的分母對損失值的影響,我們先來推導損失函數Jθ對於模型參數θ的導數。

在訓練階段,我們的目標是使得訓練集中每個詞語w的交叉熵最小,也就是使得softmax層輸出值的負對數取值最小。如果讀者對softmax輸出值與交叉熵的關係比較模糊,可以參考Karpathy的解釋。模型的損失函數可以寫成:

為了便於推導,我們將Jθ改寫為:

為了與Bengio和Senecal[4,15]使用的符號一致(注意,第一篇論文計算的是梯度的對數,沒有負號),用−(w)代替hTv』w。於是得到等式:

在反向傳播階段,我們可以將損失函數對於θ的偏導寫為:

因為logx的導數是1/x,則上式又可以改寫為:

把偏導符號移到求和項裡面,得到:

因為exp(x)的導數就是exp(x),於是也可以得到如下形式:

經過變換,得到:

注意,

就是詞語wi的softmax概率值P(wi)。將其代入上面的等式中得到:

最後,將求和項內的負號移到外面

Bengio和Senécal 2003年的時候提出梯度值可以分解為兩個部分:一部分與目標詞語w正相關(等式右邊的第一項),另一部分與其餘所有詞語負相關,按照各個詞語的出現概率分配權重(等式右邊的第二項)。我們可以發現,等式右邊的第二項其實就是詞表V中所有詞語wi的的期望值:

現在大多數基於採樣方法的核心都是用簡單的過程來近似計算後一項的值。

重要性採樣

wm採用蒙特卡洛方法來估計概率分布的期望值E。如果已知網絡模型的分布P(w),於是我們就可以從中隨機採樣m個詞語w1,⋯,wm,並用下面的公式計算期望值:

但是,為了實現從概率值分布P中採樣,我們必須先計算得到P,而這個過程正是我們想繞開的。於是,我們用另一種類似於P但是採樣更方便的分布Q來代替。在語言建模的任務中,直接把訓練集的unigram分布作為Q不失為良策。

這就是經典的重要性採樣(Importance Sampling)的做法:它使用蒙特卡洛方法得到分布Q來模擬真實的分布P。可是,被採樣到的詞語w仍然需要計算其概率值P(w)。Bengio和Senécal藉助了Liu論文[16]中的思路。

上文提到把Pwi賦值為

的權重,這裡我們把權重值改為與Q相關的一個因子。這個因子是

其中

我們用r和R是為了避免與Bengio和Senécal論文中的w和W命名衝突。於是期望的估計值公式可以寫為:

若是採樣的數量越少,估計的分布與真實分布差別越大。如果樣本數量非常少,在訓練過程中網絡模型的分布P可能與unigram的分布Q差異很大,會導致模型發散,因此我們需要調整到合適的樣本數量。Bengio和Senécal的論文中介紹了一種快速選擇樣本數量的方法。最終的運算速度比傳統的softmax提升了19倍。

自適應重要性採樣

Bengio和Senécal 2008年的論文中提到,在重要性採樣的方法中用更複雜的分布來替代unigram分布Q對改善模型的幫助並不大,他們嘗試了bigram和trigram,但常規的n-gram分布與訓練得到的神經語言模型似乎差別挺大。於是,他們提出了自適應的n-gram分布來更好地擬合目標分布P。他們將bigram和unigram融合,融合的係數用SGD的方法訓練得到,最終使得融合後的分布Q與目標分布P的KL距離最小。他們的實驗顯示這種方法能使速度提升100倍。

目標採樣

2015年,Jean在論文裡提到將自適應重要性採樣用於機器翻譯任務。為了使該方法能更好地適應GPU內存資源有限的情況,他們限制了待採樣詞語的數量。他們將訓練集分區,每個分區僅保留放固定數量的樣本,形成詞表的一個子集V』。

這就意味著訓練集的每個分區i可以用獨立的分布Qi,該分區內所有詞語的概率值均相等,而Qi將分區i之外其餘詞語的概率值設為零。

噪聲對比估計

噪聲對比估計(Noise Contrastive Estimation)是Mnih和Teh[18]發明的一種比重要性採樣更穩定的採樣方法,因為某些情況下重要性採樣存在導致分布Q與P分道揚鑣的風險。NCE不是直接估計某個詞語的概率值。相反,它藉助一個輔助的損失值,從而實現了正確詞語概率值最大化這一目標。

我們在上一篇文章中提到,Collobert和Weston(2008)採用的pair-wise排序準則是將正確的樣本排在其它樣本之前。NCE的想法與其類似:訓練一個模型來區分目標詞語與噪聲。於是,待解決的問題就由預測正確的詞語簡化為一個二值分類器任務,分類器試圖將正確的詞語與其它噪聲樣本中區分開來,如圖5所示:

圖5:噪聲對比估計(Tensorflow)

對於每個詞語wi,它的前n個詞語wt-1, ……, wt-n+1表示為wi的語境ci。然後從含有噪聲的分布Q中生成k個噪聲樣本w̃ik。參照重要性採樣的方法,這裡也可以從訓練數據的unigram分布中採樣。由於分類器需要用到標籤數據,我們把語境 ci 對應的所有正確的詞語wi標記為正樣本(y=1),其餘的噪聲詞語w̃ik作為負樣本(y=0)。

接著,用邏輯回歸模型來訓練樣本數據:

由於計算所有噪聲樣本的期望

時仍需要對詞表V中的詞語求和,得到標準化的概率值,於是可以採用蒙特卡洛方法來估算:

簡化為:

實際上,我們是從兩個不同的分布中採樣數據:正樣本是根據語境c從訓練數據集Ptrain中採樣,而負樣本從噪聲分布Q中採樣獲得。因此,無論是正樣本還是負樣本,其概率值都可以表示成上述兩種分布帶權重的組合,權重值對應於來自該分布的樣本值:

於是,樣本來自於Ptrain的概率值可以表示為條件概率的形式:

這個式子可以被簡化為:

由於不知道Ptrain(待計算項),我們就用P來代替:

當然,樣本為負樣本的概率值就是P(y=0|w,c)=1−P(y=1|w,c)。值得注意的是,已知c求詞語w出現的概率值P(w|c)的計算方法實際上就是softmax的定義:

因為分母只與h相關,h的值與c相關(假設V不變),那麼分母可以簡化為Z(c)來表示。softmax就變為下面的形式:

為了求解Z(c),還是需要對V中所有詞語出現的概率值求和。NCE則用了一個小技巧巧妙地繞開:即把標準化後的分母項Z(c)當作模型的待學習參數。Mnih和Teh(2012)、Vaswani等[20]在論文中都把Z(c)的值固定設為1,他們認為這樣不會對模型的效果造成影響。Zoph[19]則認為,即使訓練模型,最終得到Z(c)的值也是趨近於1,並且方差很小。

若是我們把上面softmax等式中的Z(c)項改為常數1,等式就變為:

再把上面的式子代入求解P(y=1|w,c)P(y=1|w,c),得到:

繼續把上式代入到邏輯回歸的目標函數中,得到:

NCE方法有非常完美的理論證明:隨著噪聲樣本k的數量增加,NCE導數趨近於softmax函數的梯度。Mnih 和 Teh (2012) 認為抽取25個噪聲樣本就足以達到常規softmax方法的效果,速度能提升大約45倍。Chris Dyer撰寫的筆記[21]對NCE方法進行了更詳細的解釋。

NCE方法也存在一個弊端,由於每個正樣本詞語w對應的噪聲樣本各不相同,這些負樣本就無法以稠密矩陣的形式存儲,也就無法快速地計算稠密矩陣的乘法,這就削弱了GPU的優勢。Jozefowicz et al. (2016) 和 Zoph et al. (2016) 各自分別提出了在同一個批數據中共享噪聲樣本的想法,於是可以發揮GPU的稠密矩陣快速運算的優勢。

NCE與IS的相似性:

jozefowicz認為NCE與IS的相似點不僅在於它們都是基於採樣的方法,而且相互之間聯繫非常緊密。NCE等價於解決二分類任務,他認為IS問題也可以用一個代理損失函數來描述:IS相當於用softmax和交叉熵損失函數來優化解決多分類問題。他覺得IS是多分類問題,可能更適用於自然語言的建模,因為它迭代更新受到數據和噪聲樣本的共同作用,而NCE的迭代更新則是分別作用。事實上,Jozefowicz等人選用IS作為語言模型並且取得了最佳的效果。

負採樣

負採樣(Negative Sampling)可以被認為是NCE的一種近似版本。我們之前也提到過,隨著樣本數量k的增加,NCE近似於softmax的損失。由於NEG的目標是學習高質量的詞向量表示,而不是降低測試集的perplexity指標,於是NEG對NCE做了簡化。

NEG也採用邏輯回歸模型,使得訓練集中詞語的負對數似然最小。再回顧一下NCE的計算公式:

NEG與NCE的關鍵區別在於NEG以儘可能簡單的方式來估計這個概率值。為此,上式中計算量最大的kQ(w) 項被置為1,於是得到:

當k=|V|並且Q是均勻分布時,kQ(w)=1成立。此時,NEG等價於NCE。我們將kQ(w)設置為1,而不是其它常數值的原因在於,P(y=1|w,c)P(y=1|w,c)可以改寫為sigmoid函數的形式:

如果我們再把這個等式代入之前的邏輯回歸損失函數中,可以得到:

進一步簡化後得到:

假設

最終得到:

為了與Mikolov et al. (2013)論文中的符合保持一致,h要用vwI替換,v』wi要用v』wO替換,vwij 

要用v』wi替換。另外,與Mikolov所使用的目標不同,我們在三個方面做了修改:a)對整個文檔集做優化,b)最小化負對數似然,而不是最大化對數似然,c)用蒙特卡洛方法估計期望值

若想了解更多NEG的細節,可以參考Goldberg 和 Levy 的筆記[22]。

我們發現,僅當k=|V|並且Q是均勻分布時,NEG才等價於NCE。在其它情況下,NEG只是近似於NCE,也就是說前者不會直接優化正確詞語的對數似然,所以不適合用於自然語言建模。NEC更適用於訓練詞向量表示。

自標準化

儘管Devlin[23]提出的自標準化方法不是基於採樣的,但他的想法能給我們帶來不少啟發。上一節我們提到,若將NCE損失函數的Z(c)這一項值設為1,模型就相當於是自標準化。這一特性幫我們節省了大量計算Z(c)標準化的資源。

損失函數Jθ的目標是最小化訓練數據中所有詞語的負對數似然:

經過變換得到:

如果能限制模型的Z(c)=1或是logZ(c)=0,那麼就不必計算Z(c)項中複雜的標準化了。於是,Devlin建議給損失函數加一項平方誤差的懲罰項,使得logZ(c)儘可能逼近與0:

等價於:

其中,係數α用來平衡模型的準確率和自標準化計算。經過這樣的改造,Z(c)的值就會趨近於1。在Devlin2014年那篇有關機器翻譯系統的論文中,他們在解碼階段將softmax的分母項置為1,僅計算分子項和懲罰項:

據他們稱,自標準化方法的速度提升了將近15倍,而BLEU得分相比於常規的方法只降低了一點點。

低頻標準化

Andreas 和 Klein[11] 認為只需要對一部分訓練樣本做標準化,就能取得近似於自標準化的效果。於是他們提出了低頻標準化(Infrequent Normalisation)的方法,對懲罰項降採樣,使之變為一種基於採樣的方法。

先把上文中的損失函數Jθ分解為兩部分:

然後就可以對第二項進行降採樣,得到下面的公式:

其中,γ控制採樣率。Andreas 和 Klein (2015) 認為IF不但採納了NCE和自標準化兩者的優點,即不需要對所有訓練樣本進行標準化計算,而且也能很好的取捨模型的準確率和標準化估計值的準確程度。據他們稱,當只對1/10的訓練數據進行標準化時,速度可以提升將近10倍,且沒有明顯的效果下降。

其它的方法

除了上述介紹的幾種方法來近似技術或者避免計算softmax的分母項Z(c)之外,另一些方法是針對

項做優化。比如,Vijayanarasimhan在論文[12]中提出了快速的局部敏感哈希算法近似計算

但是,儘管Vijayanarasimhan的方法在測試階段加快了模型的預測速度,但是在訓練階段速度優化的效果不明顯。

各種方法對比

上文中已經總結了多種基於softmax和基於採樣的方法,這些方法都能極大地提升運算效率。這一節中,我們將多這些方法做個比較。

表1:自然語言建模的各種softmax近似計算方法比較

如上表所示,幾乎每種方法在不同的數據集或是不同的場景下都有利弊。對於語言建模,常規的softmax方法在小數據集上的效果仍然非常好,比如Penn Treebank,有時甚至在中等規模數據集上的表現也不錯,比如Gigaword,但是它在大規模數據集上的效果就很差,例如1B Word Benchmark。目標採樣。相反,分層採樣和低頻標準化等方法在大規模數據集上的效果非常好。

分片softmax在小數據集和大數據集上的效果都不錯,並且它是唯一做到在測試階段速度提升的方法。分層softmax方法在小數據集上的表現較差,但是它的速度最快,單位時間內處理的訓練樣本數量也最多。NCE適用於大數據集,但多數情況下效果不如其它方法。負採樣方法不擅長語言建模問題,它更適用於學習詞向量表示,比如用在經典的word2vec中。

最後,如果你想選用上述的方法,TensorFlow已經實現了其中一部分基於採樣的方法,並且比較了部分方法的差異。

小結

總而言之,學習詞語的表達是一個非常寬泛的領域,很多因素都會影響最終的表達效果。在上一篇文章中,我們介紹了常用模型的結構。在這篇文章中,我們從softmax層切入,深入探究和比較了多種方法。下一篇文章我們將會介紹GloVe方法。

參考文獻

【1】Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Distributed Representations of Words and Phrases and their Compositionality. NIPS, 1–9.

【2】Mikolov, T., Corrado, G., Chen, K., & Dean, J. (2013). Efficient Estimation of Word Representations in Vector Space. Proceedings of the International Conference on Learning Representations (ICLR 2013), 1–12.

【3】Morin, F., & Bengio, Y. (2005). Hierarchical Probabilistic Neural Network Language Model. Aistats, 5.

【4】Bengio, Y., & Senécal, J.-S. (2003). Quick Training of Probabilistic Neural Nets by Importance Sampling. AISTATS. http://doi.org/10.1017/CBO9781107415324.004

【5】Shannon, C. E. (1951). Prediction and Entropy of Printed English. Bell System Technical Journal, 30(1), 50–64. http://doi.org/10.1002/j.1538-7305.1951.tb01366.x

【6】Jozefowicz, R., Vinyals, O., Schuster, M., Shazeer, N., & Wu, Y. (2016). Exploring the Limits of Language Modeling. Retrieved from http://arxiv.org/abs/1602.02410

【7】Rong, X. (2014). word2vec Parameter Learning Explained. arXiv:1411.2738, 1–19. Retrieved from http://arxiv.org/abs/1411.2738

【8】Mnih, A., & Hinton, G. E. (2008). A Scalable Hierarchical Distributed Language Model. Advances in Neural Information Processing Systems, 1–8. Retrieved from http://papers.nips.cc/paper/3583-a-scalable-hierarchical-distributed-language-model.pdf

【9】Chen, W., Grangier, D., & Auli, M. (2015). Strategies for Training Large Vocabulary Neural Language Models. Retrieved from http://arxiv.org/abs/1512.04906

【10】Jean, S., Cho, K., Memisevic, R., & Bengio, Y. (2015). On Using Very Large Target Vocabulary for Neural Machine Translation. Proceedings of the 53rd Annual Meeting of the Association for Computational Linguistics and the 7th International Joint Conference on Natural Language Processing (Volume 1: Long Papers), 1–10. Retrieved from http://www.aclweb.org/anthology/P15-1001

【11】Andreas, J., & Klein, D. (2015). When and why are log-linear models self-normalizing? Naacl-2015, 244–249.

【12】Vijayanarasimhan, S., Shlens, J., Monga, R., & Yagnik, J. (2015). Deep Networks With Large Output Spaces. Iclr, 1–9. Retrieved from http://arxiv.org/abs/1412.7479

【13】Kim, Y., Jernite, Y., Sontag, D., & Rush, A. M. (2016). Character-Aware Neural Language Models. AAAI. Retrieved from http://arxiv.org/abs/1508.06615

【14】Ling, W., Trancoso, I., Dyer, C., & Black, A. W. (2016). Character-based Neural Machine Translation. ICLR, 1–11. Retrieved from http://arxiv.org/abs/1511.04586

【15】Bengio, Y., & Senécal, J.-S. (2008). Adaptive importance sampling to accelerate training of a neural probabilistic language model. IEEE Transactions on Neural Networks, 19(4), 713–722. http://doi.org/10.1109/TNN.2007.912312

【16】Liu, J. S. (2001). Monte Carlo Strategies in Scientific Computing. Springer. http://doi.org/10.1017/CBO9781107415324.004

【17】Gutmann, M., & Hyvärinen, A. (2010). Noise-contrastive estimation: A new estimation principle for unnormalized statistical models. International Conference on Artificial Intelligence and Statistics, 1–8. Retrieved from http://www.cs.helsinki.fi/u/ahyvarin/papers/Gutmann10AISTATS.pdf

【18】Mnih, A., & Teh, Y. W. (2012). A Fast and Simple Algorithm for Training Neural Probabilistic Language Models. Proceedings of the 29th International Conference on Machine Learning (ICML』12), 1751–1758.

【19】Zoph, B., Vaswani, A., May, J., & Knight, K. (2016). Simple, Fast Noise-Contrastive Estimation for Large RNN Vocabularies. NAACL.

【20】Vaswani, A., Zhao, Y., Fossum, V., & Chiang, D. (2013). Decoding with Large-Scale Neural Language Models Improves Translation. Proceedings of the 2013 Conference on Empirical Methods in Natural Language Processing (EMNLP 2013), (October), 1387–1392.

【21】Dyer, C. (2014). Notes on Noise Contrastive Estimation and Negative Sampling. Arxiv preprint. Retrieved from http://arxiv.org/abs/1410.8251

【22】Goldberg, Y., & Levy, O. (2014). word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method. arXiv Preprint arXiv:1402.3722, (2), 1–5. Retrieved from http://arxiv.org/abs/1402.3722

【23】Devlin, J., Zbib, R., Huang, Z., Lamar, T., Schwartz, R., & Makhoul, J. (2014). Fast and robust neural network joint models for statistical machine translation. Proc. ACL』2014, 1370–1380.

相關焦點

  • 漫談詞向量
    在此系列文章中,我們會提到多篇詞向量模型相關的文獻,重點突出幾個模型、實際應用例子以及詞向量方法的若干特點,後續的文章中還會介紹多語種的詞向量模型和效果評估工作。本篇文章將基於當前使用的詞向量方法展開介紹。雖然其中許多的模型已經被人們充分地討論過了,但我們希望在過去和現有的研究中討論並調研它們的價值,能給我們提供新的見解。
  • Reparameterization trick、Gumbel-Max/softmax筆記
    Phi和w(而不需要differentiate w.r.t. sampling,現在sampling只是一個outside procedure,用來給網絡添加噪聲)這很有用,因為兩Gumbel分布的隨機變量之差具服從邏輯斯蒂分布。
  • 詞向量學習算法 Word2Vec
    訓練完後,神經網絡的權重向量矩陣V就是最終的詞向量矩陣,而V'是詞作為預測輸出時的向量矩陣。 優化方法 優化 CBOW 和 Skip-Gram 都需要計算 softmax,其中需要在所有單詞上進行求和,效率低下,一般可以採用兩種優化方法:Hierarchical softmax 和 Negative sampling。
  • 【Softmax】乾貨 | 淺談Softmax函數
    由於人工智慧領域的許多問題都可以抽象成分類問題,所以softmax最廣泛的應用當屬分類;尋址:由於softmax的輸出是一種概率分布的形式,可以用它來實現一種軟性的尋址。近幾年逐漸推廣的(軟性)注意力機制就可以認為是一種軟性尋址的方式,根據各個鍵向量與查詢向量的相似度從各個值向量中獲取一定的「信息」。
  • NLP中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert
    各種詞向量的特點是什麼?上述方法得到的詞向量是固定表徵的,無法解決一詞多義等問題,如「川普」。為此引入基於語言模型的動態表徵方法:elmo、GPT、bert。不經過優化的CBOW和Skip-gram中 ,在每個樣本中每個詞的訓練過程都要遍歷整個詞彙表,也就是都需要經過softmax歸一化,計算誤差向量和梯度以更新兩個詞向量矩陣(這兩個詞向量矩陣實際上就是最終的詞向量,可認為初始化不一樣),當語料庫規模變大、詞彙表增長時,訓練變得不切實際。
  • CVPR2020 oral | 解決目標檢測長尾問題簡單方法:Balanced Group Softmax
    v=ikdVuadfUo8使用基於深度學習的模型來解決長尾 large vocabulary目標檢測是一項具有挑戰性而艱巨的任務,然而,這項工作尚未得到充分研究。在本文的工作中,首先對針對長尾分布問題所提出SOTA模型的性能進行了系統分析,找出其不足之處。發現當數據集極度偏斜時,現有的檢測方法無法對few-shot類別進行建模,這可能導致分類器在參數大小上的不平衡。
  • [NLP] 秒懂詞向量Word2vec的本質
    『word2vec Explained- Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method』Xin Rong 的論文:『word2vec Parameter Learning Explained』:來斯惟的博士論文『基於神經網絡的詞和文檔語義向量表示方法研究』以及他的博客(網名:licstar
  • 乾貨 | 淺談Softmax函數
    由於人工智慧領域的許多問題都可以抽象成分類問題,所以softmax最廣泛的應用當屬分類;尋址:由於softmax的輸出是一種概率分布的形式,可以用它來實現一種軟性的尋址。近幾年逐漸推廣的(軟性)注意力機制就可以認為是一種軟性尋址的方式,根據各個鍵向量與查詢向量的相似度從各個值向量中獲取一定的「信息」。
  • 乾貨 | 淺談 Softmax 函數
    由於人工智慧領域的許多問題都可以抽象成分類問題,所以softmax最廣泛的應用當屬分類;尋址:由於softmax的輸出是一種概率分布的形式,可以用它來實現一種軟性的尋址。近幾年逐漸推廣的(軟性)注意力機制就可以認為是一種軟性尋址的方式,根據各個鍵向量與查詢向量的相似度從各個值向量中獲取一定的「信息」。
  • 【NLP筆記】理論與實踐詳解詞向量
    我們把這種更新方法叫做反向傳播。模型和任務越簡單,我們訓練越快兩個算法cbow和skip-gram,cbow預測中心詞,skip-gram預測上下文兩種訓練方法兩個訓練方法:negative sampling和 hierarchical softmax。
  • 推薦系統從零單排系列(六)—Word2Vec優化策略Hierarchical Softmax與Negative Sampling
    Hierarchical Softmax原始的Word2Vec使用softmax得到最種的詞彙概率分布,詞彙表往往包含上百萬個單詞,如果針對輸出中每一個單詞都要用softmax計算概率的話,計算量是非常大的。解決辦法之一就是Hierarchical Softmax。
  • Softmax(假神經網絡)與詞向量的訓練
    一方面,小夕下面要講的確實是作為一種用神經網絡(人們為了提高逼格,更喜歡叫用深度學習xxx)訓練詞向量的基本理論和方法,但是實際上,小夕並沒有把它當神經網絡看,因為理解了小夕講的softmax後,這種方法不過是用了一下softmax而已,還不如叫「基於softmax分類器」或者「基於改良的邏輯回歸」呢。。。當然啦,對外還是要稱之為神經網絡的。
  • logistic函數和softmax函數
    閱讀目錄1. logistic函數2. softmax函數3. logistic和softmax的關係4. 參考內容簡單總結一下機器學習最常見的兩個函數,一個是logistic函數,另一個是softmax函數,若有不足之處,希望大家可以幫忙指正。
  • 卷積神經網絡系列之softmax,softmax loss和cross entropy的講解
    然後如果你是多分類問題,一般會在全連接層後面接一個softmax層,這個softmax的輸入是T*1的向量,輸出也是T*1的向量(也就是圖中的prob[T*1],這個向量的每個值表示這個樣本屬於每個類的概率),只不過輸出的向量的每個值的大小範圍為0到1。現在你知道softmax的輸出向量是什麼意思了,就是概率,該樣本屬於各個類的概率!
  • CMU楊植麟等人再次瞄準softmax瓶頸,Mixtape兼顧表達性和高效性
    選自arxiv作者:楊植麟、Thang Luong等機器之心編譯參與:魔王、杜偉2017 年,楊植麟等人提出一種解決 Softmax 瓶頸的簡單有效的方法——Mixture of Softmaxes(MoS)。
  • 基於PaddlePaddle的詞向量實戰 | 深度學習基礎任務教程系列
    但是基於神經網絡的模型不需要計算和存儲一個在全語料上統計產生的大表,而是通過學習語義信息得到詞向量,因此能很好地解決以上問題。  本教程旨在展示神經網絡訓練詞向量的細節,以及如何用 PaddlePaddle 訓練一個詞向量模型。
  • 【NLP】CS224N課程筆記|詞向量I: 簡介, SVD和Word2Vec
    在下一部分,基於迭代的方法可以以更為優雅的方式解決大部分上述的問題。4、Iteration Based Methods - Word2vec這裡我們嘗試一個新的方法。這個想法是設計一個模型,該模型的參數就是詞向量。然後根據一個目標函數訓練模型,在每次模型的迭代計算誤差,並遵循一些更新規則,該規則具有懲罰造成錯誤的模型參數的作用,從而可以學習到詞向量。這個方法可以追溯到 1986年,我們稱這個方法為誤差「反向傳播」,這個方法簡化的模型和任務並使得訓練模型的速度更快。
  • 淺談logistic函數和softmax函數
    2.1  softmax函數的定義softmax函數是logistic函數的一般形式,本質是將一個K維的任意實數向量映射成K維的實數向量,其中向量中的每個元素取值都介於(0,1相同點:(1)最優模型的學習方法我們常用梯度下降算法來求模型損失函數的最優解,因為softmax回歸是logistic回歸的一般形式,因此最優模型的學習方法相同。logistic回歸的損失函數的偏導數:
  • Softmax-based Loss Functions
    是輸入softmax loss的樣本特徵向量,近年來,在人臉識別等領域對softmax loss進行了改進,使得既能夠充分利用softmax loss收斂快等良好性質,又能夠訓練獲得一個具有優良泛化性能的度量空間。這些改進方法大概能夠被劃分為歸一化(normalization)和增加margin.歸一化優化softmax loss需要增大
  • [BTTB] 你不知道的 Softmax
    先看 softmax 的定義假設一個向量 1,所以我們可以將這個新向量裡的值看作是概率。誰才是真正的 softmax為什麼這麼說,其實仔細想想就會發現,softmax 幹的根本就不是 max 幹的活,它並不是找出一個向量中的最大值。