如何应对Seq2Seq中的“根本停不下来”问题?
?
?PaperWeekly 原創(chuàng) ·?作者|蘇劍林
單位|追一科技
研究方向|NLP、神經(jīng)網(wǎng)絡(luò)
在 Seq2Seq 的解碼過程中,我們是逐個 token 地遞歸生成的,直到出現(xiàn) 標(biāo)記為止,這就是所謂的“自回歸”生成模型。然而,研究過 Seq2Seq 的讀者應(yīng)該都能發(fā)現(xiàn),這種自回歸的解碼偶爾會出現(xiàn)“根本停不下來”的現(xiàn)象,主要是某個片段反復(fù)出現(xiàn),比如“今天天氣不錯不錯不錯不錯不錯...”、“你覺得我說得對不對不對不對不對不對...”等等,但就是死活不出現(xiàn) 標(biāo)記。
ICML 2020 的文章 Consistency of a Recurrent Language Model With Respect to Incomplete Decoding 比較系統(tǒng)地討論了這個現(xiàn)象,并提出了一些對策,本文來簡單介紹一下論文的主要內(nèi)容。
論文標(biāo)題:Consistency of a Recurrent Language Model With Respect to Incomplete Decoding
論文來源:ICML 2020
論文鏈接:https://arxiv.org/abs/2002.02492
解碼算法
對于自回歸模型來說,我們建立的是如下的條件語言模型:
那么解碼算法就是在已知上述模型時,給定 x 來輸出對應(yīng)的 來。解碼算法大致可以分為兩類:確定性解碼算法和隨機(jī)性解碼算法,原論文分別針對這兩類解碼討論來討論了“根本停不下來”問題,所以我們需要來了解一下這兩類解碼算法。
1.1 確定解碼
確定性解碼算法就是當(dāng)輸入文本固定之后,解碼出來的輸出文本也是固定的,這類算法包含貪心搜索(Greedy Search)和束搜索(Beam Search),事實上貪心搜索是束搜索的一個特例,所以只需要討論束搜索。
束搜索我們需要固定一個“束”的大小(Beam Size),然后從左往右逐個 token 地解碼,每步只保留總得分最高的 k 個序列。比如 ,token 空間為 ,那么解碼流程示例如下:
第一步,算 ( 是固定的起始標(biāo)記 ),然后保留最大的兩個,比如 ,并記錄它們的得分(概率對數(shù));
第二步,算 和 ,這時候候選序列一共有 個,保留總得分(也就是當(dāng)前 token 分?jǐn)?shù)加上 a,b 本身的分?jǐn)?shù))最大的兩個,比如 ,并記錄各自的總得分;
第三步,算 和 ,這時候候選序列一共有 個,保留總得分(也就是當(dāng)前token分?jǐn)?shù)加上 本身的分?jǐn)?shù))最大的兩個,比如 ,并記錄各自的總得分;
...
依此類推,每個序列直到出現(xiàn) 就停止,最后從這 個已經(jīng)完成終止的序列中選最優(yōu)的那個輸出。一般有兩種選擇,一是輸出總得分最大的,二是輸出平均得分最大的(處以各自 token 數(shù)),有時候還會根據(jù)實際需求加入長度懲罰等。
1.2 隨機(jī)解碼
隨機(jī)性解碼算法,顧名思義,就是哪怕輸入文本固定了,解碼出來的輸出文本也不是固定的,比如從訓(xùn)練語言模型進(jìn)行隨機(jī)采樣就是這這種算法(參考《現(xiàn)在可以用 Keras 玩中文 GPT2》[1] )。
對于 Seq2Seq 來說,我們很多時候希望得到確定性的結(jié)果,所以多數(shù)場景下我們都是用 Beam Search。但是 Beam Searc 的生成結(jié)果可能會出現(xiàn)過于單一的現(xiàn)象(即類似“好的”、“不知道”、“謝謝”這類比較“安全”的回復(fù))。
或者有時候我們希望增加輸出的多樣性(比如我們之前開源的做相似句生成的 SimBERT [2] 模型),這時候就需要隨機(jī)性解碼算法,它包含三種情況:原生隨機(jī)解碼、top-k 隨機(jī)解碼、Nucleus 隨機(jī)解碼。
原生隨機(jī)解碼很簡單,就是每步按概率隨機(jī)采樣一個 token,比如第一步算 ,然后按概率隨機(jī)采樣一個 token,比如 c;然后第二步算 ,接著按概率隨機(jī)采樣一個token,比如 a;那么第三步就算 ,再按概率隨機(jī)采樣;...;依此類推,直到采樣到 停止。
top-k 隨機(jī)解碼出自文章 Hierarchical Neural Story Generation [3],其實就是在原生隨機(jī)解碼基礎(chǔ)上加了個截斷:每一步只保留概率最高的 個 token,然后重新歸一化后再采樣,這樣做是希望在“得分高”和“多樣性”方面做一個折中。顯然,當(dāng) 時,其實就等價于貪心搜索。
Nucleus 隨機(jī)解碼則來自文章The Curious Case of Neural Text Degeneration [4],跟 top-k 隨機(jī)解碼類似,也是對采樣空間做了個截斷,截斷方式是:固定 ,然后只保留概率最高的、概率和剛好超過 p 的若干個 token,所以它也叫 top-p 采樣。
除了 top-k 和 top-p 這兩種截斷方式外,還有一些自適應(yīng)的截斷方式,比如論文 Sparse Sequence-to-Sequence Models [5] 將最后預(yù)測分布的 softmax 函數(shù)換成了稀疏版本的 softmax,它能自動讓大部分不可能的 token 概率變?yōu)?0,而不需要認(rèn)為地選擇 k 或 p。
適可而止
從 Seq2Seq 的模型設(shè)計和上面介紹的解碼算法來看,并沒有任何的理論保證解碼過程一定能停下來,也就是說并沒有東西保證一定會出現(xiàn) 標(biāo)記,這只能靠模型自己學(xué)出來,而當(dāng)模型學(xué)得不夠好時,就會出現(xiàn)“根本停不下來”的現(xiàn)象了。而原論文則針對不同的解碼算法做了相應(yīng)的分析,提出了對應(yīng)的策略,讓解碼過程能夠“適可而止”。
2.1 有界的隱向量
建模概率(1)的經(jīng)典方式就是:
也就是說,先算一個隱向量 ,然后接一個全連接,然后 softmax 激活。在這種形式下,原論文說:
如果對于任意的 t, 是有上界的,那么原生隨機(jī)解碼就能夠“適可而止”。
看上去很強(qiáng)很實用的一個結(jié)論是不是?讓 是有上界是一個很簡單的事情,比如加個 Layer Norm 就可以了,那是不是說加個 Layer Norm 就可以解決所有的問題呢?
并不是。上述結(jié)論理論上是對的,推理過程是:因為 是有上界的,所以對于任意的 t、任意的 token, 是有正的下界的(因為 不會無窮大,所以 也不會無窮大,歸一化后也不會無限接近于 0),那也就意味著存在一個正數(shù) ,總有 ,因為概率是一個正數(shù),因此只要你采樣足夠多步,總有機(jī)會采樣到 的,所以不會永遠(yuǎn)停不下來。
這推理過程是不是有點讓人啼笑皆非?沒錯,是能停,但是要采樣足夠多步,感覺就像是“只要你買足夠多張彩票就一定能中頭獎”一樣,并沒什么確切的實際價值。
采樣足夠多步之后,該循環(huán)的、該重復(fù)的 token 可能都已經(jīng)重復(fù)多次了,就算能停下來,得到的輸出可能也沒有意義了,或許還不如直接按長度截斷。
2.2 主動添加
注意上述結(jié)論還只是對原生隨機(jī)解碼成立,對于 top-k 隨機(jī)解碼和 Nucleus 隨機(jī)解碼不一定成立,因為經(jīng)過截斷后 就不一定出現(xiàn)在采樣空間中了,當(dāng)然,我們可以手動把 添加進(jìn)采樣空間,所以就有了如下的結(jié)論:
如果對于任意的 t, 是有上界的,并且我們把 也加入到采樣空間中,那么 top-k 隨機(jī)解碼和 Nucleus 隨機(jī)解碼就能夠“適可而止”。
只不過,這有點像是廢話...
2.3 自截斷設(shè)計
注意,上面的兩個結(jié)論都只能用于隨機(jī)解碼,對于確定性解碼來說,因為沒有了隨機(jī)性,所以我們沒法保證一定能碰到 。為此,原論文提出了一個自截斷的設(shè)計:想辦法讓 有正的下界,而且這個下界隨著 t 的增大而增大,最終逐漸趨于 1。
這種自截斷的設(shè)計也不復(fù)雜,就是定義 ,其中:
這里的 負(fù)責(zé)將 映射到 ,比如可以用 。設(shè)計好 后,剩下的 token 概率還是按照原來的 softmax 方式計算,然后乘以 即可。
現(xiàn)在我們有:
顯然只要:
也就是說,對于貪心搜索來說必然在 步內(nèi)停止,而對隨著 越來越接近 1,顯然 Beam Search 也能在有限步停止。
個人評價
原論文的主要內(nèi)容大體上就是這樣了,總的來說,它確實給我們提供了對解碼算法的一些新認(rèn)識,以及提供了一些緩解“根本停不下來”問題的有效策略。但是,作為一篇 ICML 論文來說,我覺得原論文的視角并不高,總體顯得有些顯淺。
原論文的大部分篇幅,是在用數(shù)學(xué)化的語言來重新表述已有的內(nèi)容,比如什么是解碼算法、什么是 top-k 隨機(jī)解碼、什么是 Beam Search、什么是“根本停不下來”等等,原論文都給下了個數(shù)學(xué)定義,這不能說沒有意義,但對論文本身要探討的問題并沒有什么價值,而除去這部分東西,原論文就沒多少內(nèi)容了。
其次,原論文的結(jié)論太弱,關(guān)于隨機(jī)解碼的應(yīng)對策略前面已經(jīng)點評過了,結(jié)論是對的,但基本沒實用價值;而對于確定性解碼的自截斷設(shè)計,其實很生硬,有種粗暴截斷的感覺,完全沒有優(yōu)雅感。
最關(guān)鍵的問題是,對于“根本停不下來”這個問題,論文通篇都是在回答“是什么”、“怎么辦”這兩個問題,沒有探討“為什么”,沒有提供任何關(guān)于理解“根本停不下來”本質(zhì)的有用信息,從而并沒有得到更貼近本質(zhì)的應(yīng)對策略,這是筆者覺得相當(dāng)難以接受的。
文章小結(jié)
本文介紹了 Seq2Seq 的解碼算法,討論了解碼過程中可能出現(xiàn)的“根本停不下來”的現(xiàn)象,并介紹了 ICML 2020 的一篇論文中提供的應(yīng)對策略。
參考鏈接
[1] https://kexue.fm/archives/7292
[2] https://kexue.fm/archives/7427
[3] https://arxiv.org/abs/1805.04833
[4] https://arxiv.org/abs/1904.09751
[5] https://arxiv.org/abs/1905.05702
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識的人。
總有一些你不認(rèn)識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)習(xí)心得或技術(shù)干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標(biāo)準(zhǔn):
? 稿件確系個人原創(chuàng)作品,來稿需注明作者個人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?
? 如果文章并非首發(fā),請在投稿時提醒并附上所有已發(fā)布鏈接?
? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會添加“原創(chuàng)”標(biāo)志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發(fā)送?
? 請留下即時聯(lián)系方式(微信或手機(jī)),以便我們在編輯發(fā)布時和作者溝通
????
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁搜索「PaperWeekly」
點擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學(xué)術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結(jié)
以上是生活随笔為你收集整理的如何应对Seq2Seq中的“根本停不下来”问题?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称零跑汽车国庆期间新增订单破 1.6
- 下一篇: 声阔降噪舱 3 代耳机发布:TouchB