0
本文作者: 小牛翻譯 | 2019-09-03 17:18 |
本文作者為李炎洋,來自東北大學自然語言處理實驗室,向雷鋒網AI科技評論獨家投稿。
對于目前基于神經網絡的序列模型,很重要的一個任務就是從序列模型中采樣。比如解碼時我們希望能產生多個不一樣的結果,而傳統(tǒng)的解碼算法只能產生相似的結果。又比如訓練時使用基于強化學習或者最小風險訓練的方法需要從模型中隨機采集多個不一樣的樣本來計算句子級的損失,而一般的確定性方法不能提供所需要的隨機性。本文回顧了一系列常用的序列模型采樣方法,包括基于蒙特卡洛的隨機采樣和隨機束搜索,以及最近提出的基于Gumbel-Top-K的隨機束搜索。表1展示了這三種方法各自的優(yōu)缺點。
在此之前,我們首先回顧一下束搜索。在序列模型中,束搜索通常被用來提升模型解碼時的性能。默認的貪婪解碼總是在每一步挑選一個當前分數最高的詞來組成序列。相比起貪婪解碼,束搜索每一步都挑選多個詞來組成多個候選序列,最后挑選分數最高的序列作為最終輸出。束搜索雖然增加了計算量,但是也顯著提升了模型性能。圖1是一個束大小為2的束搜索的例子:
圖1 束搜索第一步
在解碼第一步的時候,束搜索從句子開始符<START>開始,根據模型的打分logPLM(PLM是在給定前綴的情況下模型輸出的下一詞分布)來挑選詞表中得分最高的前兩個詞he和I,并用he和I的得分logPLM(he|<START> )和logPLM(I|<START> )分別作為候選序列<START> he和<START> I的得分。
圖2 計算束搜索第二步打分
在解碼第二步的時候,根據模型的打分logPLM為已經生成部分內容的句子<START> he和<START> I各自挑選得分最高的前兩個詞,如<START> he會挑選hit和struck,<START> I會挑選was和got,然后組成一共四個候選序列<START> he hit,<START> he struck,<START> I was和<START> I got,并分別計算他們的得分,比如<START> he hit的得分等于<START> he這個序列的得分加上hit的得分 logPLM(hit|<START> he),如圖2所示。最后保留這四個候選序列中得分最高的前兩個序列
即<START> he hit和<START> I was,如圖3所示。
圖3 挑選束搜索第二步候選
以此類推,束搜索一直迭代到固定次數或者所有的候選序列都結束才停止。在這個例子中束搜索在第六步停止,產生了兩個候選序列<START> he hit me with a pie和<START> he hit me with a tart,并挑選得分最高的<START> he hit me with a pie作為最終的結果,如圖4所示。
圖4 束搜索最終結果
從序列模型中采集多個樣本有兩種經典的方法:基于蒙特卡洛的隨機采樣和基于蒙特卡洛的束搜索。
在序列模型中采樣的最簡單方法就是在貪婪搜索的基礎上,在每一步挑選下一個詞的時候不是根據它們相應的得分logPLM而是根據模型輸出的下一個詞分布PLM來隨機選取一個,這樣重復到固定長度或者挑選到句子結束符時停止。這樣我們獲得了一個樣本。如果需要采集多個樣本,那么重復這個過程若干次便可得到多個樣本。
基于蒙特卡洛的隨機采樣雖然簡單,但是它面臨著嚴重的效率問題。如果模型輸出的下一個詞分布PLM熵很低,即對于個別詞輸出概率特別高,那么采集到的樣本將有很大一部分重復,比如接近收斂時候的模型。因此為了采集到固定數目的不同樣本,基于蒙特卡洛的隨機采樣可能需要遠遠大于所需樣本數的采樣次數,使得采樣過程十分低效。
基于蒙特卡洛的隨機束搜索在采集多個不同樣本遠比基于蒙特卡洛的隨機采樣高效。假設現在束大小為K,基于蒙特卡洛的隨機束搜索在束搜索的基礎上,把根據下一詞的得分logPLM挑選前K個得分最高的詞的操作替換成根據下一個詞分布PLM隨機挑選K個不同詞。因為每一步都挑選了不同的詞,因此最終產生的K個候選序列都不會相同,從而達到了高效采集K個樣本的目的。
但是基于蒙特卡洛的隨機束搜索也面臨著方差的問題。在每一步中它都是根據PLM隨機挑選K個不同詞,它無法控制隨機采樣時的噪聲,也就是樣本分布的方差跟每一步的PLM的方差相關,而PLM的方差是無法控制的,它可能非常大也可能非常小。因此在基于蒙特卡洛的隨機束搜索采集到的樣本上估計的統(tǒng)計量會非常不穩(wěn)定,比如在使用句子級損失的任務中采用樣本估計損失的時候會計算出不穩(wěn)定的值,使模型訓練受到影響。
解決基于蒙特卡洛的隨機束搜索的問題關鍵在于怎么控制每一步隨機采樣時的噪聲。最近的論文提出使用了Gumbel-Top-K技巧來達到這個目的。
如果我們把每個可能的句子當成一個單獨的類別來構造一個類別數非常龐大(假設所有句子長度相等,那么有VT個類別,其中V是詞表大小,T是句子長度)的類別分布,那么便可以使用Gumbel-Top-K技巧來從這一個龐大的類別分布中采集K個不同樣本,同時每個樣本都服從于原始的分布。這也是論文提出的自底向上的采樣方法。
圖5 自底向上的采樣方法
圖5展示了一個詞表大小V=3(hello,world,!),句子長度T=3和樣本數K=2的例子。我們需要先從第一個詞開始枚舉所有的9個可能的句子,同時使用模型計算這9個句子的概率。因為模型通常只能計算整個句子的概率,而Gumbel噪聲需要加到整個logit上,我們可以使用整個句子的對數概率
我們就完成了采樣,但是自頂向上的方法需要先枚舉所有句子和計算其對數概率才能開始使用噪聲擾動每個句子的對數概率,那么我們能不能從句子開始一邊枚舉一邊計算和擾動生成的不同句子的對數概率?在此之前,我們必須先定義在枚舉過程中中間生成的只有部分內容的句子的對數擾動概率。只有部分內容的句子(部分生成的句子)的對數擾動概率,比如例子中的<START> world,定義為以該部分生成的句子為前綴的所有完整句子中對數擾動概率最大的一個
這樣,我們可以一邊枚舉所有句子的同時計算句子的對數擾動概率。
更進一步地,我們可以看到,因為我們定義部分生成的句子的對數擾動概率為其對應的所有完整句子的最大的對數擾動概率,因此如果我們在枚舉的時候只保留分數最高的K個候選,那么我們可以保證最終的K個候選一定是所有句子中分數最高的前K個,因為部分生成的句子的對數擾動概率的定義已經說明一個內部節(jié)點的所有葉子節(jié)點的對數擾動概率不可能比它的對數擾動概率大,因此在當前一層中不是分數最高的前K個的話以后它任何一個后代節(jié)點也不可能是分數最高的前K個。這樣一個自頂向下的方法可以非常高效的采集K個不同樣本而不需要枚舉所有句子。
圖6 自頂向下的采樣方法
圖6展示了一個K=2的自頂向下的采樣例子。我們先對<START>的對數概率進行擾動,得到-1.2,然后我們對所有候選序列<START> hello,<START> !和<START> world的對數概率進行擾動并進行糾正,得到-4.3,-3.2,-1.2,最后我們只保留對數擾動概率最高的<START> !和<START> world繼續(xù)進行拓展,最終得到<START> world hello和<START> world world兩個樣本。
最新提出的基于Gumbel-Top-K的隨機束搜索提供了一種高效的采樣手段。利用這種方法,我們可以:
1. 對于需要采樣來計算句子級損失的任務,可以更高效地訓練模型;
2. 類似于使用Gumbel-Softmax的梯度作為Gumbel-Max梯度的有偏估計,為Gumbel-Top-K尋找類 似的梯度有偏估計,使得模型可以直接優(yōu)化其搜索過程;
3. 概率化束搜索,為束搜索可能導致的一系列問題如過翻譯,漏譯等提供概率解釋。
參考文獻
Kool, W., Hoof, H.V., & Welling, M. (2019). Stochastic Beams and Where To Find Them: The Gumbel-Top-k Trick for Sampling Sequences Without Replacement. ICML.
Shen, S., Cheng, Y., He, Z., He, W., Wu, H., Sun, M., & Liu, Y. (2015). Minimum Risk Training for Neural Machine Translation. ArXiv, abs/1512.02433.
作者介紹
李炎洋,東北大學自然語言處理實驗室研究助理。東北大學自然語言處理實驗室由姚天順教授創(chuàng)建于 1980 年,現由朱靖波教授、肖桐博士領導,長期從事計算語言學的相關研究工作,主要包括機器翻譯、語言分析、文本挖掘等。團隊研發(fā)的支持119種語言互譯的小牛翻譯系統(tǒng)已經得到廣泛應用。
雷峰網特約稿件,未經授權禁止轉載。詳情見轉載須知。