文獻(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)序列是時(shí),掩碼概率是
事實(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">,掩碼概率變成了
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公式為:
在公式中可以看出mask矩陣的第
項(xiàng)表示 output
能不能看到 input
的信息(能就是0,不能就是
)。
把矩陣行列調(diào)整一下順序更有助于我們理解(行是output,列是input):

也就是論文中的:

從中我們可以總結(jié)出如下幾個(gè)原則:
1. 掩碼 [M] 和未被mask的原碼(這里是)能看到的信息:
- 所有的掩碼 [M] 和所有未被mask的原碼(
)。
(這其實(shí)就是Autoencoder,也就是BERT的訓(xùn)練方式。事實(shí)上左上角是個(gè)矩陣,也就是說mask矩陣
不起任何作用,可以直接拿掉,就變成了Autoencoder)
2. 被mask掉的原碼()能看到的信息:
- 所有的掩碼 [M],所有未被mask的原碼
(左半邊7,8,9行)。
- 它們自身。
- 分解序列中前序序列的原碼。這里分解序列是
,因此
可以看到
但
看不到
,只能看到他們自己。(這體現(xiàn)出了序列分解Autoregressive的思想)
3. 偽掩碼 [P] 能看到的信息:
- 所有的掩碼 [M]和所有未被mask的原碼(左半邊11,12,13行)。
- 它們自身。
- 前序序列的原碼,比如這里
(
的偽掩碼)能看到
。
這樣的設(shè)計(jì)同時(shí)結(jié)合了Autoencoder和 Partially Autoregressive,AE就是矩陣。
而PAR,按照如上的原則,我們看一下偽掩碼 [P] 都能看到什么:
而這正是PAR的設(shè)計(jì):

另外,值得注意的是,偽掩碼實(shí)際上起到的是占位符的作用,因此可以看到原碼時(shí),則對(duì)應(yīng)的 [P] 不能被看到。比如不能看到
,
不能看到
(不能看到
不是因?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">就看不到
。因此,最終呈現(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,因此如果存在這樣一條路徑(兩層attention造成的),
的偽掩碼間接接觸了它的原碼,也會(huì)造成過擬合的問題。
觀察上面的規(guī)則,我們先除去AE部分的和
(因?yàn)橛稍瓌t1,這一部分只能看到這一部分自己,形成了閉環(huán),而閉環(huán)內(nèi)顯然是不存在直接泄露的,通路中一旦鏈到了這個(gè)閉環(huán),也就無法泄露,因此可以去除掉)
我們先看及其偽掩碼
。
只能看到
,而
永遠(yuǎn)只能看到
。另一個(gè)角度,
只能被
以及
看到,而
的閉環(huán)顯然是看不到這些的。
和
也是一樣,
只能看到它自己和
,而
只能看到它們自己,因此永遠(yuǎn)看不到
。事實(shí)上,
只能被它自己看到。
通過上述分析我們可以看出,被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ǔ)的。