雷鋒網(wǎng)AI科技評論編者按:BERT, RoBERTa, DistilBERT, XLNet到底哪家強?在不同的研究領(lǐng)域和應(yīng)用場景如何選擇成了大難題。凡事莫慌,這篇文章幫你理清思路。
BERT以及后續(xù)模型
谷歌基于transformer的BERT系列一經(jīng)問世就在NLP領(lǐng)域掀起了一場風暴,在幾項任務(wù)中的表現(xiàn)可謂勢頭強勁,已經(jīng)超越了先前沿用的最先進的技術(shù)。最近,谷歌對BERT進行了改版,我將對比改版前后主要的相似點和不同點,以便你可以選擇在研究或應(yīng)用中使用哪一種。
BERT是一個雙向transformer,用于對大量未標記的文本數(shù)據(jù)進行預(yù)訓(xùn)練,以學(xué)習一種語言表示形式,這種語言表示形式可用于對特定機器學(xué)習任務(wù)進行微調(diào)。雖然BERT在幾項任務(wù)中的表現(xiàn)都優(yōu)于NLP領(lǐng)域沿用過的最先進的技術(shù),但其性能的提高主要還是歸功于雙向transformer、掩蔽語言模型對任務(wù)的訓(xùn)練以及結(jié)構(gòu)預(yù)測功能,還包括大量的數(shù)據(jù)和谷歌的計算能力。
最近,又提出了幾種方法改進BERT的預(yù)測指標或計算速度,但是始終達不到兩者兼顧。XLNet和RoBERTa改善了性能,而DistilBERT提高了推理速度。下表對它們進行了比較:
圖1:比較BERT和最近的一些改進情況
GPU計算時間是估算的(使用4個TPU Pod進行為時4天的原始訓(xùn)練)
使用大量的小批次數(shù)據(jù),根據(jù)掩蔽程序的差異進行學(xué)習速度和延長時間的訓(xùn)練
數(shù)據(jù)來源是原始論文
XLNet是一種大型雙向transformer,它使用的是改進過的訓(xùn)練方法,這種訓(xùn)練方法擁有更大的數(shù)據(jù)集和更強的計算能力,在20個語言任務(wù)中XLNet比BERT的預(yù)測指標要更好。
為了改進訓(xùn)練方法,XLNet引入了置換語言建模,其中所有標記都是按隨機順序預(yù)測的。這與BERT的掩蔽語言模型形成對比,后者只預(yù)測了掩蔽(15%)標記。這也顛覆了傳統(tǒng)的語言模型,在傳統(tǒng)語言模型中,所有的標記都是按順序而不是按隨機順序預(yù)測的。這有助于模型學(xué)習雙向關(guān)系,從而更好地處理單詞之間的關(guān)系和銜接。此外使用Transformer XL做基礎(chǔ)架構(gòu),即使在不統(tǒng)一排序訓(xùn)練的情況下也能表現(xiàn)出良好的性能。
XLNet使用了超過130 GB的文本數(shù)據(jù)和512 TPU芯片進行訓(xùn)練,運行時間為2.5天,XLNet用于訓(xùn)練的資料庫要比BERT大得多。
RoBERTa,在Facebook上推出的Robustly是BERT的優(yōu)化方案,RoBERTa在BERT的基礎(chǔ)上進行再訓(xùn)練,改進了訓(xùn)練方法,還增加了1000%的數(shù)據(jù),強化了計算能力。
為了優(yōu)化訓(xùn)練程序,RoBERTa從BERT的預(yù)訓(xùn)練程序中刪除了結(jié)構(gòu)預(yù)測(NSP)任務(wù),引入了動態(tài)掩蔽,以便在訓(xùn)練期間使掩蔽的標記發(fā)生變化。在這過程中也證實了大批次的訓(xùn)練規(guī)模在訓(xùn)練過程中的確更有用。
重要的是,RoBERTa使用160 GB的文本進行預(yù)訓(xùn)練,其中包含了16GB的文本語料庫和BERT使用的英文Wikipedia。其他數(shù)據(jù)包括CommonCrawl News數(shù)據(jù)集(6300萬篇文章,76 GB),Web文本語料庫(38GB)和普通爬蟲的故事(31 GB)。再加上1024個 V100的Tesla GPU每天都在運行,這使得RoBERTa具備了進行預(yù)訓(xùn)練的基礎(chǔ)。
因此,RoBERTa在GLUE基準測試結(jié)果上優(yōu)于BERT和XLNet。
另一方面,為了減少BERT或相關(guān)模型的計算(訓(xùn)練,預(yù)測)時間,理應(yīng)選擇使用較小的網(wǎng)絡(luò)以達到相似的性能。其實有許多方法可以做到這一點,包括剪枝,蒸餾和量化,然而,所有這些都會導(dǎo)致預(yù)測指標更低。
DistilBERT學(xué)習了BERT的蒸餾(近似)版本,保留了95%的性能,但只使用了一半的參數(shù)。具體來說,它沒有標記類型和池化層的嵌入,只保留了谷歌BERT中一半的層。DistilBERT使用了一種叫做蒸餾的技術(shù),它與谷歌的BERT(也就是由較小的神經(jīng)網(wǎng)絡(luò)構(gòu)成大型神經(jīng)網(wǎng)絡(luò))相似。這個原理是,一旦要訓(xùn)練一個大型神經(jīng)網(wǎng)絡(luò),就可以使用較小的網(wǎng)絡(luò)來預(yù)估其完整的輸出分布。這在某種意義上類似于后驗近似。在貝葉斯統(tǒng)計中用于后驗近似的關(guān)鍵優(yōu)化函數(shù)之一是Kulback Leiber散度,自然在這里也被用到了。
雷鋒網(wǎng)提示:在貝葉斯統(tǒng)計中,我們接近真實的后驗值(來自數(shù)據(jù)),而對于蒸餾,我們只能做到接近在較大網(wǎng)絡(luò)中學(xué)習到的后驗值。
如何使用
如果你真的需要推理速度快一點,可以接受代價是預(yù)測精度稍微下降那么一些的話,那么DistilBERT會是一個合適的選擇,但是,如果你還在尋找最佳的預(yù)測性能,你最好使用Facebook的RoBERTa。
從理論上講,基于XLNet置換的訓(xùn)練應(yīng)該能處理好依賴關(guān)系,并且可能在長期運行中能表現(xiàn)出更好的性能。
但是,Google的BERT確實提供了良好的基線,如果你沒有上述任何關(guān)鍵需求,就可以使用BERT維持系統(tǒng)的正常運行。
總結(jié)
大多數(shù)性能的改善(包括BERT本身)都是由于增加了數(shù)據(jù)量,計算能力或訓(xùn)練過程。雖然它們確實具有自己的價值,但它們往往傾向于在計算和預(yù)測指標之間進行權(quán)衡。當前真正需要的是在使用更少的數(shù)據(jù)和計算資源的同時還可以使性能得到基本的改進。(雷鋒網(wǎng)(公眾號:雷鋒網(wǎng)))
原文作者:SuleimanKhan
原文鏈接:https://towardsdatascience.com/bert-roberta-distilbert-xlnet-which-one-to-use-3d5ab82ba5f8