XLNet 詳解

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 隨機(jī)排列 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],但是掩碼需要修改成下圖荷愕。

XLNet 排列掩碼

圖中的掩碼矩陣衡怀,紅色表示不遮掩,白色表示遮掩安疗。第 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洪囤。

Query stream

可以看到在計(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海洼。

Query Stream mask

Content Stream 計(jì)算

Content Stream 包含了 token 的內(nèi)容信息,因?yàn)?XLNet 的層數(shù)很多富腊,需要將 token 的內(nèi)容傳遞到下一層坏逢。這一層的 Q, K, V 都是利用 h 計(jì)算的。Content Stream 的計(jì)算如下圖所示赘被。

Content stream

可以看到是整,在計(jì)算下一層的 h1 時(shí),也會(huì)利用 token 1 當(dāng)前的內(nèi)容信息民假,這樣就可以將 token 的內(nèi)容傳遞到下一層浮入,但是注意 XLNet 在預(yù)測(cè)時(shí)只是用 g (Query Stream)。計(jì)算 Content Stream 時(shí)候的掩碼矩陣如下圖所示羊异。

Content Stream mask

和 Query Stream 的掩碼矩陣區(qū)別在于對(duì)角線事秀,Content Stream 不遮掩對(duì)角線彤断,使得當(dāng)前 token 的信息可以傳遞到下一層。

Query Stream 和 Content Stream 組合

XLNet 將 Query Stream 和 Content Stream 組合在一起易迹,如下圖所示宰衙。

Query 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相嵌。

XLNet_segment.png

3.2 Relative Segment Encodings

XLNet 希望像 BERT 一樣采用 [A, SEP, B, SEP, CLS] 的形式處理句子任務(wù)腿时,在 BERT 中有兩個(gè)表征向量 EAEB 分別表示句子 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弹惦。

Relative Segment Encodings

其中 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市架谎,隨后出現(xiàn)的幾起案子炸宵,更是在濱河造成了極大的恐慌,老刑警劉巖谷扣,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件土全,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡会涎,警方通過查閱死者的電腦和手機(jī)裹匙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來末秃,“玉大人概页,你說我怎么就攤上這事×纺剑” “怎么了惰匙?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵技掏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我项鬼,道長(zhǎng)哑梳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任绘盟,我火速辦了婚禮鸠真,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘龄毡。我一直安慰自己吠卷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布沦零。 她就那樣靜靜地躺著祭隔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蠢终。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天茴她,我揣著相機(jī)與錄音寻拂,去河邊找鬼。 笑死丈牢,一個(gè)胖子當(dāng)著我的面吹牛祭钉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播己沛,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慌核,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了申尼?” 一聲冷哼從身側(cè)響起垮卓,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎师幕,沒想到半個(gè)月后粟按,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霹粥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年灭将,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片后控。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庙曙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浩淘,到底是詐尸還是另有隱情捌朴,我是刑警寧澤吴攒,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站男旗,受9級(jí)特大地震影響舶斧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜察皇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一茴厉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧什荣,春花似錦矾缓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至桅锄,卻和暖如春琉雳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背友瘤。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工翠肘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辫秧。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓束倍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盟戏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绪妹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355