論文地址:https://arxiv.org/pdf/1906.08237.pdf
簡介
XLNet是一個類似BERT的模型,但是它采用了通用的自回歸預訓練方法(AR模型),而基於DAE的Bert模型采用的則是降噪自動編碼方法(AE模型),bert和AR模型的區別主要是在以下三方面:
1、獨立假設:bert中一個序列中會被mask掉不超過15%的單詞,但是在預訓練時的目標函數是基於mask值彼此獨立、互不干擾的假設下進行計算的,而AR模型中不需要設置mask值,預訓練時的目標函數也不必設立獨立假設。同時,mask的設置會導致預訓練-微調的數據上的不統一,這也是Bert的一個缺陷。
2、輸入噪聲:Bert在預訓練時對輸入序列進行隨機mask,這是一種輸入噪聲設定,但是在下游任務進行微調時卻並沒有對輸入序列設置輸入噪聲,即隨機mask,這引起了預訓練-微調間的差異。與之相反,AR模型不設置輸入噪聲,因而不會有這種問題。
3、上下文依賴:AR模型只考慮前向信息或者后向信息,而bert要考慮雙向信息,結果就是,bert的目標函數允許模型被訓練為能夠更好地抓取雙向信息。
XLNet(AR模型)總體思路
XLNet提出了一種讓AR語言模型(單向的輸入和預測模式)能夠從雙向上下文中學習的新方法。這也是XLNet的主要貢獻。
XLNet仍然采用兩階段模型訓練過程,第一階段是語言模型預訓練階段,第二階段是任務數據fine-tuning階段。它主要改動了第一階段,即不使用bert那種帶mask符號的Denoising-autoencoder的模式,而是采用自回歸語言模型。就是說,一個輸入序列X依然是從左向右輸入,在預測單詞T時,既知道它的上文信息context_before,也知道它的下文信息contenx_after,但是,這里不采用bert使用mask符號的方式。於是在預訓練階段,這是一個標准的從左向右過程,在微調階段也是如此,因此兩個過程就統一起來,不會造成兩階段的數據不一致問題[3]。而這里具體的實現方法,就是論文提出的排列語言模型。
訓練目標:排列語言模型(Permutation Language Modeling)[3]
PLM的中心思想就是重新排列組合輸入序列X。具體的說,假設輸入序列X = [x1,x2,x3,x4],我們想要預測x3,
1、使用AR模型的常規操作:按照AR模型自左向右的輸入X,我們只能看到x3的上文context_before(即x1,x2),而不能看到x3的下文context_after(即x4)。
2、使用PLM的方法:我們需將待預測單詞x3固定在它本來的位置上(即Position 3),然后將輸入序列X中的元素進行隨機排列組合(此例中共會產生24種組合方式),在這24種組合中,抽取一部分(如:x4,x2,x3,x1)作為模型的輸入X,則待預測單詞x3既能看到上文x1,x2,也能看到下文x4,達到了獲取上下文信息的目的,但是在形式上依然是從左向右在預測后一個單詞。具體如下圖所示:
這里解釋一下右上圖,即Factorization order:2 -> 4 -> 3 -> 1這張圖,可以看出在計算h3(1)時,它只獲取了x2,x4和mem(0)的信息,即獲取了x3的下文信息x4。
注1:由圖中可以看出,它並沒有更改輸入順序,輸入順序仍然為x1,x2,x3,x4,但是Transformer在獲取輸入信息時,它只獲取了x4和x2,這是因為attention將x1 mask掉了,這一過程是在Transformer中實現的,具體描述在下一節中講述。
PLM的優勢如下:
1、保證預訓練-微調兩個階段的一致性,規避了bert模型的劣勢(預訓練-微調數據不一致以及多個mask之間的獨立假設)
2、獲取雙向信息(AR模型只能獲取單向信息)
結構:雙流自注意力(Architecture: Two-Stream Self-Attention for Target-Aware Representations )
雙流主要是指內容流和查詢流,具體介紹如下:
內容流(content stream):指標准的Transformer過程
查詢流(query stream)[3]:只保留位置信息,忽略內容信息。具體的說,對於待預測單詞x3來說,已知其上文信息x1,x2,因為x3是需要被預測的單詞,因此在Transformer的輸入端不能輸入x3的單詞內容,需要將其遮擋掉,bert采用的方法是將x3 mask掉,即使用[MASK]標記符號作為x3的輸入內容,但是這引起了預訓練-微調數據不一致問題,xlnet既想看不到x3單詞的內容,又不想像bert一樣引入新的問題,它采取的方式就是使用query流,直接忽略掉x3的單詞內容,而只使用x3的位置信息,使用參數w來代表位置的embedding編碼。具體的實現過程如下所述:
輸入序列依然是x1,x2,x3,x4,但是在Transformer內部,則是針對內容流和查詢流分別有遮掩矩陣。就本文例子來說,需要遮掩的是x3,則在下圖c中,由於使用的新的排列組合是x3,x2,x4,x1,因此,Query steam對應的遮掩矩陣中第三行中是空,因為沒有其他的單詞需要被輸入。
同理,對於Content stream來說,由於Transformer的輸入順序是x3,x2,x4,x1,因此對於第一行x1來說,它可以將所有的單詞都讀入,因此矩陣第一行中所有圓點都被標為紅色(表示x1,x2,x3,x4的信息都獲取);對於第二行x2來說,它只能獲取x3的信息以及自己的信息,因此第二個和第三個圓點標為紅色(表示x2,x3的信息都獲取);對於第三行x3來說,因為它只能讀取自己的信息,因此只有第三個圓點標為紅色(表示x3的信息被獲取);對於第四行x4來說,由於它能獲取x2、x3以及自己的的信息,因此其第二、三、四個圓點被標為紅色(表示x2,x3,x4的信息都獲取)。
由於Content Stream 和 Query Stream的區別僅在於自己的信息是否能獲取,而Query Stream不能獲取自己的信息,因此Query Stream的遮掩矩陣中對角線的圓點都為白色,表示不能獲取自己的內容信息。
如上圖所示,圖a表示內容流(content stream),圖b表示查詢流(query stream),圖c是使用了雙流自注意力機制的排列語言模型。
Transformer-XL(Incorporating Ideas from Transformer-XL)
針對Transformer不能很好地處理長文本的問題,論文在預訓練架構中使用了Transformer-XL,相比Transformer而言,主要有兩點改進:片段循環機制(segment recurrence mechanism)和相對位置編碼(relative positional encoding)。具體內容可以查看網址:https://www.cnblogs.com/mj-selina/p/12373636.html
Transformer 和 Transformer-XL的區別主要如下圖所示:
如上圖[4]所示,在計算第l層的表征時,使用的第l-1層的表征同時來源於片段st和st-1(也可以設置成來源於前n個片段),所以每增加一層,模型建模的依賴關系長度就能增加2(不知道理解的是否正確,待修改)。在上圖中,Transformer-XL建模的最長依賴關系為3*2=6.
總結
論文中的實驗顯示,XLNet在長文本的閱讀理解類的任務上提升較為明顯,因而在機器翻譯、文本摘要類的任務中應該具有較好的效果。
參考資料:
[1] https://www.jianshu.com/p/dfc5a77a4f3f
[2] https://blog.csdn.net/u012526436/article/details/93196139
[3] https://zhuanlan.zhihu.com/p/70257427
[4] https://blog.csdn.net/weixin_37947156/article/details/93035607