華為開源預訓練語言模型「哪吒」:編碼、掩碼升級,提升多項中文 NLP 任務效能!
一個月前,在「AICon 全球人工智慧與機器學習技術大會」上,華為諾亞方舟實驗首席科學家劉群剛分享了新發布的中文預訓練語言模型 NEZHA(哪吒);就在這兩天,NEZHA 已在 Github 上開源,同時開源的還有壓縮 BERT 模型「TinyBERT」,它在推理時大小可縮小 7.5 倍,並且速度加快 9.4 倍。
可以看到的是近兩年預訓練模型的發展非常快速,從 Word2Vec 到 ULMFiT、CoVe 再到 BERT、XLNET 等,都各有特點且在不斷完善中。聚焦於「多項中文 NLP 任務效能」的 NEZHA 也有亮眼的效能升級。在此,雷鋒網 AI 開發者將 NEZHA 詳細內容及 TinyBERT 相關地址整理如下。
NEZHA 開發背景
預訓練語言模型本質上,就是神經網路語言模型。它主要有兩個特點,即:可以使用大規模無標註純文字語料進行訓練,以及可以用於各類下游 NLP 任務,各項效能指標均獲得大幅度提高,並可以將各類下游任務的解決方案統一簡化為集中固定的 fine-tune 框架。
預訓練語言模型通常有兩個大型別。一類是 Encoder,用於自然語言理解,輸入整個文章,用於自然語言理解;另一類是 Decoder,是解碼式的,用於自然語言生成,只能來看到已經生成的內容,看不到沒有生成的內容,這兩類模型有所區別。
更直觀來看,github 上來自清華大學的兩位同學——王曉智和張正彥(在讀本科生)整理的一份關於預訓練模型的關係圖,則可以從功能方面更簡單明瞭的幫我們理解該類模型類別。
預訓練模型的關係圖
更多詳細內容,可參見 PLM 論文整理 Github 專案地址:
圖中列出了 BERT、GPT、XLNet、ERNIE 等模型以及它們之間的關係,並擬出了一份相關的論文列表。列表把預訓練模型主要分為了三個部分,包括:模型、知識蒸餾與模型壓縮。按照這樣的分類,TinyBERT 模型則可以歸類為「知識蒸餾與模型壓縮」部分;NEZHA 則歸為「模型」部分。
而根據研究結果顯示,近年來的模型大多將重心落到了資料與算力部分。與早期的 ResNet(視覺模型)模型引數相比,資料顯示 GPT1 為 100M,BERT large 為 340M,GPT2 為 1.5BN,GPT-2 8B 為 8.3BN。
預訓練語言模型研究結果
因此,在預訓練模型開發過程中,華為諾亞方舟研究者提出了一種為基於 transformer 的模型設計的知識蒸餾方法——壓縮 BERT 模型 TinyBERT(詳細解讀可檢視: https://mp.weixin.qq.com/s/f2vxlhaGW1wnu8UYrvh-tA );該模型大小不到 BERT 的 1/7,但速度是 BERT 的 9 倍多。
而在模型方面,他們選擇在內部重現了 Google Bert-base 和 Bert-large 的實驗;利用 BERT 的程式碼,實現了 OpenAI GPT-2 模型;實現基於 GPU 多卡多機並行訓練,並且對訓練過程進行了優化,提高訓練效率,最終得到了「多中文 NLP 任務」預訓練模型 NEZHA。
三頭六臂 NEZHA(哪吒)
儘管這一預訓練模型 NEZHA 的名稱聽起來有些匪夷所思,但它的開發者們將其視為「無所不能,可以解決不同任務」的寓意。在這個模型中,除了之前提到的重現、多卡多機並行訓練之外,主要有兩項改進,即:函式式相對位置編碼與全詞覆蓋的實現。
一、函式式相對位置編碼
位置編碼有函式式和引數式兩種,函式式通過定義函式直接計算就可以了。引數式中位置編碼涉及兩個概念,一個是距離;二是維度。其中,Word Embedding 一般有幾百維,每一維各有一個值,一個位置編碼的值正是通過位置和維度兩個引數來確定。
NEZHA 預訓練模型則採用了函式式相對位置編碼,其輸出與注意力得分的計算涉及到他們相對位置的正弦函式,這一靈感正是來源於 Transformer 的絕對位置編碼,而相對位置編碼則解決了在 Transformer 中,每個詞之間因為互不知道相隔的距離引發的一系列資源佔用問題。
位置編碼模型
具體而言,Transformer 最早只考慮了絕對位置編碼,而且是函式式的;後來 BERT 的提出就使用了引數式,而引數式訓練則會受收到句子長度的影響,BERT 起初訓練的句子最長為 512,如果只訓練到 128 長度的句子,在 128~520 之間的位置引數就無法獲得,所以必須要訓練更長的語料來確定這一部分的引數。
而在 NEZHA 模型中,距離和維度都是由正弦函式匯出的,並且在模型訓練期間是固定的。也就是說,位置編碼的每個維度對應一個正弦,不同維度的正弦函式具有不同的波長,而選擇固定正弦函式,則可以使該模型具有更強的擴充套件性;即當它遇到比訓練中序列長度更長的序列時,依然可以發揮作用。函式式相對位置編碼公式,如下圖所示:
二、全詞覆蓋
現在的神經網路模型無論是在語言模型還是機器翻譯任務中,都會用到一個詞表;而在 Softmax 時,每個詞都要嘗試比較一下。每次運算時,所有詞要都在詞表中對比一遍,往往一個詞表會包含幾萬個詞,而機器翻譯則經常達到六七萬個詞,因此,詞表是語言模型運算中較大的瓶頸。
而 NEZHA 預訓練模型,則採用了全詞覆蓋(WWM)策略,當一個漢字被覆蓋時,屬於同一個漢字的其他漢字都被一起覆蓋。該策略被證明比 BERT 中的隨機覆蓋訓練(即每個符號或漢字都被隨機遮蔽)更有效。
BERT 中的隨機覆蓋
在 NEZHA 的 WWM 實現中,研究者使用了一個標記化工具 Jieba2 進行中文分詞(即尋找中文單詞的邊界)。在 WWM 訓練資料中,每個樣本包含多個覆蓋漢字,覆蓋漢字的總數約佔其長度的 12%,隨機替換的佔 1.5%,儘管這樣預測整個詞運算難度有所增加,但最終取得的效果更好。
三、混合精度訓練及 LAMB 優化器
在 NEZHA 模型的預訓練中,研究者採用了混合精度訓練技術。該技術可以使訓練速度提高 2-3 倍,同時也減少了模型的空間消耗,從而可以利用較大的批量。
傳統的深度神經網路訓練使用 FP32(即單精度浮點格式)來表示訓練中涉及的所有變數(包括模型引數和梯度);而混合精度訓練在訓練中採用了多精度。具體而言,它重點保證模型中權重的單精度副本(稱為主權重),即在每次訓練迭代中,將主權值舍入 FP16(即半精度浮點格式),並使用 FP16 格式儲存的權值、啟用和梯度執行向前和向後傳遞;最後將梯度轉換為 FP32 格式,並使用 FP32 梯度更新主權重。
LAMB 優化器則是為專為深度神經元網路的大批量同步分佈訓練而設計。儘管大小批量 DNN 訓練是加快 DNN 訓練速度的有效方法,但是如果不仔細調整學習速率的排程,當批量處理的大小超過某個閾值時,模型的效能可能會受到很大影響。
LAMB 優化器則不需要手動調整學習速率,而是採用了一種通用的自適應策略。優化器通過使用非常大的批量處理大小(實驗中高達 30k 以上)來加速 BERT 的訓練,而不會導致效能損失,甚至在許多工中獲得最先進的效能。值得注意的是,BERT 的訓練時間最終從 3 天顯著縮短到 76 分鐘。
NEZHA 實驗結果
實驗通過對各種自然語言理解(NLU)任務進行微調來測試預訓練模型的效能,並將 NEZHA 模型和最先進的漢語預訓練語言模型:谷歌 BERT(漢語版),BERT-WWM 以及 ERNIE 進行了對比(詳細引數見論文),最終結果如下:
NEZHA 實驗結果
可以看到,NEZHA 在大部分情況下,都取得了相較更好的效能;尤其在 PD-NER 任務下,NEZHA 最高達到了 97.87 分。另一個表現較亮眼的模型還有 ERNIE Baidu 2.0,頗有超越 NEZHA 的趨勢。關於這個情況,論文中作者也解釋到,由於實驗設定或微調方法可能存在差異,比較可能不完全公平,之後其它模型新版釋出後,他們將在相同的設定下對其進行評估並更新此報告。
更多詳情,可參見 NEZHA 論文地址:
https://arxiv.org/pdf/1909.00204.pdf
關於知識蒸餾模型 TinyBERT 詳細解讀,可參考往期內容:
https://mp.weixin.qq.com/s/f2vxlhaGW1wnu8UYrvh-tA
Github 開源地址(包含 NEZHA 與 TinyBERT ):
https://www.leiphone.com/news/201912/YmSMHZUOCekn9Cyr.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2667239/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 多項NLP任務新SOTA,Facebook提出預訓練模型BART模型
- 最強NLP預訓練模型!谷歌BERT橫掃11項NLP任務記錄模型谷歌
- 周明:預訓練模型在多語言、多模態任務的進展模型
- Findings | 中文預訓練語言模型回顧模型
- 谷歌開源 BERT:最先進的 NLP 預訓練技術,支援中文和更多語言谷歌
- 中文任務全面超越 BERT:百度正式釋出NLP預訓練模型ERNIE模型
- 180G!中文ELECTRA預訓練模型再升級模型
- 講堂丨周明:預訓練模型在多語言、多模態任務的進展模型
- 預訓練語言模型:還能走多遠?模型
- 知識增強的預訓練語言模型系列之ERNIE:如何為預訓練語言模型注入知識模型
- NLP生成任務超越BERT、GPT!微軟提出通用預訓練模型MASSGPT微軟模型
- RoBERTa中文預訓練模型,你離中文任務的「SOTA」只差個它模型
- 【預訓練語言模型】 使用Transformers庫進行BERT預訓練模型ORM
- 自訓練 + 預訓練 = 更好的自然語言理解模型模型
- CAT 3.0 開源釋出,支援多語言客戶端及多項效能提升客戶端
- 完勝 BERT,谷歌最佳 NLP 預訓練模型開源,單卡訓練僅需 4 天谷歌模型
- 文件智慧:通用文件預訓練模型與資料集,推動NLP落地升級模型
- 常見預訓練語言模型簡述模型
- 用於訓練自然語言處理 (NLP) 和文字模型的 7 個頂級開源資料集 - KDnuggets自然語言處理模型
- 【預訓練語言模型】使用Transformers庫進行GPT2預訓練模型ORMGPT
- 自然語言處理中的語言模型預訓練方法自然語言處理模型
- pytorch中:使用bert預訓練模型進行中文語料任務,bert-base-chinese下載。PyTorch模型
- 新型大語言模型的預訓練與後訓練正規化,谷歌的Gemma 2語言模型模型谷歌Gemma
- 新型大語言模型的預訓練與後訓練正規化,Meta的Llama 3.1語言模型模型
- 谷歌T5預訓練模型重新整理GLUE榜單,110億引數量,17項NLP任務新SOTA谷歌模型
- 新型大語言模型的預訓練與後訓練正規化,蘋果的AFM基礎語言模型模型蘋果
- LUSE: 無監督資料預訓練短文字編碼模型模型
- COLING 2020 | CharBERT:字元敏感的預訓練語言模型字元模型
- NLP與深度學習(五)BERT預訓練模型深度學習模型
- 新型大語言模型的預訓練與後訓練正規化,阿里Qwen模型阿里
- 知識增廣的預訓練語言模型K-BERT:將知識圖譜作為訓練語料模型
- ChineseGLUE:為中文NLP模型定製的自然語言理解基準模型
- 開源實時監控系統CAT 3.0釋出:多語言客戶端及多項效能提升客戶端
- EasyNLP釋出融合語言學和事實知識的中文預訓練模型CKBERT模型
- NLP領域預訓練模型的現狀及分析模型
- 「NLP」GPT:第一個引入Transformer的預訓練模型GPTORM模型
- 解讀乾貨:詞語對齊的注意力機制,提升中文預訓練模型效果模型
- 00 預訓練語言模型的前世今生(全文 24854 個詞)模型