吐槽贴:用ELECTRA、ALBERT之前,你真的了解它们吗?
文 | 蘇劍林
單位 | 追一科技
編 | 兔子醬
在預(yù)訓(xùn)練語言模型中,ALBERT和ELECTRA算是繼BERT之后的兩個“后起之秀”。它們從不同的角度入手對BERT進(jìn)行了改進(jìn),最終提升了效果(至少在不少公開評測數(shù)據(jù)集上是這樣),因此也贏得了一定的口碑。
在平時(shí)的交流學(xué)習(xí)中,筆者發(fā)現(xiàn)不少朋友對這兩個模型存在一些誤解,以至于在使用過程中浪費(fèi)了不必要的時(shí)間。在此,筆者試圖對這兩個模型的一些關(guān)鍵之處做下總結(jié),供大家參考,希望大家能在使用這兩個模型的時(shí)候少走一些彎路。
(注:本文中的“BERT”一詞既指開始發(fā)布的BERT模型,也指后來的改進(jìn)版RoBERTa,我們可以將BERT理解為沒充分訓(xùn)練的RoBERTa,將RoBERTa理解為更充分訓(xùn)練的BERT。)
ALBERT
ALBERT來自論文《ALBERT: A Lite BERT for Self-supervised Learning of Language Representations》[1]。顧名思義它認(rèn)為自己的特點(diǎn)就是Lite,那么這個Lite的具體含義是什么呢?不少國內(nèi)朋友對ALBERT的印象是又小又快又好,事實(shí)真的如此嗎?
特點(diǎn)
簡單來說,ALBERT其實(shí)就是一個參數(shù)共享的BERT,相當(dāng)于將函數(shù)改成了, 其中f代表模型的每一層,這樣本來有n層參數(shù),現(xiàn)在只有1層了,因此參數(shù)量大大減少,或者說保存下來的模型權(quán)重體積很小,這是Lite的第一個含義;然后,由于參數(shù)總量變少了,模型訓(xùn)練所需的時(shí)間和顯存也會相應(yīng)變小,這是Lite的第二個含義。此外,當(dāng)模型很大時(shí),參數(shù)共享將會是模型的一個很強(qiáng)的正則化手段,所以相比BERT沒那么容易過擬合。這是ALBERT的亮點(diǎn)。
預(yù)測
要注意,我們沒說到預(yù)測速度。很明顯,在預(yù)測階段參數(shù)共享不會帶來加速,因?yàn)槟P头凑褪且徊讲角跋蛴?jì)算,不會關(guān)心當(dāng)前的參數(shù)跟過去的參數(shù)是否一樣,而且就算一樣也加速不了(因?yàn)檩斎胍膊灰粯恿?#xff09;。所以,同一規(guī)格的ALBERT和BERT預(yù)測速度是一樣的,甚至真要較真的話,其實(shí)ALBERT應(yīng)該更慢一些,因?yàn)锳LBERT對Embedding層用了矩陣分解,這一步會帶來額外的計(jì)算量,雖然這個計(jì)算量一般來說我們都感知不到。
訓(xùn)練
對于訓(xùn)練速度,雖然會有所提升,但是并沒有想象中那么明顯。參數(shù)量可以縮小到原來的1/n,并不意味著訓(xùn)練速度也提升為原來的n倍。在筆者之前的實(shí)驗(yàn)里邊,base版本的ALBERT相比BERT-base,訓(xùn)練速度大概只是快10%~20%,顯存的縮小幅度也類似。如果模型更小(tiny/small版),那么這個差距將會進(jìn)一步縮小。換句話說,ALBERT的訓(xùn)練優(yōu)勢只有在大模型才明顯,對于不大的模型,這個優(yōu)勢依然是難以有明顯感知的。
效果
至于效果,其實(shí)ALBERT的原論文已經(jīng)說得很清楚,如下表所示。
參數(shù)共享會限制模型的表達(dá)能力,因此ALBERT的xlarge版才能持平BERT的large版,而要穩(wěn)定超過它則需要xxlarge版,換句話說,只要版本規(guī)格小于xlarge,那么同一規(guī)格的ALBERT效果都是不如BERT的。中文任務(wù)上的評測結(jié)果也是類似的,可以參考CLUE[2]和 追一的評測[3]。而且筆者之前還做過更極端的實(shí)驗(yàn):加載ALBERT的權(quán)重,但是放開參數(shù)共享的約束,把ALBERT當(dāng)BERT用,效果也會有提升!(參考《拋開約束,增強(qiáng)模型:一行代碼提升albert表現(xiàn)》[4]。所以,小規(guī)格ALBERT不如BERT基本是實(shí)錘的了。
結(jié)論
所以,總結(jié)出來的建議就是:
如果不到xlarge版,那么沒必要用ALBERT。
同一速度的ALBERT效果比BERT差。
同一效果的ALBERT速度比BERT慢。
現(xiàn)在BERT也都有tiny/small版了,比如我司開源的[5],基本上一樣快而且效果更好,除非你是真的需要體積小這個特點(diǎn)。
那xlarge版是什么概念?有些讀者還沒嘗試過BERT,因?yàn)闄C(jī)器跑不起來;多數(shù)讀者顯存有限,只跑過base版的BERT,沒跑過或者跑不起large版的。而xlarge是比large更大的,對設(shè)備的要求更高,所以說白了,對于大部分讀者來說都沒必要用ALBERT的。
那為什么會有ALBERT又快又好的說法傳出來呢?除了一些自媒體的不規(guī)范宣傳外,筆者想很大程度上是因?yàn)閎rightmart同學(xué)的推廣了。
不得不說,brightmart同學(xué)為ALBERT在國內(nèi)的普及做出來不可磨滅的貢獻(xiàn),早在ALBERT的英文版模型都還沒放出來的時(shí)候,brightmart就訓(xùn)練并開源了ALBERT中文版albert_zh[6] ,并且還一鼓作氣訓(xùn)練了tiny、small、base、large、xlarge多個版本,當(dāng)時(shí)BERT就只有base和large版本,而ALBERT有tiny和small版本,大家一試發(fā)現(xiàn)確實(shí)比BERT快很多,所以不少人就留下了ALBERT很快的印象。事實(shí)上ALBERT很快跟ALBERT沒什么關(guān)系,重點(diǎn)是tiny/small,對應(yīng)的BERT tiny/small也很快...
當(dāng)然,你可以去思考ALBERT參數(shù)共享起作用的更本質(zhì)的原因,也可以去研究參數(shù)共享之后如何提高預(yù)測速度,這些都是很有價(jià)值的問題,只是不建議你用低于xlarge版本的ALBERT。
ELECTRA
ELECTRA來自論文《ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators》[7]。說實(shí)話,ELECTRA真是一個一言難盡的模型,它剛出來的時(shí)候讓很多人興奮過,后來正式發(fā)布開源后又讓很多人失望過,目前的實(shí)戰(zhàn)表現(xiàn)雖然不能說差,卻也不能說多好。
特點(diǎn)
ELECTRA的出發(fā)點(diǎn)是覺得BERT的MLM模型隨機(jī)選擇一部分Token進(jìn)行Mask的這個操作過于簡單了,想要增加一下它的難度。所以它借鑒了GAN的思想,用普通的方式訓(xùn)練一個MLM模型(生成器),然后根據(jù)MLM模型對輸入句子進(jìn)行采樣替換,將處理后的句子輸入到另外一個模型(判別器)中,判斷句子哪些部分是被替換過的,哪些部分是被沒被替換的。生成器和判別器是同步訓(xùn)練的,因此隨著生成器的訓(xùn)練,判斷難度會慢慢增加,直觀想象有利于模型學(xué)到更有價(jià)值的內(nèi)容。最后只保留判別器的Encoder來用,生成器一般就不要了。
由于這種漸進(jìn)式的模式使得訓(xùn)練過程會更有針對性,所以ELECTRA的主要亮點(diǎn)是訓(xùn)練效率更高了,按照論文的說法能夠用1/4的時(shí)間甚至更少來達(dá)到同樣規(guī)格的BERT的效果,這是ELECTRA的主要亮點(diǎn)。
理論
然而,在筆者看來,ELECTRA是一個在理論上站不住腳的模型。
為什么這樣說呢?ELECTRA的思想源于GAN,但是在CV中,我們有把訓(xùn)練好的GAN模型的判別器拿來Finetune下游任務(wù)的例子嗎?至少筆者沒看到過。事實(shí)上,這是理論上不成立的,拿原始GAN來說,它的判別器最優(yōu)解是 其中p(x),q(x)分別是真假樣本的分布。假設(shè)訓(xùn)練是穩(wěn)定的,并且生成器具有足夠強(qiáng)的擬合能力,那么隨著模型的訓(xùn)練,假樣本會逐漸趨于真樣本,所以q(x)趨于p(x),那么D(x)就趨于常數(shù)1/2。也就是說,理論上最后的判別器只是一個常值函數(shù),你怎么能保證它提取出好的特征來呢?
雖然ELECTRA不完全是GAN,但在這一點(diǎn)上是一致的,所以ELECTRA強(qiáng)調(diào)作為生成器的MLM模型不能太過復(fù)雜(不然像上面說的判別器就退化為常數(shù)了),論文說是在生成器的大小在判別器的1/4到1/2之間效果是最好的。這就開始“玄學(xué)” 起來了,剛才我們只論證了太好不行,沒法論證為什么差一點(diǎn)就行,也沒法論證差多少才行,以及不清楚為什么生成器和判別器同步訓(xùn)練會更好,現(xiàn)在這些都變成了純粹“煉丹”的東西了。
效果
當(dāng)然,我說它理論上站不住腳,并不是說它效果不好,更不是說相關(guān)評測造假了。ELECTRA的效果還算過得去,只不過是讓我們經(jīng)歷了一個“期望越大,失望越大”的過程罷了。
ELECTRA的論文首先出現(xiàn)在ICLR2020的投稿中,當(dāng)時(shí)的結(jié)果讓大家都很震驚,大概就是small版的ELECTRA模型遠(yuǎn)超small版的BERT,甚至直逼base版,而base版的ELECTRA達(dá)到了large版BERT的水平。結(jié)果當(dāng)代碼和權(quán)重放出后[8]上所顯示的成績卻讓人“大跌眼鏡”——基本下降了2個百分點(diǎn)。后來作者出來澄清了,說論文上寫的是dev集而Github上寫的是test集,大家才稍微理解了一點(diǎn),不過這樣的話,ELECTRA相比BERT在效果上就變得沒有什么亮點(diǎn)了。(參考《ELECTRA: 超越BERT, 19年最佳NLP預(yù)訓(xùn)練模型》[9]到《談?wù)勎覍LECTRA源碼放出的看法》[10])
事實(shí)上,ELECTRA在中文任務(wù)上的評測更加準(zhǔn)確地反映了這一點(diǎn),比如哈工大開源的Chinese-ELECTRA[11]中,ELECTRA在各個任務(wù)上與同級別的BERT相差無幾了,有個別任務(wù)有優(yōu)勢,但是并未出現(xiàn)那種“碾壓式”的結(jié)果。
失彼
可能有讀者會想,就算效果差不多,但人家預(yù)訓(xùn)練快了,好歹也是個優(yōu)點(diǎn)嘛,這點(diǎn)確實(shí)不否認(rèn)。但是這兩天Arxiv的一篇新論文表明,ELECTRA的“效果差不多”可能只是在簡單任務(wù)上的假象,如果構(gòu)建復(fù)雜一點(diǎn)的任務(wù),它還是會被BERT“吊打”。
這篇論文的名字是《Commonsense knowledge adversarial dataset that challenges ELECTRA》[12],作者基于SQuAD 2.0數(shù)據(jù)集用同義詞替換的方式構(gòu)建了一個新的數(shù)據(jù)集QADS,然后按照作者的測試,在SQuAD 2.0上能達(dá)到88%的ELECTRA large模型在QADS上只有22%了,而有意思的是BERT都能做到60%多。當(dāng)然這篇論文看起來還很粗糙,還沒得到權(quán)威肯定,所以也不能盡信,但其結(jié)果已經(jīng)能引起我們對ELECTRA的反思了。之前論文《Probing Neural Network Comprehension of Natural Language Arguments》[13]的一個“not”就把BERT拉下了神壇,看來ELECTRA也會有這種問題,而且可能還更嚴(yán)重。
拋開其它證據(jù)不說,其實(shí)筆者覺得,ELECTRA最終拋棄了MLM本身就是一個“顧此失彼”的操作:你說你的出發(fā)點(diǎn)是MLM太簡單,你就想辦法提高M(jìn)LM難度就是了,你把MLM換成判別器干嘛呢?直接用一個生成器網(wǎng)絡(luò)來改進(jìn)MLM模型(而不是將它換成判別器)是有可能,前段時(shí)間微軟的論文《Variance-reduced Language Pretraining via a Mask Proposal Network》[14]就提供了這樣的一種參考方案,它讓生成器來選擇要Mask掉的位置,而不是隨機(jī)選,雖然我沒有重復(fù)它的實(shí)驗(yàn),但它的整個推理過程都讓人覺得很有說服力,不像ELECTRA純拍腦袋的感覺。此外,筆者還想再強(qiáng)調(diào)一下,MLM是很有用的,它不單單是以一個預(yù)訓(xùn)練任務(wù),比如《必須要GPT3嗎?不,BERT的MLM模型也能小樣本學(xué)習(xí)》[15]。
結(jié)論
所以,說了那么多,結(jié)論就是:ELECTRA的預(yù)訓(xùn)練速度是加快了,但從目前的實(shí)驗(yàn)來看,它相比同級別的BERT在下游任務(wù)上的效果并沒有突出優(yōu)勢,可以試用,但是效果變差了也不用太失望。此外,如果你需要用到MLM部分的權(quán)重(比如用來做UniLM的文本生成,參考這里[16],那么也不能用ELECTRA,因?yàn)镋LECTRA的主體是判別器,它不是MLM模型;而ELECTRA中作為生成器的MLM模型,則比判別器簡化,可能存在擬合能力不足、學(xué)習(xí)不充分等問題,并不是一個很好的預(yù)訓(xùn)練MLM模型。
至于ELECTRA背后的思想,即針對MLM隨機(jī)Mask這一步過于簡單進(jìn)行改進(jìn),目前看來方向是沒有錯誤的,但是將生成式模型換成判別式模型的有效性依然還需要進(jìn)一步驗(yàn)證,如果有興趣深入分析的讀者,倒是可以進(jìn)一步思考研究。
文章小結(jié)
本文記錄了筆者對ALBERT和ELECTRA的看法與思考,主要是綜合筆者自己的一些實(shí)驗(yàn)結(jié)果,以及參考了一些參考文獻(xiàn),希望比較客觀地表達(dá)清楚這兩個模型的優(yōu)缺點(diǎn),讓讀者在做模型選擇的時(shí)候心里更有底一些。這兩個模型在特定的場景下都有其可取之處,但也存在一些限制,清楚這些限制及其來源有助于讀者更好地使用這兩個模型。
筆者沒有刻意中傷某個模型的意思,如果有什么理解不當(dāng)之處,歡迎大家留言討論。
后臺回復(fù)關(guān)鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
有頂會審稿人、大廠研究員、知乎大V和妹紙
等你來撩哦~
參考文獻(xiàn)
[1]ALBERT:https://arxiv.org/abs/1909.11942
[2]CLUE: https://github.com/CLUEbenchmark/CLUE
[3]追一評測: https://github.com/ZhuiyiTechnology/pretrained-models
[4]拋開約束,增強(qiáng)模型:一行代碼提升albert表現(xiàn)》: https://spaces.ac.cn/archives/7187
[5]追一開源: https://github.com/ZhuiyiTechnology/pretrained-models
[6]albert_zh: https://github.com/bojone/albert_zh
[7]ELECTRA: https://arxiv.org/abs/2003.10555
[8]electra github: https://github.com/google-research/electra
[9]《ELECTRA: 超越BERT, 19年最佳NLP預(yù)訓(xùn)練模型》: https://zhuanlan.zhihu.com/p/89763176
[10]談?wù)勎覍LECTRA源碼放出的看法》: https://zhuanlan.zhihu.com/p/112813856
[11]Chinese-ELECTRA: https://github.com/ymcui/Chinese-ELECTRA
[12]《Commonsense knowledge adversarial dataset that challenges ELECTRA》: https://arxiv.org/abs/2010.13049
[13]Probing Neural Network Comprehension of Natural Language Arguments》: https://arxiv.org/abs/1907.07355
[14]《Variance-reduced Language Pretraining via a Mask Proposal Network》: https://arxiv.org/abs/2008.05333
[15]必須要GPT3嗎?不,BERT的MLM模型也能小樣本學(xué)習(xí)》: https://spaces.ac.cn/archives/7764
[16]從語言模型到Seq2Seq:Transformer如戲,全靠Mask: https://spaces.ac.cn/archives/693
總結(jié)
以上是生活随笔為你收集整理的吐槽贴:用ELECTRA、ALBERT之前,你真的了解它们吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自训练:超越预训练,展现强大互补特性的上
- 下一篇: 工业解密:百度地图背后的路线时长预估模型