結(jié)合Autoencoding和Autogressive同時(shí)預(yù)訓(xùn)練語言模型

文獻(xiàn)鏈接及詳解見 文獻(xiàn)閱讀(1)-UniLMv2

1. 背景

BERT的出現(xiàn)將NLU問題的SOTA向前提升了很大的一步,然而,由于BERT屬于Autoencoding語言模型,需要通過上下文信息來預(yù)測(cè)被mask掉的token,在生成模型中會(huì)面臨訓(xùn)練過程與預(yù)測(cè)過程不一致的問題。因此,BERT并沒有在NLG問題中取得那么好的效果。

UniLMv1用一種elegent的方式將BERT應(yīng)用在NLG任務(wù)中,并且在使用同一個(gè)model的情況下,僅通過mask矩陣控制輸入就進(jìn)行了不同語言模型的訓(xùn)練。對(duì)NLU任務(wù)就是直接使用BERT,而對(duì)seq2seq任務(wù)則是把BERT的"S1 [EOS] S2"當(dāng)成 encoder-decoder結(jié)構(gòu)。UniLMv1可以說結(jié)合了Autoencoding和Autoregressive兩種模型的優(yōu)點(diǎn),在NLU和NLG任務(wù)中都取得了SOTA的結(jié)果。

然而,雖然在形式上UniLMv1通過mask矩陣用BERT模擬了Autoregressive模型,但Autoregressive中的一個(gè)核心精髓并沒有體現(xiàn)出來,也就是一個(gè)詞預(yù)測(cè)的概率和之前預(yù)測(cè)出的概率相關(guān)。

更深入的解釋這句話,BERT中的掩碼[Mask]之間是相互獨(dú)立的。比如“意大利面醬中除了牛肉還需要用到洋蔥和西芹”,如果我們把“洋蔥”和“西芹”mask掉,利用BERT去預(yù)測(cè)這兩個(gè)詞,是分別預(yù)測(cè)“洋蔥”和“西芹”。而事實(shí)上,在預(yù)測(cè)出“洋蔥”之后,“西芹”的概率理應(yīng)受到“洋蔥”的影響,這在生成任務(wù)中是很自然的,但BERT并沒有很好的體現(xiàn)這一點(diǎn)。那么本質(zhì)上仍是BERT的UniLMv1自然也不能體現(xiàn)這個(gè)特點(diǎn)。

從另一方面出發(fā),如果我們使用GPT等傳統(tǒng)的Autoregressive模型,他的分解序列都是單向的(GPT的雙向也只是從左到右和從右到左各來一次LSTM,沒有體現(xiàn)出BERT中“天涯若比鄰”的優(yōu)勢(shì)),不能很好的利用全局信息。因此有了后來的XLNet,把一個(gè)序列的所有tokens做一次全排列,綜合考量所有分解順序,每種分解序列都做一個(gè)Autoregressive,這樣實(shí)際上全局信息還是被捕獲到了。

而UniLMv2,則是在BERT的架構(gòu)下,結(jié)合了XLNet序列分解的想法,在UniLMv1中消除了[Mask]之間的獨(dú)立性,又保留了不同語言模型共享參數(shù)的統(tǒng)一訓(xùn)練模式,從而取得了比UniLMv1更好的效果。

2. 實(shí)現(xiàn)思路

2.1 掩碼塊和分解序列

類似于XLNet,把masked positions做一次全排列。例如,mask掉第二,第四和第五個(gè)tokens,那么全排列有六種。

當(dāng)序列是2 \to 4 \to 5時(shí),掩碼概率是

p(x_2 | x_{\setminus \{ 2,4,5 \}})p(x_4 | x_{\setminus\{4,5\}})p(x_5|x_{\setminus \{5\}})
事實(shí)上,相鄰tokens間往往會(huì)有較強(qiáng)的關(guān)系,為了避免模型過多的只學(xué)到local關(guān)系而忽視global關(guān)系,UniLMv2采取了Partially Autoregressive,將一個(gè)或幾個(gè)相鄰tokens封裝入一個(gè)span,對(duì)于整個(gè)個(gè)序列的所有spans,相當(dāng)于還是Autoregressive,但每個(gè)span中的tokens不相互attention,這樣避免了總是focus在local shortcuts上。

還是剛才的序列,把4, 5封裝在一個(gè)span里,序列變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=2%20%5Cto%204%2C5" alt="2 \to 4,5" mathimg="1">,掩碼概率變成了

p(x_2 | x_{\setminus \{ 2,4,5 \}})p(x_4 | x_{\setminus\{4,5\}})p(x_5|x_{\setminus \{4,5\}})

2.2 偽掩碼預(yù)訓(xùn)練模型

這一部分的描述在原文中比較清晰,可以參考我的文獻(xiàn)閱讀筆記 文獻(xiàn)閱讀(1)-UniLMv2

UniLMv2和UniLMv1一脈相承的點(diǎn)是都用mask矩陣來優(yōu)雅地控制輸入進(jìn)行訓(xùn)練,但UniLMv2中,mask矩陣的設(shè)計(jì)要更加復(fù)雜,我們來看一個(gè)mask矩陣的樣例:



self-attention公式為:

A_l=\text{softmax}( \frac {QK^\intercal}{ \sqrt{d_k}}+M )(H^{l-1}W^V_l )

在公式中可以看出mask矩陣M的第(i, j)項(xiàng)表示 output token_i能不能看到 input token_j的信息(能就是0,不能就是- \infty)。

把矩陣行列調(diào)整一下順序更有助于我們理解(行是output,列是input):



