【NLP】TransformerXL:因为XL,所以更牛
前面介紹過Transformer作為一種特征抽取器的強大之處。那么,它有沒有弱點呢?能不能改進呢?
本文介紹Transformer的改進版,TransformerXL。看看它用了什么方法,改進了Transformer的哪些弱點。
作者&編輯 | 小Dream哥
1 原始Transformer哪里不好?
在上一篇“理解NLP中網紅特征抽取器Transformer”中,筆者介紹了Transformer的強大之處。那么,Transformer就已經強大到無懈可擊了嗎?其實不然,Transformer還有它的弱點。
細想一下,BERT在應用Transformer時,有一個參數sequence length,也就是BERT在訓練和預測時,每次接受的輸入是固定長度的。那么,怎么輸入語料進行訓練時最理想的呢?當然是將一個完整的段落一次性輸入,進行特征提取了。但是現實是殘酷的,這么大的Transformer,內存是消耗不起的。所以現有的做法是,對段落按照segment進行分隔。在訓練時,當輸入segment序列比sequence length短時,就做padding;當輸入segment序列比sequence length長時就做切割。
這種做法顯然是一種權宜之計,它有這么兩個缺點:
1)長句子切割必然會造成語義的殘破,不利于模型的訓練。
2)segment的切割沒有考慮語義,也就是模型在訓練當前segment時拿不到前面時刻segment的信息,造成了語義的分隔。
那么,該如何解決上述問題呢?看看TransformerXL吧。
2 TransformerXL的引入
我們先想一下,如果要我們自己來解決Transformer上面的問題,會怎么處理呢?
熟悉NLP的同學,可能會想到RNN。在RNN中,為了獲取序列中的歷史記憶,采用了Recurrence機制,在計算該時刻的狀態時,引入前一時刻的狀態作為輸入。那對Transformer來說,在計算當前序列的隱藏狀態時,引入前一個序列的隱藏狀態信息不就可以解決上面的問題了嗎?
事情真的有這么簡單嗎?其實,基本上也就是這么簡單,不過TransformerXL在引入時做了一些巧妙的設計。下面我們看看,TransformerXL是如何引入這種Recurrence機制來解決上述問題的。
如圖所示,是傳統的Transformer在訓練和評估階段采用的語料輸入策略。在訓練時,將整個語料庫分割成可管理的大小的更短的片段,在每個片段中訓練模型,忽略來自前一段的所有上下文信息;在評估階段,傳統的Transformer模型在每個步驟都消耗與訓練期間相同長度的一個segment。然后,在下一步中,這個segment向右移動一個位置,并從頭開始處理,只在最后一個位置進行一次預測。
如上圖所示,在TransformerXL采用了不同的策略,在訓練過程中,對上一個segment計算的隱藏狀態序列進行固定和緩存,并在模型處理下一個新的segment時對其進行利用。在評估階段,可以重用前面部分的表示,而不是像傳統模型那樣從頭開始計算,這樣可以提高速度。
3 TransformerXL Recurrence機制
那么,上述的機制細節如何實現的呢?下面我們來做一個詳細的介紹。
事實上,問題的關鍵在于,在計算當前序列當前層的隱藏狀態時,如何引入前一個序列上一層的隱藏狀態。TransformerXL的做法很簡單,就是按照序列長度的維度將他們concate起來。如下的公式所示:
h_n_t是一個L*d的矩陣,表示的是第t個輸入序列的第n層的隱藏層的狀態。L表示序列長度,d表示嵌入維度。
SG表示的Stop Gradient,這非常重要,避免了RNN會出現的一系列問題。
從上述公式可以看出,TransformerXL與傳統的Transformer的差異主要在于隱藏層輸入K和V的差異。TransformerXL中引入了上一個序列前一個隱藏層的值,將他們concatenate起來,計算新的K和V。
4 Relative Positional Encodings
我們再想一想,引入上述機制,還有什么問題沒有。我們回想一下,在傳統的Transformer中,輸入序列中的位置信息是怎么表示的?通過POS函數生成,它是位置i和維度d的函數,也就是不同輸入segment在相同絕對位置中的位置表示是相同的。在傳統的Transformer中,每個segment之間的表示是沒有關聯的,這當然就沒有問題。但是在TransformerXL中,因為引入了前一時刻segment的信息,就需要對不同時刻,同樣是第i個的詞進行區分。
TransformerXL引入了一種Relative Positional Encodings機制,會根據詞之間的相對距離而非像傳統的Transformer中的絕對位置進行編碼。
在傳統的Transformer中,計算q_i和鍵k_j之間的attention分數的方式為
展開就是:
Exi是詞i的embedding,Exj是詞j的embedding,Ui?和Uj?是位置向量。
在Transformer-XL中,對上述的attention計算方式進行了變換,轉為相對位置的計算,而且不僅僅在第一層這么計算,在每一層都是這樣計算。
對比來看,主要有三點變化:
1)在b和d這兩項中,將所有絕對位置向量Ui,Uj都轉為相對位置向量Ri?j,與Transformer一樣,這是一個固定的編碼向量,不需要學習。
2)在c這一項中,將查詢的U_i^T*W_q^T向量轉為一個需要學習的參數向量u,因為在考慮相對位置的時候,不需要查詢絕對位置i,因此對于任意的i,都可以采用同樣的向量。同理,在d這一項中,也將查詢的U_i^T*W_q^T向量轉為另一個需要學習的參數向量v。
3)將K的權重變換矩陣Wk轉為Wk_E?和Wk_R,分別作為content-based key vectors和location-based key vectors。
總的來說,Relative Positional Encodings就是在計算attention分數時,用相對位置R_i_j編碼來代替原來的絕對位置編碼Ui和Uj。并且學習了相對位置v和u用來調整不同距離和不同嵌入的得分。
5 總結
總的來說TransformerXL對Transformer進行了一些調整,試圖解決一些問題。按照論文的描述,TransformerXL學習的依賴關系比RNN長80%,比傳統Transformer長450%,在短序列和長序列上都獲得了更好的性能,并且在評估階段比傳統Transformer快1800+倍。
在XLnet中引入了Transformer-XL,獲得了不錯的效果。
總結
TransformerXL是Transformer一種非常重要的改進,思想值得我們好好學習和研究,希望對你有所幫助。
讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備注"加入有三AI NLP群"。
下期預告:XLnet:BERT和GPT的結合
知識星球推薦
掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理算法工程師。
知識星球主要有以下內容:
(1) 聊天機器人??紤]到聊天機器人是一個非常復雜的NLP應用場景,幾乎涵蓋了所有的NLP任務及應用。所以小Dream哥計劃以聊天機器人作為切入點,通過介紹聊天機器人的原理和實踐,逐步系統的更新到大部分NLP的知識,會包括語義匹配,文本分類,意圖識別,語義匹配命名實體識別、對話管理以及分詞等。
(2) 知識圖譜。知識圖譜對于NLP各項任務效果好壞的重要性,就好比基礎知識對于一個學生成績好壞的重要性。他是NLP最重要的基礎設施,目前各大公司都在著力打造知識圖譜,作為一個NLP工程師,必須要熟悉和了解他。
(3) NLP預訓練模型。基于海量數據,進行超大規模網絡的無監督預訓練。具體的任務再通過少量的樣本進行Fine-Tune。這樣模式是目前NLP領域最火熱的模式,很有可能引領NLP進入一個全新發展高度。你怎么不深入的了解?
轉載文章請后臺聯系
侵權必究
往期精選
【NLP】自然語言處理專欄上線,帶你一步一步走進“人工智能技術皇冠上的明珠”。
【NLP】用于語音識別、分詞的隱馬爾科夫模型HMM
【NLP】用于序列標注問題的條件隨機場(Conditional Random Field, CRF)
【NLP】經典分類模型樸素貝葉斯解讀
【NLP】 NLP專欄欄主自述,說不出口的話就交給AI說吧
【NLP】 深度學習NLP開篇-循環神經網絡(RNN)
【NLP】 NLP中應用最廣泛的特征抽取模型-LSTM
【NLP】 聊聊NLP中的attention機制
【NLP】 理解NLP中網紅特征抽取器Tranformer
【NLP】 深入淺出解析BERT原理及其表征的內容
【每周NLP論文推薦】從預訓練模型掌握NLP的基本發展脈絡
【每周NLP論文推薦】 NLP中命名實體識別從機器學習到深度學習的代表性研究
【技術綜述】深度學習在自然語言處理中的應用發展
總結
以上是生活随笔為你收集整理的【NLP】TransformerXL:因为XL,所以更牛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有三AI发布360页11万字深度学习CV
- 下一篇: 【知识星球】图像降噪模型和数据集内容开启