神經翻譯筆記5擴展a:序列到序列模型解碼的二三事

神經翻譯筆記5擴展a. 序列到序列模型解碼的二三事

本章(即神經翻譯筆記5)主要圍繞編碼器解碼器模型(這個名詞與序列到序列模型混用,本章內不再贅述)展開,在上一節的核心知識點裏,已經介紹瞭解碼器的主流解碼過程——集束搜索。這一解碼方法得到了非常廣泛的應用,在機器翻譯領域已經成爲了標配。但是,該方法也存在兩個問題

  • 難以控制句子長度
  • 難以控制句子多樣性。這一點對機器翻譯問題不大(但是從後面的講述中可以看到,如果能在這點上做出改進,也可以通過其它途徑提升翻譯質量),但是序列到序列模型並非只用於機器翻譯領域,在自然語言處理的其它領域也都有所應用。例如在會話領域,多樣性就是關注的一個重點,此時集束搜索更難以滿足人們的要求

本節將就解碼的這些問題做展開,介紹一些在集束搜索上做的擴展工作。其中大部分都來自於兩大神經翻譯框架fairseqOpenNMT-tf提供的功能

懲罰機制

在神經翻譯出現後的第一篇有影響力的系統論文[GNMT2016]中,Google介紹了他們對解碼器引入的兩個額外項,分別爲覆蓋度懲罰項(coverage penalty)和長度歸一項(length normalization, 文章裏的記號也可以解讀爲長度懲罰項length penalty),其初衷是讓解碼器產生長度更長的句子,同時儘量覆蓋源句。假設原先集束搜索時每一步的打分函數爲s(YX)=log(P(YX)){\rm s}(Y|X) = \log (P(Y|X)),現在則修改爲

s(Y,X)=log(P(YX))/lp(Y)+cp(X,Y)lp(Y)=(5+Y)α(5+1)αcp(X,Y)=βi=1Xlog(min(j=1Ypi,j,1)) \begin{aligned} {\rm s}(Y,X) &= \log (P(Y|X)) / {\rm lp}(Y) + {\rm cp}(X, Y) \\ {\rm lp}(Y) &= \frac{(5+|Y|)^\alpha}{(5+1)^\alpha}\\ {\rm cp}(X, Y) &= \beta \sum_{i=1}^{|X|}\log\left(\min\left(\sum_{j=1}^{|Y|}p_{i,j}, 1\right)\right) \end{aligned}

其中pi,jp_{i,j}是解碼器生成的第jj個目標單詞與輸入句第ii個源單詞計算得出的注意力概率。這裏對cp函數稍作解釋:從宏觀、抽象的角度看,對每個i,1iXi, 1 \le i \le |X|計算一個值,取log並求和,其實暗合了信息論的計算方法,可以大致解讀爲該公式計算了源句單詞生成目標句所有單詞能力的信息。更具體地拆開說,在解碼的每一步,對每個源單詞ii,cp都會計算其與每個已經生成的單詞jj的注意力概率p(i,j)p(i,j)。如果已經解碼出了一個跟ii意思一樣的單詞,那麼會有一個很大的p(i,j)p(i,j)出現,使得所有注意力概率求和以後很可能超過1,進而min(p,1)=1,log1=0\min(\sum p, 1) = 1, \log 1 = 0,對打分沒有影響;否則,由於還未產生對源句該單詞的翻譯,因此內部求和項的各子項都是比較小的數,相加結果很可能小於1,求對數後是一個負值,降低得分

FAIR實現的fairseq中同樣有對長度進行懲罰的機制,不過該機制相對來講比較簡單,只是根據長度減小<eos>的得分,邏輯僅有一行:

eos_scores /= (step + 1) ** self.len_penalty

GNMT原始論文中的長度懲罰項α\alpha取值範圍爲α[0,1]\alpha \in [0, 1],推薦設置爲0.6到0.7(可以通過開發集微調)。若設置爲0,則退化爲原始集束搜索。fairseq中的長度懲罰參數lenpen無明確推薦值,一般也是根據開發集上的解碼結果設置。該值無取值範圍,如果大於1則鼓勵長句,小於1則鼓勵短句。注意fairseq的lenpen與源句-目標句比值無嚴格關係

