Transformer 內有一組很關鍵的機制,是一種 encoder-decoder 的架構。 Encoder 主要扮演的角色是把輸入的一連串的 token 轉換為 embedding vectors,有時候也會被稱為 hidden state。Decoder 則是使用 encoder 的 hidden state,來產生 token。
Transformer 架構最初是為機器翻譯等 sequence to sequence 的任務而設計的,但是隨著時間的演變,已經變 encoder 和 decoder 都已經變成單獨的模組了,即使只要其中一個,也可以完成 transformer 的任務。
BERT 和其變體如我們最近一直用到的 DistilBERT 就是這類型最有名的代表。這類的模型將輸入的文本序列轉換為數字表示,而且非常適合文本分類或命名實體識別等任務。像我們最近在做的文本分類,都是用 DistilBERT 來達成的。
GPT 模型的家族都是屬於此類,主要由 OpenAI 開發的。這類的 transformer 很適合拿來做下一個單詞的預測,例如說文本生成。「I have a pen, I have a ......」像是這樣子的題目要把後面的句子完成,就很適合用這類型的 transformer。
BART 和 T5 家族的模型就是這類型的代表。這些用於從一個文本的 sequence 到另一個文本的 sequence 的複雜映射。一般適用於機器翻譯和摘要任務。
實際上這種方式的區別也不太準。像 GPT 系列中的那些僅 decoder 模型也可以用於翻譯等任務。BERT 也可以做機器翻譯這種 Encoder-Decoder 架構的任務。我們需要的知道是他們架構和機制,但是在做自然語言處理的任務時,不一定要被其架構的特性給侷限住了。