諾亞方舟拓展訓練(諾亞方舟心理游戲流程)
出品 | AI科技大本營(ID:rgznai100)
BERT之后,新的預訓練語言模型XLnet、RoBERTa、ERNIE不斷推出,這次,華為諾亞方舟實驗室開源了基于BERT的中文預訓練語言模型NEZHA(哪吒),寓意模型能像哪吒那樣三頭六臂、大力出奇跡,可以處理很多不同的自然語言任務。
據介紹,當前版本的NEZHA基于BERT模型,并進行了多處優化,能夠在一系列中文自然語言理解任務達到先進水平。
NEZHA模型的實驗中采用了5個中文自然語言理解任務,即CMRC(中文閱讀理解)、XNLI(自然語言推斷)、LCQMC(句義匹配)、PD-NER (命名實體識別任務)、ChnSenti(情感分類)。
研究人員在中文維基百科、中文新聞、百度百科數據上訓練NEZHA模型,并且和谷歌發布的中文BERT,以及哈工大和科大訊飛聯合發布的BERT-WWM,還有百度發布的ERNIE-Baidu進行了比較。從下表可以看出,NEZHA在XNLI,LCQMC,PeoplesDaily NER,ChnSenti任務上達到了先進水平(SOTA)。表中NEZHA,NEZHA-WWM和NEZHA-Span分別代表由原始的BERT預訓練任務訓練得到的,加入全詞Mask訓練得到的以及加入Span預測任務訓練得到的NEZHA模型(三者均使用了全函數式相對位置編碼)。

GitHub鏈接:
https://github.com/huawei-noah/Pretrained-Language-Model/blob/master/README.md
論文鏈接:
https://arxiv.org/abs/1909.00204
此外,諾亞方舟實驗室還開源了TinyBERT預訓練語言模型。
盡管語言模型預訓練(例如BERT)大大改善了許多自然語言處理任務的性能。但是,預訓練語言模型通常在計算上昂貴且占用了大量內存,因此很難在某些資源受限的設備上有效執行它們。為了加快推理速度、減小模型大小并同時保持精度,華為研究人員提出了一種新穎的transformer蒸餾方法,該方法是針對基于transformer模型專門設計的知識蒸餾(KD)方法。
通過利用這種新的知識蒸餾方法,可以將BERT中編碼的大量知識很好地轉移到TinyBERT。此外,他們為TinyBERT引入了一個新的兩階段學習框架,該框架在預訓練階段和特定任務的學習階段都執行transformer蒸餾方法。該框架確保TinyBERT可以捕獲BERT的一般領域知識和特定任務知識。在GLUE基準測試中,TinyBERT相比BERT小7.5倍,比其推理的速度快9.4倍,并且在自然語言理解任務中具有競爭優勢。
它在預訓練和特定任務的學習階段都運行了新型的transformer蒸餾方法。TinyBERT學習的概述如下所示:

論文鏈接:
https://arxiv.org/abs/1909.10351
NEZHA預訓練語言模型的三大改進維度
據諾亞方舟實驗室的官方資料,NEZHA(哪吒)基于BERT在模型、預訓練任務和訓練算法三個維度進行了改進。

模型改進:BERT的網絡架構是一個多層的Transformer網絡,由于Transformer并沒有直接考慮輸入的token的位置信息,原始的Transformer模型和BERT分別采用了函數式和參數式的絕對位置編碼方式,即每一個位置上的輸入的token會疊加一個與位置信息相關的一個embedding(這個embedding稱為絕對位置編碼:absolute position embedding,APE),前者的位置編碼是一個與位置相關的函數,后者則是模型參數的一部分,在預訓練過程中學到的。
此后,又有工作提出了相對位置編碼方式,即在每一層計算隱狀態的相互依賴的時候考慮他們之間的相對位置關系,這個相對位置信息表示為一個相對位置編碼(relative position embedding,RPE),已有工作均在相對位置編碼中加入了可學習的參數。本工作在BERT模型中使用了完全函數式的相對位置編碼(相對位置編碼沒有任何需要學習的參數),實驗結果表明該位置編碼方式使得模型在各個下游任務上的效果均得到明顯提升。
預訓練任務:本工作引入了全詞Mask技術,即不同于原始的BERT模型Mask單個中文字,該技術在MLM預訓練任務中Mask整個詞而不是單個字(如下圖全詞Mask方法Mask了一整個詞“華為”),進而提升了任務難度使得BERT學到更多語義信息。

此外,借鑒SpanBERT ,NEZHA模型還引入了Span預測任務,該任務Mask一個連續的Span(例如下圖中“機”,“很”,“不”三個字),利用Span前后的兩個字的最上層表示(下圖中的x3和x7)以及待預測字的位置信息來預測該字,如下圖中,待預測字為“不”,Span預測任務會使用x3,x7和“不“”這個字的位置信息(就是x3和x6還有x6和x7之間的相對位置編碼)來預測該字,“機”和“很”的預測也是同樣的方法。
該方法使得Span前后的字的表示會包含Span中字的語義信息,由于在訓練過程中,一個句子會被隨機Mask很多次,所以句子中每個字都有機會成為Span的前后字,進而使得各個字學到的表示都會包含周圍Span的信息,Span預測任務能夠有效提高模型在下游的Span抽取任務(此任務的目標是獲取一段文字中目標片段的開始和結束位置)的效果。

訓練算法:在訓練過程中,采用混合精度訓練(Mixed Precision Training)方式,在傳統的深度學習訓練過程中,所有的變量包括weight,activation和gradient都是用FP32(單精度浮點數)來表示。而在混合精度訓練過程中,每一個step會為模型的所有weight維護一個FP32的copy,稱為Master Weights,在做前向和后向傳播過程中,Master Weights會轉換成FP16(半精度浮點數)格式,權重,激活函數和梯度都是用FP16進行表示,最后梯度會轉換成FP32格式去更新Master Weights。
優化器方面使用了LAMB優化器,通常在深度神經網絡訓練的Batch Size很大的情況下(超過一定閾值)會給模型的泛化能力帶來負面影響,而LAMB優化器通過一個自適應式的方式為每個參數調整learning rate,能夠在Batch Size很大的情況下不損失模型的效果,使得模型訓練能夠采用很大的Batch Size,進而極大提高訓練速度。在訓練BERT的研究中,使用LAMB優化器在不損失模型效果的前提下,Batch Size達到了超過30k,使得BERT的訓練時間從3天降到了76分鐘。