
近年來,在大規(guī)模預(yù)訓(xùn)練語言模型上,各大公司的軍備競賽卷得十分激烈!前面我們介紹過GPT系列的三兄弟GPT-1,GPT-2,GPT3,本文我們介紹Google推出的大一統(tǒng)模型——T5,同樣是數(shù)據(jù)和實驗多得讓你瞠目結(jié)舌的論文,沒錯,就是在炫富,你有錢你也可以燒??!(不過相比后來出現(xiàn)的GPT-3還是小巫見大巫)
T5論文:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
目前NLP領(lǐng)域的主流模式是先在大量無標(biāo)簽的數(shù)據(jù)上預(yù)訓(xùn)練一個語言模型,然后再在下游具體任務(wù)上進行有監(jiān)督的fine-tune,以此取得還不錯的效果。在這個模式下,各大公司爭奇斗艷,各個機構(gòu)奮起直追,今天A提出了一種預(yù)訓(xùn)練目標(biāo)函數(shù),明天B提出了另一種預(yù)訓(xùn)練目標(biāo)函數(shù),并且收集了更多的訓(xùn)練語料,后天C提出了參數(shù)更龐大的模型,采用了不同的優(yōu)化策略......各家都聲稱自己是state-of-the-art,很難分析比較這些工作的有效貢獻量。
因此,T5希望提出一個統(tǒng)一的模型框架,將各種NLP任務(wù)都視為Text-to-Text任務(wù),也就是輸入為Text,輸出也為Text的任務(wù)。由此可以方便地評估在閱讀理解、摘要生成、文本分類等一系列NLP任務(wù)上,不同的模型結(jié)構(gòu),預(yù)訓(xùn)練目標(biāo)函數(shù),無標(biāo)簽數(shù)據(jù)集等的影響。

如圖所示,T5(Text-to-Text Transfer Transformer)模型將翻譯、分類、回歸、摘要生成等任務(wù)都統(tǒng)一轉(zhuǎn)成
Text-to-Text任務(wù),從而使得這些任務(wù)在訓(xùn)練(pre-train和fine-tune)時能夠使用相同的目標(biāo)函數(shù),在測試時也能使用相同的解碼過程。注意這里回歸任務(wù)對應(yīng)的浮點數(shù)會被轉(zhuǎn)成字符串看待,從而可以token by token的預(yù)測出來。雖然感覺奇怪,but anyway, it works。
T5模型結(jié)構(gòu)
T5模型采用Transformer的encoder-decoder結(jié)構(gòu),之前介紹過GPT采用的是Transformer的decoder結(jié)構(gòu)。

T5模型和原始的Transformer結(jié)構(gòu)基本一致,除了做了如下幾點改動:
- remove the Layer Norm bias
- place the Layer Normalization outside the residual path
- use a different position embedding
數(shù)據(jù)集C4
作者對公開爬取的網(wǎng)頁數(shù)據(jù)集Common Crawl進行了過濾,去掉一些重復(fù)的、低質(zhì)量的,看著像代碼的文本等,并且最后只保留英文文本,得到數(shù)據(jù)集C4: the Colossal Clean Crawled Corpus。
輸入輸出格式
我們來看如何將各種下游NLP任務(wù)都統(tǒng)一轉(zhuǎn)化成Text-to-Text格式。
在下游任務(wù)上fine-tune模型時,為了告訴模型當(dāng)前要做何種任務(wù),我們會給每條輸入樣本加一個與具體任務(wù)相關(guān)的前綴。
- 翻譯前綴
translate English to German: - 分類前綴
cola sentence: - 摘要前綴
summarize:
等等。注意這里每個任務(wù)前綴的選擇可以認(rèn)為是一種超參,即人為設(shè)計前綴樣式。作者發(fā)現(xiàn)不同的前綴對模型的影響有限,因此沒有做大量實驗比較選擇不同前綴的結(jié)果。
實驗
作者首先設(shè)置了一個baseline模型,然后每次修改模型設(shè)置一個方面,采用控制變量法進行對比實驗。
Baseline
網(wǎng)絡(luò)結(jié)構(gòu)
不同于BERT或GPT僅使用Transformer結(jié)構(gòu)的一部分,T5的baseline模型直接采用標(biāo)準(zhǔn)的Transformer encoder-decoder結(jié)構(gòu),以便在生成任務(wù)和分類任務(wù)上都能取得不錯的效果。
具體來說,baseline模型結(jié)構(gòu)的encoder部分和BERT-base模型(12層)的大小一樣,而decoder部分和encoder大小相似,因此baseline模型的參數(shù)量基本是BERT-base模型的2倍。
預(yù)訓(xùn)練目標(biāo)
采用denoising objective,也就是類似BERT的masked language modeling目標(biāo)函數(shù)。

