ALBERT:更輕更快的NLP預訓練模型

目前在NLP領域,出彩的預訓練模型的新工作,幾乎都是基於BERT的改進,前面我們就介紹了XLNET。今天我來介紹一個更新的工作,相比於BERT,它更輕量,效果也要好。

作者 | 小Dream哥

1 預訓練模型進展

2018年底,BERT橫空出世之後,預訓練模型開始走進NLP舞臺的中央,吸引了業內所有人的關注。之後,各種預訓練模型開始不斷的刷新NLP領域的SOTA榜單,比較有影響力的包括,GPT-2.0,XLNET,RoBERTa等。

大體來說,上述預訓練模型確實都基於BERT了做了一些改進,在模型結構、訓練模式等方面都有一些創新。但是大部分的預訓練模型也有一個共通的“特點”,即模型相對“笨重”,預訓練成本高。

ALBERT的作者就是基於這樣的背景,提出ALBERT這個模型的。其試圖解決大部分預訓練模型訓練成本高,參數量巨大的問題。

2 ALBERT的改進點

ALBERT為了減少模型參數主要有以下幾點:

1.詞嵌入參數因式分解;

2.隱藏層間參數共享

此外,為了提升模型性能,ALBERT提出了一種新的訓練任務:

句子間順序預測

下面我們詳細介紹以下這幾個改進點:

1)詞嵌入參數因式分解

ALBERT的提出者認為,詞向量只是記憶了相對少量的詞語的信息,更多的語義和句法等信息時由隱藏層記憶的。因此,他們認為,詞嵌入的維度可以不必與隱藏層的維度一致,可以通過降低詞嵌入的維度的方式來減少參數量。假設詞表的大小為V,詞嵌入的維度為E,隱藏層的維度為H。

BERT的情況是,E=H;ALBERT的方案是,將E降低,在詞嵌入和隱藏層之間加入一個project層,連接兩個層。我們來分析一下,兩種情況嵌入層的參數量。

1.BERT:ParameterNumBERT = E*V = H*V
通常情況下V很大,BERT中文模型V約為30000,BERT_base中H = 1024:
ParameterNumBERT=30000*1024
2.ALBERT:ParameterNumAL = (V +H)*E
ALBERT中,E=128;H=1024:
ParameterNumAL=30000*128+128*1024
ParameterNumAL/ParameterNumAL =7.7

從上面的分析可以看出,通過嵌入層的參數因式分解,成功將嵌入層的參數縮小為原來的1/8。

2)隱藏層的參數共享

ALBERT:更輕更快的NLP預訓練模型

如上圖所示,是BERT的結構示意圖,BERT_base中,包含12層中間的隱藏層;BERT_large中,包含24層中間的隱藏層;各層之間的參數均不共享。

參數共享可以顯著減少參數數量,參數共享可以分為全連接層、注意力層的參數共享;在ALBERT中,全連接層、注意力層的參數均是共享的,也就是ALBERT依然有多層的深度連接,但是各層之間的參數是一樣的。很明顯的,通過這種方式,ALBERT中隱藏層的參數量變為原來的1/12或者1/24。

3)句子間順序預測

在BERT中,句子間關係的任務是next sentence predict(NSP),即向模型輸入兩個句子,預測第二個句子是不是第一個句子的下一句。

在ALBERT中,句子間關係的任務是sentence-order prediction(SOP),即句子間順序預測,也就是給模型兩個句子,讓模型去預測兩個句子的前後順序。文中介紹,SOP是比NSP要更為複雜的任務,相比於NSP,通過SOP任務模型能夠學到更多的句子間的語義關係。

3 ALBERT的效果

ALBERT:更輕更快的NLP預訓練模型

如上圖所示,展示了ALBERT與BERT不同大小模型的參數量及其在各個數據集的效果。

從上面的結果,可以得到一個基本的結論,相比於BERT,ALBERT能夠在不損失模型性能的情況下,顯著的減少參數量。ALBERT_xxlarge模型有233M的參數量,其在各個數據集上的表現卻能夠全面優於有1270M參數的BERT_xlarge模型。

此外,作者還分別分析了嵌入層參數因式分解、隱藏層參數共享以及SOP任務對ALBERT模型性能的影響。作者的結論是,嵌入層參數因式分解、隱藏層參數共享基本不會對模型的性能造成損失,SOP任務能夠提升模型的性能。

值得注意的一點是,作者還發現ALBERT在訓練了100w步之後,模型依舊沒有過擬合,於是作者嘗試去掉dropout,卻意外的發現下游任務的效果竟然有了一定的提升。這是NLP領域第一次發現dropout對大規模的預訓練模型會造成負面影響。

此外,ALBERT還有一個albert_tiny模型,其隱藏層僅有4層,模型參數量約為1.8M,非常的輕便。相對於BERT,其

訓練和推理預測速度提升約10倍,但精度基本保留,語義相似度數據集LCQMC測試集上達到85.4%,相比bert_base僅下降1.5個點。

對於一些相對比較簡單一些或實時性要求高的任務,如語義相似度計算、分類任務等,ALBERT很適合。

總結

總的來說,ALBERT利用詞嵌入參數因式分解和隱藏層間參數共享兩種手段,在顯著減少了模型的參數量的同時,基本沒有損失模型的性能;

隱藏層間參數共享能夠極大的減少模型參數,對模型訓練速度的提升也有一定的幫助。但是對推理預測速度卻不會有任何幫助,因為前向傳播時的計算量一點也沒有減少。基於此,ALBERT的研究者們,提供了albert_tiny模型,提高了模型的推理速度,代價卻很低(準確率降低很少)。

通過引進SOP的訓練任務,模型的準確度也有一定的提升。

下期預告:知識圖譜概述


分享到:


相關文章: