1. 程式人生 > >BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding

BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding

  1. 為什麼採用’Masked language Model’ ?
    該模型不僅雙向編碼,而且加深了網路的層數。但加深雙向編碼網路卻會引入一個問題,導致模型最終可以間接地“窺探”到需要預測的詞。這個“窺探”的過程可以用下面的圖來表示:
    在這裡插入圖片描述
    從圖中可以看到經過兩層的雙向操作,每個位置上的輸出就已經帶有了原本這個位置上的詞的資訊了。這樣的“窺探”會導致模型預測詞的任務變得失去意義,因為模型已經看到每個位置上是什麼詞了。
    為了解決這個問題,我們可以從預訓練的目標入手。我們想要的其實是讓模型學會某個詞適合出現在怎樣的上下文語境當中;反過來說,如果給定了某個上下文語境,我們希望模型能夠知道這個地方適合填入怎樣的詞。從這一點出發,其實我們可以直接去掉這個詞,只讓模型看上下文,然後來預測這個詞。但這樣做會丟掉這個詞在文字中的位置資訊,那麼還有一種方式是在這個詞的位置上隨機地輸入某一個詞,但如果每次都隨機輸入可能會讓模型難以收斂。BERT的作者提出了採用MaskLM的方式來訓練語言模型
    隨機遮蔽部分輸入token, 然後只預測那些被遮蔽的token, 這一過程就是masked LM
    雖然這確實能讓團隊獲得雙向預訓練模型,但這種方法有兩個缺點。首先,預訓練和finetuning之間不匹配,因為在finetuning期間從未看到[MASK]token。為了解決這個問題,團隊並不總是用實際的[MASK]token替換被“masked”的詞彙。相反,訓練資料生成器隨機選擇15%的token。例如在這個句子“my dog is hairy”中,它選擇的token是“hairy”。然後,執行以下過程:
    資料生成器將執行以下操作,而不是始終用[MASK]替換所選單詞:
    80%的時間:用[MASK]標記替換單詞,例如,my dog is hairy → my dog is [MASK]
    10%的時間:用一個隨機的單詞替換該單詞,例如,my dog is hairy → my dog is apple
    10%的時間:保持單詞不變,例如,my dog is hairy → my dog is hairy. 這樣做的目的是將表示偏向於實際觀察到的單詞。

  2. 為什麼預訓練時加入了 Next Sentence Prediction任務??怎麼設定的??
    引入這個任務可以更好地讓模型學到連續的文字片段之間的關係
    訓練的時候輸入模型的第二個片段會以50%的概率從全部文字中隨機選,剩下50%的概率選取第一個片段的後續文字。