也就是論文中的:



從中我們可以總結(jié)出如下幾個(gè)原則:

1. 掩碼 [M] 和未被mask的原碼(這里是x_1,x_3,x_6)能看到的信息:

  • 所有的掩碼 [M] 和所有未被mask的原碼(x_1,x_3,x_6)。
    (這其實(shí)就是Autoencoder,也就是BERT的訓(xùn)練方式。事實(shí)上左上角是個(gè)0矩陣,也就是說mask矩陣M不起任何作用,可以直接拿掉,就變成了Autoencoder)

2. 被mask掉的原碼(x_2,x_4,x_5)能看到的信息:

  • 所有的掩碼 [M],所有未被mask的原碼x_1,x_3,x_6(左半邊7,8,9行)。
  • 它們自身。
  • 分解序列中前序序列的原碼。這里分解序列是4,5 \to 2,因此x_2可以看到x_2,x_4,x_5x_4,x_5看不到x_2,只能看到他們自己。(這體現(xiàn)出了序列分解Autoregressive的思想)

3. 偽掩碼 [P] 能看到的信息:

  • 所有的掩碼 [M]和所有未被mask的原碼(左半邊11,12,13行)。
  • 它們自身。
  • 前序序列的原碼,比如這里P_2X_2的偽掩碼)能看到X_4,X_5。

這樣的設(shè)計(jì)同時(shí)結(jié)合了Autoencoder和 Partially Autoregressive,AE就是0矩陣。
而PAR,按照如上的原則,我們看一下偽掩碼 [P] 都能看到什么:

  • P_4, P_5: X_1M_2X_3P_4P_5M_4M_5X_6
  • P_2: X_1P_2M_2X_3X_4X_5M_4M_5X_6

而這正是PAR的設(shè)計(jì):


另外,值得注意的是,偽掩碼實(shí)際上起到的是占位符的作用,因此可以看到原碼時(shí),則對(duì)應(yīng)的 [P] 不能被看到。比如X_2不能看到P_2,P_4,P_5,X_4,X_5不能看到P_4,P_5(不能看到P_2不是因?yàn)檎嘉?,而是順序上本身就看不到)。?img class="math-inline" src="https://math.jianshu.com/math?formula=P_2" alt="P_2" mathimg="1">因?yàn)榭吹搅?img class="math-inline" src="https://math.jianshu.com/math?formula=X_4%2CX_5" alt="X_4,X_5" mathimg="1">就看不到P_4,P_5。因此,最終呈現(xiàn)上偽掩碼只能被同一span內(nèi)的偽掩碼看到。

這樣的設(shè)計(jì)原則,除了同時(shí)體現(xiàn)出AE和PAR(也就是本文說的對(duì)兩種LM參數(shù)共享,一次forward就把兩個(gè)LM都訓(xùn)練了,計(jì)算效率高)以外,還有一個(gè)很重要的點(diǎn),就是防止信息泄露

信息泄露分為兩種:
1. 直接泄露:

所有的掩碼,如果直接看到其所對(duì)應(yīng)原碼,quiz的設(shè)計(jì)就失去意義了,訓(xùn)練時(shí)只需要把權(quán)重堆在這個(gè)通路上就行了,一定會(huì)過擬合。

上述原則可以觀察到,無論是 [M] 還是 [P],都無法看到其所對(duì)應(yīng)的原碼,這樣就避免了直接泄露。

2. 間接泄露:

因?yàn)閙odel的結(jié)構(gòu)是多層attention,因此如果存在這樣一條路徑P_4 \to X_6 \to X_4(兩層attention造成的),X_4的偽掩碼間接接觸了它的原碼,也會(huì)造成過擬合的問題。

觀察上面的規(guī)則,我們先除去AE部分的X_1,X_3,X_6M_2,M_4,M_5(因?yàn)橛稍瓌t1,這一部分只能看到這一部分自己,形成了閉環(huán),而閉環(huán)內(nèi)顯然是不存在直接泄露的,通路中一旦鏈到了這個(gè)閉環(huán),也就無法泄露,因此可以去除掉)

我們先看X_4及其偽掩碼P_4P_4只能看到P_4,P_5,而P_4,P_5永遠(yuǎn)只能看到P_4,P_5。另一個(gè)角度,X_4只能被X_2,X_4,X_5以及P_2看到,而P_4,P_5的閉環(huán)顯然是看不到這些的。

X_2P_2也是一樣,P_2只能看到它自己和X_4,X_5,而X_4,X_5只能看到它們自己,因此永遠(yuǎn)看不到X_2。事實(shí)上,X_2只能被它自己看到。

通過上述分析我們可以看出,被mask掉的原碼只能被它們自己,以及后序的原碼和偽掩碼看到。而由原則3,偽掩碼只能看到它們自己和前序的原碼,前序原碼又只能看到更前序的原碼,永遠(yuǎn)看不到后序的原碼和偽掩碼,因此不存在這樣一條通路的存在,也就杜絕了間接泄露。

2.3 預(yù)訓(xùn)練

類似UniLMv1,在同時(shí)訓(xùn)練Autoencoding模型和Partially Autoregressive時(shí)共享參數(shù),使訓(xùn)練出的model能夠結(jié)合兩種語言模型的優(yōu)點(diǎn)。而誤差函數(shù)則是兩種語言模型誤差的和。

3.結(jié)論

在許多NLG和NLU的baseline上取得了SOTA,證明了模型的有效性。對(duì)PMLM進(jìn)行的消融研究表明了兩種語言模型在預(yù)訓(xùn)練時(shí)是互補(bǔ)的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容