其它機器學習、深度學習演算法的全面系統講解可以閱讀《機器學習與應用》,清華大學出版社,雷明著,由SIGAI公眾號作者傾力打造,自2019年1月出版以來已重印3次。

  • 書的購買鏈接
  • 書的勘誤,優化,源代碼資源

PDF全文鏈接:從語言模型看Bert的善變與GPT的堅守

本文SIGAI特邀作者

穆文MuWen

NLP從業者

目前興趣點:問答系統、序列標註、文本生成

個人微信公眾號:數據挖掘機養成記

從語言模型看Bert的善變與GPT的堅守

  • 從語言模型看Bert的善變與GPT的堅守
    • 1. 引子
    • 2. Bert的善變與GPT的堅守
    • 3. 延伸
    • 參考資料

本文簡單探究Bert為何要做 masked LM,並由此引出 GPT、Elmo、MASS、Word2vec 的相關問題

本文不探討其他細節

1. 引子

Bert面世至今已半年有餘,依然風光無限熱度不減,大有橫掃八荒之勢。 其首推的 『雙向語言模型』 和 masked LM 的訓練方式,一時間也成為 pre-train 的標配。

細心的同學在閱讀論文時,一定會發現論文里提到:深度雙向語言模型出現自己預測自己——即 『see themselves』 的問題,所以要 masked LM。 論文作者 Jacob 在 reddit 的帖子里也再次討論這個問題,原文截取如下

It』s unfortunately impossible to train a deep bidirectional model like a normal LM, because that would create cycles where words can indirectly 「see themselves,」 and the predictions become trivial.

這其實是個很小的點,也很容易理解,去年跟同事們已經簡單探討過。 今年組內有同事做分享,提到微軟最新的 MASS 的訓練方式借鑒了 masked LM,這讓我又回想起這個問題,於是做個記錄,炒個冷飯,對於沒有深究過的同學,可以當做一個簡單入門,對於行家,則歡迎更進一步的討論。

所以,像Bert這樣的雙向語言模型為何要做 masked LM? GPT 為何一直堅持單向語言模型? Elmo 也號稱雙向,為何不需要 mask? Word2vec 的 CBOW 為何也不用 mask?

相信每一位 nlp 愛好者在看過bert、gpt的論文後,都會產生這些來自靈魂深處的追問。 本文將嘗試用淺顯易懂的語言和直觀的示意圖,來解釋這些問題。

2. Bert的善變與GPT的堅守

先解釋 『see themselves』 的問題,其實很好理解: 雙向語言模型在預測當前詞的時候,會用到其上下文信息(類似 word2vec 里的 CBOW 模式),而 transformer 自帶了全局的 self-attention,會將上下文的詞編碼到當前模型里,所以在預測其他詞的時候,該詞的信息已經包含在了前一層的網路參數里,導致間接地『自己預測自己』 ,也就是Jacob 所說的 『 indirectly see themselves』。

公式解釋起來麻煩,我在原論文的圖上簡單標識一下,看起來更直觀

不嚴謹地解釋下:(左圖)在預測 T1 的時候,transformer 模塊(紅框所示)已經將 T2 的信息編碼進去了,所以(右圖)在預測 T2 的時候,transformer 模塊里,已經包含了 T2 的信息,也就是 Jacob 說的 『see themselves』。

之所以說不嚴謹,是因為圖裡的 E1、E2 並不是跟 T1、T2 嚴格對應的 embedding,比如預測 T1 的時候,E1 肯定不是 T1 本身,而是 SOS 標識符之類。 不過這並不影響我們直觀理解這個問題,所以無妨。

那遇到這個問題怎麼辦?

Bert 選擇了變通——既然未來要預測的詞,會被編碼進模型,那我就『假裝』不知道未來的詞是什麼。 怎麼假裝呢? 隨機mask掉15%左右的詞,美名其曰 『完形填空』 ,這樣還不夠,還要再輔以句子預測的任務,加強模型的能力。 這樣訓練出來的模型,在閱讀理解、句子分類等任務上,有天然優勢,但這樣的大改,從語言模型角度看,顯然有點『變味』了,比如語言模型最常見的,根據上文生成下文的能力,原始的 Bert 是不具備的。

