本篇帶來XL-Net和它的基礎結構Transformer-XL。在講解XL-Net之前需要先了解Transformer-XL,Transformer-XL不屬於預訓練模型范疇,而是Transformer的擴展版,旨在解決Transformer的捕獲長距離依賴信息的上限問題。接下來我們詳細的介紹Transformer-XL和XL-Net。
一,Transformer-XL
論文:TRANSFORMER-XL: LANGUAGE MODELING WITH LONGER-TERM DEPENDENCY
GitHub:https://github.com/kimiyoung/transformer-xl
Transformer模型在輸入時采用的是固定長度序列輸入,且Transformer模型的時間復雜度和序列長度的平方成正比,因此一般序列長度都限制在最大512,因為太大的長度,模型訓練的時間消耗太大。此外Transformer模型又不像RNN這種結構,可以將最后時間輸出的隱層向量作為整個序列的表示,然后作為下一序列的初始化輸入。所以用Transformer訓練語言模型時,不同的序列之間是沒有聯系的,因此這樣的Transformer在長距離依賴的捕獲能力是不夠的,此外在處理長文本的時候,若是將文本分為多個固定長度的片段,對於連續的文本,這無異於將文本的整體性破壞了導致了文本的碎片化,這也是Transformer-XL被提出的原因。
Transformer-XL做了兩個改變,一是引入了循環機制來提升模型的長距離依賴捕獲能力,二是引入上述循環機制之后,之前的絕對位置就不work了,需要新的方法引入位置信息,因此有提出了相對位置的做法。我們來詳細得看看這兩個改變是怎么實現的。
1)SEGMENT-LEVEL RECURRENCE WITH STATE REUSE
Transformer模型在訓練和評估時的圖示化表示如下:
可以看到在訓練階段,序列之間是相互孤立的,在評估階段,在預測下一個詞的時候也只能利用前面的固定為n個詞的序列。這樣在訓練時模型捕獲信息的長度不夠,且在評估時利用的信息也不夠。再來看看Transformer-XL。
Transformer-XL在訓練的時候將上一片段的結果引入到下一片段中,在評估時同樣,因此能捕獲的長距離信息較Transformer有很大的提升。從公式上來看就更加直觀了
在上面式子中$\tau$表示上一片段,$\tau + 1$表示下一片段。將上一片段的輸出緩存起來,然后直接和下一片段的隱層拼接在一起,在這里$SG()$的含義是stop-gradient。另外這個引入了上一片段的隱層表示只會用在key和value上,對於query還是保持原來的樣子。這樣做也好理解,query只是表示查詢的詞,而key,value表示的是表示這個查詢的詞的相關信息,我們要改變的是只是信息,因此只要在key,value中引入上一片段的信息就可以了,剩下的就和Transformer一致。
2)RELATIVE POSITIONAL ENCODINGS
引入了上述機制之后,絕對位置就用不了了,如下面所示:
用絕對位置表示時,對於上一片段和當前片段的位置向量是一致的,這樣看顯然是不合理的,所以作者又引入了相對位置的概念。具體做法如下:
Transformer中的attention權重計算公式如下:
${(E_{x_i} + U_i)}^T W_q^T W_k (E_{x_j} + U_j)$
將其展開可以分解成下面四個部分:
這四個部分可以理解為:
a)基於內容的“尋址”,即沒有添加位置向量,詞對詞的分數。
b)基於內容的位置偏置,相當於當前內容的位置偏差。
c)全局的內容偏置,用於衡量key的重要性。
d)全局的位置偏置,根據key和query調整位置的重要性。
拆分成這四部分之后,我們就可以對其進行改寫,引入相對位置向量。具體做法如下:
a)部分基本不變,只是對於key的位置向量的權重矩陣和詞向量的權重矩陣不再共享;b)部分引入了相對位置向量$R_{i-j}$,是一個不可以學習的預先給定好的正弦編碼矩陣;c)對於query的位置向量采用可以學習的初始化向量來表示,$u^T$表示對key中詞的位置向量,d)同上,$v^T$表示對key中位置的位置向量。
將上面的式子合並后,可以得到:
${(W_q E_{x_i} + u)}^T W_{k, E} E_{x_j} + {(W_q E_{x_i} + v)}^T W_{k, R} R_{i-j}$
上面整個即使Transformer-XL的兩個改變。
二,XL-Net
論文:XLNet: Generalized Autoregressive Pretraining for Language Understanding
GitHub:https://github.com/zihangdai/xlnet
XL-Net的提出是非常具有意義的,展示了自回歸模型也是可以實現雙向的,並且解決了bert中一些已有的缺陷。在XL-Net論文中提出bert主要有兩個缺陷:
1)bert中的mask后的詞相互獨立,因此在預測mask的詞的時候,忽略了mask詞與詞之間的關系,舉個簡單的例子,New York這兩個詞同時被mask,此時你在預測New的時候是無法使用York的信息的,因為它被mask了,但實際上你要准確的預測New,York提供的信息是非常大的。
2)訓練時和預測時存在不一致,訓練模型時會對詞做mask,但是在預測的時候是沒有mask的,或者說在下游任務上也是沒有mask的,這也就導致了在訓練時模型看到的和預測時模型看到的信息是有差異的。
上面兩個問題對於bert這種去噪自編碼模型(對輸入進行破壞,然后通過自編碼模型來重構未破壞的輸入)來說,是無法避免的。因此XL-Net拋棄了這種自編碼模型的思想,重新使用自回歸(語言模型,如ELMO,GPT都是自回歸模型)的模式,但是傳統的自回歸模式是無法使用上下文的信息的,因此在使用自回歸語言模型的同時,如何引入雙向的上下文信息是本文主要的貢獻。作者采用了Permutation Language Modeling 的方法來引入雙向上下文信息。
Objective: Permutation Language Modeling
具體的做法如上圖所示,保持序列的輸入順序不變,但是維護一個Factorization order的隨機排序的位置表,如上面所示,保持x1,x2,x3,x4的原始輸入不表,然后隨機排序給出4個Factorization order,當你在預測x3的時候,通過mask的方式,使得只能看大Factorization order中3的前面的位置詞,也就是第一個序列中3的前面什么都沒有,第二條序列中3的前面有2和4,因此通過mask的方式使得在預測x3時只能看到x2,x4,同樣在第三個序列中可以看到x1,x2,x4。在第四條序列中可以看到x4。現在假定我們采樣的序列足夠多,從期望的角度上來看,這種方式可以保證在預測x3時,x1,x2,x4被看到的次數基本一致。作者也就是通過這種方式引入了雙向信息。
Architecture: Two-Stream Self-Attention for Target-Aware Representations
但是上面的方式在實現上有一些問題,例如給定一個a1,b2,c3,d4的序列,此時采樣兩條序列為:a1,c3,b2,d4和a1,c3,d4,b2。在預測序列1中的b2和預測序列2中的d4時,看到的都是a1和c3,因此預測概率都是一樣的,但是直觀上來說這個概率應該是不一樣的,畢竟目標不一樣,為了解決這樣的問題,作者在預測當前詞的時候引入了當前詞的位置信息,例如在預測b2時除了用到a1和c3還會把它的位置信息一起傳進來,但是你在預測下一個詞的時候,你不僅要用到上一個詞的位置信息,還需要將上一個詞的詞信息也加進來,這句話看上去有點難理解,我們來看看公式,就很明確了:
在這里$g_{z_t}^{(m)}$表示的是引入了之前的時刻的所有信息和當前時刻的位置信息的隱層向量,就如前面的a1,c3和位置2的信息,用來預測b2。但是這個公式中含有一個$h_{z_{<t}}^{(m-1)}$,這是之前所有時刻的隱藏信息,為了保證在$g_{z_{t+1}}^{(m)}$時能使用$h_{z_{<t+1}}^{(m-1)}$,我們要另外去計算這樣一個h,因為這個h是對t時刻及之前所有的信息編碼得到的,也就是說這里的h是包括t時刻的位置和詞的信息,如在上面序列1中,此時你要預測d4,你是需要對a1,c3,b2編碼的,但我們在計算$g_{z_t}^{(m)}$沒用到b2的詞信息。也就是這樣的不一致,作者提出了雙流attention機制,具體的圖示如下:
如上圖最右邊的圖中所示,實現起來就是mask不太一樣,一上面的為例因為序列為3,2,4,1。因此在計算詞1時,g(query stream)只能看到3,2,4;而h(content stream)能看到3,2,4,1。在計算詞2時,g能看到3;h能看到2,3。
另外g的提出主要是為了訓練預訓練模型,因為你在預測當前詞時,是要mask當前詞(這個mask是不可避免的,這是語言模型的特性,利用上文預測當前詞),但是在下游任務的時候,我們是不會mask任何詞的,因此在下游任務時我們只需要使用content stream的值就行了。
總的來說,XL-Net這種方法很優雅的引入雙向上下文信息,但是在實現上計算量很大,因為你要計算很多排序的序列才能使得期望上每個詞出現的次數基本一致,為了降低計算量,作者在這里只對排序后的句子的后半段的詞做預測,因為后半段的詞的前面的詞比較多,這樣看到的詞會多一些,可能很快的達到期望一致。
Incorporating Ideas from Transformer-XL
和上面講到的Transformer-XL基本一致,可以說是直接引入了Transformer-XL的架構。
Modeling Multiple Segments
因為很多的下游任務是兩個片段,甚至多個片段輸入,因此XL-Net也引入了片段對的輸入方式。不過輸入的方式和bert稍有不同,其輸入順序為:[A, SEP, B, SEP, CLS],在這里將CLS放在最后,主要是因為XL-Net是從前往后預測,因此CLS放在最后可以看到所有的詞,所涵蓋的信息就更多充分。另外就是這里的segment編碼也是采用的相對位置編碼,理解起來很簡單,不再贅述。
XL-Net在很多數據集上都取得了當前最佳的性能,如在SQuAD數據集上
在GLUE數據集上:
XL-Net還是非常具有創新價值的,較之前在bert的基礎上做一些調整的模型來說,它的意義是不一樣的。