[YangYilin2018]也對集束搜索失效的情況進行了分析。其分析指出集束搜索在寬度bb變大時更容易產生短句,進而因BLEU計算時會對短句懲罰而降低模型效果。更容易產生短句的原因是隨着bb變大結束符<eos>出現的概率增加,而短句的模型打分在不加長度懲罰時肯定要比長句高,因此模型更容易輸出短句

文章提出的解決方案分爲如下幾步

  1. 將編碼器的所有隱藏狀態求平均,平均之後得到的向量送入一個二層MLP,通過求解迴歸問題來預測目標句長度與源句長度的比值。假設源句爲XX,長度爲X|X|,計算得到的比值爲gr(X){\rm gr}^\ast(X),則解碼結果預計長度爲Lpred(X)=gr(X)XL_{\rm pred}(X) = {\rm gr}^\ast(X) \cdot |X|
  2. 懲罰項爲rL(X,Y),L(X,Y)=min{Y,Lpred(X)}r \cdot L^\ast(X, Y), L^\ast(X, Y) = \min\{|Y|, L_{\rm pred}(X)\},加到原來的模型得分上(注意這裏是加法操作,並非前面GNMT提出的除法操作)

然而這裏仍然帶有一個超參數rr。爲了徹底消除解碼過程中的額外超參數,文章進一步提出了兩種計算方法

有界自適應獎勵項(bounded adaptive reward)。對寬度爲bb的集束搜索,在時刻tt,對當前集束,有

rt=1bi=1blogP(wordi)S^AdaR(X,Y)=S(X,Y)+t=1L(X,Y)rt \begin{aligned} r_t &= -\frac{1}{b}\sum_{i=1}^b \log P({\rm word}_i) \\ \hat{S}_{\rm AdaR}(X, Y) &= S(X, Y) + \sum_{t=1}^{L^\ast(X, Y)}r_t \end{aligned}

BP懲罰項,該方法靈感直接來自於BLEU的計算方式(BLEU的計算方式在本章補充筆記第3篇介紹)

S^bp(X,Y)=logbp+1YS(X,Y)bp=min{e11lr,1}lr=YLpred(X) \begin{aligned} \hat{S}_{\rm bp}(X, Y) &= \log bp + \frac{1}{|Y|}S(X, Y) \\ bp &= \min\left\{e^{1-\frac{1}{lr}}, 1\right\} \\ lr &= \frac{|Y|}{L_{\rm pred}(X)} \end{aligned}

(本文後面還介紹了應該在何時停止搜索,但感覺講得不太明確,這裏先不介紹)

增加解碼結果的多樣性

序列到序列模型是一種比較強力,在當今NLP領域裏應用比較廣泛的模型,其不僅被應用於機器翻譯領域,也可以應用在其它方向。例如,對於生成式閒聊機器人,通常也是使用編碼器-解碼器模型來解決問題,此時編碼器編碼的內容是對方發送來的內容,解碼器需要根據這樣的內容產生回覆。這種爲聊天生成回覆的場景與機器翻譯領域不同:機器翻譯對於一個給定的源句,生成的目標句形式通常比較有限,例如“What’s this”大部分情況下只能翻譯成“這是什麼”——當然,也可以生成“這是啥”等變種,但是其語義必須要與源句相同。然而回復生成的可選範圍是寬泛的,對“你吃了什麼”的回答可以是包子、餃子、麪條……等等。在這種情況下,如果對同樣的問題總有確定的回答,反而會讓人覺得無聊

基於這樣的背景,增加解碼結果多樣性實際上成爲了生成式閒聊機器人領域的剛需。此外,在機器翻譯領域中,也有一個分支是研究如何產生多樣性的翻譯。本小節將對多樣性解碼的經典工作做一簡要介紹

帶“溫度”的集束搜索

[Chorowski2016]在利用softmax函數計算概率分佈時,引入了“溫度”的概念(懷疑這個概念來自於模擬退火算法,但是不確定)。這個思路比較簡單,直接將得到的所有得分都統一除以一個超參數T>0T > 0,再做softmax來得到最後的概率向量:

P(yi)=exp(si/T)jexp(sj/T) P(y_i) = \frac{\exp(s_i / T)}{\sum_j \exp(s_j/T)}

TT爲1時,該方法退化爲經典的集束搜索;當T>1T>1時,整個分佈變得平滑,頭部單詞的概率變小(當TT\infty時,最後得到的是均勻分佈);當0<T<10 < T < 1時,分佈變得更“尖銳”,頭部單詞的概率被進一步放大

