back to index
[DLHLP 2020] Non-Autoregressive Sequence Generation (由助教莊永松同學講授)

link |
關於non-auto-regressive的sequence generation。
link |
大家都已經做過一個Second-to-Second的語音辨識。
link |
conditional的sequence generation。
link |
那你的condition就是input的語音訊號。
link |
然後你的output的句子就是你要generate的sequence,
link |
然後output是對應那張圖片的圖說文字,
link |
那這個這個task也是conditional sequence generation,
link |
那它叫做image caption generation。
link |
output的是對應那段英文的中文,
link |
那這個就是machine translation。
link |
那今天我們要探討的這個non-auto-regressive model的主題,
link |
通常都會用sequence generation,
link |
通常都會用machine translation來做它的task,
link |
所以等一下我們都是討論翻譯的這個任務。
link |
好,那我們平常在做翻譯的時候都是用auto-regressive的model,
link |
那你會把input的sequence丟進一個RNN裡面,
link |
decoder在每一個時間點都吐出一個字,
link |
那這個就是auto-regressive的decode,
link |
所以你在decode每一個字的時候都會depend on你剛剛decode出來的字。
link |
你需要花的時間就跟你decode的句子的長度乘正比。
link |
那現在我們有了transformer之後,
link |
有了transformer之後我們就不需要像RNN一樣,
link |
所以它在encode的速度是加快的。
link |
我們可以用平行的方法把這個句子encode起來,
link |
可是在decode的時候還是會遇到一樣的問題,
link |
我們必須要等第一個位置的字吐完之後,
link |
所以說auto-regressive的model在當decode做使用的時候,
link |
需要跟句子長度乘正比的時間才能把整句話decode出來。
link |
那所以說既然transformer都已經可以平行運算了,
link |
能不能讓transformer一口氣把整句話吐出來?
link |
就是我們要怎麼決定到底要一口氣吐出來的句子是要多長?
link |
那這邊我們可以先讓encoder隨意predi一個長度,
link |
那decoder的output我就放position embedded。
link |
就是我們想要讓decoder可以吐出一整個句子,
link |
在一個time state的時間內。
link |
但是這個model如果照這樣運作的話,
link |
那要講這個問題之前可以先看一下在影像上面的例子。
link |
那這個投影片是老師在MLDS這門課裡面教conditional game的投影片。
link |
要訓練一個text to image的model。
link |
那這個chain我們把它丟到model裡面。
link |
model會output出一張圖片。
link |
我們就直接把這個output的圖片跟DLC裡面火車的圖片,
link |
算L2 distance,然後去minimize L2 distance。
link |
這個方法做出來的model最後都會output一張比較模糊的圖片,
link |
假如說你的data set裡面有70%是往左邊的火車,
link |
那model為了要去minimize這兩種火車的L2 distance,
link |
最後它是會output出一張雙頭的火車,
link |
那第一個,因為這個model的output是沒有任何dependency關係的。
link |
也就是說,這個model在output第二個位置的時候,
link |
它不知道第一個位置到底output了什麼東西,
link |
所以它們沒辦法有dependency的關係。
link |
那假如我們用auto-regressive model,
link |
因為你在output第二個位置的時候,
link |
model就可以學會output一個有structure的東西。
link |
因為game的訓練方法是discriminator給整張圖打一個分數,
link |
然後把這個分數feedback給generator去做訓練。
link |
所以說,最後generator會學到的是,
link |
我要output一個完整的structure,
link |
然後可以讓discriminator分不出來哪一張圖片是真的。
link |
那所以說,game是一個可以output完整structure的,
link |
讓generator學會output完整structure的方法。
link |
這個model的內部沒有任何的隨機的機制。
link |
它沒有一個later variable,
link |
它到底要output左邊的火車還是右邊的火車。
link |
雖然說這個model在training的時候,
link |
但是這個model它在,它內部沒有任何隨機的機制。
link |
所以即使你到了最後一個hidden state,
link |
所以它最後還是只能output一張模糊的圖片。
link |
那auto regression model為什麼沒有這個問題呢?
link |
因為auto regression model在每一個時間點的output,
link |
所以auto regression model它的later variable就是,
link |
我在每一個time statesample的那個時候。
link |
大家應該,假如大家有看過老師game的課程應該都知道,
link |
不管是conditional game或是一般的game,
link |
你在input的時候都要input一個noise。
link |
所以這兩個方法其實都會避開這兩個問題。
link |
但是我們的auto regression的方法,
link |
那現在你想要train一個auto regression的model,
link |
hello可以翻成你好,或是hello,或是hi。
link |
那假如說你的training set裡面有50%是hello,
link |
那這個auto regression model,
link |
那第二個字呢,要outputlow或是好,
link |
然後還有一個是ha好,也是一個錯誤的翻譯,
link |
那這個問題我們就叫做multi-modality問題,
link |
可能對應到很多不同模式的output,
link |
那假如我的decoder是non-auto regression,
link |
就是minimize L2 rows,
link |
就是你用non-auto regression的decoder,
link |
那它突出來的東西可能就是各種可能的output疊加的狀態。
link |
那假如你用auto regression的方法,
link |
在圖片上其實auto regression的方法,
link |
就是用一般的auto regression decoder來生文字。
link |
其實你model的架構可以用一般第一個方法裡面的model架構,
link |
我可以用簡單的decomposition layer來做,
link |
我不需要用auto regression model,
link |
因為文字用game來做目前還沒有非常成熟,
link |
因為文字是一個discrete的東西,
link |
所以目前game的研究都還是做在auto regression的model上面。
link |
唯一能達成now auto regression的model,
link |
那這個是第一篇做now auto regression翻譯的paper。
link |
那等一下都會把now auto regression translation簡稱到nat。
link |
它提出幾個方法可以改良我們的now auto regression model。
link |
這一個input的字對應到output的幾個字。
link |
然後放到decoder的input。
link |
那我就copy兩次一次兩次一次這樣子。
link |
所以最後它predict出來的這些數字的總和,
link |
那這個為什麼我們要predict這個數字呢?
link |
對這個output的規劃的事前規劃。
link |
那它就可能predict出這樣的output。
link |
就是有一個latent variable的功能,
link |
然後事先幫decoder決定好它要生成的方向。
link |
那我們要怎麼訓練這個fertility呢?
link |
我們可以直接用一個外部的alignment的工具,
link |
它的每一個字會對應到output的幾個字。
link |
secant-to-secant的auto-regressing model,
link |
然後直接去看它的attention位是怎麼分佈的。
link |
哪一段影音訊號會對應到output的哪一個字,
link |
然後來train這個fertility的prediction的話,
link |
它跟最後model要output一句不錯的句子,
link |
就是用reinforced learning的rows
link |
然後去optimize fertility。
link |
好,那剛剛講fertility是第一招,
link |
那第二招是sequence level的knowledge distillation。
link |
那knowledge distillation呢,
link |
老師在去年的NL這門課上面應該都有介紹過。
link |
就是假如你想要train一個小model,
link |
然後你又希望這個小model的performance
link |
那你現在就把這個小model當成student,
link |
先把它的input丟給大model,
link |
讓大modeloutput出它predicted的機率分布,
link |
這個predicted出來的機率分布,
link |
那這個是knowledge distillation在做的事情。
link |
就是teacher model是autoregressive model,
link |
那student model就是non-autoregressive model。
link |
我沒有要去學這個teacher model
link |
我們是讓這個teacher model
link |
用它自己modelpredicted出來,
link |
然後讓student model把那一句
link |
所以就是跟一般的knowledge distillation
link |
為什麼knowledge distillation可以解決
link |
我們想要解決的那個multimodality問題呢?
link |
那我們剛剛說multimodality問題就是
link |
output之間沒有dependency,
link |
有先給autoregressive的teacher model
link |
因為它是autoregressive model,
link |
所以說你假如讓autoregressive model
link |
去decode你的整個corpus的話呢,
link |
你的正確答案裡面就不會有hello這個可能,
link |
所以這樣做之後,你的data set就變乾淨了,
link |
就是更容易讓autoregressive model去學習,
link |
那第三招是叫做noisy parallel decoding,
link |
我圈好我的autoregressive model,
link |
其實是可以sample不同的fertility,
link |
所以sample出一個不同的fertility,
link |
然後output出一大堆的不同的句子,
link |
那這些句子再交給autoregressive model來打分數,
link |
因為這樣我不就使用了autoregressive model,
link |
其實如果你要讓autoregressive model,
link |
去算一個已經生出來的句子出現的機率,
link |
假如你用的是transformer的decoder,
link |
那你就用teacher forcing的方式,
link |
然後你會在這個decoder裡面做mask,
link |
做mask就是讓這個字不能attain到後面的字。
link |
看到begin of sentence,
link |
然後看到begin of sentence跟你要生出好的機率,
link |
乘起來就是這整句話被sync出來的機率。
link |
然後這樣的過程是不需要autoregressive的時間的,
link |
我只需要一個step就可以算出這句話的機率。
link |
我們就有三個方法可以加強這個model。
link |
那autoregressive model,
link |
我們用bin search size是1跟bin search size是4來decode,
link |
然後它的performance是這樣。
link |
我假如說bin search size是4的速度是1,
link |
那現在用autoregressive model來做,
link |
可是它的performance就差了很多。
link |
那我們現在加上fine-tune的機制,
link |
就是fertility check完之後要做fine-tune的動作,
link |
那performance就會往上漲。
link |
那接下來再加上noisy pile decoding,
link |
那performance就會再進步,
link |
可是進步的同時你的速度也會變慢一點。
link |
我做distillation跟做fertility,
link |
跟做fertility的fine-tune,
link |
這三件事情到底對model帶來多大的幫助。
link |
第一行是沒有distillation也沒有fertility,
link |
那這個時候model基本上是勸不起來的,
link |
blue score就是我們在做翻譯的時候常常用的一個指標,
link |
那如果我們用了fertility的話,
link |
但是如果我們fertility不要用predi的,
link |
我們是直接看input跟output的對應的長度,
link |
然後直接決定每一個字要copy幾次,
link |
那如果是這樣做的話其實也有16.0。
link |
那如果再加上fertility的fine-tune,
link |
這篇第一篇nautoregressive的翻譯出來之後,
link |
幾乎每個月都有不止一個新的model出來這樣子。
link |
這個第一篇的native model。
link |
是iterative refinement。
link |
那iterative refinement的概念就是,
link |
如果我們想要讓model一口氣output整段的話,
link |
那我們能不能讓他output出一句話之後,
link |
那除了iterative refinement之外,
link |
還有一個方法是insertion-based。
link |
那insertion-based它也很像iterative refinement,
link |
只是它refinement的方式是透過插入的方法,
link |
因為原本的iterative refinement,
link |
只是你在第一個time state decode出來的句子是多長,
link |
但是如果用insertion-based,
link |
我們可以自由的讓model決定句子的長度,
link |
然後再生出旁邊這兩個subsequence的最中間那個字,
link |
就是log n的時間可以生完這個句子。
link |
所以insertion-based的方法是,
link |
比較偏向partially autoregressive,
link |
就不是很純正的non-autoregressive。
link |
不像剛剛我們做iterative refinement的時候,
link |
所以我們後來又有一個新的model,
link |
它是insertion加deletion,
link |
那delete就是去預測每一個字要不要被刪掉,
link |
所以假如它有一個錯字是可以被model刪掉的。
link |
大家在老師講語音辨識這堂課裡面有介紹的CTC。
link |
那其實CTC也是可以應用在文字上面的,
link |
那這個就是第一篇做iterative refinement的NAT的model。
link |
之後還可以做很多次的refinement,
link |
然後去predict target的長度,
link |
然後就把input的句子做copy,
link |
那其實這邊做的事情跟第一篇的NAT是差不多的事情。
link |
那只是後面又多加了第二個decoder,
link |
這個decoder會把上一個時間的Y,
link |
那我要怎麼訓練這個decoder2呢?
link |
然後讓decoder去學denoise的過程。
link |
那加noise我們可以直接把一個字重複兩次啊,
link |
就會讓model去學這兩種不同的loss,
link |
那這個方法的performance其實,
link |
好像只有在這個data set是有贏過它的。
link |
那BERT就會知道要在output,
link |
把那個被max掉的字做reconstruction。
link |
然後把BERT當decoder來用。
link |
這樣的conditional的max language model之後,
link |
我們會先讓encoder去predict一個長度,
link |
那我們就把max的token複製6次,
link |
那BERT就會output出第一版的翻譯,
link |
因為它只有一個state就要output出來。
link |
哪一些字在剛剛的generation裡面,
link |
再讓model重新output一次,
link |
那這樣model的output就會比較好,
link |
那我要怎麼決定每次要max掉幾個字呢?
link |
那它是用一個linearly decay的strategy,
link |
那到第9次的時候就不要max太多字,
link |
它是用這樣的strategy去做max。
link |
那max predict的這個方法,
link |
它的performance快要接近auto regression的transformer。
link |
接下來,介紹完max predict,
link |
那第一篇就是這個insertion transformer。
link |
那insertion transformer的概念就是,
link |
那output就會有六個vector。
link |
那我們先把相鄰的兩個vector都接起來,
link |
每兩個字中間就會有一個representation。
link |
那我們把每兩個字中間的representation,
link |
那假如那一個地方已經沒有要插入的字,
link |
model就會predict end of slot,
link |
代表說那一個slot是不需要插入的。
link |
那可是這個model我要怎麼訓練它呢?
link |
那這邊我們講一下我們要怎麼製造example,
link |
那你在data set裡面可能會有一段話,
link |
我們就先把這十個字做shuffle,
link |
那剛剛被drop掉的字就會形成一個slot,
link |
所以說我們現在得到一個training example,
link |
那在每一個兩個字的中間的這個slot,
link |
我們會去predict說那個slot,
link |
但假如剛剛drop掉連續兩字,那要怎麼辦呢?
link |
那其實我們就是兩個的rows都要算。
link |
那假如這兩個字中間本來就沒有字的話,
link |
就是predict n of slot。
link |
好,那剛剛說假如有一個slot是很多個字的話,
link |
我們就直接把全部的rows都要計算。
link |
原本我們可能就是把這些rows都平均起來,
link |
我們讓model傾向生出這個slot靠中間的字。
link |
假如你希望生出來的step越短越好,
link |
那我們會希望它是用binary tree的方法做decode。
link |
那假如你每次都是decode最中間的那一個字,
link |
那假如你的話你decode的那個數,
link |
就會越接近一顆balance的binary tree。
link |
那所以說我們也可以讓這一堆slot裡面的字的rows,
link |
在加的時候,靠中間的字做一個比較大的微體,
link |
我在insert的時候要優先insert靠中間的字。
link |
就是model在學過binary tree的rows之後呢,
link |
他就去decode這兩個slot最中間的那個字。
link |
所以每一個timestamp其實都是pd靠中間的字,
link |
那最後他五個step就可以pd出很長的一個句子。
link |
那如果你是用innerform的rows去做訓練的話,
link |
其實第一個timestamp他也是pd中間,
link |
model就沒有照著binary tree的方法去做decode。
link |
那這個models除了可以parallel decode之外,
link |
其實我們也可以每次選一個機率最大的,
link |
但是這樣花的時間就跟auto regression model會是一樣。
link |
到底每次decode一個字還是parallel decode哪一個比較好。
link |
其實他們的performance沒有差非常多。
link |
但是他們的performance其實都贏過原本的auto regression的方法,
link |
甚至跟auto regression的方法是差不多的。
link |
這邊是27.4,然後這邊是27.3。
link |
所以這邊其實已經算是小小贏過的auto regression model。
link |
那insertion transform出來之後,
link |
這個Kermit其實又是芝麻街裡面的人物。
link |
他為了湊梗,他為了湊出Kermit這個字,
link |
他把第一個contextual,原本是英文是c title,
link |
他把它換成德文的contextual,
link |
所以開頭就是K,然後就可以湊出Kermit。
link |
那這個Kermit的概念其實跟insertion transform是一模一樣的。
link |
那唯一的不同就是insertion transform有encoder加decoder,
link |
那他把encoder跟decoder合在同一個model裡面,
link |
那假如我要中繁音,我就把中文跟英文接在一起,
link |
為什麼不能乖乖用encoder加decoder呢?
link |
我們在做音繁中的話,就把英文跟中文接起來,
link |
然後在中文這邊做insert的動作。
link |
那這個model,同一個model其實也可以訓練中繁音,
link |
那這樣他就可以同時訓練中繁音的任務。
link |
那我們還可以訓練中文英文的joint probability。
link |
那中文有jump掉一些字,英文也有jump掉一些字。
link |
那英文要predi的時候,他要predi word這個字的時候,
link |
他可能是看到hello,所以他才輸出好。
link |
所以這樣的訓練會讓他去optimize英文中文的joint probability。
link |
那同時我們也可以只放中文然後做insertion的training,
link |
或是只放英文做insertion的training。
link |
所以這個model是同時可以學五件事情的。
link |
那他是做英文翻德文,或是德文翻英文。
link |
那如果我們只有勸單向的翻譯是27.8,
link |
那如果同時勸英文翻德文跟德文翻英文,
link |
兩個方向我勸在同一個model裡面,
link |
其實performance是往下掉。
link |
反而他performance是往下掉的。
link |
那如果我在學joint probability,
link |
那這個時候再去學純英文或是純德文的modular,
link |
那這個時候performance也沒有起來很多。
link |
但是他在學完這一系列這五個task之後,
link |
fine-tune原本你要做英文翻德文的task,
link |
然後performance就突然暴衝了一波。
link |
所以說他同時勸五個task是有道理的。
link |
那最後你再做一下fine-tune,
link |
就可以超過原本只勸一個task的performance。
link |
其實因為他可以跟Bert扮演同樣的角色。
link |
然後直接做downstream task。
link |
那Guru就是我們常常拿來讓Bert跑的一個benchmark。
link |
那我們發現拿Kermit來跑Guru這個benchmark,
link |
得到的performance竟然跟Bert是不相上下的。
link |
那Bert本身不能做generation,
link |
但我們的Kermit又同時可以做generation,
link |
又可以做Guru這個benchmark。
link |
就是他可以解zero-shot的克洛茲QA。
link |
這個空格我們要pre-d它的正確答案是什麼?
link |
也就是從左邊到右邊的那種benchmark,
link |
可是這個空格到底要填入幾個mask token,
link |
它的output的結果是最接近正確答案。
link |
那他測了整個squat的zero-shot克洛茲的test,
link |
那發現說Kermit的performance,
link |
那但是這個是zero-shot的setting,
link |
都沒有在training的時候看過任何,
link |
這個新版本叫做multi-win過Kermit。
link |
他就是把各種pair的翻譯的data,
link |
全部chained在同一隻Kermit上面。
link |
現在要把insertion加上deletion的操作。
link |
那這邊叫做latex-transformer。
link |
那要怎麼加上deletion的操作呢?
link |
那encoder encode完句子之後,
link |
再過一個deletion的classifier。
link |
我們再把這個句子丟到decoder裡面,
link |
最後過一個insertion的classifier。
link |
我們再把這個已經插入placeholder的句子,
link |
再過一個token的classifier。
link |
那這就是renaissance transformer在
link |
但是我們要怎麼去train這個model呢?
link |
那它是用imitation learning的方法。
link |
那要做imitation learning的話,
link |
就是levens-transistence演算法。
link |
就是它會算兩個sequence之間的編輯距離。
link |
像這兩個sequence之間的編輯距離是3。
link |
我們要怎麼把第一個sequence編輯成第二個sequence。
link |
像這裡是我們要在第三個地方insert,
link |
然後在第八個地方做replacement。
link |
它把replacement這個動作,
link |
就把它拆解成先delete再insert,
link |
製造一些需要被delete字的句子。
link |
那它就會變成一句需要被insert字的句子。
link |
首先先讓這個需要被delete字的句子,
link |
這裡舉個例子,假如說是this is is a pen,
link |
所以你現在就得到一個training example,
link |
這training example就是,
link |
看到this is is a pen這句話,
link |
deletion的classifier去學。
link |
那再來insertion的狀況也是一樣,
link |
我會有一句需要被insert字的句子,
link |
那假如是this is a pen,
link |
那lensing的演算法在看了正確答案之後,
link |
所以你現在又得到一個example,
link |
insertion的classifier去學。
link |
去看一下原本這些placeholder,
link |
我們的token classifier去學。
link |
lensing transformer。
link |
那lensing transformer在decode的時候,
link |
它一口氣就insert了這麼多個字。
link |
然後insert的時候又加了新的字。
link |
autoregressive transformer的話,
link |
那如果你用lavenson transformer,
link |
其實它performance並沒有差非常多。
link |
那如果你是用lavenson transformer,
link |
加上knowledge distillation,
link |
那就發現它performance是可以超過transformer。
link |
我們一般的autoregressive model
link |
要300毫秒才可以decode出句子。
link |
但lavenson transformer就只需要100毫秒附近,
link |
那它所需要花的decode step,
link |
好,那以上就是有insertion跟insert加delete的方法。
link |
那最後講一下ctc-based的方法。
link |
那ctc大家在老師之前語音辨識的課都有學過了。
link |
就是你的encoder可以直接output出一個word sequence,
link |
那對每一個frame就output出一個token,
link |
那這個token是可以包含blank token的。
link |
所以最後model output出這句話之後呢,
link |
那ctc通常我們是用在語音辨識上面比較多。
link |
我們平常比較少看到有人在討論nautoregressive的model,
link |
因為ctc本身就已經是個不錯的nautoregressive model。
link |
其實我們在做nautoregressive的語音辨識的時候,
link |
不會遇到很嚴重的multimodality問題。
link |
因為同一段語音所對應的output的文字,
link |
通常一段語音就是搭配一種可能的說法,
link |
所以它比較不會遇到multimodality的問題。
link |
第一個就是雖然它performance其實還不錯,
link |
但是還是會輸給second to second的las model。
link |
ctc雖然是一個nautoregressive model,
link |
可是它沒辦法做refinement的動作。
link |
因為input是語音,output是文字,
link |
然後做refinement,不行,沒有這種用法。
link |
它不能說因為它看到旁邊已經生出bump了,
link |
就有一個新的model叫repeater,
link |
那它的概念就是ctc加max的普遞,
link |
同時把token sequence也加進來。
link |
我們的token sequence就是,
link |
一開始都放max的token是一樣的道理。
link |
那也可以直接要put一個blank token,
link |
blank token跟max的token是不一樣的,
link |
max的token是最後都會被換掉,
link |
可是blank token是ctc用的那個,
link |
之後要被reduction掉的東西。
link |
它就把剛剛output出來的那句話,
link |
在跟雲訊號同時丟進encoder裡面,
link |
那這時候又會把一些max的token換掉,
link |
所以最後就會得到一句更好的translation,
link |
不是translation,是speech recognition。
link |
我讓input的feature有一個block,
link |
就是像這裡我假裝block size是3,
link |
所以我把input的feature每三個分成一塊,
link |
我都限制model至少要把其中一個token換成真的字。
link |
這個model在三步之內一定可以decode完整個句子,
link |
第一次decode一個字,第二次decode另一個,
link |
所以它每一個裡面就有8個feature,
link |
那這些feature原本對應的token都是max的token,
link |
那它在第一個state就會挑一個字,
link |
那每一個state都會挑一個字換成token,
link |
然後也可以換成blank token,
link |
那最後第八個state的時候就所有字都已經變成真的token,
link |
就是前面這些是autoregressive的secant to secant,
link |
那secant to secant在這個data set上面的order rate
link |
那但是用了imputer之後是可以贏過ctc的。
link |
那這個ctc或是imputer有沒有辦法用在文字的生成上面呢?
link |
那其實有兩篇paper都在做這件事情,
link |
那我們直接讓input的句子經過encoder之後,
link |
就是把每一個feature分裂成多個feature,
link |
那我們再對這個變長的sequence去change ctc,
link |
imputer原本左邊這裡是要放語音訊號進去的,
link |
但是我們現在放成source sentence的upsampling,
link |
那這個方法拿來做純文字的翻譯效果好不好呢?
link |
我們可以看到它跟其他所有只要一個time state decode出句子的方法做比較,
link |
performance可以贏過之前所有的model,
link |
那再來我們跟其他的autoregressive model做比較,
link |
或是non-autoregressive model,
link |
可是需要iterative refine的model,
link |
那就發現我們的imputer在decode的iteration多一點的時候,
link |
已經可以贏過autoregressive model,
link |
然後贏過之前所有的insertion或是refine的model。
link |
就是knowledge distillation到底為什麼有用?
link |
同時具有英文翻德文,英文翻西班牙文,英文翻法文,
link |
這三種翻譯全部混合在同一個data set裡面,
link |
那如果說你的翻譯的model是autoregressive的話,
link |
model其實也分不清到底每次要吐出德文,
link |
他的整個句子裡面所有的字都會是德文的字彙,
link |
這裡的每一個點就是他拗不出來的一句話,
link |
然後他的那句話裡面的西班牙文跟德文跟法文所佔的比例,
link |
就不太會出現同一句話有三種不同的文字的狀況,
link |
但是如果我們用NAT的model去硬學這個data set,
link |
就發現說他常常會output出同一句話裡面有德文,
link |
所以這個就是我們剛剛講multimodality的問題,
link |
那現在只是他把modality這件事情用不同語言來做呈現,
link |
那假如說我們把data set裡面,
link |
原本是一句英文會對應到德文西班牙文法文,
link |
那我們把這三個翻譯隨便drop掉其中兩個,
link |
那這一個multimodality的問題就會減輕一些,
link |
我們直接讓NAT model去學auto-evasive model的output,
link |
所以說knowledge distillation的效果,
link |
就是在這個實驗裡面有一個很好的呈現,
link |
就是說我在不同的t-shirt model的size之下,
link |
像這個是大model的t-shirt model,
link |
那讓這個我的auto-evasive model去學,
link |
不同的t-shirt model的output,
link |
都會贏過不做distillation,
link |
就是用real data去train的結果,
link |
但是對這一篇,這個是最開始那篇NAT,
link |
那它是跟小model學的效果是最好的,
link |
那可是如果是iterative refinement,
link |
那Levenson成熟門也是跟大model學會比較好,
link |
那所以說每個model都有適合它的t-shirt model的tenacity的大小,
link |
那又可以發現說,其實Levenson成熟門已經跟
link |
它的t-shirt model performance都差不多了,
link |
包括第一篇NAT跟Levenson成熟門,
link |
都是Facebook AI Research的這個人做的,
link |
這個人其實是Eason Attensville的第一作者,
link |
他同時又最近又在做這個Nautilus的東西,
link |
好,這最後是剩下的四篇的reference,
link |
其實就講完了,不知道大家有沒有問題。