T5 模型:NLP Text-to-Text 預訓練模型超大規模探索

  • 2019 年 10 月 31 日
  • 筆記

相信大多 NLP 相關者,在時隔 BERT 發佈近一年的現在,又被谷歌剛發佈的 T5 模型震撼到了。又是一輪屠榜,壓過前不久才上榜自家的ALBERT,登上 GLUE 榜首。

當然,最大的衝擊還是財大氣粗,bigger and bigger,但翻完它長達 34 頁的論文,發現其中的分析無疑是誠意滿滿(都是錢)。類似這樣的大型實驗探索論文也有一些,首先提出一個通用框架,接着進行了各種比對實驗,獲得一套建議參數,最後得到一個很強的 baseline。而我們之後做這方面實驗就能參考它的一套參數。

對於 T5 這篇論文,Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer,無疑也是類似的論文。它的意義不在燒了多少錢,也不在屠了多少榜(砸錢就能砸出來),其中 idea 創新也不大,它最重要作用是給整個 NLP 預訓練模型領域提供了一個通用框架,把所有任務都轉化成一種形式,正如論文里所說的

introducing a unified framework that converts every language problem into a text-to-text format.

之後未來做 NLP 實驗時,可能就不再是自己怎麼調一些模型了,而是無論什麼任務,直接拿來一個超大預訓練模型,然後主要工作就變成了怎麼把任務轉換成合適的文本輸入輸出,於是我們就成了帶引號的」數據科學家「。而且可以用於多種任務,而模型對這些任務的區分只是根據你構建的輸入輸出形式,其實這讓我想起 Jeff Dean 在某次談話中談到的谷歌未來方向,想做一個超級模型,什麼任務都能直接處理,而它內部可以是稀疏的,或者可以局部 Distill,來對單獨任務進行處理。

關於論文,作者們做了很多實驗,如下圖

將近七十個實驗,這也是大家吐槽財大氣粗的原因,太有衝擊力了,小家小業的話估計跑裏面個小實驗就夠嗆了。

正因為如此多實驗,所以才對預訓練模型中的大量技巧獲得了一個較公平的比對和分析,但這也使得整篇論文長度巨長,讀起來頭暈。不是 idea 的衝擊,而都是些瑣碎細節,看了幾大段後發現,還是看圖表一目了然。

這裡就簡單介紹一下裏面做了哪些實驗,之後各取所需回看論文。

Why Text-to-Text?

首先為什麼叫 T5 模型,因為是 Transfer Text-to-Text Transformer 的簡寫,和 XLNet 一樣也不在芝麻街玩了,也有說法是吐槽谷歌 T5 Level(高級軟件工程師)。

Transfer 來自 Transfer Learning,預訓練模型大體在這範疇,Transformer 也不必多說,那麼 Text-to-Text 是什麼呢。那就是作者在這提出的一個統一框架,靠着大力出奇蹟,將所有 NLP 任務都轉化成 Text-to-Text (文本到文本)任務

舉幾個例子就明白了,比如英德翻譯,只需將訓練數據集的輸入部分前加上「translate English to German(給我從英語翻譯成德語)」 就行。假設需要翻譯"That is good",那麼先轉換成 "translate English to German:That is good." 輸入模型,之後就可以直接輸出德語翻譯 「Das ist gut.」

再比如情感分類任務,輸入"sentiment:This movie is terrible!",前面直接加上 「sentiment:」,然後就能輸出結果「negative(負面)」。

最神奇的是,對於需要輸出連續值的 STS-B(文本語義相似度任務),居然也是直接輸出文本,而不是加個連續值輸出頭。以每 0.2 為間隔,從 1 到 5 分之間分成 21 個值作為輸出分類任務。比如上圖中,輸出 3.8 其實不是數值,而是一串文本,之所以能進行這樣的操作,應該完全賴於 T5 模型強大的容量。

通過這樣的方式就能將 NLP 任務都轉換成 Text-to-Text 形式,也就可以用同樣的模型,同樣的損失函數,同樣的訓練過程,同樣的解碼過程來完成所有 NLP 任務。其實這個思想之前 GPT2 論文里有提,上斯坦福 cs224n 時 Socher 講的 The Natural Language Decathlon 也有提。

Data:C4 (Bomb!)

作者從 Common Crawl(一個公開的網頁存檔數據集,每個月大概抓取 20TB 文本數據) 里清出了 750 GB 的訓練數據,然後取名為 」 Colossal Clean Crawled Corpus (超大型乾淨爬取數據)「,簡稱 C4,論作者取名之惡趣味。

大概清理過程如下:

  • 只保留結尾是正常符號的行;
  • 刪除任何包含不好的詞的頁面,具體詞表參考List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words庫(筆者按:寶藏庫,到裏面轉了一圈,看了看熟悉的幾門語言,瞬間漲了不少新姿勢 );
  • 包含 Javascript 詞的行全去掉;
  • 包含編程語言中常用大括號的頁面;
  • 任何包含」lorem ipsum(用於排版測試)「的頁面;
  • 連續三句話重複出現情況,保留一個。

Architecture:The Best One

首先作者們先對預訓練模型中的多種模型架構(Transformer)進行了比對,最主要的模型架構可以分成下面三種。

