1 自監(jiān)督學習的概念
在機器學習中箩帚,最常見的是監(jiān)督學習(Supervised learning)膏潮。假設模型的輸入是,輸出是轻纪,我們?nèi)绾问鼓P洼敵鑫覀兤谕?img class="math-inline" src="https://math.jianshu.com/math?formula=y" alt="y" mathimg="1">呢叠纷?我們得擁有已標注的(label)的數(shù)據(jù),例如圖片識別崇众,我們得有一堆的圖片,并且這些圖片被標注了是什么锰蓬。然后通過這些已標注的數(shù)據(jù)對模型進行訓練眯漩,使模型的輸出盡可能地接近標簽赦抖,這是監(jiān)督學習。那么什么是自監(jiān)督學習呢轮锥?假設我們擁有一堆的數(shù)據(jù)要尔,但是沒有標注,我們想辦法將這堆數(shù)據(jù)分成兩個部分蝴簇,一部分作為模型的輸入熬词,一部分作為模型的標簽吸重。然后對模型進行訓練,使模型地輸出盡可能地接近標簽颜矿。注意這里不是人標注的骑疆,而是數(shù)據(jù)里本來就有的替废。這說起來有點抽象,但是通過BERT這個例子就很容易明白了诈火。
2 BERT概述
BERT的全稱是Bidirectional Encoder Representation from Transformers冷守,即雙向Transformer的Encoder。因此BERT的網(wǎng)絡架構和Transformer的Encoder是一樣的亮钦,關于Transformer的細節(jié)請看上一節(jié)充活。因此BERT的任務就是輸入一個序列,然后輸出一個序列,輸出序列和輸入序列的長度是一樣的淮菠。通過Transformer中的自注意力機制荤堪,BERT具有考慮序列全局的能力。由于BERT一般用于自然語言處理拥知,所以BERT的輸入一般使一排文字碎赢,然后輸出一組向量,向量的個數(shù)和文字的個數(shù)是一樣的襟齿。
3 BERT的訓練
所謂自監(jiān)督學習枕赵,和監(jiān)督學習不同的地方就在于訓練。BERT的訓練方式有兩種:Masked Language Model和Next Sentence Prediction开皿。
3.1 Masked Language Model
Masked Language Model的工作機制如下圖所示篮昧,類似于讓BERT做完形填空懊昨。在訓練過程中,隨機蓋掉句子中的一些字狈孔,這些被蓋掉的字要么替換成一個特殊符號“MASK”,要么隨機替換成其他字嫁赏。然后將替換后的句子當成BERT的輸入油挥,被蓋掉的字對應的輸出向量通過一個Linear層和softmax操作之后輸出一個概率分布深寥。前面講transformer的時候,講到了這個概率分布向量的長度和字典的長度是一樣的则酝,每個字都有一個對應的概率闰集,概率最大的字就是最后的預測結果武鲁。在訓練過程中,要使預測輸出的字和被蓋掉的字盡可能一致沐鼠。這其實就是一個分類問題饲梭,類別的數(shù)目和字典的大小一樣,損失函數(shù)是交叉熵侧漓。通過這種簡單的方式就實現(xiàn)了自監(jiān)督學習监氢,它不需要我們?nèi)ト斯俗?shù)據(jù)浪腐,它的標簽來自于數(shù)據(jù)本身,這是非常巧妙的泽谨。
7.3.2 Next Sentence Prediction
Next Sentence Prediction的工作機制如下圖所示吧雹。在Next Sentence Prediction的訓練任務中,BERT的輸入是兩個句子加上兩個特別的符號“CLS”搓蚪,“SEP”丁鹉。其中“CLS”是一個開始符號揣钦,“SEP”將兩個句子隔開。Next Sentence Prediction的任務是要預測這兩個句子是否是相接的谎亩,“CLS”輸出的向量通過Linear層后輸出“yes”和“no”谈竿,“yes”表示兩個句子是前后相接的空凸,“no”則相反寸痢。訓練數(shù)據(jù)的正例是正常的一篇文章中上下連貫的兩句話,負例是將正常相接的下一句話隨即替換成另外一句話道逗。但是研究表明滓窍,這種訓練任務對于BERT的訓練用處不大巩那。因此BERT的訓練主要還是依賴于Masked Language Model即横。
4 BERT的應用
BERT在自然語言處理領域基本上都可以用上,其應用機制如下圖所示跺嗽,分為預訓練(Pre-train) 和微調(Fine-tune) 兩個部分桨嫁。
預訓練(Pre-train) 就是指上面所說的Masked Language Model和Next Sentence Prediction兩個自監(jiān)督訓練任務。這部分工作實際上由一些搞深度學習的大戶做好了钉跷,比如google肚逸、訊飛等朦促,并不需要我們自己訓練,我們只需要將人家訓練好的BERT拿來用就行了血当。
微調(Fine-tune) 是指根據(jù)我們的下游任務(如機器翻譯禀忆、智能問答箩退、文本標注等),再利用下游任務的少量標注數(shù)據(jù)對下游任務的參數(shù)進行微調即可滋戳。
下面以“基于抽取的智能問答(Extraction-based Question Answering)”為例說明BERT的應用機制奸鸯】擅保“基于抽取的智能問答”類似于閱讀理解映跟,讓機器讀一段文字,然后提出幾個問題弯蚜,機器從閱讀到的文字中抽取答案剃法。對于該任務,模型的輸入就是文章和問題收厨,輸出是兩個整數(shù)值“”和“”诵叁。“”代表答案在文章中的起始位置碑诉,“”代表答案在文章中的結束位置进栽。例如下圖中第一個問題的答案是“gravity”恭垦,而“gravity”位于文章的第17個字符(不含標點)番挺,因此模型的輸出“”唠帝,“”。同理玄柏,第三個問題的答案是“within a cloud”襟衰,而它們位于第77-79個字符,因此模型的輸出“”禁荸,“”右蒲。
處理上述這個問題的做法如下圖所示阀湿,模型的輸入是問題和文章赶熟,問題和文章通過符號“SEP”隔開。然后隨機初始化兩個向量(圖中的橘黃色向量和藍色向量)陷嘴,向量的長度和BERT輸出向量的長度一樣映砖,然后將這兩個向量分別去和文章輸出的向量做點積灾挨,然后通過Softmax輸出概率分布邑退,概率最大的分別是答案的起始位置和結束位置。這個任務中訓練的參數(shù)只有隨機初始化的兩個向量劳澄,BERT中的參數(shù)都不需要訓練的地技。
可以看出利用BERT的預訓練,做下游任務時就很簡單了秒拔,訓練的參數(shù)也非常少莫矗,而且實踐證明這樣做的效果是非常好的,超過了傳統(tǒng)的一些做法。這就是BERT的魅力所在作谚。