多樣化集束搜索

[LiJiwei2016]認爲在集束搜索的原理是導致生成結果差別不大的原因。這裏舉一個搜索寬度bb設置爲2的情況:假設在第t1t-1步排序最高的候選詞A對應的生成序列概率對數值總和爲-1.5,排序第二的候選詞B對應的生成序列概率對數值綜合爲-2.2。現在擴展到第tt步,如果以A爲父節點的搜索得到的兩個新候選詞概率的對數值爲-1.0和-1.3,以B爲父節點的搜索得到的兩個新候選詞概率的對數值分別爲-0.8和-1.1。儘管但看這一步B分支佔有優勢,但是由於集束搜索考慮了到該時刻爲止,序列中生成的詞的概率對數總和,那麼A分支的兩個節點累積值爲-1.5 - 1.0 = -2.5和-1.5 - 1.3 = -2.8,而B分支的兩個節點累積值爲-2.2 - 0.8 = -3.0和-2.2-1.1 = -3.3,綜合排序B分支都被丟棄,後面展開的序列都以A爲祖先

爲了讓類似這樣的情況更少發生,[LiJiwei2016]對傳統集束搜索做出了一個修改,稱爲“多樣化集束搜索”(diverse beam search,爲了與後面介紹的方法區別開,本文稱之爲“分支內排序多樣化集束搜索”),即在打分時將各個候選詞在各分支內的排序考慮進來,給歷史總分佔劣勢的分支裏高概率候選詞一個翻身的機會。更形式化的表示如下:若輸入句爲XX,集束搜索的寬度爲bb,在第t1t-1時刻得到了bb個搜索分支,各分支記爲Yk(t1)(1kb)Y_k^{(t-1)} (1 \le k \le b)。在第tt時刻,每個分支產生的候選詞再取前bb個,對第kk分支的第kk'個候選詞,傳統的集束搜索算法打分爲

S(Yk(t1),yk,k(t)X)=S(Yk(t1)X)+logP(yk,k(t)X,Yk(t1)) S\left(Y_k^{(t-1)}, y_{k,k'}^{(t)} \big| X\right) = S\left(Y_k^{(t-1)} \big| X\right) + \log P\left(y_{k,k'}^{(t)} \big| X, Y_k^{(t-1)}\right)

分支內排序多樣化集束搜索在此基礎上添加了一項

S^(Yk(t1),yk,k(t)X)=S(Yk(t1),yk,k(t)X)γk \hat{S}\left(Y_k^{(t-1)}, y_{k,k'}^{(t)} \big| X\right) = S\left(Y_k^{(t-1)}, y_{k,k'}^{(t)} \big| X\right) - \gamma k'

對前面的例子,如果使用γ=1\gamma=1的多樣化集束搜索,則A分支的兩個節點累積值爲-1.5 - 1.0 - 1 = -3.5和-1.5 - 1.3 - 2 = -4.8,而B分支的兩個節點累積值爲-2.2 - 0.8 - 1 = -4.0和-2.2 - 1.1 - 2 = -5.3,接下來會以兩個分支的第一個候選詞各自展開

前述例子更直觀的解釋可見下圖

分支內排序多樣化集束搜索示意圖。左邊爲標準集束搜索

原文還提出了使用強化學習確定超參數γ\gamma的方法,這裏不贅述

[Vijayakumar2016]提出了一種類似的多樣化集束搜索策略,不過其使用的額外懲罰項與每個候選詞在分支內的排名無關,依賴的是更復雜的自定義比較項,且對候選句作了分組(因此本文稱其爲“分組多樣化集束搜索”)。其思路大致爲:

  1. 將寬度爲bb的集束搜索的結果劃分爲GG個組,每組包含bb'個候選
  2. 對第1組進行寬度爲bb'的、正常的集束搜索,得到的候選句集合記爲Y1(t){\bf Y}_1^{(t)}
  3. 對第2至第GG組,記tt時刻組ggkk個候選爲Yg,k(t)Y_{g,k}^{(t)}。在進行集束搜索時,額外加入一個懲罰項h=1g1λhΔ(Yg,k(t),Yh(t))\sum_{h=1}^{g-1}\lambda_h\Delta\left(Y_{g,k}^{(t)}, {\bf Y}_h^{(t)}\right),以新的打分函數對每組進行寬度爲bb'的集束搜索。這裏λh\lambda_h稱爲“多樣化係數”,通常設置在0.2到0.8之間;Δ\Delta是自定義的比較函數,文章稱漢明函數(正比於該句標識符數在之前各組中出現的總次數)效果最好
  4. 最終得到的搜索結果爲Y(T)=g=1GYg(T){\bf Y}^{(T)} = \bigcup_{g=1}^{G}{\bf Y}_g^{(T)}