第一種,Encoder-Decoder 型,即 Seq2Seq 常用模型,分成 Encoder 和 Decoder 兩部分,對於 Encoder 部分,輸入可以看到全體,之後結果輸給 Decoder,而 Decoder 因為輸出方式只能看到之前的。此架構代表是 MASS(今年WMT的勝者),而 BERT 可以看作是其中 Encoder 部分。

第二種, 相當於上面的 Decoder 部分,當前時間步只能看到之前時間步信息。典型代表是 GPT2 還有最近 CTRL 這樣的。

第三種,Prefix LM(Language Model) 型,可看作是上面 Encoder 和 Decoder 的融合體,一部分如 Encoder 一樣能看到全體信息,一部分如 Decoder 一樣只能看到過去信息。最近開源的 UniLM 便是此結構。

上面這些模型架構都是 Transformer 構成,之所以有這些變換,主要是對其中注意力機制的 Mask 操作

通過實驗作者們發現,在提出的這個 Text-to-Text 架構中,Encoder-Decoder 模型效果最好。於是乎,就把它定為 T5 模型,因此所謂的 T5 模型其實就是個 Transformer 的 Encoder-Decoder 模型

Objectives:Search,Search,Search

之後是對預訓練目標的大範圍探索,具體做了哪些實驗,下面這張圖就能一目了然。

總共從四方面來進行比較。

第一個方面,高層次方法(自監督的預訓練方法)對比,總共三種方式。

  1. 語言模型式,就是 GPT-2 那種方式,從左到右預測;
  2. BERT-style 式,就是像 BERT 一樣將一部分給破壞掉,然後還原出來;
  3. Deshuffling (順序還原)式,就是將文本打亂,然後還原出來。

其中發現 Bert-style 最好,進入下一輪。

第二方面,對文本一部分進行破壞時的策略,也分三種方法。

  1. Mask 法,如現在大多模型的做法,將被破壞 token 換成特殊符如 [M];
  2. replace span(小段替換)法,可以把它當作是把上面 Mask 法中相鄰 [M] 都合成了一個特殊符,每一小段替換一個特殊符,提高計算效率;
  3. Drop 法,沒有替換操作,直接隨機丟棄一些字符。

此輪獲勝的是 Replace Span 法,類似做法如 SpanBERT 也證明了有效性。

噹噹當,進入下一輪。

第三方面,到底該對文本百分之多少進行破壞呢,挑了 4 個值,10%,15%,25%,50%,最後發現 BERT 的 15% 就很 ok了。這時不得不感嘆 BERT 作者 Devlin 這個技術老司機直覺的厲害。

接着進入更細節,第四方面,因為 Replace Span 需要決定對大概多長的小段進行破壞,於是對不同長度進行探索,2,3,5,10 這四個值,最後發現 3 結果最好。

終於獲得了完整的 T5 模型,還有它的訓練方法。

  • Transformer Encoder-Decoder 模型;
  • BERT-style 式的破壞方法;
  • Replace Span 的破壞策略;
  • 15 %的破壞比;
  • 3 的破壞時小段長度。

到此基本上 T5 預訓練就大致說完了,之後是些細碎探索。

Datasets

接着作者們拿着 C4 數據集做了各種實驗,比如說從裏面分出各種類型的數據集,單獨訓練 T5 模型,之後看在下游任務的表現,發現一些情況領域內的預訓練數據可以增強下游任務(想當然的)。而 C4 完整數據集因為數據太多太雜,可能反而不如這種領域內較少數據集。

還有從 C4 中抽出不同量數據做實驗,發現數據少時,模型會記住數據所以之後表現會比較差(這個也是想當然)。

Training:Multi-Task Learning

作者們之後又針對 MTDNN 給 T5 做了一系列類似訓練,在一堆監督和非監督數據上進行預訓練。

結果發現,只要混合訓練比例調得OK,和前面說的非監督預訓練性能差不多

Scaling:bigger is better?

接着又做了當放大模型某方面規模的相關實驗,分別是增大模型,增大數據,還有在一定資源限制下的集成。

結論是,當這些因素放大時對性能都有提高,但其中大模型是最必要的

Models

最後就是結合上面所有實驗結果,訓練了不同規模幾個模型,由小到大:

  • Small,Encoder 和 Decoder 都只有 6 層,隱維度 512,8 頭;
  • Base,相當於 Encoder 和 Decoder 都用 BERT-base;
  • Large,Encoder 和 Decoder 都用 BERT-large 設置,除了層數只用 12 層;
  • 3B(Billion)和11B,層數都用 24 層,不同的是其中頭數量和前向層的維度。

11B 的模型最後在 GLUE,SuperGLUE,SQuAD,還有 CNN/DM 上取得了 SOTA,而 WMT 則沒有。看了性能表之後,我猜想之所以會有 3B 和 11B 模型出現,主要是為了刷榜。看錶就能發現

比如說 GLUE,到 3B 時效果還並不是 SOTA,大概和 RoBERTa 評分差不多都是 88.5,而把模型加到 11B 才打破 ALBERT 的記錄。然後其他實驗結果也都差不多,3B 時還都不是 SOTA,而是靠 11B 硬拉上去的。除了 WMT 翻譯任務,可能感覺差距太大,要拿 SOTA 代價過大,所以就沒有再往上提。根據這幾個模型的對比,可以發現即使是容量提到 11B,性能提升的間隔還是沒有變緩因此我認為再往上加容量還是有提升空間

本文轉載自公眾號:安迪的寫作間,作者:Andy