如圖所示,在輸入樣本中,用一些唯一的特殊符號<X>, <Y>來表示原始樣本中被隨機masked的span或token,而目標(biāo)樣本則為被masked的span或token序列,用輸入樣本中對應(yīng)位置的特殊符號<X>, <Y>分隔,最后加上一個特殊符號<Z>表示序列結(jié)束。
在下游任務(wù)上fine-tune

在每個下游任務(wù)上單獨fine-tune后的評估結(jié)果如下:

可以發(fā)現(xiàn)pre-train的模型參數(shù)確實對下游任務(wù)的性能提升大有幫助。
接下來我們就要基于Baseline模型,對模型的某一部分進行修改,進行大量對比實驗了。
對比模型結(jié)構(gòu)

如圖所示為Transformer結(jié)構(gòu)的幾種變種,主要區(qū)別在于模型中self-attention機制的可見范圍。
-
fully-visibleattention mask:輸出序列的每個元素可以看見輸入序列的每個元素。 -
causalattention mask:輸出序列的每個元素只能看對應(yīng)位置及之前的輸入序列的元素,無法看見未來的元素。 -
causal with prefixattention mask:輸入序列的一部分前綴采用fully-visibleattention mask,其余部分采用causalattention mask。
在最左側(cè)的Encoder-Decoder結(jié)構(gòu)中,Encoder部分采用fully-visible attention mask,而Decoder部分采用causal attention mask。
中間的Language model結(jié)構(gòu)中,采用causal attention mask。
最右側(cè)的Prefix LM結(jié)構(gòu)中,采用causal with prefix attention mask。比如在翻譯任務(wù)中,給定訓(xùn)練樣本translate English to German: That is good. target: Das ist gut.,我們對translate English to German: That is good. target:采用fully-visible attention mask,對Das ist gut.采用causal attention mask。

從表中可以發(fā)現(xiàn),(1) 采用encoder-decoder結(jié)構(gòu)且使用Denoising目標(biāo)函數(shù)的效果最好; (2) encoder和decoder共享參數(shù)(Enc-dec, shared)的結(jié)構(gòu)表現(xiàn)也差不多好; (3) 相同參數(shù)量的encoder-decoder結(jié)構(gòu)(Enc-dec, shared)要比Prefix LM結(jié)構(gòu)的效果好,說明添加顯式的encoder和decoder之間的attention是有用的; (4) 采用Denoising目標(biāo)函數(shù)的效果要好于采用一般的語言模型目標(biāo)函數(shù)。
對比預(yù)訓(xùn)練目標(biāo)

如圖所示,給定句子“Thank you for inviting me to your party last week .”,圖中展示了針對不同的預(yù)訓(xùn)練目標(biāo),模型的Input和Target樣本的形式。

實驗表明BERT-style預(yù)訓(xùn)練目標(biāo)的效果最好,因此作者又進一步分析了該目標(biāo)的幾種變種形式,如下圖:

其中Replace corrupted spans就是上上圖中的noise replace spans目標(biāo),Drop corrupted tokens就是上上圖中的noise, drop tokens目標(biāo)。結(jié)果表明,這幾種BERT-style預(yù)訓(xùn)練目標(biāo)的變種效果差不多,但是后兩種方法不需要預(yù)測整個輸入序列,而僅需要預(yù)測被污染的部分,因此預(yù)測的序列長度更短,訓(xùn)練速度也更快。
對比預(yù)訓(xùn)練數(shù)據(jù)集
1. 對比數(shù)據(jù)集種類

