【NLP】T5速讀

ALBERT凳子還沒坐熱,GLUE就又換了老大,Google T5 (Text-to-Text Transfer Transformer)大力出奇跡,威震天在角落默不做聲。

簡介

此次的T5模型雖然名字和BERT+系列不同,但底子裏仍是差很少的。給個人感受就是大型Seq2Seq的BERT+乾淨的數據+多任務+一些改動。論文的做者深刻對比了不一樣的預訓練目標、模型結構、無監督數據集、遷移方法、NLU任務,最終拼成了T5。文章除去reference一共34頁,能夠說很良心地剖析了transformer的效果,本文儘可能把細節和結論都清晰地整理出來。git

來感覺一下T5的size:svg

貼一下在GLUE和SUPERGLUE的登頂照:函數

1. 模型

輸入和輸出性能

和GPT2同樣,T5把全部的NLP問題歸結爲了「text-to-text」的任務,下圖展現了T5在翻譯、分類、類似度、摘要任務上的輸入輸出樣例:學習



Relative position embeddings (PE)測試

T5使用了簡化的相對位置embeding,即每一個位置對應一個數值而不是向量,將相對位置的數值加在attention softmax以前的logits上,每一個head的有本身的PE,全部的層共享一套PE。我的認爲這種方式更好一點,直接在計算attention weight的時候加入位置信息,並且每一層都加一次,讓模型對位置更加敏感。this

原文中有句話很難懂,以後懂了解讀一下:編碼

In this work, we use 32 embeddings for all of our models with ranges that increase in size logarithmically up to an offset of 128 beyond which we assign all relative positions to the same embedding.

2. 數據

Colossal Clean Crawled Corpus (C4)spa

做者選取了Common Crawl數據集,這個數據集每週大約爬取20TB的WEB數據。雖然數據集已經抽取了文本,但實際上並不乾淨,裏面還包含了不少非天然語言的東西,好比錯誤消息、菜單、重複文本,用過髒數據的同窗必定深有體會。因而本文對數據進行了比較細緻的處理:翻譯

  • 只取結尾有標點的句子
  • 去掉包含髒話的網頁
  • 有不少頁面包含"enable Javascript"的提示,去掉包含Javascript的句子
  • "lorem ipsum"是一個測試網頁排版的拉丁文,去掉包含這個佔位符的網頁
  • 去掉包含代碼片斷的網頁
  • 以三句爲一個片斷進行去重
  • 去掉非英文的網頁

通過上述處理後最終生成了750GB的數據集C4,而且在TensorFlow Datasets開源了。

3. 任務及數據格式

任務

機器翻譯、問答、生成式摘要、文本分類(單句&雙句)

數據格式

  • 輸入:參考GPT2,直接把任務名稱看成prefix和輸入拼在一塊兒
  • 輸出:分類任務(如推斷),須要輸出"entailment", "neutral", "contradiction"這三種文本,不然都算錯;迴歸任務輸出str類型的浮點數。還有其餘任務,請須要的同窗前往附錄D參考~

4. 訓練

預訓練

  • 參考SpanBERT,mask掉15%,平均長度爲3的span
  • 訓練更長步數,1百萬步*1024個樣本
  • 使用Multi-task預訓練,即混入在無監督數據中混入必定比例的任務數據

精調

  • 也是Multi-task,將全部GLUE/SuperGLUE的數據拼在一塊兒變成精調一個task,減小過擬合,但同時也會犧牲一些精度
  • batch size減少到8
  • 其實最後同時進行了多任務精調和單獨精調,根據dev集選擇最好的結果

解碼

大部分使用Greedy decoding,對於輸出句子較長的任務使用beam search

5. 結論

Architectures

  1. 原始的Transformer結構表現最好
  2. encoder-decoder結構和BERT、GPT的計算量差很少
  3. 共享encoder和decoder的參數沒有使效果差太多

Unsupervised objectives

  1. 自編碼和自迴歸的效果差很少
  2. 做者推薦選擇更短目標序列的目標函數,提升計算效率

Datasets

  1. 在領域內進行無監督訓練能夠提高一些任務的效果,但在一個小領域數據上重複訓練會下降效果
  2. Large、diverse的數據集最香了

Training strategies

  1. 精調時更新全部參數 > 更新部分參數
  2. 在多個任務上預訓練以後精調 = 無監督預訓練

Scaling

  1. 在小模型上訓練更多數據 < 用少許步數訓練更大的模型
  2. 從一個預訓練模型上精調多個模型後集成 < 分開預訓練+精調後集成


原本想把實驗部分也寫出來,最後敗給了頁數,以後細讀發現有用的東西還會放上來。整體感受T5除了position embedding以外沒什麼新的東西,在GLUE以及機器翻譯上的提高都頗有限,但做者原本的意圖也是作一個全面的分析,砸百萬美圓替你們排憂解難,此處應有掌聲。

從最近的研究來看,目前模型複雜度和性能真的是很難平衡,但今天也聽到了量子計算的福音,科技永遠向前,但願NLP愈來愈好。


(我會繼續補充的)



hi all!最近終於有了本身的公衆號,叫NLPCAB,原本想叫LAB,但以爲和一我的能撐起實驗室我就上天了,因此取了諧音CAB,有些可愛而且意味深長?以後會努力和Andy發乾貨,也但願各位同窗投稿學習筆記~

相關文章
相關標籤/搜索