前面我們介紹過了 Encoder-only(BERT)專門用於理解,適合 NLU 的任務;Decoder-only(GPT)專門用於生成,適合 NLG 任務,但其實也有很多任務需要同時「理解輸入」和「生成輸出」,例如機器翻譯、摘要生成、問答系統,這些任務本質上就是一個序列到序列 (Seq2Seq) 的問題,因此最適合的架構就是 Encoder-Decoder。
2019 年 Facebook 提出 BART (Bidirectional and Auto-Regressive Transformers),它結合了 BERT 與 GPT 的優點,Encoder 部分使用 BERT 的雙向理解方式,Decoder 部分使用 GPT 的自動回歸生成方式,這樣的設計讓 BART 能兼顧「深度理解」與「高品質生成」,成為一個強大的 Seq2Seq 模型。
BART 的預訓練任務設計為 Denoising Autoencoder,此方法會在輸入中故意加入噪聲(可能是刪掉片段、打亂順序、替換字詞等方法),再要求模型在訓練中要恢復成原本的乾淨句子,這樣的訓練方式,讓 BART 可以更好的掌握語意與上下文,能應對各種 Seq2Seq 任務,尤其在摘要生成與翻譯任務中表現特別突出。
2020 年 Google 發表了 T5 (Text-to-Text Transfer Transformer)這個模型,提出一個大膽的想法,讓 NLP 的所有任務都可以用「文字到文字」的形式來統一表達,利用 task prefix 的方式,讓 T5 能在一個統一架構下,同時處理分類、生成、翻譯等多項任務。
和傳統 Transformer 比較,T5 在一些細節上也做了改進,像是將原本的 LayerNorm 換成 RMSNorm,讓訓練更加穩定,除此之外,T5 還使用了一個超大型數據集 C4 (Colossal Clean Crawled Corpus) 作為訓練語料,C4 是來自 Common Crawl 的網頁資料,經過大規模清理與過濾後,形成約 750GB 的文本,成為當時最乾淨且規模最大的開源文本語料之一,確保模型能學習到豐富而多樣的語言知識。
輸入:sst2: 這部電影真的很好看!
輸出:positive
輸入:translate English to German: I love NLP
輸出:Ich liebe NLP
輸入:summarize: 這篇文章內容很長……
輸出:一句話摘要