BERT爲何被稱爲“自編碼模型”?爲何將BERT的訓練過程稱爲“降噪”?

最近,閱讀並調試了albert的預訓練代碼,對於BERT爲何被稱爲“自編碼”模型有了更深的理解,在這裏稍作介紹:

**注:我文中所提到的albert/BERT爲預訓練而準備的對數據做[MASK]的code在這裏:prepare_lm_data_ngram.py

正文開始…

該函數涉及了多種噪聲引入方式,非常形象地闡釋了爲什麼BERT被稱爲"自編碼"模型,以及爲什麼把BERT對預訓練輸入的處理稱爲"加噪聲",以及爲何會將"自編碼"過程(即預訓練的訓練過程)稱爲"降噪"。“噪聲"是BERT故意在[MASK]階段引入的,而訓練過程,就是將[MASK]還原的過程,即將引入的噪聲消除,故稱"降噪”。

那麼BERT/ALBERT採取了哪些噪聲引入方式呢?

  1. 選取15%的token做mask --> 最常規做法,也是MLM的基礎;
  2. 隨機做n-gram mask --> 概率上增加連續mask的數量。連續mask可以讓cloze test更難;
  3. 50%概率交換兩個文本段 --> 雖然這是爲了NSP/SOP任務組數據,但這種方式客觀上也引入了文本段層面的語義亂序——畢竟做MLM的時候模型不知道兩文本段次序是否被換過;
  4. 15%的[MASK]中,80%->[MASK]/10%->origin/10%->random_token --> 論文已提,爲了減少mismatch,這個嚴格而言不算引入噪聲;
  5. 15%的token會進行文本亂序 --> 文本亂序,自然是引入噪聲,但由於MLM任務只會對[MASK] token做預測,所以文本亂序可以說是間接引入噪聲;

一種防止pretrain和fine-tune的mismatch方法:

  • 將10%的句子設置爲短句(即長度在0~512之間的任意值)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章