「自然語言處理」一文讀懂XLNET到底是什麼?


<code>XLNet是google和cmu聯合發表的一篇論文,是預訓練模型的一種。 

預訓練模型越來越大,越來越多,這篇博客詳細講述一下xlnet到底是什麼/<code>
「自然語言處理」一文讀懂XLNET到底是什麼?

預訓練家族(https://github.com/thunlp/PLMpapers)

二、XLNET的建模思想

xlnet是19年6月份google和cmu聯合發表的一篇論文,這篇論文的主要貢獻是提出一種新的預訓練方法,在多個公開數據集中取得SOAT。


「自然語言處理」一文讀懂XLNET到底是什麼?


首先我們可以簡單的理解XLnet = ELMO + BERT。這個公式的意思是xlnet綜合了ELMO和BERT的訓練思想。ELMO的優點主要是沒有像bert一樣隨機mask一些單詞,丟失了信息。BERT相比了ELMO考慮了全局信息,因為它是根據所有沒有mask掉的單詞進行預測。


XLNET的思想: 首先我們假設一個句子有四個單詞,標為1、2、3、4。XLNET做的事情是第一步,先求所有的全排列,有4!種。然後訓練的過程中隨機抽出一個全排列比如3 2 4 1。第二步對這個全排列用語言模型的思想(ELMO思路)進行預測,也就是用 3 預測2,用3 2 預測4,用3 2 4 預測1。


但是第二步為什麼這麼做呢?對所有的全排列都這麼做,相當於求解了一個期望,比如同樣一個單詞2。在不同的排列中預測方法不一樣,但是平均起來,相當於考慮了2的上下文。


這種思想用圖解如下:


「自然語言處理」一文讀懂XLNET到底是什麼?


三、XLNET的實現

第二小節講的只是xlnet的設計思想,但是這種思想具體怎麼實現的呢?


一種直觀的實現:

對於全排列的一個採樣比如:3 2 4 1,對於單詞4 可以用transformer 採用固定長度,比如10,然後對3 2 進行編碼,其他位置用mask。預測目標為4


但是這樣有一個問題,就是當序列為3 2 1 4的時候,3 2 預測卻又是1。這就有問題了,問題的本質是沒有模型預測的時候沒有預測單詞的位置信息。如果加入位置信息,不就唯一確定了嗎?


xlnet的實現:

xlnet使用雙流注意力機制來解決這個問題,說白了就是兩個self-attention。一個注意力包含位置信息,文中稱為Query Stream。另一個注意力包含文本的信息稱為context stream。

如圖用w表示詞的位置信息,每個位置都初始化一個這樣的可訓練的變量(相當於position embedding),然後當做輸入輸入到transformer-xl中。用g表示,上標表示層,下標表示第i個單詞。

「自然語言處理」一文讀懂XLNET到底是什麼?

對於每個位置展開:


「自然語言處理」一文讀懂XLNET到底是什麼?


「自然語言處理」一文讀懂XLNET到底是什麼?

對於context stream。使用包含當前詞的上下文,用h表示,比如下面圖中的位置3,它就只包含3的信息。位置4會包含3 2 4的信息。

「自然語言處理」一文讀懂XLNET到底是什麼?


「自然語言處理」一文讀懂XLNET到底是什麼?


「自然語言處理」一文讀懂XLNET到底是什麼?

當看完這些,可以回頭再看看Query stream是怎麼計算的,可以看看圖的連線,每個gi只包含一個位置w(圖中虛線)和小於t時刻的上下文。


上面圖中表示的例子可以用下面公式表示:

「自然語言處理」一文讀懂XLNET到底是什麼?

然後g的最後一層可以用來計算下面的式子,也就是用query stream的最後輸出表示

「自然語言處理」一文讀懂XLNET到底是什麼?

然後套用自迴歸的計算公式(語言模型),公式如下:

「自然語言處理」一文讀懂XLNET到底是什麼?


我從事算法工程師多年,目前主要研究和興趣點在機器學習、深度學習、自然語言處理。我會持續分享自然語言處理工程師必備的相關技術,感興趣的朋友可以關注我,相信一定會有所收穫。

如果有計算機學習、自然語言處理相關的問題或者考研、學習方法等方面的問題,可以在評論區留言,或者私信我,謝謝大家!


分享到:


相關文章: