BERT 訓(xùn)練時(shí)將部分單詞 mask 起來古毛,使模型能夠利用句子雙向的信息碑幅,在很多 NLU 任務(wù)上取得很好的效果彰触。但是 BERT 忽略了 mask 單詞之間的關(guān)系梯投,且微調(diào)過程與預(yù)訓(xùn)練過程不一致 (微調(diào)時(shí)沒有 mask 的單詞)。XLNet 采用了 PLM (Permutation Language Model) 况毅,將句子隨機(jī)排列分蓖,然后用自回歸的方法訓(xùn)練,從而獲得雙向信息并且可以學(xué)習(xí) token 之間的依賴關(guān)系尔许。另外 XLNet 使用了 Transformer-XL么鹤,使用了更廣闊的上下文信息。
1.前言
XLNet 論文中首先提出了一種比較有意思的觀點(diǎn)味廊,將當(dāng)前預(yù)訓(xùn)練模型分為了兩類 AR (Auto Regression蒸甜,自回歸) 和 AE (Auto Encoder,自編碼器)余佛。
GPT 就是一種 AR 方法柠新,不斷地使用當(dāng)前得到的信息預(yù)測(cè)下一個(gè)輸出 (自回歸)。而 BERT 是一種 AE 方法辉巡,將輸入句子的某些單詞 mask 掉恨憎,然后再通過 BERT 還原數(shù)據(jù),這一過程類似去噪自編碼器 (Denoising AutoEncoder郊楣,DAE)憔恳。不熟悉 GPT 和 BERT 的童鞋可以參考前面的文章,《OpenAI GPT 和 GPT2 模型詳解》和《徹底理解 Google BERT 模型》净蚤。
AR 的方法可以更好地學(xué)習(xí) token 之間的依賴關(guān)系钥组,而 AE 的方法可以更好地利用深層的雙向信息。因此 XLNet 希望將 AR 和 AE 兩種方法的優(yōu)點(diǎn)結(jié)合起來今瀑,XLNet 使用了 Permutation Language Model (PLM) 實(shí)現(xiàn)這一目的程梦。
Permutation 指排列組合的意思腔丧,XLNet 將句子中的 token 隨機(jī)排列,然后采用 AR 的方式預(yù)測(cè)末尾的幾個(gè) token作烟。這樣一來,在預(yù)測(cè) token 的時(shí)候就可以同時(shí)利用該 token 雙向的信息砾医,并且能學(xué)到 token 間的依賴拿撩,如下圖所示。
接下來介紹 XLNet 中的實(shí)現(xiàn)細(xì)節(jié)如蚜,其中 XLNet 為了實(shí)現(xiàn) PLM压恒,提出了 Two-Stream Self-Attention 和 Partial Prediction。另外 XLNet 還使用了 Transformer-XL 中的 Segment Recurrence Mechanism 和 Relative Positional Encoding错邦,不熟悉 Transformer-XL 的童鞋可以參考前面的文章探赫,《Transformer-XL 語(yǔ)言模型》。
2.Permutation Language Model
PLM (Permutation Language Model) 是 XLNet 的核心思想撬呢,首先將句子的 token 隨機(jī)排列伦吠,然后采用 AR 的方式預(yù)測(cè)句子末尾的單詞,這樣 XLNet 即可同時(shí)擁有 AE 和 AR 的優(yōu)勢(shì)魂拦。
2.1 PLM 介紹
XLNet 中通過 Attention Mask 實(shí)現(xiàn) PLM毛仪,而無需真正修改句子 token 的順序。例如原來的句子是 [1,2,3,4]芯勘,如果隨機(jī)生成的序列時(shí) [3,2,4,1]箱靴,則輸入到 XLNet 的句子仍然是 [1,2,3,4],但是掩碼需要修改成下圖荷愕。
圖中的掩碼矩陣衡怀,紅色表示不遮掩,白色表示遮掩安疗。第 1 行表示 token 1 的掩碼抛杨,可以看到,1 是句子的最后一個(gè) token茂契,因此可以看到之前的所有 token (3,2,4)蝶桶。3 是句子的第一個(gè) token,看不到句子的任何信息掉冶,因此第 3 行都是白色的 (表示遮掩)真竖。
2.2 Two-Stream Self-Attention
Two-Stream 概念
XLNet 打亂了句子的順序,這時(shí)在預(yù)測(cè)的時(shí)候 token 的位置信息會(huì)非常重要厌小,同時(shí)在預(yù)測(cè)的時(shí)候也必須將 token 的內(nèi)容信息遮掩起來 (否則輸入包含了要預(yù)測(cè)的內(nèi)容信息恢共,模型就無法學(xué)到知識(shí))。也就是說 XLNet 需要看到 token 的位置信息璧亚,但是又不能看到 token 的內(nèi)容信息讨韭,因此 XLNet 采用了兩個(gè) Stream 實(shí)現(xiàn)這一目的:
- Query Stream有巧,對(duì)于每一個(gè) token,其對(duì)應(yīng)的 Query Stream 只包含了該 token 的位置信息桂肌,注意是 token 在原始句子的位置信息宪肖,不是重新排列的位置信息。
- Content Stream濒生,對(duì)于每一個(gè) token埋泵,其對(duì)應(yīng)的 Content Stream 包含了該 token 的內(nèi)容信息。
Query Stream 計(jì)算
Query Stream 用 g 表示罪治,Content Stream 用 h 表示丽声,使用 Query Stream 對(duì)要預(yù)測(cè)的位置進(jìn)行預(yù)測(cè)的時(shí)候,Q (Query) 向量是用 g 計(jì)算得到的觉义,包含該位置的位置信息雁社,而 K (Key) 和 V (Value) 是用 h 計(jì)算的,包含其他 token 的內(nèi)容信息晒骇。下圖展示了如何通過當(dāng)前層的 g 計(jì)算下一層 g 的過程霉撵,圖中的排列是 [3,2,4,1],計(jì)算的 token 是 1洪囤。
可以看到在計(jì)算 token 1 的 Q 向量時(shí)喊巍,只使用了 token 1 的 Query Stream g,即模型只得到 token 1 的位置信息箍鼓。而向量 K崭参,V 使用 token 3, 2, 4 進(jìn)行計(jì)算,所以模型可以得到 token 3, 2, 4 的內(nèi)容信息款咖。因?yàn)?token 1 是排列 [3,2,4,1] 的最后一位何暮。這一個(gè)過程的掩碼矩陣和上一節(jié)的是一樣的 ,對(duì)角線上都為白色铐殃,即遮掩當(dāng)前預(yù)測(cè)位置的內(nèi)容信息 h海洼。
Content Stream 計(jì)算
Content Stream 包含了 token 的內(nèi)容信息,因?yàn)?XLNet 的層數(shù)很多富腊,需要將 token 的內(nèi)容傳遞到下一層坏逢。這一層的 Q, K, V 都是利用 h 計(jì)算的。Content Stream 的計(jì)算如下圖所示赘被。
可以看到是整,在計(jì)算下一層的 h1 時(shí),也會(huì)利用 token 1 當(dāng)前的內(nèi)容信息民假,這樣就可以將 token 的內(nèi)容傳遞到下一層浮入,但是注意 XLNet 在預(yù)測(cè)時(shí)只是用 g (Query Stream)。計(jì)算 Content Stream 時(shí)候的掩碼矩陣如下圖所示羊异。
和 Query Stream 的掩碼矩陣區(qū)別在于對(duì)角線事秀,Content Stream 不遮掩對(duì)角線彤断,使得當(dāng)前 token 的信息可以傳遞到下一層。
Query Stream 和 Content Stream 組合
XLNet 將 Query Stream 和 Content Stream 組合在一起易迹,如下圖所示宰衙。
圖中最下面的一層是輸入層,其中 e(x) 是單詞的詞向量睹欲,表示輸入的 Content Stream菩浙,而 w 表示輸入的位置信息,即 Query Stream句伶。
2.3 Partial Prediction
XLNet 將句子重新排列,然后根據(jù)排列后的順序使用 AR 方式預(yù)測(cè)陆淀,但是由于句子是隨機(jī)排列的考余,會(huì)導(dǎo)致優(yōu)化比較困難且收斂速度慢。因此 XLNet 采用了 Partial Prediction (部分預(yù)測(cè)) 的方式進(jìn)行訓(xùn)練轧苫,對(duì)于排列后的句子楚堤,只預(yù)測(cè)句子末尾的 1/K 個(gè) token。
例如 K=4含懊,就是只預(yù)測(cè)最后 1/4 的 token身冬。給定句子 [1,2,3,4,5,6,7,8] 和一種隨機(jī)排列 [2,8,3,4,5,1,7,6],則只預(yù)測(cè) 7 和 6岔乔。論文中訓(xùn)練 XLNet-Large 時(shí)使用的 K 為 6酥筝,大約是預(yù)測(cè)末尾 14.3% 的 token。
3.XLNet 優(yōu)化技巧
3.1 Transformer-XL
XLNet 使用了 Transformer-XL 中的 Segment Recurrence Mechanism (段循環(huán)) 和 Relative Positional Encoding (相對(duì)位置編碼) 進(jìn)行優(yōu)化雏门。
Segment Recurrence Mechanism 段循環(huán)的機(jī)制會(huì)將上一段文本輸出的信息保存下來嘿歌,用于當(dāng)前文本的計(jì)算,使模型可以擁有更廣闊的上下文信息茁影。
在引入上一段信息后宙帝,可能會(huì)有兩個(gè) token 擁有相同的位置信息,例如上一段的第一個(gè)單詞和當(dāng)前段的第一個(gè)單詞位置信息都是一樣的募闲。因此 Transformer-XL 采用了 Relative Positional Encoding (相對(duì)位置編碼) 步脓,不使用固定的位置,而是采用單詞之間的相對(duì)位置進(jìn)行編碼浩螺。在之前的文章《Transformer-XL 語(yǔ)言模型》中有比較詳細(xì)的介紹靴患,感興趣的童鞋可以參考一下。
XLNet 使用了 Transformer-XL 后如下圖所示要出。mem 表示的就是前一個(gè) XLNet 段的內(nèi)容信息蚁廓,而 XLNet 中輸入的 Query Stream 為 w,保存位置信息厨幻,采用的是 Relative Positional Encoding相嵌。
3.2 Relative Segment Encodings
XLNet 希望像 BERT 一樣采用 [A, SEP, B, SEP, CLS] 的形式處理句子任務(wù)腿时,在 BERT 中有兩個(gè)表征向量 EA 和 EB 分別表示句子 A 和 B。但是 XLNet 采用 Transformer-XL 的段循環(huán)機(jī)制后會(huì)出現(xiàn)問題饭宾,兩個(gè)段都有句子 A 和 B批糟,則兩個(gè)句子 A 屬于不同的段,但是卻會(huì)有相同的 Segment 向量看铆。
XLNet 提出了 Relative Segment Encodings徽鼎,對(duì)于每一個(gè) attention head 都添加 3 個(gè)可訓(xùn)練的向量 s+, s-, b,然后利用以下公式計(jì)算 attention score弹惦。
其中 q 就是 Query 向量否淤,這個(gè)計(jì)算得到的 attention score 會(huì)加到原來的 attention score 上,再計(jì)算 softmax棠隐。Relative Segment Encodings 加上了一個(gè)偏置向量 b石抡,同時(shí) Relative Segment Encodings 也可以用于一些超過兩段輸入句子的任務(wù)上。
4.總結(jié)
XLNet 的核心思想是 PLM助泽,排列原來的句子啰扛,然后預(yù)測(cè)末尾的單詞。這樣可以學(xué)習(xí)到單詞之間的依賴關(guān)系嗡贺,而且可以利用 token 前后向的信息隐解。
XLNet PLM 的實(shí)現(xiàn)需要用到 Two-Stream Self-Attention,包含兩個(gè) Stream诫睬,Query Stream 用于預(yù)測(cè)煞茫,只包含當(dāng)前位置的位置信息。而 Content Stream 保存了 token 的內(nèi)容摄凡。
XLNet 還使用了 Transformer-XL 的優(yōu)化方式溜嗜。
5.參考文獻(xiàn)
XLNet: Generalized Autoregressive Pretraining for Language Understanding