今天學習的是谷歌大腦的同學和 CMU 的同學的論文《XLNet: Generalized Autoregressive Pretraining for Language Understanding》,于 2019 年發表于 NIPS,目前引用超 300 次。
XLNet 是一個廣義自回歸預語言模型,它在 Transformer-XL 的基礎上引入了排列語言模型(Permutation Language Model,以下簡寫 PLM),該方法可以很好解決自回歸預編無法處理上下文模組化的問題,最後用三倍于 BERT 的語料庫進行預訓練,并在 20 個 NLP 任務中屠榜。
1.Introduction
XLNet 采用了二階訓練的方式,先在大規模語料庫中進行無監督的預訓練,然後針對下遊任務進行微調。
XLNet 也是一個類似于 BERT 的模型,但是其和 BERT 的最大差距在于:XLNet 采用的是自回歸(autoregressive)的預訓練方法,而 BERT 采用的是自編碼(autoencoding)的預訓練方法。
我們先來介紹下自回歸和自編碼:
自回歸語言模型(Autoregressive Language Model)是利用上文預測下文或下文預測上文,要麼向前,要麼向後,不能同時聯系上下文資訊進行模組化,比較經典的模型代表有:ELMo、GPT、GPT2等。ELMo 雖然是聯系了兩個方向進行計算,但因為其是獨立計算,是以 ELMo 還是自回歸語言模型。
AR 語言模型的缺點在于隻能利用單向資訊進行模組化,而不能同時利用上下文;其優點在于因為使用了單向的語言模型,是以其在文本生成之類(向前的方向)的 NLP 任務中便能取得不錯的效果。

自編碼語言模型(Autoencoding Language Model)是利用上下文來模組化,比較經典的模型有 BERT,其做法為用 [MASK] 代替一部分的資料,然後利用上下文來預測被 [MASK] 的資料。
AE 語言模型的優點在于利用了上下文模組化;其缺點在于預訓練中的 [MASK] token 不存在于下遊的微調任務中,進而導緻了預訓練與微調之間的差異。此外,[MASK] 的另一個缺點在于,對于給定了 [MASK] token,模型假定其彼此互相獨立,這時就會出現一個問題,比如說 “2008 年全球金融危機”,假如我們 MASK 了金融和危機,AE 模型在預測時會假設兩個 [MASK] 之間互相獨立,但我們知道,這兩個 [MASK] token 之間是有相關性的。
而本文介紹的 XLNet 是一種新的 AR 語言模型,其既能學習上下文資訊,又能避免了 AE 語言模型的缺點。
2.XLNet
2.1 AE & AR Language Model
我們先給出 AE 和 AR 模型的數學表達式,首先 AE 模型是利用上文預測下文,通過最大似然來進行預訓練:
而 AR 模型是重構 [MASK] 的 token:
其中, 表示被 mask 的 token, 表示 mask 後的序列, 表示 被 mask 了。用約等于是因為 BERT 是基于獨立性假設的,masked token 是分别重建的。
2.2 Permutation Language Model
作者提出了全排列語言模組化(Permutation Language Model),不僅保留了 AR 模型的優點,而且允許模型捕獲雙向上下文。
從名字中我們也可以看出,其利用全排列的思想:對于長度為 T 的序列,共有 個不同排序方式。
我們以長度為 4 的序列為例,那麼就有 24 種可能,假設我們要預測 , 的位置可以放在四個位置上,下圖是其中幾個排列:
很直覺地可以看到,即使是使用單向模型也可以獲得 的上下文資訊。我們可以用公式表示目标函數:
其中, 是長度為 T 的序列的所有可能排列的集合。
當然我們不會真的去調整他們的順序,而是分為原本序列順序和分解順序(Factorization Order)。我們隻影響分解順序,而不影響序列的順序:
這樣做的原因是因為在下遊的微調階段,模型訓練的資料是有序的,是以我們還是需要保持原序列的順序使得其可以和原本的位置編碼一一對應。
但是具體該怎麼實作呢?在保證原序列不變的情況下,還能有全排列的效果。
2.3 Two-Stream Self-Attention
為了實作上面全排列的目标,作者設計一個雙流自注意力機制(Two-Stream Self-Attention),這裡的雙流是指内容流(Content Stream)和查詢流(Query Stream):
假設現在我們有一個分解順序 。
左上角是計算内容表示(Content Representation),如果我們想預測 的内容表示,我們會利用所有的 token 的内容表示(因為 在最後面),而如果要預測 的話,就隻能看到 ,計算過程是和标準 Attention 一緻的,但是我們通過 mask 的方式定義了一個新的順序;
左下角是計算查詢表示(Query Representation),如果我們要預測 的查詢表示,就不能看到 的内容表示。XLNet 的特殊之處在于引入了 Query 流,Query 流的作用類似于 BERT 的 mask,起到屏蔽的作用,但是又沒有像 BERT 一樣引入了 [MASK] 這個 token 記号。
右邊是整個計算過程,從下到上首先将内容表示 h 和查詢表示 g 初始化并進行 mask 分别得到内容編碼 e(x) 和查詢編碼 w。然後将這兩個流的通過 Attention 後進行輸出。
這裡要注意内容掩碼和查詢掩碼都是矩陣,内容掩碼和查詢掩碼的第 i 行代表 能看到的其他的 token。内容掩碼和查詢掩碼之間的唯一差別是查詢掩碼中的對角元素為 0,即 token 看不到自己。圖中,紅色标記是起作用的,白色部分是不起作用的。
總的來說,輸入句子隻有一個順序,但是我們可以利用不同的 Attention Mask 來實作不同的分解順序。
2.4 Incorporating Ideas from Transformer-XL
由于 XLNet 适合 AR 語言模型,是以作者将最新的 Transformer-XL 整合到預訓練架構中。
Transformer-XL 有兩個關鍵部分:相對位置編碼方案和分段遞歸機制。相對位置編碼很友善融合,而對于分段遞歸機制來說,就是要重用先前的隐藏狀态。這個也很好解決,我們可以回頭看下這張圖,其中的 mem 就是分段遞歸機制中的 Memory,存放着先前片段的隐藏層狀态。
2.5 Discussion
這裡我們讨論下 BERT 的獨立性假設帶來的問題(mask 間互相獨立),為了更好的了解其差異,我們以 [New, York, is, a, city] 為例。假設兩個模型都 mask 了 New 和 York,BERT 和 XLNet 的目标函數如下:
可以看到,XLNet 可以捕捉到(New,York)之間的依賴關系,而 BERT 捕捉不到。盡管 BERT 學習了一些依賴對,例如(New,city)和(York,city),但很明顯,XLNet 可以學到更多的依賴對。
3.Experiments
簡單看一下的實驗。
與 BERT 的單挑:
單挑其他模型:
4.Conclusion
總結:XLNet 是一種通用的 AR 語言模型架構的預訓練方法,它使用 Permutation Language Model 模組化結合了 AR 和 AE 方法的優點,并采用 Two-Stream Self-Attention 避開了 BERT 的 [MASK] 所帶來的影響。此外,XLNet 還內建了 Transformer-XL 的優點,這使得 XLNet 在諸多 NLP 任務中都獲得了不錯的效果。
5.Reference
- 《XLNet: Generalized Autoregressive Pretraining for Language Understanding》
- 《What is XLNet and why it outperforms BERT》
- 《What is Two-Stream Self-Attention in XLNet》
The End