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