ALBERT vs DistilBERT -輕量級BERT大PK

Vincent Li
8 min readApr 23, 2020

--

Introduction

Figure 1. 近兩年模型之參數量(圖來自DistilBERT原論文)

隨著pre-trained language model在NLP應用上取得成功,愈來愈多的模型朝著更多參數以取得更好的結果發展(Figure 1),模型的增肥雖表現較佳,但也有缺點,如消耗運算資源、預測耗時等,為了改善這些缺點出現ALBERT[1]、DistilBERT[2]、Poor Man's BERT[3]等輕量級模型,這三種減重方式:

  1. ALBERT:(a) 分解embedding參數 (b) 共享transformer encoder參數(延伸連結
  2. DistilBERT:從BERT[4]進行knowledge distillation[5](延伸連結
  3. Poor Man's BERT:針對現有pre-trained model進行layer-dropping(Figure 2)
Figure 2. 不同方式的layer-dropping(圖來自Poor Man's BERT原論文)

此篇將針對ALBERT與DistilBERT在新聞分類上訓練的結果進行分析, 也分享一些心得

Experiments

這邊將透過新聞標題與文章內容進行模型訓練,input的形式為([CLS] [新聞標題] [SEP] [新聞內容] [SEP]),之後將token [CLS]丟入Classifier進行分類預測

Figure 3. 各新聞類別資料數

Dataset

從自由時報爬了5546篇新聞,分成8類[politic, society, sport, entertainment, local, life, world, novelty],每一類別新聞篇數如Figure 3,再將這些資料依train(0.9)-dev(0.05)-test(0.05)分成三筆資料各4991, 277, 278

Model

模型以ALBERTModel及DistilBERTModel為底層,上面再加上一層Classifier layer(Figure 4(a)),由於每篇新聞都有照片,我也試著加上ResNet18[6]抽取照片的資訊看能否提高預測(Figure 4(b))

Figure 4. (a)有 (b)無 使用ResNet18萃取照片資訊的模型

Results

Fine-tuning learning rate方面我參考BERT,使用4組learning rate[5e-5, 4e-5, 3e-5, 2e-5]對整個model進行fine-tune,8筆一個batch跑5個epoch,結果在dev set F1 score表現最好分別是ALBERT 82.12@lr=3e-5、DistilBERT 83.86@lr=2e-5,這時我又將model兩個部份用不同learning rate來訓練,底層使用先前最佳learning rate,Classifier再從[5e-3, 3e-3, 1e-3]尋找,這讓model的dev F1又上升了一點,ALBERT 82.91及DistilBERT 84.55,主要原因是Classifier的參數是隨機產生的,需要較大的learning rate讓它學快點,而pre-trained的model則擁有很好的參數,我只須稍微調整,所以learning rate較小。最後我拿表現最好的DistilBERT針對test set做預測,F1 score是83.61

Figure 5. (a) Confusion matrix of ALBERT@lr=(3e-5, 3e-3) (b) Confusion matrix of DistilBERT@lr=(2e-5, 5e-3)

Figure 5為兩個model在新聞類別上的confusion matrix,從圖可知大部分的文章類別都能正確分類,除了life及local這兩個類別時常互相搞混,所以我試著加入新聞封面cover照片提供額外資訊,再不fine-tune ResNet18的參數下我只更新classifier的參數,但兩個model加上照片資訊後結果比原本只有文章更差,主要是新聞每個類別裡的照片,與ImageNet類別裡的data差太大,Figure 6(a)顯示每個類別的照片萃取出來的feature都平均分佈,所以也無法提供有效的訊息

Figure 6. Development Set經過模型萃取feature後經由TSNE降維 (a) 照片經由ResNet18翠取的feature (b)新聞內容經由fine-tune ALBERTModel萃取的feature (c)新聞內容經由fine-tune DistilBERTModel萃取的feature

Figure 6(b)與6(c)各別是ALBERTModel與DistilBERTModel萃取文章的feature,可以看到各類別文章都能明顯分開除了life跟local這兩類互相重疊,最後回去看一下dataset發現原來life跟local的文章時常互相重疊,導致模型傻傻分不清楚

Conclusion and future work

比較ALBERT與DistilBERT在新聞分類上的表現最後由DistilBERT以F1 score 1.64勝出,但這邊我要強調一下ALBERT我是使用base的模型,如果使用其他ALBERT更大模型可能就是不同結果;在training方面,DistilBERT收斂較快費時較短,雖然ALBERT的參數比DistilBERT的參數少,但它因為共享參數所以在計算上也是相當於12層的計算時間,而DistilBERT只有6層,所以快了一些,整體來說這兩個model train下來的心得在GPU資源有限(我的GPU 8G)情況下,我覺得DistilBERT是相對不錯的選擇,train的速度快,也有不錯的結果

若往後要再提升F1 score應該可以試著fine-tune ResNet18,或是ensemble模型,就像Andrej Karpathy所說

If you train multiple independent models on your training data instead of just a single one. And then you average their results at test time. You always get 2% extra performance.

最後,原始code都在github repo裡,其中感謝Stanford的課程CS224N,我code部份有使用或更改default project的code,我很推薦對NLP有興趣可以線上聽這門課

References

[1] ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

[2] DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter

[3] Poor Man’s BERT: Smaller and Faster Transformer Models

[4] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

[5] Distilling the Knowledge in a Neural Network

[6] Deep Residual Learning for Image Recognition

--

--