Albert愚墓,xlnet予权,bert,word2vec
通過預訓練模型實現(xiàn)遷移學習浪册,遷移學習本質(zhì)上是在一個數(shù)據(jù)集上訓練模型扫腺,然后對該模型進行調(diào)整,以在不同的數(shù)據(jù)集上執(zhí)行不同的自然語言處理功能村象。
1. word2vec
線性模型:
很神奇的地方笆环,從而也說明高維空間映射的詞向量可以很好體現(xiàn)真實世界中token之間的關(guān)系。如:king-man = queen-woman
負采樣:
由于訓練詞向量模型的目標不是為了得到一個多么精準的語言模型厚者,而是為了獲得它的副產(chǎn)物——詞向量躁劣。所以要做到的不是在幾萬幾十萬個token中艱難計算softmax獲得最優(yōu)的那個詞(就是預測的對于給定詞的下一詞),而只需能做到在幾個詞中找到對的那個詞就行库菲,這幾個詞包括一個正例(即直接給定的下一詞)账忘,和隨機產(chǎn)生的噪聲詞(采樣抽取的幾個負例),就是說訓練一個sigmoid二分類器熙宇,只要模型能夠從中找出正確的詞就認為完成任務鳖擒。
這種負采樣思想也應用到之后的BERT里,只不過從word-level變成sentence-level奇颠,這樣能獲取句子間關(guān)聯(lián)關(guān)系败去。
缺點是上下文無關(guān)(static):
因而為了讓句子有一個整體含義(context),大家會在下游具體的NLP任務中基與詞向量的序列做encoding操作烈拒。
下面是一個比較表格圆裕,模型不細講了,預測目標這里的next word下一個詞荆几,是所有傳統(tǒng)語言模型都做的事——尋找下一個詞填什么吓妆。
2. BERT
BERT模型進一步增加詞向量模型泛化能力,充分描述字符級吨铸、詞級行拢、句子級甚至句間關(guān)系特征。
真正的雙向encoding:
Masked LM诞吱,類似完形填空舟奠,盡管仍舊看到所有位置信息竭缝,但需要預測的詞已被特殊符號代替,可以放心雙向encoding沼瘫。
Transformer做encoder實現(xiàn)上下文相關(guān)(context):
使用transformer而不是bi-LSTM做encoder抬纸,可以有更深的層數(shù)、具有更好并行性耿戚。并且線性的Transformer比lstm更易免受mask標記影響湿故,只需要通過self-attention減小mask標記權(quán)重即可,而lstm類似黑盒模型膜蛔,很難確定其內(nèi)部對于mask標記的處理方式坛猪。
提升至句子級別:
學習句子/句對關(guān)系表示,句子級負采樣皂股。首先給定的一個句子墅茉,下一句子正例(正確詞),隨機采樣一句負例(隨機采樣詞),句子級上來做二分類(即判斷句子是當前句子的下一句還是噪聲)屑墨,類似word2vec的單詞級負采樣躁锁。
二、BERT細則
這里主要介紹BERT的三個亮點Masked LM卵史、transformer、sentence-level搜立。
1. Masked Language Model
原本叫cloze test以躯,是完形填空的意思。
隨機mask語料中15%的token啄踊,然后將masked token 位置輸出的最終隱層向量送入softmax忧设,來預測masked token。
這樣輸入一個句子颠通,每次只預測句子中大概15%的詞址晕,所以BERT訓練很慢。顿锰。谨垃。(但是google設備NB。硼控。)
而對于蓋住詞的特殊標記刘陶,在下游NLP任務中不存在。因此牢撼,為了和后續(xù)任務保持一致匙隔,作者按一定的比例在需要預測的詞位置上輸入原詞或者輸入某個隨機的詞。如:my dog is hairy
- 有80%的概率用“[mask]”標記來替換——my dog is [MASK]
- 有10%的概率用隨機采樣的一個單詞來替換——my dog is apple
- 有10%的概率不做替換——my dog is hairy
2. Transformer —— attention is all you need
Transformer模型是2018年5月提出的熏版,可以替代傳統(tǒng)RNN和CNN的一種新的架構(gòu)纷责,用來實現(xiàn)機器翻譯捍掺,論文名稱是attention is all you need。無論是RNN還是CNN再膳,在處理NLP任務時都有缺陷乡小。CNN是其先天的卷積操作不很適合序列化的文本,RNN是其沒有并行化饵史,很容易超出內(nèi)存限制(比如50tokens長度的句子就會占據(jù)很大的內(nèi)存)满钟。
下面左圖是transformer模型一個結(jié)構(gòu),分成左邊Nx框框的encoder和右邊Nx框框的decoder胳喷,相較于RNN+attention常見的encoder-decoder之間的attention(上邊的一個橙色框)湃番,還多出encoder和decoder內(nèi)部的self-attention(下邊的兩個橙色框)。每個attention都有multi-head特征吭露。最后吠撮,通過position encoding加入沒考慮過的位置信息。
下面從multi-head attention讲竿,self-attention泥兰, position encoding幾個角度介紹。
multi-head attention:
將一個詞的vector切分成h個維度题禀,求attention相似度時每個h維度計算鞋诗。由于單詞映射在高維空間作為向量形式,每一維空間都可以學到不同的特征迈嘹,相鄰空間所學結(jié)果更相似削彬,相較于全體空間放到一起對應更加合理。比如對于vector-size=512的詞向量秀仲,取h=8融痛,每64個空間做一個attention,學到結(jié)果更細化神僵。
self-attention:
每個詞位的詞都可以無視方向和距離雁刷,有機會直接和句子中的每個詞encoding。比如上面右圖這個句子保礼,每個單詞和同句其他單詞之間都有一條邊作為聯(lián)系沛励,邊的顏色越深表明聯(lián)系越強,而一般意義模糊的詞語所連的邊都比較深氓英。比如:law侯勉,application,missing铝阐,opinion址貌。。。
position encoding:
因為transformer既沒有RNN的recurrence也沒有CNN的convolution练对,但序列順序信息很重要遍蟋,比如你欠我100萬明天要還和我欠你100萬明天要還的含義截然不同。螟凭。虚青。
transformer計算token的位置信息這里使用正弦波↓,類似模擬信號傳播周期性變化螺男。這樣的循環(huán)函數(shù)可以一定程度上增加模型的泛化能力棒厘。
但BERT直接訓練一個position embedding來保留位置信息,每個位置隨機初始化一個向量下隧,加入模型訓練奢人,最后就得到一個包含位置信息的embedding(簡單粗暴。淆院。)何乎,最后這個position embedding和word embedding的結(jié)合方式上,BERT選擇直接相加土辩。
3. sentence-level representation
在很多任務中支救,僅僅靠encoding是不足以完成任務的(這個只是學到了一堆token級的特征),還需要捕捉一些句子級的模式拷淘,來完成SLI各墨、QA、dialogue等需要句子表示辕棚、句間交互與匹配的任務欲主。對此,BERT又引入了另一個極其重要卻又極其輕量級的任務逝嚎,來試圖把這種模式也學習到。
句子級負采樣
句子級別的連續(xù)性預測任務详恼,即預測輸入BERT的兩端文本是否為連續(xù)的文本补君。訓練的時候,輸入模型的第二個片段會以50%的概率從全部文本中隨機選取昧互,剩下50%的概率選取第一個片段的后續(xù)的文本挽铁。 即首先給定的一個句子(相當于word2vec中給定context),它下一個句子即為正例(相當于word2vec中的正確詞)敞掘,隨機采樣一個句子作為負例(相當于word2vec中隨機采樣的詞)叽掘,然后在該sentence-level上來做二分類(即判斷句子是當前句子的下一句還是噪聲)。
句子級表示
BERT是一個句子級別的語言模型玖雁,不像ELMo模型在與下游具體NLP任務拼接時需要每層加上權(quán)重做全局池化更扁,BERT可以直接獲得一整個句子的唯一向量表示。它在每個input前面加一個特殊的記號[CLS],然后讓Transformer對[CLS]進行深度encoding浓镜,由于Transformer是可以無視空間和距離的把全局信息encoding進每個位置的溃列,而[CLS]的最高隱層作為句子/句對的表示直接跟softmax的輸出層連接,因此其作為梯度反向傳播路徑上的“關(guān)卡”膛薛,可以學到整個input的上層特征听隐。
segment embedding
對于句對來說,EA和EB分別代表左句子和右句子哄啄;對于句子來說雅任,只有EA。這個EA和EB也是隨模型訓練出來的咨跌。
如下圖所示沪么,最終輸入結(jié)果會變成下面3個embedding拼接的表示。
什么是 XLNet 虑润?
首先成玫,XLNet 是一個類似 BERT 的模型,而不是完全不同的模型拳喻。但這是一個非常有前途和潛力的哭当。總之冗澈,XLNet是一種通用的自回歸預訓練方法钦勘。
那么什么是自回歸(AR)語言模型?
AR語言模型是一種使用上下文詞來預測下一個詞的模型亚亲。但是在這里彻采,上下文單詞被限制在兩個方向,前向或后向捌归。
AR 語言模型的優(yōu)勢是擅長生成式自然語言處理任務肛响。 因為在生成上下文時,通常是前向的惜索。AR 語言模型很自然地適用于此類 NLP 任務特笋。
但AR語言模型有一些缺點,它只能使用前向上下文或后向上下文巾兆,這意味著它不能同時使用前向和后向上下文猎物。
自回歸語言模型有優(yōu)點有缺點,缺點是只能利用上文或者下文的信息角塑,不能同時利用上文和下文的信息蔫磨,當然,貌似ELMO這種雙向都做圃伶,然后拼接看上去能夠解決這個問題堤如,因為融合模式過于簡單蒲列,所以效果其實并不是太好。它的優(yōu)點煤惩,其實跟下游NLP任務有關(guān)嫉嘀,比如生成類NLP任務,比如文本摘要魄揉,機器翻譯等剪侮,在實際生成內(nèi)容的時候,就是從左向右的洛退,自回歸語言模型天然匹配這個過程瓣俯。而Bert這種DAE模式,在生成類NLP任務中兵怯,就面臨訓練過程和應用過程不一致的問題彩匕,導致生成類的NLP任務到目前為止都做不太好。
XLNet和BERT有什么區(qū)別媒区?
與 AR 語言模型不同驼仪,BERT 被歸類為自動編碼器(AE)語言模型。
AE 語言模型旨在從損壞的輸入重建原始數(shù)據(jù)袜漩。
損壞的輸入意味著我們在預訓練階段用 [MASK]
替換原始詞 into
绪爸。目標是預測 into
得到原始句子。
AE 語言模型的優(yōu)勢是宙攻,它可以從向前和向后的方向看到上下文奠货。
但 AE 語言模型也有其缺點。它在預訓練中使用 [MASK]
座掘,但這種人為的符號在調(diào)優(yōu)時在真實數(shù)據(jù)中并不存在递惋,會導致預訓練-調(diào)優(yōu)的差異。[MASK] 的另一個缺點是它假設預測(掩蔽的)詞 在給定未屏蔽的 詞 的情況下彼此獨立溢陪。例如萍虽,我們有一句話“它表明住房危機已經(jīng)變成銀行危機”。我們掩蔽“銀行業(yè)”和“危機”形真。在這里注意贩挣,我們知道掩蔽的“銀行業(yè)”和“危機”包含彼此的隱含關(guān)系。但 AE 模型試圖預測“銀行業(yè)”給予未掩蔽的 詞没酣,并預測“危機”分別給出未掩蔽的 詞。它忽略了“銀行業(yè)”與“危機”之間的關(guān)系卵迂。換句話說裕便,它假設預測(掩蔽)的標記彼此獨立。但是我們知道模型應該學習預測(掩蔽)詞之間的這種相關(guān)性來預測其中一個詞见咒。
作者想要強調(diào)的是偿衰,XLNet 提出了一種讓 AR 語言模型從雙向上下文中學習的新方法,以避免 MASK 方法在 AE 語言模型中帶來的缺點。
XLNet的出發(fā)點就是:能否融合自回歸LM和DAE LM兩者的優(yōu)點下翎。就是說如果站在自回歸LM的角度缤言,如何引入和雙向語言模型等價的效果;如果站在DAE LM的角度看视事,它本身是融入雙向語言模型的胆萧,如何拋掉表面的那個[Mask]標記,讓預訓練和Fine-tuning保持一致俐东。當然跌穗,XLNet還講到了一個Bert被Mask單詞之間相互獨立的問題,我相信這個不太重要虏辫,原因后面會說蚌吸。當然,我認為這點不重要的事情砌庄,純粹是個人觀點羹唠,出錯難免,看看就完了娄昆,不用較真佩微。
XLNet 是如何工作的?
AR 語言模型只能向前或向后使用上下文稿黄,那么如何讓它從雙向上下文中學習呢喊衫?
語言模型包括兩個階段,即預訓練階段和調(diào)優(yōu)階段杆怕。XLNet 專注于預訓練階段族购。在預訓練階段,它提出了一個名為排列語言建模的新目標陵珍。我們可以從這個名稱知道基本思想寝杖,它使用排列。
這里我們舉一個例子來解釋互纯。序列的次序是 [x1, x2, x3, x4]
瑟幕。這種序列的所有排列如下。
因此對于這 4 個詞的([圖片上傳失敗...(image-c7a4e0-1570519576567)]
)句子留潦,有 24([圖片上傳失敗...(image-d738b7-1570519576567)]
)個排列只盹。
情景是我們想要預測 x3
。因此在 24 個排列中有 4 種模式兔院,分別 x3
位于第 1 位殖卑,第 2 位,第 3 位坊萝,第 4 位孵稽。
[x3许起,xx,xx菩鲜,xx]
[xx园细,x3,xx接校,xx]
[xx猛频,xx,x3馅笙,xx]
[xx伦乔,xx,xx董习,x3]
當然烈和,上面講的仍然是基本思想。難點其實在于具體怎么做才能實現(xiàn)上述思想皿淋。首先招刹,需要強調(diào)一點,盡管上面講的是把句子X的單詞排列組合后窝趣,再隨機抽取例子作為輸入疯暑,但是,實際上你是不能這么做的哑舒,因為Fine-tuning階段你不可能也去排列組合原始輸入妇拯。所以,就必須讓預訓練階段的輸入部分洗鸵,看上去仍然是x1,x2,x3,x4這個輸入順序越锈,但是可以在Transformer部分做些工作,來達成我們希望的目標膘滨。具體而言甘凭,XLNet采取了Attention掩碼的機制,你可以理解為火邓,當前的輸入句子是X丹弱,要預測的單詞Ti是第i個單詞,前面1到i-1個單詞铲咨,在輸入部分觀察躲胳,并沒發(fā)生變化,該是誰還是誰纤勒。但是在Transformer內(nèi)部泛鸟,通過Attention掩碼,從X的輸入單詞里面踊东,也就是Ti的上文和下文單詞中北滥,隨機選擇i-1個,放到Ti的上文位置中闸翅,把其它單詞的輸入通過Attention掩碼隱藏掉再芋,于是就能夠達成我們期望的目標(當然這個所謂放到Ti的上文位置,只是一種形象的說法坚冀,其實在內(nèi)部济赎,就是通過Attention Mask,把其它沒有被選到的單詞Mask掉记某,不讓它們在預測單詞Ti的時候發(fā)生作用司训,如此而已∫耗希看著就類似于把這些被選中的單詞放到了上文Context_before的位置了)壳猜。具體實現(xiàn)的時候,XLNet是用“雙流自注意力模型”實現(xiàn)的滑凉,細節(jié)可以參考論文统扳,但是基本思想就如上所述磅崭,雙流自注意力機制只是實現(xiàn)這個思想的具體方式衔掸,理論上,你可以想出其它具體實現(xiàn)方式來實現(xiàn)這個基本思想疲迂,也能達成讓Ti看到下文單詞的目標若未。
上面說的Attention掩碼朱嘴,我估計你還是沒了解它的意思,我再用例子解釋一下粗合。Attention Mask的機制萍嬉,核心就是說,盡管當前輸入看上去仍然是x1->x2->x3->x4舌劳,但是我們已經(jīng)改成隨機排列組合的另外一個順序x3->x2->x4->x1了帚湘,如果用這個例子用來從左到右訓練LM,意味著當預測x2的時候甚淡,它只能看到上文x3大诸;當預測x4的時候,只能看到上文x3和x2贯卦,以此類推……這樣,比如對于x2來說撵割,就看到了下文x3了贿堰。這種在輸入側(cè)維持表面的X句子單詞順序,但是其實在Transformer內(nèi)部啡彬,看到的已經(jīng)是被重新排列組合后的順序羹与,是通過Attention掩碼來實現(xiàn)的故硅。如上圖所示,輸入看上去仍然是x1,x2,x3,x4纵搁,可以通過不同的掩碼矩陣吃衅,讓當前單詞Xi只能看到被排列組合后的順序x3->x2->x4->x1中自己前面的單詞。這樣就在內(nèi)部改成了被預測單詞同時看到上下文單詞腾誉,但是輸入側(cè)看上去仍然維持原先的單詞順序了徘层。關(guān)鍵要看明白上圖右側(cè)那個掩碼矩陣,我相信很多人剛開始沒看明白利职,因為我剛開始也沒看明白趣效,因為沒有標出掩碼矩陣的單詞坐標,它的坐標是1-2-3-4猪贪,就是表面那個X的單詞順序跷敬,通過掩碼矩陣,就能改成你想要的排列組合哮伟,并讓當前單詞看到它該看到的所謂上文干花,其實是摻雜了上文和下文的內(nèi)容。這是attention mask來實現(xiàn)排列組合的背后的意思楞黄。
ALBERT相比于BERT的改進
ALBERT也是采用和BERT一樣的Transformer的encoder結(jié)果池凄,激活函數(shù)使用的也是GELU,在講解下面的內(nèi)容前鬼廓,我們規(guī)定幾個參數(shù)肿仑,詞的embedding我們設置為E,encoder的層數(shù)我們設置為L碎税,hidden size即encoder的輸出值的維度我們設置為H尤慰,前饋神經(jīng)網(wǎng)絡的節(jié)點數(shù)設置為4H,attention的head個數(shù)設置為H/64雷蹂。
在ALBERT中主要有三個改進方向伟端。
1、對Embedding因式分解(Factorized embedding parameterization)
在BERT中匪煌,詞embedding與encoder輸出的embedding維度是一樣的都是768责蝠。但是ALBERT認為,詞級別的embedding是沒有上下文依賴的表述萎庭,而隱藏層的輸出值不僅包括了詞本生的意思還包括一些上下文信息霜医,理論上來說隱藏層的表述包含的信息應該更多一些,因此應該讓H>>E驳规,所以ALBERT的詞向量的維度是小于encoder輸出值維度的肴敛。
在NLP任務中,通常詞典都會很大,embedding matrix的大小是E×V医男,如果和BERT一樣讓H=E砸狞,那么embedding matrix的參數(shù)量會很大,并且反向傳播的過程中昨登,更新的內(nèi)容也比較稀疏趾代。
結(jié)合上述說的兩個點,ALBERT采用了一種因式分解的方法來降低參數(shù)量丰辣。首先把one-hot向量映射到一個低維度的空間,大小為E禽捆,然后再映射到一個高維度的空間笙什,說白了就是先經(jīng)過一個維度很低的embedding matrix,然后再經(jīng)過一個高維度matrix把維度變到隱藏層的空間內(nèi)胚想,從而把參數(shù)量從O(V×H) O(V×H)O(V×H)降低到了O(V×E+E×H) O(V×E+E×H)O(V×E+E×H)琐凭,當E<<H時參數(shù)量減少的很明顯。
下圖是E選擇不同值的一個實驗結(jié)果浊服,尷尬的是统屈,在不采用參數(shù)共享優(yōu)化方案時E設置為768效果反而好一些牙躺,在采用了參數(shù)共享優(yōu)化方案時E取128效果更好一些愁憔。
2、跨層的參數(shù)共享(Cross-layer parameter sharing)
在ALBERT還提出了一種參數(shù)共享的方法孽拷,Transformer中共享參數(shù)有多種方案吨掌,只共享全連接層,只共享attention層脓恕,ALBERT結(jié)合了上述兩種方案膜宋,全連接層與attention層都進行參數(shù)共享,也就是說共享encoder內(nèi)的所有參數(shù)炼幔,同樣量級下的Transformer采用該方案后實際上效果是有下降的秋茫,但是參數(shù)量減少了很多,訓練速度也提升了很多乃秀。
下圖是BERT與ALBERT的一個對比肛著,以base為例,BERT的參數(shù)是108M环形,而ALBERT僅有12M策泣,但是效果的確相比BERT降低了兩個點。由于其速度快的原因抬吟,我們再以BERT xlarge為參照標準其參數(shù)是1280M萨咕,假設其訓練速度是1,ALBERT的xxlarge版本的訓練速度是其1.2倍火本,并且參數(shù)也才223M危队,評判標準的平均值也達到了最高的88.7
除了上述說了訓練速度快之外聪建,ALBERT每一層的輸出的embedding相比于BERT來說震蕩幅度更小一些。下圖是不同的層的輸出值的L2距離與cosine相似度茫陆,可見參數(shù)共享其實是有穩(wěn)定網(wǎng)絡參數(shù)的作用的金麸。
3、句間連貫(Inter-sentence coherence loss)
BERT的NSP任務實際上是一個二分類簿盅,訓練數(shù)據(jù)的正樣本是通過采樣同一個文檔中的兩個連續(xù)的句子挥下,而負樣本是通過采用兩個不同的文檔的句子。該任務主要是希望能提高下游任務的效果桨醋,例如NLI自然語言推理任務棚瘟。但是后續(xù)的研究發(fā)現(xiàn)該任務效果并不好,主要原因是因為其任務過于簡單喜最。NSP其實包含了兩個子任務偎蘸,主題預測與關(guān)系一致性預測,但是主題預測相比于關(guān)系一致性預測簡單太多了瞬内,并且在MLM任務中其實也有類型的效果迷雪。
這里提一下為啥包含了主題預測,因為正樣本是在同一個文檔中選取的虫蝶,負樣本是在不同的文檔選取的章咧,假如我們有2個文檔,一個是娛樂相關(guān)的秉扑,一個是新中國成立70周年相關(guān)的慧邮,那么負樣本選擇的內(nèi)容就是不同的主題,而正樣都在娛樂文檔中選擇的話預測出來的主題就是娛樂舟陆,在新中國成立70周年的文檔中選擇的話就是后者這個主題了误澳。
在ALBERT中,為了只保留一致性任務去除主題識別的影響秦躯,提出了一個新的任務 sentence-order prediction(SOP)忆谓,SOP的正樣本和NSP的獲取方式是一樣的,負樣本把正樣本的順序反轉(zhuǎn)即可踱承。SOP因為實在同一個文檔中選的倡缠,其只關(guān)注句子的順序并沒有主題方面的影響。并且SOP能解決NSP的任務茎活,但是NSP并不能解決SOP的任務昙沦,該任務的添加給最終的結(jié)果提升了一個點。
4载荔、移除dropout
除了上面提到的三個主要優(yōu)化點盾饮,ALBERT的作者還發(fā)現(xiàn)一個很有意思的點,ALBERT在訓練了100w步之后,模型依舊沒有過擬合丘损,于是乎作者果斷移除了dropout普办,沒想到對下游任務的效果竟然有一定的提升。這也是業(yè)界第一次發(fā)現(xiàn)dropout對大規(guī)模的預訓練模型會造成負面影響徘钥。
參考鏈接:
徹底搞懂BERT
什么是 XLNet衔蹲,為何它會超越 BERT?
XLNet:運行機制及和Bert的異同比較
一文揭開ALBERT的神秘面紗
不懂word2vec呈础,還敢說自己是做NLP舆驶?