- C4,unfiltered是沒有經(jīng)過過濾(比如去重、去除代碼等)的數(shù)據(jù)集
- RealNews-like是從C4中篩選的僅新聞領(lǐng)域的數(shù)據(jù)
- WebText-like是從Common Crawl中過濾篩選的Reddit用戶評分至少為3的數(shù)據(jù),數(shù)據(jù)質(zhì)量高
- Wikipedia是英文百科全書的數(shù)據(jù)
- TBC全稱是Toronto Books Corpus,數(shù)據(jù)主要來自于電子書,和百科全書是不同的領(lǐng)域(different domains)。
注意,為了保證訓(xùn)練過程中除了數(shù)據(jù)集的種類,其他參數(shù)設(shè)置一樣,作者在預(yù)訓(xùn)練時只用了 tokens,也就是各個數(shù)據(jù)集參與訓(xùn)練的樣本數(shù)量是一樣的。
從實驗結(jié)構(gòu)可以看出,(1) C4比unfiltered C4效果好,說明數(shù)據(jù)清洗的重要性;(2) Wikipedia+TBC在SGLUE上的效果比C4好,主要是因為在SGLUE中的MultiRC任務(wù)得分很高,MultiRC是一個閱讀理解數(shù)據(jù)集,其中的數(shù)據(jù)主要是小說書籍,和TBC屬于同一領(lǐng)域數(shù)據(jù)。由此說明預(yù)訓(xùn)練的數(shù)據(jù)集中包含一定的領(lǐng)域數(shù)據(jù)對下游該領(lǐng)域任務(wù)的性能提升有效;
2. 對比數(shù)據(jù)集大小

預(yù)訓(xùn)練依然只用 tokens,但是為了對比不同數(shù)據(jù)集大小的影響,需要對不同大小的數(shù)據(jù)進行重復(fù),比如對于大小為
的數(shù)據(jù)集,則需要對其重復(fù)64次以達到最終
大小的量。
從表中可以看出,隨著數(shù)據(jù)集不斷縮小,模型的性能逐漸下降,說明大的模型很可能在小的數(shù)據(jù)集上發(fā)生了過擬合,因此建議預(yù)訓(xùn)練模型還是盡可能使用大數(shù)據(jù)集。
對比遷移方法

從實驗結(jié)果可以看出,(1) Multi-task pre-training + fine-tuning的效果可以和baseline Unsupervised pre-training + fine-tuning差不多;(2) 去掉無監(jiān)督任務(wù)的Supervised multi-task pre-training的效果很差,說明無監(jiān)督預(yù)訓(xùn)練確實很有用,此外,可以發(fā)現(xiàn)在翻譯任務(wù)EnDe、EnFr、EnRo上的效果沒有下降很多,可能是因為只預(yù)訓(xùn)練英文語料對翻譯任務(wù)影響不大。
對比模型規(guī)模
假如給了你4倍的算力,你應(yīng)該把它用在哪?是擴大模型規(guī)模還是增長訓(xùn)練時間?

從表中可以看出,(1) 擴大模型規(guī)模和增長訓(xùn)練時間都能提高模型性能;(2) 將模型擴大到2倍規(guī)模,同時訓(xùn)練時間也擴大2倍的效果和將模型擴大到4倍規(guī)模的效果差不多,說明增加訓(xùn)練時間和擴大模型規(guī)模很可能是兩種互補的可以提高模型性能的方法;(3) emsemble對提高模型性能確實有效。
大一統(tǒng)
通過對各種對比實驗的結(jié)果進行分析,作者最終確定了訓(xùn)練T5模型的較優(yōu)方案,其中以下幾點值得注意:
- 無監(jiān)督訓(xùn)練目標(biāo):采用
span-corruption目標(biāo),類似SpanBERT的做法。 - 預(yù)訓(xùn)練策略:采用
multi-task預(yù)訓(xùn)練方式(即無監(jiān)督任務(wù)和有監(jiān)督任務(wù)一起預(yù)訓(xùn)練),在對比遷移方法一小節(jié)中我們發(fā)現(xiàn)Multi-task pretraining + fine-tuning的效果和Unsupervised pre-training + fine-tuning的效果差不多,但是前者在預(yù)訓(xùn)練過程還能夠監(jiān)控下游任務(wù)的性能,因此作者最后采用Multi-task pre-training。
總結(jié)
最后先來回顧下T5的特點:
T5 is an encoder-decoder model pre-trained on a multi-task mixture of unsupervised and supervised tasks and for which each task is converted into a text-to-text format. T5 works well on a variety of tasks out-of-the-box by prepending a different prefix to the input corresponding to each task, e.g., for a translation task: translate English to German: xxx...
個人感覺T5論文算是對當(dāng)前NLP領(lǐng)域pre-train fine-tune主流模式下的各種訓(xùn)練技巧的一個總結(jié)和公平對比,分析各種訓(xùn)練技巧對模型性能提升的實際影響,從而采用合適的技巧預(yù)訓(xùn)練出一個好的模型。作者也說了,本文的目的不是提出一個新的方法,而是對NLP領(lǐng)域的一些技術(shù)支撐點提供一個較為全面的分析視角。
Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
Standford CS224N