在前面幾天我們學到 Transformer 是由 Encoder 和 Decoder 所組成的,Encoder 主要負責「理解輸入」,而 Decoder 負責「生成輸出」,但是很多自然語言理解(NLU)任務(像是情感分析、命名實體識別、問答系統(抽取式QA))並不需要生成句子,而是要讀懂句子本身,在這個情況下我們就只需要 Encoder,不需要 Decoder,這樣就可以提高 Transformer 的運作效率,因而出現了 Encoder-only 模型。
2018 年 Google 發表了 BERT (Bidirectional Encoder Representations from Transformers),這個模型直接拿掉了 Decoder,僅保留多層的 Encoder 來學習語言表示,與傳統語言模型不同,BERT 的特色是雙向上下文,會同時考慮左邊和右邊的詞,讓模型能捕捉更完整的語意。
除此之外,BERT 還設計了新的預訓練任務,Masked Language Model (MLM) 與 Next Sentence Prediction (NSP)。
MLM 的想法很單純,他的做法是隨機把句子中 15% 的詞換成[MASK],讓模型可以根據上下文來預測被遮住的詞,例如:
輸入:我愛[MASK],因為它讓我每天都有動力。
標籤:鐵人賽
這樣模型在學習過程中,就會被迫去理解「上下文」的意義,才能正確預測出被遮住的詞,這也讓 BERT 擅長處理各種 NLU 任務。
除了 MLM,BERT 還加入了 NSP 任務,讓模型學會判斷「兩個句子是否連續」,這樣的設計讓 BERT 在閱讀理解與 QA 任務上表現更佳,例如:
句子 A:我今天去超市買東西。
句子 B:我還順便買了一杯咖啡。 # True
句子 B:太陽從東邊升起。 # False
在 BERT 出現之前,NLP 模型大多都是只有「針對某個任務,重新訓練一個模型」。BERT 開啟了一個新時代,先預訓練,之後針對不同任務微調。
在超大型語料庫(例如 Wikipedia、BooksCorpus)上,透過 MLM + NSP,讓模型學會通用的語言知識(詞彙、句法、語意關聯)。
把已經預訓練好的 BERT,拿到下游任務(例如情感分析、命名實體識別、問答系統),再用少量有標註的資料進行訓練,因為模型已經有了語言基礎,只要稍微調整,就能快速適應任務。