於是,同樣是基於 transformer 的 GPT系列,堅定不移地選擇了一條具有自己特色的發展道路——堅持用 transformer 做單向語言模型,而不是像 Bert 採取自欺欺人的 mask 策略。 所以 GPT 的思路就是: 既然 transformer 會做全局的 self-attention,那我每次就讓這個『全局』,限制在『過去』——也就是一個詞的上文。 圖示如下,同樣是在原論文的圖上簡單標識:

依然不嚴謹地解釋下:(左圖)GPT 在預測 T1 時,用不到下文——也就是 T2 向後的信息的,所以 T2 的信息就不會被編碼進第一個 transformer 模塊(紅框所示),所以(右圖)在預測 T2 時,不用擔心上一層相應模塊開啟上帝視角。

更重要的,GPT 這麼做,保留了純正的『語言模型』血統,能完成生成式的任務——用上文生成下文,比如隨便輸入幾句話,就可以開始一本正經地胡說八道(誤)。 而這,正是 GPT 的首字母大G的含義——Generative

3. 延伸

在解釋完 GPT 和 Bert 的不同選擇後,相應的追問也自然產生: 為何 Elmo 、 CBOW 這樣的雙向語言模型不用mask?

眾所周知,在 Elmo 出來之前, bi-rnn、bi-lstm 這些雙向模型已被廣泛用在分類、序列標註等任務上,用來提取一個詞的上下文特徵,所以將這種結構用在語言模型上也是自然而然,只不過 label 從分類標籤、序列標籤等,變成了詞本身。

但如 Jacob 所說, Elmo 嚴格意義上確實不太算他所認為的雙向語言模型,因為 bi-rnn、bi-lstm 的『雙向』,並不是像 bert 一樣,將上下文用同一套模型參數進行編碼,而是用兩個分開的單向rnn去處理,只不過共享了輸入,以及輸出時進行拼接。

所以像 Elmo 這麼設計的話,就不會出現 Bert 的『上帝視角』問題,因為用的兩套模型參數,互不干涉,不會出現下一個詞被提前編碼到當前詞所對應的模型的情形。 簡單的圖示如下:

依然不嚴謹地解釋: (上圖)在預測 T1 的時候,T2 會被編碼到反向語言模型的 lstm 模塊里(紅框所示),但並不會影響正向的語言模型,(下圖)在預測 T2 時,在反向語言模型看來, T1 是 T2 的下文,所以對應的 lstm 模塊並不會作用到 T2 上。

再說說 word2vec 的 CBOW,我在之前的科普小文章『秒懂詞向量Word2vec的本質』里有剖析過。 在 CBOW 看來 Bert 的預測模式完全借鑒的它的——用一個詞周圍的詞,去預測其本身。 所以從這個意義上講, CBOW 也應該算是個『雙向』語言模型吧。 但為何 CBOW 不用 mask 呢? 想必看到這裡大家應該都明白了, mask 的提出是為了應對 transformer 的全局 self-attention, 而非『雙向』,而 CBOW 這種上古模型,只是簡單的單層神經網路,根本不可能出現『see themselves』 的問題。

最後說說微軟最新的 MASS,我在第一節有提到,它改進了Bert、GPT 這些模型,用到 seq2seq 的訓練框架做 pre-train,而不只是普通的 LM。 這樣訓練出來的模型,對於機器翻譯、閑聊等 seq2seq 任務具有天然優勢,就跟 Bert 做完形填空閱讀理解有優勢一個道理。

具體訓練時,MASS 借鑒了 masked LM 的訓練方式,把一句話里的部分詞在 encoder 里 mask 掉,只不過需要在 decoder 里預測出來。 如下所示

仔細想想, MASS 其實可以稱作是『masked GPT』 : 這裡的 decoder 可以看成一個 GPT,是一個單向語言模型,但預測的時候,不是完整地預測整個序列,而是只預測局部序列,這個局部序列的上下文信息,則用 Bert 作為 encoder 去額外提供。而因為 encoder 和 decoder 的輸入序列的 mask token 是互補的,所以 decoder 里的詞不在 encoder里,也就不存在 encoder 給 decoder 開『上帝視角』的情形。 從這個意義上講, MASS 彌補了 Bert 無法做生成式任務的能力,同時也彌補了 GPT 無法利用到下文信息的缺憾。

參考資料

Bert、GPT、Elmo、MASS 的原始論文

推薦閱讀:

相关文章