【NLP】Day 22: 幫你解決各類NLP任務的BERT,以及其他在芝麻街的好捧油們(上)
在這裡,你可以盡情揮灑你的想像力,不覺得這很令人難以想像嗎?
《芝麻街》Elmo
在過去幾天的旅程中,我們了解如何利用各種神經網路模型來幫助我們處理不同自然語言處理任務,計算語言學家接著也基於前面講過的那些神經網路模型,陸續發展了許多其他新型態的語言模型,例如:基於BiLSTM的ELMo。我想應該是研究太苦悶了,或者說是一種惡趣味吧?自然語言處理專家特別喜歡用芝麻街的角色來為這些語言模型命名,就算是硬湊名稱,也要把它湊成芝麻街角色的名字(e.g. 今天要介紹的 BERT 就是一個案例)。假如說,現在小小孩想上網抓 Elmo 的照片,結果卻出現一堆莫名其妙的節點跟線的連接圖,會被嚇哭吧? 計算語言學家都是邪惡的。
不過如果你還有印象,就會記得 BiLSTM 儘管記憶力已經比 RNN 還要好了,但人工智慧學家對仍然不滿足,他們認為如果要了解一個字在文章中的「定位」,就必須要讓模型理解全文才能真正決定。所以接下來學者又開發出了 Transformer ,而其中的 Self-Attention 機制,使每一個字對每一個字來說「沒有位置的概念」。好,我知道有點玄,就套句台大李宏毅老師所說:
海內存知己,天涯若比鄰。
這時候,兩個有關係的字,即使離很遠,模型也能理解之間的關係。就是這樣,Transformer 的 Self-Attention 機制,就可以完全解決 RNN 系列的天生缺陷。而今天要介紹的 BERT 就是基於 Transformer 所搭建的模型。
在 2018 年時(其實沒有很久以前喔),Google 集先前所有語言模型大成,打造了 BERT,並釋出了模型及原始碼,幫助處理各式各樣的下游任務,而這個 BERT 的表現,以及準確度,都到了迄今仍無人能超越的地步。
如果有一天,有個模型幫助我們完成任何事,那該有多好?
話說得有點誇張,不過當時 BERT 模型的釋出,確確實實地撼動了計算語言學界與自然語言處理業界。在那篇被引用了四萬多次的論文(BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding)之中,介紹了如何用 BERT 進行兩階段的訓練方法,幫助後續自然語言的處理任務。
預訓練模型的訓練方法:遷移學習(Transfer Learning)
如果說能夠先訓練出一個對自然語言有一個大致了解的模型,並且基於這模型再針對各種不同下游任務進行調整,這種方法稱為:遷移學習(Transfer Learning)。這篇論文的作者就是為了實現這一個目標,將 Transformer 中的 encoder、大量的文本,以及針對目標進行的預訓練,來搭建整個 BERT 模型。而作者為了要達成這個目標,將訓練過程分成兩個階段:
- 預訓練(Pretraining)
在論文中有提到,為了要訓練這樣的模型,首先會進行兩種預訓練任務,分別為克漏字填空、以及下文預測。對於我們人類來說,要理解自然語言是輕而易舉的事,但對於電腦來說卻是一件難如登天的任務。我們一一來說明模型的訓練過程。- 克漏字填空(Mask Language Model)
比較專業一點的名詞稱為 Masked Language Model(MLM)。之所以會說這是克漏字填空,其實因為這完完全全就是我們高中在學英文時最討厭的那種題型,只是我們把它拿給機器來做。大家在圖中可以看到,這些句子在丟進去模型進行訓練的時候,會把一些字詞遮蓋起來,讓模型去預測被遮蓋起來的字詞是什麼。若是以圖中李宏毅老師的簡報為例的話,我們人類很快就可以知道 Mask - 下文預測(Next Sentence Prediction)
英文又叫做 Next Sentence Prediciton (NSP)。其實就是預測下一個可能的句子是什麼。要以這種方式對模型進行預訓練,其實就是為了要解決例如文本生成,或是 QA 的任務。
- 克漏字填空(Mask Language Model)
- 模型微調(Fine-Tuning)
前面的模型訓練結束後,再針對不同的下游任務進行微調。在論文中,作者將模型進行微調後,都達到了空前的正確率。這部分的詳細做法,我們留到明天再來詳細講解。今天只會簡單地介紹 BERT,讓各位先有個概念即可。這些任務包括了以下四種,分別為:單一句子分類、單一句子標註、成對句子預測,以及問答任務。明天我們再詳細介紹。
跟使用 LSTM 訓練的模型有什麼不一樣?
看到這邊,大家可能想說,咦?那跟先前介紹的使用 LSTM 訓練的模型,有什麼差別?好像就是個很厲害的語言模型不是嗎?為什麼好像 BERT 獲得較高的關注?不公平啊!其實使用 LSTM 訓練的模型跟 BERT 有一些結構上還有運用上的差異及差異,這就讓我們一一來看看是怎麼回事吧!
- 雙向架構: 因為前面所說的克漏字填空任務,相較於過去介紹過的模型來說,可以幫助模型確實地「雙向」理解文本。也就是說,雖然説是雙向,但事實上透過 Transformer 中的自注意力機制,對所有字來說,彼此之間的關係「既很近又很遠」,你可以好像就在我身邊,但你其實卻又遠在天邊
就像你的女朋友一樣。那因為這樣的特性,讓 BERT 模型確實地展露出 「天涯若比鄰」的概念。所以說 BERT 實際上並不是雙向,但是卻有著雙向的特性,達成了雙向欲達成的目標,因此有了比雙向還要更優秀的理解上下文的能力這就是為什麼我說其實 BERT 並不是 Bidirectional 的緣故,但人工智慧學家為了湊出 BERT 硬給了他一個 B 開頭的字 - 適合大量資料訓練: 相較於其它用 LSTM 訓練而成的深度學習模型,用 Transformer 訓練的模型可以透過平行運算的方式,而這很適合幫助進行資料大的模型訓練。所謂平行運算,簡單來說,就是模型可以將一份大資料分成很多個小部分資料進行計算,比起以往全部的資料一次計算的方式來說,平行運算的速度快非常多,而 BERT 適合這種方式。
好,今天就講到這,明天就上我們拿起放大鏡,來一一了解 BERT 的訓練過程以及下游任務的應用囉!明天見。