fairseq對這兩種方法都進行了實現:

  • diversity-rate選項對應於分支內排序多樣化集束搜索中,懲罰項的係數γ\gamma
  • diverse-beam-groups選項對應於分組多樣化集束搜索中的GG
  • diverse-beam-strength選項對應於分組多樣化集束搜索中的λ\lambda

隨機搜索

除去正文中講述的集束搜索和貪婪搜索,還有一種純隨機採樣(也稱爲全分佈採樣)的搜索方式:softmax得到目標語言在時刻tt各單詞的概率以後,不選取最佳nn個候選展開,而是根據該概率分佈,隨機選取一個單詞作爲這一步解碼的結果。在這之上的變種是指定採樣時選取概率最高的kk個輸出,在這個範圍內做隨機採樣,稱爲top-k採樣。然而,在不同環境下,top-k詞表涵蓋的詞並不相同

[Holtzman2019]在top-k採樣的基礎上做了一些修改。文章認爲解碼時在不同情況下,候選詞的概率分佈不同。例如對於“China 's capital is ____”,此時Beijing的概率肯定會非常高,遠超其他所有單詞,如果使用top-k採樣而且k設置得太大,會可能引入不自然的候選詞;但是對於“I feel ____”,不同形容詞(如sad、happy、frustrated、angry……)的概率又都相近,太小的k會排除掉本該合理的詞。因此同樣的k,在不同情況下都會多少帶來負面影響,不夠靈活。文章提出的工作稱爲nucleus sampling,也可以稱作top-p採樣,基本思路就是以概率值0<p<10 < p < 1作爲超參數,在解碼時,對得到的單詞按照概率值從高到低排列,遍歷單詞,逐個累加其對應的概率值,直到累加概率值超過pp停止。將收集到的頭部單詞按照歸一化的概率分佈重新採樣。實驗表明這種方法既可以生成更通順的結果,也兼顧了多樣性的要求,同時有效避免了編碼器解碼器模型將一個片段重複生成的異常現象

隨機搜索是最有效的增加解碼器多樣性的方法,但是大部分情況下生成的句子都可能不太通順,比較奇怪。稍微有違直覺的是,這些方法在機器翻譯中也有比較重要的應用價值,具體場景將在後面介紹

參考文獻

  • [GNMT2016]: Wu, Y., Schuster, M., Chen, Z., Le, Q. V., Norouzi, M., Macherey, W., … & Klingner, J. (2016). Google’s neural machine translation system: Bridging the gap between human and machine translation. arXiv preprint arXiv:1609.08144.
  • [YangYilin2018]: Yang, Y., Huang, L., & Ma, M. (2018). Breaking the Beam Search Curse: A Study of (Re-) Scoring Methods and Stopping Criteria for Neural Machine Translation. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing (EMNLP 2018) (pp. 3054-3059).
  • [Chorowski2016]: Chorowski, J., & Jaitly, N. (2016). Towards better decoding and language model integration in sequence to sequence models. arXiv preprint arXiv:1612.02695.
  • [LiJiwei2016]: Li, J., Monroe, W., & Jurafsky, D. (2016). A simple, fast diverse decoding algorithm for neural generation. arXiv preprint arXiv:1611.08562.
  • [Vijayakumar2016]: Vijayakumar, A. K., Cogswell, M., Selvaraju, R. R., Sun, Q., Lee, S., Crandall, D., & Batra, D. (2016). Diverse beam search: Decoding diverse solutions from neural sequence models. arXiv preprint arXiv:1610.02424.
  • [Holtzman2019]: Holtzman, A., Buys, J., Du, L., Forbes, M., & Choi, Y. (2019). The curious case of neural text degeneration. arXiv preprint arXiv:1904.09751 (Accepted at ICLR 2020 Poster).
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章