T5: Text-to-Text Transfer Transformer 阅读笔记
作者:徐嘯
知乎專欄:自然語言處理學習之旅
https://zhuanlan.zhihu.com/p/89719631
寫在前面
谷歌用一篇誠意滿滿(財大氣粗)的基于實驗的綜述,試圖幫助研究者們「撥開云霧見光明」。論文十分適合該領域的初學者通讀,寫的十分友好,不過由于涉及到的模型/技術很多,所以遇到不熟悉的部分還是需要自行了解。
本文是對 T5 論文[1]的閱讀筆記,原文篇幅很長并且涉及很多模型與技術,我將其視為一份實驗報告性質的綜述,于是花了較長時間進行閱讀與筆記的整理。不過這也導致本文很長(近 3w 字),想要快速閱讀的朋友可以直接閱讀 2 & 3.1 & 4 部分以及相關圖表部分。論文的討論可以參見該問題。本來想把自己的一些感想加上,不過最近出了ELECTRA,等看完一起寫在新一篇筆記里吧。
論文的摘要以及 1-2 部分介紹了 Motivation、數據集的預處理操作、待評估的下游任務以及這些任務為了適應 Text-to-text 框架所需的相關處理。
第 3 部分是最長的實驗部分,3.1 介紹了 Text-to-text 框架下使用的基線模型;3.2 介紹了現有的不同模型架構,并對無監督預訓練的降噪目標和傳統語言建模目標進行實驗比較;3.3 對無監督降噪目標進行了細致研究,如圖 5 所示,先對前綴語言建模、BERT-style 和 Deshuffling 三種方法進行選擇(表 3 提供了各種方法的輸入與輸出),接著對 BERT-style 的降噪目標進行修改,對 MASS-style、Replace corrupted spans 和 Drop corrupted spans 進行實驗,最后對 corruption rate 和 corruption span length 依次實驗;3.4 比較了使用不同方法過濾后的 C4 數據集以及常用的預訓練數據集,并對預訓練數據集(是否重復)進行試驗;3.5 對訓練方式進行了探究,Baseline 是在無監督降噪任務上對模型的所有參數進行預訓練,然后對在每個下游任務上分別對其進行了微調,并使用模型的不同參數設置(檢查點)來評估性能,本節進一步的對微調方法、多任務學習方法以及兩者的結合進行了實驗探究;3.6 對增加計算成本獲取性能提升的各種方式進行了探究;3.7 對第 3 部分進行了總結與細節分析。
第 4 部分是基于本文的實驗研究以及Text-to-text 框架,對系統實驗進行了總結,并對未來的研究進行展望。
如有疏漏之處,還望不吝賜教~
0. Abstract
遷移學習是一種在自然語言處理中強大的技術,模型首先要針對數據豐富的任務進行預訓練,然后再針對下游任務進行微調。本文通過引入統一的框架來探索NLP遷移學習技術的前景:將問題都轉換為 text-to-text 格式,并在數十種語言理解任務研究比較了預訓練目標,架構,未標記的數據集,遷移方法和其他因素。結合實驗所得以及 C4 數據集,在許多基準上獲得了最新的結果,這些基準涵蓋了摘要,問題回答,文本分類等等。
1. Introduction
訓練機器學習模型以執行自然語言處理任務通常需要模型能夠以適合下游學習的方式處理文本。可以將其大致視為發展通用知識,使模型可以“理解”文本。這些知識的范圍從低級(例如單詞的拼寫或含義)到高級(例如大多數背包都無法容納大號這樣大的樂器)。
在這個迅速發展的領域中,快速的進步和多樣的技術可能使不同算法的比較,理清新貢獻的效果以及理解現有的遷移學習方法變得困難。為了獲得更嚴謹的理解,我們提出了一種統一的遷移學習方法,使我們能夠系統地研究不同的方法,并推動領域發展。
T5 的基本思想是將每個 NLP 問題都視為“text-to-text”問題,即將文本作為輸入并生成新的文本作為輸出,這允許將相同的模型、目標、訓練步驟和解碼過程,直接應用于每個任務。
本文的重點不在于提出新方法,而是提供該領域的全面見解。主要貢獻在于對現有技術的調查,探索和比較,以及簡單且強大的 text-to-text 框架。
2. Setup
介紹 Transformer 模型架構和待評估的下游任務,介紹了將每個問題視為 text-to-text 任務的方法,并描述了 “Colossal Clean Crawled Corpus” C4 數據集,模型和框架稱為 “Text-to-Text?Transfer?Transformer” T5。
2.1 Model
本文研究的所有模型均基于 Transformer 架構。需要注意的是,Transformer 使用正余弦函數的位置編碼,BERT 使用的是學習到的位置嵌入,而本文使用的是相對位置嵌入。
相對位置嵌入[2]不是對每個位置使用固定的嵌入,而是根據 self-attention 機制中的“key”和“query”之間的偏移量生成不同的學習嵌入。本文使用位置嵌入的簡化形式——每個“嵌入”只是一個標量,被添加到用于計算注意力權重的相應 logit 中。為了提高效率還在模型的所有層之間共享位置嵌入參數,不過每個注意力頭使用的是不同“套”位置嵌入。通常學習固定長度的嵌入,每個嵌入對應于一系列可能的key-query偏移量。在這項工作中,我們對所有模型使用 32 個嵌入,其數值范圍的大小以對數方式增加,最大偏移量為128,超過此偏移量,所有相對位置使用同一嵌入。需要注意的是,某一給定層對超過 128 的相對位置不敏感,但是后續層可以通過組合來自先前層的局部信息來建立對更大偏移的敏感性。
2.2 The Colossal Clean Crawled Corpus
NLP 遷移學習中,之前的許多工作都是利用大型未標記數據集進行無監督學習。本文試圖衡量這類未標記數據集的質量,特征和大小的影響。通過 Common Crawl 抓取網頁文本數據,并使用下列啟發式方法進行過濾:
只保留以終點符號(即句點,感嘆號,問號或引號)為結尾的行
刪除任何包含?List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words?中單詞的網頁
刪除包含 Javascript 單詞的行
刪除出現“lorem ipsum”短語(即排版測試)的所有頁面
刪除所有包含大括號的頁面
對數據集進行重復數據刪除,當連續的三句話重復出現時只保留一個
使用?langdetect?工具過濾掉非英文的頁面
2.3 Downstream tasks
本文的目的是評估通用語言學習能力,測試如下下游任務的性能:
文本分類:GLUE & SuperGLUE,是測試通用語言理解能力的文本分類任務的集合,包括句子可接受性判斷、情緒分析、釋義/句子相似度、自然語言推斷、指代消解、完成句子、詞義消歧和問題回答。
機器翻譯:WMT English to German, French, and Romanian translation
文本摘要:CNN/Daily Mail abstractive summarization
智能問答:SQuAD question answering
本文將 GLUE (SuperGLUE也類似) 中所有任務的數據集在微調時連接起來,將所有任務視為一個任務,并且在 SuperGLUE 中加入了 Definite Pronoun Resolution (DPR) 數據集。本模型使用 SQuAD 數據集時是將問題和上下文喂入,并逐個令牌生成答案。機器翻譯任務中也僅對英語數據進行預訓練,這意味著模型需要學習生成目標語言的文本。
2.4 Input and output format
為了在上述各種任務上訓練單個模型,需要在所有任務上保持一致的輸入和輸出格式。decaNLP[3]?將 10 項不同的任務都寫成了 QA 的形式,進行訓練與測試 (作者 Socher 在 CS224N里做了介紹,可以參見筆記或原視頻),以文本到文本的格式來表達大多數NLP任務,輸入上下文或條件文本后輸出文本。
該框架為預訓練和微調提供了一致的訓練目標。具體來說,無論任務如何,都以最大可能性為目標訓練模型并使用教師強制。為指定模型執行的任務,需要向原始輸入序列添加特定于任務的(文本)前綴后再輸入模型。
機器翻譯:“That is good.” 英翻德,在輸入句子前加上“translate English to German: ”的 prefix ,就會生成句子“Das ist gut.”
文本分類:輸出與目標標簽對應的單個單詞。例如 NLI 任務中輸出entailment、contradiction 或 neutral。如果輸出的文本與該任務的標簽都不符合,則視為錯誤(不過未在任何經過訓練的模型中出現)
一些任務為了適應 Text-to-text 框架,需要進行調整:
STS-B。這是預測 1-5 之間的相似性得分的一項回歸任務。作者發現大部分得分是以 0.2 為增量的,于是將分數四舍五入到最接近的 0.2 增量(2.57 四舍五入為 2.6)并將其轉為字符串。測試時,如果模型輸出字符串對應于 1-5 之間的數字,則轉為浮點數進行判斷,否則視為錯誤。這有效地將 STS-B 的回歸問題轉換為 21 類分類問題。
Winograd任務(WNLI、WSC 和 DPR)轉換為一種更適合Text-to-text框架的格式。此類任務的示例是一段包含一個歧義代詞的文本,歧義代詞可以指代段落中不止一個名詞短語。例如:“The city councilmen refused the demonstrators a permit because they feared violence.” 的 “they” 指代的是“city councilmen”還是“demonstrators”。模型將輸入中的歧義代詞用*包裹以突出:“The city councilmen refused the demonstrators a permit because *they* feared violence.” 并且要求模型輸出答案 “city councilmen” 。WSC 數據集的樣本由文章、歧義代詞、候選名詞及對應的 True/False 標簽組成,這就無法知曉標簽為 False 的樣本的歧義代詞所指代的名詞是什么,因此只在標簽為 True 的樣本上進行訓練(大約刪除了 WSC 訓練集的一半)。DPR 數據集則很適用上述格式。
WNLI 的訓練集和驗證集與 WSC 的訓練集有很大重疊,為了防止驗證集出現在訓練集中,不訓練 WNLI,并且由于其訓練集和驗證集之間是對抗的(dev=train+擾動且標簽相反),所以也不匯報其驗證集的結果。將示例從WNLI轉換為上述“指稱名詞預測”變體的過程要復雜得多,參見附錄B。
附錄D中提供了研究的每個任務的預處理輸入的完整示例。
3. Experiments
NLP 遷移學習的最新進展來自新的預訓練目標、模型架構和未標記的數據集等。我們在本節中對這些技術進行了實驗研究,希望弄清它們的貢獻和重要性。對于更廣泛的文獻綜述,參見 Ruder 等人 NAACL2019 的Tutorial (筆記及資源整理)。
實驗每次通過調整某一方面并固定其他的方式來研究該方面的影響,這樣的 coordinate descent 方法可能會忽視 second-order effects 二階效應(例如在當前設置下的某種預訓練目標效果不好,但在其他設置下很好,但由于如上實驗方法,無法發現),但出于組合探索極其昂貴代價,會在未來的工作中探索。(谷歌都會覺得 prohibitively expensive~)
本文的目標是在保持盡可能多的因素不變的情況下,采用多種不同的方法比較各種任務的效果。為了實現此目標,在某些情況下我們沒有完全復制現有方法而是測試本質上相似的方法。
3.1 Baseline
我們使用簡單的降噪目標對標準 Transformer(2.1節)進行了預訓練,然后分別對我們的每個下游任務進行了微調。我們將在以下小節中描述此實驗設置的詳細信息。
3.1.1 Model
對于我們的模型,我們使用 Vaswani 等人提出的標準 encoder-decoder Transformer[4]。盡管許多現代的NLP遷移學習方法都使用僅包含 encoder/decoder stack 的 Transformer 架構,我們發現使用標準的 結構在生成和分類任務上均取得了良好的效果。我們將在3.2 節中探討不同模型架構的性能。
3.1.3 Vocabulary
本文使用 SentencePiece[7]?將文本編碼為 WordPiece token。
對于所有實驗使用 32,000 個 wordpiece 的詞匯表。由于我們最終會微調英語到德語、法語和羅馬尼亞語翻譯的模型,因此詞匯表需要涵蓋這些非英語語言——將C4中使用的頁面分類為德語,法語和羅馬尼亞語。然后我們在10個部分的英語 C4 數據與1個部分的德語,法語或羅馬尼亞語的數據的混合物(理解為10 + 3 -> 3*(10+1) 的意思?)上訓練了SentencePiece模型。該詞匯表在模型的輸入和輸出之間共享。因此詞匯表使模型只能處理預定的固定語言集。
這里需要補充一下 SentencePiece 。基本單元介于字符與單詞之間的模型稱作 Subword Model 。Byte Pair Encoding 即 BPE,利用了n-gram頻率來更新詞匯庫,而 WordPiece model使用貪心算法來最大化語言模型概率,即選取新的 n-gram 時都是選擇使 perplexity 減少最多的n-gram。進一步的,SentencePiece model 將詞間的空白也當成一種標記,可以直接處理sentence,而不需要將其 pre-tokenize 成單詞,并且能帶來更短的句子長度。[8][9]
3.1.4 Unsupervised objective
利用未標記的數據對模型進行預訓練并且訓練目標不包括標簽,(不準確地說)但是卻可以教給模型可推廣的知識,這將對下游任務有用。NLP的早期遷移學習工作使用語言模型目標。但是,最近有研究表明,“denoising”目標產生了更好的性能,因此它們很快成為標準。降噪目標:訓練模型以預測輸入中丟失或損壞的令牌。受 BERT 的“masked language modeling”目標和“word dropout ”正則化技術(Decoder 輸入為隨機替換為 UNK)啟發,設計目標如下(本文的 Denoising Objective指的是該目標):隨機采樣然后丟棄輸入序列中15%的標記。所有丟棄令牌組成的連續片段都由單個標記令牌代替(圖中的 for inviting 只對應一個標記令牌)。每個標記令牌都分配有該序列唯一的令牌ID。然后對應于所有丟失的令牌范圍,目標由輸入序列中使用的相同標記令牌加上最終的標記令牌來標記目標序列的末尾來定界(預測輸入中的 <X> 和 <Y> 對應的 SentencePiece,目標格式為 <X> SentencePiece of X <Y> SentencePiece of Y <Z>,<Z>為最終的標記令牌)。圖2顯示了應用此目標所產生的轉換示例。我們將在 3.3 節中將該目標與許多其他變體進行經驗比較。
3.1.5 Baseline performance
本節中使用上述基準實驗過程進行實驗,以了解預期的一系列下游任務性能。理想情況下,我們應將研究中的每個實驗重復多次,以得到結果的置信區間,但由于實驗太多過于昂貴,作為一種更便宜的選擇,從零開始訓練基線模型10次(即使用不同的隨機初始化和數據集 shuffle ),并假設基本模型運行的方差也適用于每個實驗變體。我們不希望所做的大多數更改會對運行間差異產生重大影響,因此,這應該可以合理地表明不同更改的重要性。另外,我們還評估了在不進行預訓練的情況下,對所有下游任務進行?步訓練(與用于微調的次數相同)的模型的性能,從而了解預訓練對基線設置中的模型有多少有幫助。
需要注意的是 EnFr 對應的是 WMT 中的英語譯成法語,這一任務下是否預訓練的影響沒有特別可觀。這是一個足夠大的數據集,從預訓練中獲得的收益往往很小,因此我們將這一任務包括在我們的實驗中,以測試高資源體制下的遷移學習行為。
3.2 Architectures
3.2.1 Model structures
Attention masks:不同體系結構的主要區別因素是模型中不同注意力機制所使用的“掩碼”。Transformer 中的自注意操作將一個序列作為輸入,并輸出相同長度的新序列。通過計算輸入序列的加權平均值來生成輸出序列的每個條目
圖3 是代表不同的注意力掩碼矩陣。自我注意機制的輸入和輸出分別表示為x和y。第 i 行和第 j 列中的黑色單元表示在輸出時間步驟 i 允許自我注意機制參與輸入元素 j。白色單元格表示不允許自我注意機制參與相應的 i 和 j 組合。左:完全可見的掩碼。輸出的每個時間步會注意全部輸入
中:因果掩碼。防止第 i 個輸出元素依賴于“未來”的任何輸入元素
右:帶前綴的因果掩碼。使自我注意機制可以在輸入序列的一部分上使用完全可見的掩碼。
左:標準的編碼器-解碼器體系結構,在 encoder 和encoder-decoder 注意力中使用完全可見的掩碼,在解碼器中使用因果掩碼。
中:語言模型由一個單獨的 Transformer 層塊組成,并通過使用因果掩碼始終輸入輸入和目標的串聯。
右:在語言模型中添加前綴并對這部分輸入使用完全可見的掩碼。
Encoder-decoder:圖 4 左側展示了編碼器-解碼器結構,編碼器使用“完全可見”的注意掩碼。這種掩碼適用于注意“前綴”,即提供給模型的某些上下文,供以后進行預測時使用。BERT也使用了完全可見掩碼,并在輸入中附加了特殊的“分類”標記。然后,在與分類令牌相對應的時間步中,BERT的輸出將用于對輸入序列進行分類的預測。
Language model:Transformer 中的解碼器用于自回歸生成輸出序列,即在每個輸出時間步,都會從模型的預測分布中選取令牌,然后將選取的令牌再輸入到模型中為下一個輸出時間步做出預測。這樣,可以將 Transformer 解碼器用作語言模型,即僅訓練用于下一步預測的模型。此架構的示意圖如圖 4 中間所示。實際上,針對NLP的遷移學習的早期工作使用這種架構并將語言建模目標作為一種預訓練方法。
語言模型通常用于壓縮或序列生成。但是,它們也可以簡單地通過連接輸入和目標而用于 text-to-text 框架中。例如,考慮英語到德語的翻譯:如果我們有一個訓練數據的輸入句子為“ That good.”,目標為“Das ist gut.”,那么我們只需在連接的輸入序列“translate English to German: That is good. Target: Das ist gut.” 上對模型進行語言模型訓練(錯位預測)即可。如果我們想獲得此示例的模型預測,則向模型輸入前綴“translate English to German: That is good. Target: ”,模型自回歸生成序列的其余部分。通過這種方式,該模型可以預測給定輸入的輸出序列,從而滿足 text-to-text 任務。這種方法最近被用來表明語言模型可以學會在無監督的情況下執行一些 text-to-text 的任務。
Prefix LM:在 text-to-text 設置中使用語言模型的一個基本且經常被提到的缺點是,因果掩碼會迫使模型對輸入序列的第 i 個輸入的表示僅取決于直到 i 為止的輸入部分。在該框架中,在要求模型進行預測之前,為模型提供了前綴/上下文(例如,前綴為英語句子,并且要求模型預測德語翻譯)。使用完全因果掩碼,前綴狀態的表示只能取決于前綴的先前條目。因此,在預測輸出的條目時,模型使用的前綴表示是不需要受到限制的,但卻由于語言模型而使其前綴表示受到了限制。在序列到序列模型中使用單向遞歸神經網絡編碼器也存在類似問題。
只需更改掩碼模式,就可以在基于Transformer的語言模型中避免此問題。在序列的前綴部分使用完全可見的掩碼。圖 3 和 4 的右邊分別顯示了此掩碼模式和前綴LM的示意圖。
在上述英語到德語的翻譯示例中,將完全可見的掩碼應用于前綴“translate English to German: That is good. Target: ”,而因果掩碼將在訓練期間用于預測目標“Das ist gut.”。在 Text-to-text 框架中使用 prefix LM 最初是由 Generating Wikipedia by Summarizing Long Sequences [10]提出的。最近有工作[11]展示了這種架構對多種 Text-to-text 任務均有效。
我們注意到,當遵循我們的 Text-to-text 框架時,prefix LM體系結構非常類似于分類任務的BERT。以 MNLI 基準為例,前提是“I hate pigeons.”,假設是“My feelings towards pigeons are filled with animosity.”,而正確的標簽是“entailment”。為了將此示例輸入語言模型,我們將其轉換為序列“mnli premise: I hate pigeons. hypothesis: My feelings towards pigeons are filled with animosity. target: entailment”。在這種情況下,完全可見的前綴將對應于整個輸入序列,直到單詞“target:”,這可以看作類似于BERT中使用的“分類”令牌。因此,我們的模型將對整個輸入具有完全的可見性,然后將通過輸出單詞“entailment”來進行分類。對于給定任務前綴(在這種情況下為“mnli”)的模型,該模型很容易學習輸出有效的類標簽。這樣,prefix LM 和 BERT 架構之間的主要區別在于,?分類器簡單地集成到 prefix LM 中的 Transformer 解碼器的輸出層中?。
3.2.2 Comparing different model structures
為了實驗上比較這些體系結構變體,我們希望每個模型在某種意義上都是等效的:如果兩個模型具有相同數量的參數,或者它們需要大致相同的計算量來處理給定的(輸入序列,目標序列)對,則可以說是等效的。但不可能同時根據這兩個標準將編碼器-解碼器模型與語言模型體系結構(包含單個Transformer塊)進行比較。由于在編碼器中具有L層且在解碼器中具有L層的編碼器-解碼器模型具有與具有2L層的語言模型大約相同數量的參數。但是,相同的L + L編解碼器模型將具有與僅具有 L 層的語言模型大約相同的計算成本,這是因為語言模型中的L層必須同時應用于輸入和輸出序列,而編碼器僅應用于輸入序列,而解碼器僅應用于輸出序列。所以存在參數量不同,但計算量幾乎相同的情況。這些等價是近似的——由于對編碼器的注意力,解碼器中存在一些額外的參數,并且在注意力層中,序列長度為平方的計算量也很大。然而,實際上,我們觀察到L層語言模型與L + L層編碼器-解碼器模型幾乎相同的步長時間,這表明計算成本大致相當。
為了提供合理的比較方法,我們考慮了編碼器-解碼器模型的多種配置。我們將?大小的層塊中的層數和參數分別稱為 L 和 P 。
我們將使用 M 來指代L + L層編碼器-解碼器模型或僅L層的解碼器模型處理給定輸入目標對所需的FLOP數量。
總的來說,我們將進行比較:
在編碼器中具有 L 層,在解碼器中具有 L 層的編碼器-解碼器模型。該模型具有 2P 個參數和M FLOP的計算成本。
等效模型,但參數在編碼器和解碼器之間共享,即 P 個參數和 M FLOP計算成本。
在編碼器和解碼器中各具有 L / 2 層的編碼器-解碼器模型,提供 P 參數和 M/2 FLOP成本。
具有 L 層和 P 參數的純解碼器的語言模型,以及由此產生的M FLOP計算成本。
具有相同架構(因此具有相同數量的參數和計算成本),但對輸入具有完全可見的自我注意力的解碼器的前綴LM。
3.2.3 Objectives
基本語言建模目標以及第 3.1.4 節中描述的降噪目標作為無監督的目標。對于在進行預測之前先提取前綴的模型(編碼器-解碼器模型和前綴LM),我們從未標記的數據集中采樣了一段文本,并選擇一個隨機點將其分為前綴和目標部分。對于標準語言模型,我們訓練模型以預測從開始到結束的整個跨度。我們的無監督降噪目標是為 text-to-text 模型設計的;為了使其適應語言模型,我們將輸入和目標連接起來,如3.2.1節所述。
3.2.4 Results
表 2 顯示了我們比較的每種架構所獲得的分數。對于所有任務,具有降噪目標的編碼器-解碼器架構表現最佳。此變體具有最高的參數計數(2P),但與僅使用P參數的解碼器的模型具有相同的計算成本。令人驚訝的是,我們發現在編碼器和解碼器之間共享參數幾乎同樣有效。相反,將編碼器和解碼器堆棧中的層數減半會嚴重影響性能。ALBERT 還發現,在Transformer塊之間共享參數是可以減少總參數數量而不犧牲太多性能的有效方法。XLNet 與具有降噪目標的共享編碼器-解碼器方法有些相似。我們還注意到,共享參數編碼器-解碼器的性能優于僅解碼器的前綴LM,這表明增加編碼器-解碼器的顯式注意是有益的。最后,我們確認了一個廣為接受的觀念,即與語言建模目標相比,使用降噪目標始終可以帶來更好的下游任務性能。在以下部分中,我們將對無監督目標進行更詳細的探討。
3.3 Unsupervised objectives
選擇無監督目標至關重要,因為它提供了一種機制:模型可以獲取通用知識以應用于下游任務。這導致了各種各樣的預訓練目標的發展。在許多情況下,我們不會完全復制現有目標,而是將某些目標進行修改以適合我們的 Text-to-text 編碼器/解碼器框架;在其他情況下,我們將使用結合了多種常見方法的概念的目標。
總體而言,我們所有的目標都從未標記的文本數據集中提取一系列與令牌化文本范圍相對應的令牌ID。對令牌序列進行處理以產生(損壞的)輸入序列和相應的目標。然后,像往常一樣訓練模型,以最大可能性預測目標序列。
3.3.1 討論前三行,3.3.2 討論后三行。這里的第六行應該是 I.i.d noise, drop spans。表 3 : 以“Thank you for inviting me to your party last week .”作為輸入文本,所有的目標都處理tokenized 的文本。詞匯表將所有單詞映射到單個token,(original text) 作為目標時,該模型的任務是重建整個輸入文本。<M>表示共享的掩碼令牌,而<X>,<Y>和<Z>表示已分配了唯一令牌ID的標記令牌。BERT樣式的目標(第二行):其中某些令牌被隨機令牌ID取代,例如灰色的 apple 。
3.3.1 Disparate high-level approaches
比較三種技術,這些技術受常用目標的啟發,但其方法卻大不相同。首先,我們引入 3.2.3 節中使用的 prefix LM 目標:將文本的范圍分為兩個部分,一個部分用作編碼器的輸入,另一部分用作解碼器要預測的目標序列。其次,我們考慮一個受BERT的MLM啟發的目標。MLM需要一段文本并破壞15%的令牌。90%的損壞令牌被替換為特殊的掩碼令牌,而10%的令牌被替換為隨機令牌。由于BERT是只有編碼器的模型,因此其目標是在編碼器的輸出上重建原始序列。在編碼器-解碼器架構下,我們僅將整個未損壞的序列用作目標。請注意,這與我們僅使用損壞的令牌作為目標的基準目標不同。我們將在3.3.2節中比較這兩種方法。最后,我們還考慮了一個基本 deshuffling 目標。此方法采用令牌序列,對其進行隨機排序,然后將原始的經過隨機排序的序列用作目標。我們在表3的前三行中提供了這三種方法的輸入和目標的示例。
對應表 3 中的前六行,同樣的,表 5 的第四行應該是 drop corrupted spans表 4 中顯示了這三個目標的性能。總的來說,盡管前綴語言建模目標在翻譯任務上達到了類似的性能,但我們發現BERT風格的目標表現最佳。確實,實現BERT目標的動機是超越基于語言模型的預訓練。相較于前綴語言建模和BERT風格的目標,Deshuffling 目標的性能要差得多。
3.3.2 Simplifying the BERT objective
基于上一節中的結果,我們現在將重點研究對BERT樣式降噪目標的修改。該目標最初是作為針對分類和跨度預測而訓練的僅編碼器模型的預訓練技術提出的。對其進行修改以使其在我們的編碼器-解碼器 Text-to-text 框架中表現更好或更有效。
首先,我們考慮BERT樣式目標的一個簡單變體,其中不包括隨機令牌交換步驟。最終的目標只需用掩碼令牌替換輸入中15%的令牌,然后訓練模型以重建原始的未損壞序列,此變體為“MASS-style”[12]目標。
其次,我們感興趣的是看看是否有可能避免預測整個未損壞的文本跨度,因為這需要對解碼器中的長序列進行自我關注。我們考慮了兩種策略來實現此目的:
不是用掩碼令牌替換每個損壞的令牌,而是用唯一的掩碼令牌替換了每個連續的損壞令牌的范圍。然后,目標序列變成“損壞的”跨度的串聯,每個跨度都帶有用于在輸入中替換它的掩碼標記的前綴。這是我們在基線中使用的預訓練目標,如3.1.4節所述。
我們還考慮了一種變體,其中我們簡單地從輸入序列中完全刪除損壞的令牌,并按順序構造丟棄的令牌。表3的第五和第六行顯示了這些方法的示例。
表 5 中顯示了原始BERT-style的目標與這三個變體的比較。我們發現,在我們的設置中,所有這些變體的性能相似。唯一的例外是,drop corrupted tokens 在GLUE上的提升完全是由于CoLA的得分明顯更高(60.04,而我們的基準平均值53.84,見表15)。這可能是由于CoLA需要對“給定句子在語法和句法上是否可接受”進行分類,并且“確定何時丟失標記”與“檢測可接受性”密切相關。但是,與在SuperGLUE上將其替換為標記令牌相比,丟棄令牌的性能要差得多。不需要預測完整原始序列的兩個變體(“replace corrupted spans” and “drop corrupted spans”)都具有潛在的吸引力,因為它們可使目標序列更短,從而使訓練更快。展望未來,我們將探索用標記令牌替換損壞的跨度,并僅預測損壞的令牌(如我們的基準目標)的變體。
3.3.3 Varying the corruption rate
到目前為止,我們一直破壞了15%的令牌,即BERT中使用的值。同樣,由于我們的 Text-to-text 框架與BERT的框架不同,因此需要查看不同的破壞率。我們在表6中比較了10%,15%,25%和50%的損壞率。總體而言,我們發現損壞率對模型的性能影響有限。唯一的例外是,最大的損壞率(50%)導致GLUE和SQuAD的性能顯著下降。使用較大的破壞率還會導致目標更長,這可能會減慢訓練速度。根據這些結果以及BERT設定的歷史先例,未來將使用15%的破壞率。
3.3.4 Corrupting spans
現在,我們轉向通過預測更短的目標來加快訓練速度的目標。到目前為止,我們使用的方法是是否要破壞每個輸入令牌的獨立同分布的決策。如果多個連續標記已損壞,則將它們視為“span 跨度”,并使用單個唯一的掩碼標記來替換整個跨度。用單個標記替換整個范圍會導致將未標記的文本數據處理為較短的序列。由于我們使用的是獨立同分布的損壞策略,并非總是會出現大量損壞的令牌的情況。因此,我們可以通過專門破壞令牌的跨度而不是破壞獨立同分布的單個令牌來獲得額外的加速。破壞跨度以前也曾被認為是BERT的預訓練目標,發現它可以提高性能。
為了測試這個想法,我們考慮:專門破壞連續的,隨機分布的令牌跨度。可以通過要破壞的令牌比例和破壞跨度的總數來參數化該目標。然后隨機選擇跨度長度以滿足這些指定參數。例如,如果我們正在處理500個令牌的序列,并指定應損壞15%的令牌,并且應該有25個跨度,那么損壞令牌的總數將為500×0.15 = 75,平均跨度長度將為75/25 =3。請注意,給定原始序列長度和損壞率,我們可以通過平均跨度長度或跨度總數等效地參數化此目標。
我們在表7中將跨度破壞目標與獨立同分布的破壞目標進行比較。在所有情況下,破壞率均為15%,并使用平均跨度長度為2、3、5和10進行比較。同樣,我們發現在這些目標之間差異有限,盡管平均跨度長度為10的版本在某些情況下稍遜于其他值。我們還特別發現,使用3的平均跨度長度略微(但顯著)優于獨立同分布目標(即第一行,隨機選擇 token 并將連續的 token 再視為 span 進行替換)的大多數非翻譯基準。幸運的是,與獨立同分布噪聲方法相比,跨度破壞目標還提供了訓練期間的一些加速,因為跨度損壞會產生較短的序列。
3.3.5 Discussion
圖 5 顯示了在我們探索無監督目標過程中所做選擇的流程圖。總體而言,我們觀察到的性能上最顯著的差異是在預訓練中,降噪目標的性能優于語言建模和Deshufling的變體。在我們探索的降噪目標的許多變體之間,我們沒有觀察到顯著差異。但是,不同的目標(或目標的參數化)可能導致不同的序列長度,從而導致不同的訓練速度。這意味著我們在此處考慮的降噪目標之間的選擇應主要根據其計算成本進行。我們的結果還表明,與我們在此考慮的目標類似的其他目標探索可能不會導致我們所考慮的任務和模型有重大收獲。相反,探索利用未標記數據的完全不同的方法可能是偶然的。
3.4 Pre-training dataset
本節將比較 C4 數據集的變體和其他潛在的預訓練數據源。
3.4.1 Unlabeled datasets
第2.2節講述了很多建立 C4 數據集時使用的啟發式方法。除了將其與其他過濾方法和常見的預訓練數據集進行比較之外,我們有興趣測量這種過濾是否會改善下游任務的性能。為此,我們在以下數據集上進行預訓練后比較基線模型的性能:
C4:作為基準,首先在我們發布的未標記數據集進行預訓練。
Unfiltered C4:為了衡量我們在創建C4中使用的啟發式過濾的效果,我們還生成了C4的替代版本,該版本放棄了過濾。請注意,我們仍然使用 langdetect 提取英文文本。結果,我們的“未過濾”變體仍包含一些過濾,因為 langdetect 有時會給不自然的英語文本分配低概率。
RealNews-like:使用了從新聞網站提取的文本數據。為了進行比較,我們額外過濾C4使其僅包括一個“RealNews”數據集對應的域的內容來生成另一個未標記的數據集。請注意,為便于比較,我們保留了C4中使用的啟發式過濾方法。唯一的區別是,表面上我們忽略了任何非新聞內容。
WebText-like:WebText數據集僅使用提交到內容聚合網站 Reddit 且收到的“score”至少為3的網頁內容。提交給Reddit的網頁得分基于認可或反對網頁的用戶比例。使用Reddit分數作為質量信號的背后想法是,該網站的用戶只會上傳高質量的文本內容。為了生成可比較的數據集,我們首先嘗試從C4中刪除所有不是 OpenWebText[13]?列表中出現的URL。但是,由于大多數頁面從未出現在Reddit上,因此內容相對較少,僅約 2 GB。為避免使用過小的數據集,因此我們從2018年8月至2019年7月從 Common Crawl 下載了12個月的數據,對 C4 和 Reddit 應用了啟發式過濾,產生了一個17 GB的類似 WebText 的數據集,其大小與原始40GB的 WebText 數據集相類似。
Wikipedia:Wikipedia網站包含數以百萬計的協作撰寫的百科全書文章。該網站上的內容受嚴格的質量準則約束,因此已被用作可靠且純凈的自然文本來源。我們使用 TensorFlow Datasets[14]?的英文 Wikipedia 文本數據,其中省略了文章中的任何標記或參考部分。
Wikipedia + Toronto Books Corpus:使用來自 Wikipedia 的預訓練數據的缺點是,它僅表示自然文本的一個可能域(百科全書文章)。為了緩解這種情況,BERT將來自維基百科的數據與多倫多圖書公司進行了組合。TBC包含從電子書中提取的文本,它代表自然語言的不同領域。
表 8 顯示了每個數據集預訓練后獲得的結果。第一個明顯的收獲是,C4中刪除啟發式過濾會降低性能,并使未過濾的變體在每個任務中表現最差。除此之外,我們發現在某些情況下,具有更受限域的預訓練數據集的性能優于多樣化的C4數據集。例如,使用Wikipedia + TBC語料庫產生的SuperGLUE得分為73.24,超過了我們的基準得分。這幾乎完全歸因于MultiRC的完全匹配得分從25.78(基準C4)提高到50.93(Wikipedia + TBC)(參見表15)。MultiRC是一個閱讀理解數據集,其最大數據來源來自小說書,而這恰恰是TBC覆蓋的領域。類似地,使用類似RealNews 的數據集進行預訓練可使 ReCoRD 的精確匹配得分從68.16提高到73.72,ReCoRD是測量新聞文章閱讀理解的數據集。最后一個例子是,使用來自Wikipedia的數據在 SQuAD上獲得了顯著(但并沒那么突出)的收益,SQuAD是一個使用來自 Wikipedia 的段落的問題解答數據集。這些發現背后的主要教訓是,對域內未標記的數據進行預訓練可以提高下游任務的性能。如果我們的目標是預訓練可以快速適應來自任意領域的語言任務的模型,這將不足為奇,但也不令人滿意。
僅在單個域上進行預訓練的一個缺點是所得的數據集通常要小得多。類似地,雖然在我們的基準設置中類似WebText的變體在性能上類似或優于C4數據集,并且基于Reddit的過濾所產生的數據集比C4小約 40 倍,但它是基于Common Crawl的 12 倍以上數據而建立的。在以下部分中,我們將研究使用較小的預訓練數據集是否會引起問題。
3.4.2 Pre-training dataset size
本文創建C4的方法旨在能夠創建非常大的預訓練數據集。對大量數據的訪問使我們能夠對模型進行預訓練,而無需重復樣本。目前尚不清楚在預訓練期間重復樣本是會對下游性能有所幫助還是有害,因為我們的預訓練目標本身就是隨機的,并且可以幫助防止模型多次看到相同的數據。
最終的下游性能如表9所示,隨著數據集大小縮小而下降。我們懷疑這可能是由于該模型開始記住預訓練數據集。為了測量這是否成立,我們在圖6中繪制了每種數據集大小的訓練損失。的確,隨著預訓練數據集的大小縮小,該模型獲得的訓練損失明顯較小,這表明可能存在記憶。
我們注意到,當預訓練數據集僅重復 64 次時,這些影響是有限的。這表明一定程度的重復預訓練數據可能不會有害。但是,考慮到額外的預訓練可能是有益的(我們將在第3.6節中顯示),并且獲取額外的未標記數據既便宜又容易,我們建議盡可能使用大型的預訓練數據集。
3.5 Training strategy
到目前為止,我們已經考慮了以下設置:在無監督的任務上對模型的所有參數進行預訓練,然后對個別有監督的任務進行微調。?盡管這種方法很簡單,但現在已經有了各種用于在下游/監督任務上訓練模型的替代方法。在本節中,除了在多個任務上同時訓練模型的方法之外,我們還比較了用于微調模型的不同方案。
3.5.1 Fine-tuning methods
有人認為,微調模型的所有參數可能會導致結果欠佳,尤其是在資源匱乏的情況下。文本分類任務的遷移學習的早期結果提倡僅微調小型分類器的參數。?這種方法不太適用于我們的編碼器-解碼器模型,因為必須訓練整個解碼器以輸出給定任務的目標序列?。相反,我們專注于兩種替代的微調方法,這些方法僅更新編碼器-解碼器模型的參數的子集。
第一種:“adapter layers”[15]的動機是在微調時保持大多數原始模型固定不變。適配器層是附加的dense-ReLU-dense塊,這些塊在變壓器的每個塊中的每個預先存在的前饋網絡之后添加。這些新的前饋網絡的設計使其輸出維數與其輸入相匹配。這樣就可以將它們插入網絡,而無需更改結構或參數。進行微調時,僅更新適配器層和層歸一化參數。這種方法的主要超參數是前饋網絡的內部維數 d?,它改變了添加到模型中的新參數的數量。我們用 d 的各種值進行實驗。
第二種替代性微調方法是“gradual unfreezing”[6]。在逐步解凍過程中,隨著時間的流逝,越來越多的模型參數會進行微調。逐步解凍最初應用于包含單個塊層(a single stack of layers)的語言模型體系結構。在此設置中,微調開始時僅更新最后一層的參數,然后在訓練了一定數量的更新之后,就會更新包括倒數第二層的參數,依此類推,直到整個網絡的參數都在微調。為了使這種方法適應我們的編碼器-解碼器模型,我們從頂部開始逐漸并行地解凍編碼器和解碼器中的層。由于我們的輸入嵌入矩陣和輸出分類矩陣的參數是共享的,因此我們會在整個微調過程中對其進行更新。
表 10 顯示了這些微調方法的性能比較。對于適配器層,我們使用32、128、512、2048的內部尺寸 d 。根據過去的結果我們發現像 SQuAD 這樣的資源較少的任務在 d 較小的情況下效果很好,而資源較高的任務則需要較大的維度才能實現合理的性能。這表明,adapter layers 可能是一種在較少參數上進行微調的有前途的技術,只要將維度適當地縮放到任務大小即可。請注意,在我們的案例中,我們通過將 GLUE 和 SuperGLUE 的各自的子數據集連接起來,將它們分別視為一個“任務”,因此,盡管它們包含一些資源較少的數據集,但組合的數據集足夠大,因此需要較大的 d 值。我們發現,?盡管在微調過程中確實提供了一定的加速,但全局解凍會在所有任務中造成輕微的性能下降。通過更仔細地調整解凍時間表,可以獲得更好的結果。
3.5.2 Multi-task learning
到目前為止,我們已經在單個無監督學習任務上對我們的模型進行了預訓練,然后在每個下游任務上分別對其進行了微調。另一種方法稱為“多任務學習”,在多個任務上同時訓練模型。這種方法通常的目標是訓練可以同時執行許多任務的單個模型,即該模型及其大多數參數在所有任務之間共享。我們在某種程度上放松了這一目標,而是一次研究了針對多個任務進行訓練的方法,以便最終產生對每個任務都執行良好的獨立參數設置。例如,?我們可能會針對多個任務訓練一個模型,但是在報告性能時,我們可以為每個任務選擇不同的檢查點?。與目前為止我們所考慮的 pre-train-then-fine-tune 方法相比,這放松了多任務學習框架的要求并使之處于更穩定的基礎上。我們還注意到,在我們統一的 Text-to-text 框架中,“多任務學習”僅對應于將數據集混合在一起。相比之下,大多數將多任務學習應用于NLP的應用都會添加特定于任務的分類網絡,或者為每個任務使用不同的損失函數。
正如Arivazhagan等人指出,在多任務學習中一個非常重要的因素是模型應該在每個任務的多少數據進行訓練。我們的目標是不對模型進行 under- or over-train 過少訓練或過度訓練——也就是說,我們希望模型從給定任務中看到足夠的數據以使其能夠很好地執行任務,但又不想看到太多數據以致于記住訓練集。
如何準確設置每個任務的數據比例取決于各種因素,包括數據集大小,學習任務的“難度”(即模型在有效執行任務之前必須看到多少數據),正則化等。
另一個問題是潛在的“任務干擾”或“負向轉移”,在一個任務上實現良好的性能會阻礙在另一任務上的性能。鑒于這些問題,我們先探索各種設置每個任務的數據比例的策略。Wang [16]等人進行了類似的探索。
Examples-proportional mixing:?模型適應給定任務的速度的主要因素是任務數據集的大小。因此,設置混合比例的自然方法是根據每個任務數據集的大小按比例進行采樣。這等效于串聯所有任務的數據集并從組合數據集中隨機采樣示例。但是請注意,我們引入了無監督降噪任務,該任務使用的數據集比其他所有任務的數量級大。因此,如果我們僅按每個數據集的大小按比例進行采樣,該模型看到的絕大多數數據將是無標簽的,并且所有監督任務都會缺乏訓練(under-train)。即使沒有無監督的任務,某些任務(例如WMT英語到法語)也很大,以至于它們同樣會占據大多數批次。為了解決這個問題,我們在計算比例之前對數據集的大小設置了人為的“限制”。具體來說,第N個任務的每個數據集中的示例數為??,則,然后我們將訓練期間從第 m 個任務采樣的概率設置為??,其中 K 為人工數據集大小限制。
Equal mixing:在這種情況下,我們以相等的概率從每個任務中抽取示例。具體來說,每個批次中的每個示例都是從我們訓練的數據集中隨機抽樣的。這很可能是次優策略,因為該模型將在資源不足的任務上快速過擬合,而在資源過多的任務上不充分擬合。我們主要將其作為參考當比例設置不理想時可能出現的問題。
為了將這些混合策略在相同的基礎上與我們的基線 pre-train-then-fine-tune 結果進行比較,我們以相同的總步數訓練了多任務模型:??
總的來說,我們發現多任務訓練的效果不如預訓練后對大多數任務進行微調。特別是“均等”的混合策略會導致性能急劇下降,這可能是因為低資源任務過度擬合,高資源任務沒有看到足夠的數據,或者模型沒有看到足夠的未標記數據以學習通用語言能力。對于Examples-proportional mixing的示例,我們發現對于大多數任務,K 都有一個“最佳點”,在該點上模型可以獲得最佳性能,而K值較大或較小都會導致性能變差。(對于我們考慮的K值范圍)WMT英語到法語的翻譯是個例外,這是一項資源非常豐富的任務,它總是受益于更高的混合比例。最后,我們注意到 Temperature-scaled mixing 提供了一種從大多數任務中獲得合理性能的方法,其中 T = 2 在大多數情況下表現最佳。在以下部分中,我們將探討縮小多任務訓練與 pre-train-then-fine-tune 方法之間差距的方法。
3.5.3 Combining multi-task learning with fine-tuning
回想一下,我們正在研究多任務學習的寬松版本:我們在混合任務上訓練單個模型,但允許使用模型的不同參數設置(檢查點)來評估性能(注意,預訓練時是只有單一無監督任務的)。我們可以通過考慮以下情況來擴展此方法:模型同時針對所有任務進行預訓練,然后針對有監督的單個任務進行微調。這是“MT-DNN”[17]使用的方法,該方法在推出時就達到了GLUE和其他基準的最新性能。
首先,模型在 Examples-proportional mixing 的人工混合數據集上預訓練模型,然后在每個單獨的下游任務上對其進行微調。?這有助于我們衡量在預訓練期間是否將監督任務與無監督目標一起包括在內,可以使模型對下游任務有一些有益的早期暴露?。我們也希望,可能在許多監督源中進行混合可以幫助預訓練的模型在適應單個任務之前獲得更為通用的“技能”(寬松地說)。
為了直接測量這一點,我們考慮第二個變體,其中我們在相同的混合數據集上對模型進行預訓練,只是從該預訓練混合物中省略了一項下游任務。然后,我們在預訓練中遺漏的任務上對模型進行微調。對于我們考慮的每個下游任務,我們都會重復此步驟。我們稱這種方法為“leave-one-out”多任務訓練。這模擬了真實的設置,在該設置中,針對未在預訓練中看到的任務微調了預訓練模型。
因此,對于第三個變體,我們對所有考慮的監督任務進行預訓練。
我們在表 12 中比較了這些方法的結果。為進行比較,我們還包括基線和標準多任務學習的結果。我們發現,多任務預訓練后的微調可以使性能與我們的基準相當。這表明在多任務學習之后使用微調可以幫助減輕第 3.5.2 節中描述的不同混合比率之間的某些權衡。有趣的是,“leave-one-out”訓練的性能僅稍差一些,這表明針對各種任務訓練的模型仍然可以適應新任務(即多任務預訓練可能不會產生嚴重的任務干擾)。最后,除了翻譯任務外,在所有情況下,有監督的多任務預訓練的表現都明顯較差。這可能表明翻譯任務從(英語的)無監督預訓練中受益較少,而無監督預訓練則是其他任務中的重要因素。
3.6 Scaling
機器學習研究的“慘痛教訓”認為,利用額外計算的通用方法最終會勝過依賴于人類專業知識的方法。最近的結果表明,這可能適用于NLP中的遷移學習,例如一再證明的擴大規模可以提高性能。但是,有多種可能的縮放方法,包括使用更大的模型,訓練模型更多步驟以及進行組合。在本節中,我們通過解決以下前提“獲得了 4 倍的計算能力該如何使用它?”來比較這些不同的方法
模型查看 4 倍數據的另一種方法是將批處理大小增加 4 倍。由于更有效的并行化,這有可能導致更快的訓練。但是,以 4 倍大的批次大小進行訓練會產生與以 4 倍多的步驟進行訓練不同的結果。我們包括一個額外的實驗,在該實驗中,我們將基線模型訓練的批次大小提高了 4 倍,以比較這兩種情況。
我們認為,在許多基準測試中,通常的做法是通過使用集成模型進行訓練和評估來獲得額外的性能。這提供了利用附加計算的正交方式。為了將其他縮放方法與集成發放進行比較,我們還測量了 4 個分別進行預訓練和微調的模型的集成的性能。我們將整個集成模型中的 logits 取平均,然后將它們輸入到 output softmax nonlinearity 中,以獲得匯總預測。代替預先訓練 4 個單獨的模型,更便宜的選擇是采用一個預先訓練的模型并產生4個單獨的微調版本。雖然這不會占用我們的全部 4 倍計算預算,但我們還包括此方法,以查看它是否比其他縮放方法具有競爭優勢。
表 13 中顯示了應用這些各種縮放方法后獲得的性能。毫不奇怪,增加訓練時間和/或模型大小會持續改善基線。在進行 4 倍步數訓練或使用 4 倍大批量大小的訓練之間,盡管兩者都是有益的,但沒有明顯的贏家。通常,與僅增加訓練時間或增加批處理大小相比,增加模型大小會導致額外的性能提升。在我們研究的任何任務上,訓練一個 2 倍大的模型達到 2 倍長和訓練一個4 倍大模型之間,我們沒有觀察到很大的區別。這表明增加訓練時間和增加模型大小可以是提高性能的補充手段。我們的結果還表明,集成提供了一種通過規模來改善性能的正交有效方法。在某些任務中(CNN/DM,EnDe 以及 EnRo ),集成了 4 個完全獨立訓練的模型,其性能明顯優于其他縮放方法。預訓練但分別進行微調的集成模型也使性能大大超過了基線,這以更便宜的方式提高性能。唯一的例外是SuperGLUE,在這兩種方法中,兩種方法都不比基線有明顯改善。
我們注意到,不同的縮放方法需要與不同的性能進行權衡。例如,使用較大的模型可能會使下游的微調和推斷變得更加昂貴。相反,如果將一個較小的模型進行較長時間的預訓練,如果將其應用于許多下游任務,則可以有效地攤銷該成本。另外,我們注意到,集成 N 個單獨的模型與使用具有 N 倍高的計算成本的模型具有相似的成本。因此,在縮放方法之間進行選擇時,一定要考慮模型的最終用途。
3.7 Putting it all together
現在,我們利用系統研究的見解來確定我們可以在流行的NLP基準上提高性能的程度。我們也有興趣通過在大量數據上訓練更大的模型來探索NLP遷移學習的當前限制。我們從基線訓練方法開始,進行以下更改:
Objective:我們將獨立同分布的降噪目標替換為第3.3.4節中描述的?span-corruption 目標,這是受 SpanBERT[18]啟發。具體來說,我們使用平均跨度長度 3 ,破壞原始序列的15%。我們發現,該目標產生了略微更好的性能(表 7) ,并且由于目標序列長度較短,其計算效率略高。
Longer training:我們的基線模型使用相對較少的預訓練步驟(BERT的 1?4 倍,XLNet的 1?16 倍,RoBERTa的 1?64)。幸運的是,C4足夠大,我們可以訓練更長的時間而無需重復數據(這可能是有害的,如3.4.2節所示)。我們在3.6節中發現,額外的預訓練確實可以提供幫助,并且增加批次大小和增加訓練步驟數量都可以帶來這一好處。因此,我們以?個長度為512的序列的批次大小對模型進行了100萬步的預訓練,相當于總共約 1 萬億個預訓練令牌(大約是我們基準的 32 倍)。
在3.4.1節中,我們顯示了在類似RealNews,WebText和Wikipedia + TBC數據集上的預訓練在一些下游任務上優于在C4上的預訓練。
但是,這些數據集變體非常小,以至于在對1萬億令牌進行預訓練的過程中,它們會重復數百次。
由于我們在3.4.2節中表明了這種重復可能是有害的,因此我們選擇繼續使用C4數據集。
Model sizes:在3.6節中,我們還展示了如何擴大基準模型大小以提高性能。但是,在有限用于微調或推理的計算資源的設置下,使用較小的模型可能會有所幫助。基于這些因素,我們訓練了各種尺寸的模型:
Multi-task pre-training:在3.5.3節中,我們顯示了在微調之前對無監督任務和有監督任務的多任務混合進行預訓練以及僅對無監督任務進行了預訓練。這是“MT-DNN”[17]提倡的方法。它還具有實際的好處,即能夠在整個訓練期間(而不只是在微調期間)監視“下游”性能。因此,我們在最后一組實驗中使用了多任務預訓練。我們假設接受較長時間訓練的較大模型可能會從較大比例的未標記數據中受益,因為它們更可能過度擬合較小的訓練數據集。但是,我們還注意到,第3.5.3節的結果表明,在多任務預訓練后進行微調可以減輕因選擇未標記數據的次優比例而可能引起的一些問題。基于這些想法,在使用標準 example-proportional mixing(在第3.5.2節中介紹)之前,我們將以下人工數據集大小替換為未標記的數據:Small 710,000,Base 2,620,000,Large 8,660,000,3B 33,500,000和11B 133,000,000。對于所有模型變體,我們還在預訓練期間將WMT EnFr 和 EnDe 的數據集的有效數據集大小限制為 100 萬個示例。
Fine-tuning on individual GLUE and SuperGLUE tasks:到目前為止,在 GLUE 和 SuperGLUE 上進行微調時,我們已將這兩個基準測試中的所有數據集分別連接在一起,因此我們僅對GLUE和SuperGLUE各微調一次模型。這種方法使我們的研究在邏輯上更加簡單,但是我們發現與單獨微調任務相比,這在某些任務上犧牲了少量的性能。微調各個任務的潛在問題(可以通過一次訓練所有任務來緩解)可能會導致我們對資源不足的任務過擬合。例如,?個長度為 512 個序列的批處理大小將導致整個數據集在許多低資源的 GLUE 和 SuperGLUE 任務的每次批處理中出現多次。
因此,在 GLUE 和 SuperGLUE 任務的微調期間,我們使用 8 個長度為 512 個序列的較小批處理大小。
我們還會每 1000 步而不是每 5,000 步保存檢查點,以確保可以訪問在模型過擬合之前的模型參數。
我們針對 GLUE / SuperGLUE 混合以及每個任務分別都微調了模型。
然后,我們根據每個任務的驗證集性能,從混合微調或單個任務微調中選擇最佳檢查點。
具體來說,我們使用在 GLUE 或 SuperGLUE 混合物上微調的 STS-B,QQP,RTE,BoolQ,COPA和MultiRC的模型,并對所有其他任務使用經過單獨微調的模型。
Beam search:我們所有以前的結果都是使用貪婪解碼來報告的。對于具有較長輸出序列的任務,我們發現使用波束搜索可以提高性能。具體來說,對于WMT翻譯和CNN / DM摘要任務,我們使用 4 的beam width和??的長度損失。
Test set:由于這是我們的最后一組實驗,我們對測試集而不是驗證集報告結果。對于CNN/Daily Mail,我們使用的數據集分布的標準測試集。對于 WM T任務,這對應于對英語-德語使用 newstest2014,對英語-法語使用 newstest2015 和對英語-羅馬尼亞語使用 newstest2016 。對于 GLUE 和 SuperGLUE ,我們使用基準評估服務器來計算官方測試集分數。對于 SQuAD ,在測試集上進行評估需要在基準服務器上運行推理。不幸的是,該服務器上的計算資源不足以從我們最大的模型中獲得預測。結果,我們改為繼續報告SQuAD驗證集的性能。幸運的是,在 SQuAD 測試集上性能最高的模型也在驗證集上報告了結果,因此我們仍然可以與現在的最新技術進行比較。
除了上述更改之外,我們使用與基線相同的訓練過程和超參數(AdaFactor優化器,用于預訓練的 inverse square root 計劃,用于微調的恒定學習率,dropout 正則化,詞匯表等)。作為參考,這些詳細信息在第2節中進行了描述。
最后一組實驗的結果顯示在表 14 中。總的來說,我們在考慮的24個任務中的 17 個上達到了最先進的性能。不出所料,我們最大的模型(參數為110億)在所有任務的模型大小變體中表現最佳。我們的T5-3B模型變體確實在一些任務上超越了現有技術,但是將模型大小擴展到110億個參數是實現我們最佳性能的最重要因素。現在,我們分析每個基準的結果。
我們的 GLUE 平均得分為 89.7。有趣的是,在某些任務(CoLA,RTE和WNLI)上,我們的性能大大優于以前的最新技術,而在其他任務(QNLI和MRPC)上,我們的性能則明顯差。RTE和 WNLI 是機器性能歷來落后于人類性能的兩項任務,分別為93.6和95.9。我們在 QNLI 上的表現較差,可能是由于以下事實:該任務上的大多數最佳模型使用特殊的成對排名公式,該公式在進行預測時會整合來自多個樣本的信息。但是,我們在未在 QNLI 上使用這種方法的模型的表現優于其他模型。在參數數量方面,我們的 11B 模型變量是已提交給 GLUE 基準測試的最大模型。但是,大多數得分最高的模型都使用大量的集成和計算來產生預測。例如,實現了先前技術水平的 ALBERT 的變體使用的模型在大小和架構上與我們的3B變體相似(盡管由于巧妙的參數共享,其參數大大減少了)。為了在GLUE上產生更好的性能,ALBERT作者根據任務將“from 6 to 17”個模型組合在一起。這可能導致使用 ALBERT 集成進行預測要比使用 11B 變體進行計算更加昂貴。
對于 SQuAD,我們在精確匹配和 F1 指標上均比以前的最新技術高出約一個點。SQuAD 是建立于三年前的長期基準,最近的改進僅使最新技術水平提高了一個百分點。我們注意到,當在測試集上報告結果時,它們通常基于一組模型和/或利用外部數據集來擴充小型SQuAD訓練集。精確匹配和 F1 指標在SQuAD上的人類表現估計分別為82.30和91.22 ,因此尚不清楚在此基準上進行進一步的改進是否有意義。
對于 SuperGLUE,我們對最新技術進行了大幅度改進(從84.6的平均得分提高到88.9)。SuperGLUE 的設計任務是“超出當前最先進系統的范圍,但可以由大多數受過大學教育的英語語言使用者解決”。我們的人類表現幾乎達到了89.8。有趣的是,在閱讀理解任務(MultiRC和ReCoRD)上,我們的表現遠遠超出了人類的表現,這表明用于這些任務的評估指標可能偏向于機器做出的預測。在另一方面,人類在兩個 COPA 和 WSC 的準確率為100%,比我們的模型中的表現好得多。這表明,仍然存在語言上的任務是我們的模型難以完善的,尤其是在資源匱乏的環境中。
在任何WMT翻譯任務中,我們都沒有達到最先進的性能。這可能部分是由于我們使用了僅英語的未標記數據集。我們還注意到,在這些任務上,大多數最佳結果都使用了backtranslation,這是一種復雜的數據增強方案。在資源匱乏的英語到羅馬尼亞語基準方面的最新技術還使用了其他形式的跨語言無監督訓練。我們的結果表明,規模和英語預訓練可能不足以匹配這些更復雜的方法的性能。更具體地說,英語到德語 newstest2014 的最佳結果使用了 WMT2018 更大的訓練集,很難直接與我們的結果進行比較。
最后,盡管在 ROUGE-2-F 得分上僅達到相當高的水平,但在 CNN/Daily Mail 上,我們獲得了最先進的性能。已經顯示,對 ROUGE 分數的改進不一定對應于更連貫的摘要。此外,盡管將CNN/Daily Mail作為抽象摘要的基準,但已證明純粹的提取方法行之有效。也有人認為,以最大可能性訓練的生成模型易于產生重復的摘要。盡管存在這些潛在問題,我們發現我們的模型確實能夠生成連貫且基本正確的摘要。我們在附錄 C 中提供了一些未經特別挑選的驗證集示例。
4 Reflection
完成我們的系統研究后,我們首先總結一些最重要的發現。我們的研究結果提供了一些我們認為更有希望的研究途徑的高層次的觀點。總而言之,我們概述了一些我們認為可以為進一步發展該領域提供有效方法的主題。
4.1 Takeaways
Text-to-text:我們的 Text-to-text 框架提供了一種簡單的方法,可以在各種文本任務上使用相同的損失函數和解碼步驟訓練單個模型。我們展示了如何將該方法成功地應用于生成任務,例如抽象摘要,分類任務(例如自然語言推斷),甚至回歸任務(例如STS-B)。盡管簡單,但我們發現Text-to-text框架的性能與特定于任務的體系結構的性能是可比的,并且在與規模結合時產生了最佳的結果。
Architectures:盡管有關NLP的遷移學習的一些工作已考慮了Transformer的體系結構變體,但我們發現原始的編碼器/解碼器形式在我們的 Text-to-text 框架中效果最好。盡管編碼器/解碼器模型使用的參數是“僅編碼器”(例如BERT)或“僅解碼器”(語言模型)體系結構的兩倍,但其計算成本卻相似。我們還表明,在編碼器和解碼器中共享參數不會導致性能下降,并且使得總參數數量減半。
Unsupervised objectives:總體而言,我們發現大多數訓練模型以重建隨機損壞文本的“denoising”目標在 Text-to-text 框架中的性能相似。因此,我們建議使用可產生短目標序列的目標,以便無監督的預訓練在計算上更加有效。
Datasets:我們引入了“Colossal Clean Crawled Corpus” C4,其中包含來自Common Crawl web dump的啟發式清理的文本。?將 C4 與使用額外過濾的數據集進行比較時,我們發現對域內未標記數據的訓練可以提高一些下游任務的性能。但是,約束到單個域通常會導致數據集較小。我們分別表明,當未標記的數據集足夠小以至于在預訓練過程中重復多次時,性能可能會下降。這促使使用大量不同的數據集(如C4)來進行通用語言理解任務。
Training strategies:我們發現盡管更新所有參數最昂貴,但是在微調期間更新預訓練模型的所有參數的基本方法優于旨在更新較少參數的方法。?我們還嘗試了多種方法來一次在多個任務上訓練模型,這在我們的Text-to-text框架中僅對應于在構建批處理時混合來自不同數據集的示例。多任務學習中的主要問題是設置要繼續訓練的每個任務的比例。我們最終沒有找到一種設置混合比例的策略,該策略與無監督的預訓練和有監督的微調的基本方法的性能相匹配。但是,我們發現,在對各種任務進行預訓練后進行微調可以產生與無監督預訓練相當的性能。
Scaling:我們比較了利用額外計算的各種策略,包括在更多數據上訓練模型,訓練更大的模型以及使用一組模型。我們發現每種方法都可以顯著提高性能,盡管通過在較少的步驟上訓練更大的模型通常比在較小的模型上訓練更多的數據要好。我們還表明,與單個模型相比,一組集成模型可以提供實質上更好的結果,后者提供了一種利用附加計算的正交方式。從同一預訓練模型進行分別微調所構成的集成模型的效果要比所有模型分別進行預訓練和微調的效果差,不過仍遠勝于單個模型。
Pushing the limits:我們結合了上述見解,并訓練了更大的模型(最多 110 億個參數),從而在我們考慮的許多基準測試中均獲得了最新的結果。對于無監督訓練,我們從C4數據集中提取文本并應用降噪目標,該目標會破壞連續范圍的令牌。在對單個任務進行微調之前,我們對多任務混合進行了預訓練。總體而言,我們的模型已針對超過1萬億 tokens 進行了訓練。為了促進結果的復制,擴展和應用,我們發布了每個 T5 變體的代碼,C4 數據集和預訓練的模型權重。
4.2 Outlook
The inconvenience of large models:我們的研究得出的不令人驚訝但重要的結果是,較大的模型往往表現更好。用于運行這些模型的硬件不斷變得更便宜和更強大的事實表明,擴大規模可能仍然是實現更好性能的有前途的方法。但是,在某些應用程序和場景中,總是存在使用較小或較便宜的模型有幫助的情況,例如在執行客戶端推斷或聯合學習時。相關地,遷移學習的一種有益用途是在低資源任務上獲得良好性能的可能性。低資源任務通常(根據定義)發生在缺乏資產以標記更多數據的環境中。因此,低資源應用程序通常也對計算資源的訪問受到限制,這可能會導致額外的成本。因此,我們提倡研究使用更便宜的模型實現更強性能的方法,以便將遷移學習應用于影響最大的地方。這些方面目前的一些工作包括 distillation 蒸餾,parameter sharing 參數共享和 conditional computation 條件計算。
More efficient knowledge extraction:回想一下,預訓練的目標之一是(寬松地說)為模型提供通用的“知識”,以提高其在下游任務上的性能。?這項工作中的方法是訓練模型去噪損壞的文本范圍(也是目前普遍采用的)。我們懷疑這種簡單化的技術可能不是傳授模型通用知識的非常有效的方法。?更具體地說,能夠獲得良好的微調性能而無需先對 1 萬億文本標記訓練我們的模型將很有用。這些方面的一些并行工作通過預訓練模型以區分真實文本和機器生成的文本來提高效率。
Formalizing the similarity between tasks:我們觀察到,對未標記的域內數據進行預訓練可以提高下游任務的性能(第3.4節)。這一發現主要依賴于基本觀察,例如 SQuAD 是使用來自Wikipedia 的數據創建的。對預訓練任務和下游任務之間的“相似性”提出更為嚴格的概念將很有用,這樣我們就可以在使用何種類型的無標簽數據來源方面做出更原則性的選擇。在計算機視覺領域,沿著這些思路開展了一些早期的實證研究。更好地了解任務的關聯性也可以幫助選擇有監督的預訓練任務,這已被證明對 GLUE 基準測試很有幫助。
Language-agnostic models:我們失望地發現 English-only 的預訓練在我們研究的翻譯任務上未能達到最新的結果。我們也有興趣去避免需要指定某種語言的預先編碼的詞匯表的準備困難。為了解決這些問題,我們有興趣進一步研究與語言無關的模型,即無論文本的語言如何,都能執行給定 NLP 任務且性能良好的模型。鑒于英語不是世界上大多數人口的母語,所以這是一個特別相關的問題。
本文的動機是最近針對 NLP 的遷移學習的大量工作。在我們開始這項工作之前,這些進步已經實現了基于學習的方法尚未被證明有效的環境中的突破。我們很高興能夠繼續保持這種趨勢,例如通過在 SuperGLUE 基準測試上接近人類水平的性能來完成這一任務,這項任務專為現代的遷移學習pipeline 而設計。我們的結果源于簡單,統一的Text-to-text框架,新的C4數據集以及系統研究的見解。此外,我們提供了該領域的經驗概述以及展望。我們很高興看到后續工作能夠使用遷移學習實現通用語言理解的目標。
參考
^T5 論文?https://arxiv.org/abs/1910.10683
^相對位置嵌入?https://arxiv.org/abs/1803.02155
^decaNLP?https://arxiv.org/abs/1806.08730
^Transformer?https://arxiv.org/abs/1706.03762
^AdaFactor?https://arxiv.org/abs/1804.04235
^abUniversal Language Model Fine-tuning for Text Classification?https://arxiv.org/abs/1801.06146
^SentencePiece?https://arxiv.org/abs/1808.06226
^Subword模型?https://zhuanlan.zhihu.com/p/69414965
^深入理解NLP Subword算法:BPE、WordPiece、ULM https://zhuanlan.zhihu.com/p/86965595
^Generating Wikipedia by Summarizing Long Sequences?https://arxiv.org/abs/1801.10198
^Unified Language Model Pre-training for Natural Language Understanding and Generation?https://arxiv.org/abs/1905.03197
^MASS?https://arxiv.org/abs/1905.02450
^OpenWebText?https://github.com/jcpeterson/openwebtext
^wikipedia dataset?https://www.tensorflow.org/datasets/catalog/wikipedia
^Parameter-Efficient Transfer Learning for NLP?https://arxiv.org/abs/1902.00751
^Can you tell me how to get past sesame street? sentence-level pretraining beyond language modeling.?https://www.aclweb.org/anthology/P19-1439/
^abMulti-Task Deep Neural Networks for Natural Language Understanding?https://arxiv.org/abs/1901.11504
^SpanBERT?https://arxiv.org/abs/1907.10529
總結
以上是生活随笔為你收集整理的T5: Text-to-Text Transfer Transformer 阅读笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 与优秀的人在一起进步:我发起的“乐学”分
- 下一篇: Machine Learning-模型评