0
雷鋒網(wǎng) AI 開發(fā)者按:一個月前,在「AICon 全球人工智能與機器學習技術(shù)大會」上,華為諾亞方舟實驗首席科學家劉群剛分享了新發(fā)布的中文預訓練語言模型 NEZHA(哪吒);就在這兩天,NEZHA 已在 Github 上開源,同時開源的還有壓縮 BERT 模型「TinyBERT」,它在推理時大小可縮小 7.5 倍,并且速度加快 9.4 倍。
可以看到的是近兩年預訓練模型的發(fā)展非??焖?,從 Word2Vec 到 ULMFiT、CoVe 再到 BERT、XLNET 等,都各有特點且在不斷完善中。聚焦于「多項中文 NLP 任務性能」的 NEZHA 也有亮眼的性能升級。在此,雷鋒網(wǎng) AI 開發(fā)者將 NEZHA 詳細內(nèi)容及 TinyBERT 相關(guān)地址整理如下。
預訓練語言模型本質(zhì)上,就是神經(jīng)網(wǎng)絡語言模型。它主要有兩個特點,即:可以使用大規(guī)模無標注純文本語料進行訓練,以及可以用于各類下游 NLP 任務,各項性能指標均獲得大幅度提高,并可以將各類下游任務的解決方案統(tǒng)一簡化為集中固定的 fine-tune 框架。
預訓練語言模型通常有兩個大類型。一類是 Encoder,用于自然語言理解,輸入整個文章,用于自然語言理解;另一類是 Decoder,是解碼式的,用于自然語言生成,只能來看到已經(jīng)生成的內(nèi)容,看不到?jīng)]有生成的內(nèi)容,這兩類模型有所區(qū)別。
更直觀來看,github 上來自清華大學的兩位同學——王曉智和張正彥(在讀本科生)整理的一份關(guān)于預訓練模型的關(guān)系圖,則可以從功能方面更簡單明了的幫我們理解該類模型類別。
預訓練模型的關(guān)系圖
更多詳細內(nèi)容,可參見 PLM 論文整理 Github 項目地址:
圖中列出了 BERT、GPT、XLNet、ERNIE 等模型以及它們之間的關(guān)系,并擬出了一份相關(guān)的論文列表。列表把預訓練模型主要分為了三個部分,包括:模型、知識蒸餾與模型壓縮。按照這樣的分類,TinyBERT 模型則可以歸類為「知識蒸餾與模型壓縮」部分;NEZHA 則歸為「模型」部分。
而根據(jù)研究結(jié)果顯示,近年來的模型大多將重心落到了數(shù)據(jù)與算力部分。與早期的 ResNet(視覺模型)模型參數(shù)相比,數(shù)據(jù)顯示 GPT1 為 100M,BERT large 為 340M,GPT2 為 1.5BN,GPT-2 8B 為 8.3BN。
預訓練語言模型研究結(jié)果
因此,在預訓練模型開發(fā)過程中,華為諾亞方舟研究者提出了一種為基于 transformer 的模型設計的知識蒸餾方法——壓縮 BERT 模型 TinyBERT(詳細解讀可查看:https://mp.weixin.qq.com/s/f2vxlhaGW1wnu8UYrvh-tA);該模型大小不到 BERT 的 1/7,但速度是 BERT 的 9 倍多。
而在模型方面,他們選擇在內(nèi)部重現(xiàn)了 Google Bert-base 和 Bert-large 的實驗;利用 BERT 的代碼,實現(xiàn)了 OpenAI GPT-2 模型;實現(xiàn)基于 GPU 多卡多機并行訓練,并且對訓練過程進行了優(yōu)化,提高訓練效率,最終得到了「多中文 NLP 任務」預訓練模型 NEZHA。
盡管這一預訓練模型 NEZHA 的名稱聽起來有些匪夷所思,但它的開發(fā)者們將其視為「無所不能,可以解決不同任務」的寓意。在這個模型中,除了之前提到的重現(xiàn)、多卡多機并行訓練之外,主要有兩項改進,即:函數(shù)式相對位置編碼與全詞覆蓋的實現(xiàn)。
一、函數(shù)式相對位置編碼
位置編碼有函數(shù)式和參數(shù)式兩種,函數(shù)式通過定義函數(shù)直接計算就可以了。參數(shù)式中位置編碼涉及兩個概念,一個是距離;二是維度。其中,Word Embedding 一般有幾百維,每一維各有一個值,一個位置編碼的值正是通過位置和維度兩個參數(shù)來確定。
NEZHA 預訓練模型則采用了函數(shù)式相對位置編碼,其輸出與注意力得分的計算涉及到他們相對位置的正弦函數(shù),這一靈感正是來源于 Transformer 的絕對位置編碼,而相對位置編碼則解決了在 Transformer 中,每個詞之間因為互不知道相隔的距離引發(fā)的一系列資源占用問題。
位置編碼模型
具體而言,Transformer 最早只考慮了絕對位置編碼,而且是函數(shù)式的;后來 BERT 的提出就使用了參數(shù)式,而參數(shù)式訓練則會受收到句子長度的影響,BERT 起初訓練的句子最長為 512,如果只訓練到 128 長度的句子,在 128~520 之間的位置參數(shù)就無法獲得,所以必須要訓練更長的語料來確定這一部分的參數(shù)。
而在 NEZHA 模型中,距離和維度都是由正弦函數(shù)導出的,并且在模型訓練期間是固定的。也就是說,位置編碼的每個維度對應一個正弦,不同維度的正弦函數(shù)具有不同的波長,而選擇固定正弦函數(shù),則可以使該模型具有更強的擴展性;即當它遇到比訓練中序列長度更長的序列時,依然可以發(fā)揮作用。函數(shù)式相對位置編碼公式,如下圖所示:
二、全詞覆蓋
現(xiàn)在的神經(jīng)網(wǎng)絡模型無論是在語言模型還是機器翻譯任務中,都會用到一個詞表;而在 Softmax 時,每個詞都要嘗試比較一下。每次運算時,所有詞要都在詞表中對比一遍,往往一個詞表會包含幾萬個詞,而機器翻譯則經(jīng)常達到六七萬個詞,因此,詞表是語言模型運算中較大的瓶頸。
而 NEZHA 預訓練模型,則采用了全詞覆蓋(WWM)策略,當一個漢字被覆蓋時,屬于同一個漢字的其他漢字都被一起覆蓋。該策略被證明比 BERT 中的隨機覆蓋訓練(即每個符號或漢字都被隨機屏蔽)更有效。
BERT 中的隨機覆蓋
在 NEZHA 的 WWM 實現(xiàn)中,研究者使用了一個標記化工具 Jieba2 進行中文分詞(即尋找中文單詞的邊界)。在 WWM 訓練數(shù)據(jù)中,每個樣本包含多個覆蓋漢字,覆蓋漢字的總數(shù)約占其長度的 12%,隨機替換的占 1.5%,盡管這樣預測整個詞運算難度有所增加,但最終取得的效果更好。
三、混合精度訓練及 LAMB 優(yōu)化器
在 NEZHA 模型的預訓練中,研究者采用了混合精度訓練技術(shù)。該技術(shù)可以使訓練速度提高 2-3 倍,同時也減少了模型的空間消耗,從而可以利用較大的批量。
傳統(tǒng)的深度神經(jīng)網(wǎng)絡訓練使用 FP32(即單精度浮點格式)來表示訓練中涉及的所有變量(包括模型參數(shù)和梯度);而混合精度訓練在訓練中采用了多精度。具體而言,它重點保證模型中權(quán)重的單精度副本(稱為主權(quán)重),即在每次訓練迭代中,將主權(quán)值舍入 FP16(即半精度浮點格式),并使用 FP16 格式存儲的權(quán)值、激活和梯度執(zhí)行向前和向后傳遞;最后將梯度轉(zhuǎn)換為 FP32 格式,并使用 FP32 梯度更新主權(quán)重。
LAMB 優(yōu)化器則是為專為深度神經(jīng)元網(wǎng)絡的大批量同步分布訓練而設計。盡管大小批量 DNN 訓練是加快 DNN 訓練速度的有效方法,但是如果不仔細調(diào)整學習速率的調(diào)度,當批量處理的大小超過某個閾值時,模型的性能可能會受到很大影響。
LAMB 優(yōu)化器則不需要手動調(diào)整學習速率,而是采用了一種通用的自適應策略。優(yōu)化器通過使用非常大的批量處理大?。▽嶒炛懈哌_ 30k 以上)來加速 BERT 的訓練,而不會導致性能損失,甚至在許多任務中獲得最先進的性能。值得注意的是,BERT 的訓練時間最終從 3 天顯著縮短到 76 分鐘。
實驗通過對各種自然語言理解(NLU)任務進行微調(diào)來測試預訓練模型的性能,并將 NEZHA 模型和最先進的漢語預訓練語言模型:谷歌 BERT(漢語版),BERT-WWM 以及 ERNIE 進行了對比(詳細參數(shù)見論文),最終結(jié)果如下:
NEZHA 實驗結(jié)果
可以看到,NEZHA 在大部分情況下,都取得了相較更好的性能;尤其在 PD-NER 任務下,NEZHA 最高達到了 97.87 分。另一個表現(xiàn)較亮眼的模型還有 ERNIE Baidu 2.0,頗有超越 NEZHA 的趨勢。關(guān)于這個情況,論文中作者也解釋到,由于實驗設置或微調(diào)方法可能存在差異,比較可能不完全公平,之后其它模型新版發(fā)布后,他們將在相同的設置下對其進行評估并更新此報告。
更多詳情,可參見 NEZHA 論文地址:
https://arxiv.org/pdf/1909.00204.pdf
關(guān)于知識蒸餾模型 TinyBERT 詳細解讀,可參考往期內(nèi)容:
https://mp.weixin.qq.com/s/f2vxlhaGW1wnu8UYrvh-tA
Github 開源地址(包含 NEZHA 與 TinyBERT ):
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。