之前也沒有仔細思考這個問題, 近幾天重新看了一遍BERT模型,發現之前的理解確實有問題,所以過來填坑。
在說明BERT的雙向表示前,先回顧一下常見的雙向表示
網絡結構的雙向
首先區別於biLSTM那種雙向, 那種是在網絡結構上的雙層
例如 biLSTM來進行一個單詞的雙向上下文表示
可以看到, 這種在網絡結構上, 每個單詞都從正向和反向都得到一個表示, 然後將此表示進行連接, 則此時認爲這就是單詞的雙向表示
在沒有深思之前,我也一直以爲BERT是使用上面的模式,而當我看到BERT的結構是這樣的,說明我之前是錯誤的理解:
請注意,BERT並沒有說講一個序列反向輸入到網絡中,所以BERT並不屬於這種。
BERT中的雙向表示
那麼BERT 是如何說明是雙向表示呢?
首先我們指導BERT的預訓練模型中,預訓練任務是一個mask LM ,通過隨機的把句子中的單詞替換成mask標籤, 然後對單詞進行預測。
這裏注意到,對於模型,輸入的是一個被挖了空的句子, 而由於Transformer的特性, 它是會注意到所有的單詞的,這就導致模型會根據挖空的上下文來進行預測, 這就實現了雙向表示, 說明BERT是一個雙向的語言模型