每日最新頭條.有趣資訊

華為諾亞方舟開源哪吒、TinyBERT模型,可直接下載使用

機器之心整理

參與:一鳴

華為諾亞方舟實驗室開源了一批優秀預訓練語言模型,性能更好、使用更方便。

昨日,華為諾亞方舟實驗室的 NLP 團隊開源了兩個重要的預訓練語言模型——哪吒和 TinyBERT。這兩個模型可以直接下載、預訓練和微調。華為語音語義首席科學家劉群在微博上轉發了這一消息。

項目地址:https://github.com/huawei-noah/Pretrained-Language-Model

根據 GitHub 上的介紹,這一項目是諾亞方舟實驗室用來開源各種預訓練模型的項目,目前有兩個,日後不排除有更多模型加入進來。

哪吒模型

該項目中第一個開源的模型是哪吒(NEZHA:NEural contextualiZed representation for CHinese lAnguage understanding),是華為諾亞方舟實驗室自研的預訓練語言模型,在一些 NLP 任務上取得了 SOTA 的表現。這一模型基於 BERT,可以在普通的 GPU 集群上進行訓練,同時融合了NVIDIA和谷歌代碼的早期版本。

在今年的智源大會上,劉群介紹了哪吒模型的相關工作。

哪吒是一個基於 BERT 進行優化和改進的預訓練語言模型,中文採用的語料是 Wikipedia 和 Baike 和 News,而谷歌的中文語料隻用了 Wikipedia。英文的哪吒採用的是 Wikipedia 和 BookCorpus,跟中文一樣。

哪吒在訓練過程中採用了華為雲,能夠實現多卡多機訓練。當然,本次發布的哪吒和華為的版本有些不同,可以在一般的 GPU 上訓練。此外,哪吒還採用了NVIDIA的混合精度訓練方法,本次項目開源的時候也公開了。

預訓練過程

模型的使用方法和 BERT 類似。首先,用戶需要準備數據,方法和 BERT 準備數據的過程類似:

在訓練過程中,用戶需要準備 horovod 分布式訓練環境,然後運行 script 文件夾中的 run_pretraining.sh 文件即可。

微調過程

目前,哪吒模型支持三種任務上的微調:文本分類、序列標注和類似 SQuAD 的機器閱讀理解,微調的相關代碼基於谷歌的相關代碼。

預訓練過程如下:

下載預訓練模型,解壓模型文件、詞匯文件和配置文件到文件夾「nezha」中;

建立微調任務,根據任務不同運行不同的腳本:

scripts/run_clf.sh 腳本用於文本分類任務,如 LCQMC、ChnSenti 和 XNLI;

scripts/run_seq_labelling.sh 腳本用於序列標注任務,如 Peoples-daily-NER;

scripts/run_reading.sh 腳本用於機器閱讀理解任務,如 CMRC 2018;

從相關輸出位置獲得結果。

需要注意的是,CMRC 任務的評估稍有不同,需要運行以下代碼:

以上任務需要的文件都保存在了項目文件夾中。

哪吒模型已經可以下載,已有四種中文的預訓練模型,分別是 base、large 和對應的 mask 和全詞 mask 類型。

下載地址:https://pan.baidu.com/s/1V7btNIDqBHvz4g9LOPLeeg

密碼:x3qk

TinyBERT

本項目開源的另一個模型是 TinyBERT,這是一個通過蒸餾方法獲得的 BERT 模型。

TinyBERT 的建模過程。

相比原版的 BERT-base,TinyBERT 比它小了 7.5 倍,推理速度則快了 9.4 倍。無論是在預訓練階段還是特定任務學習階段,TinyBERT 的性能都更好。

使用方法

TinyBERT 的使用方法和哪吒項目有所不同,它分為三個步驟:蒸餾、數據增強以及特定任務蒸餾。

1. 蒸餾

在第一個蒸餾階段,研究者需要使用原版的 BERT-base(沒有微調的版本)作為教師模型、通過 Transformer 蒸餾的方法,可以獲得一個泛化的 TinyBERT 模型。之後再進行特定任務蒸餾。

泛化蒸餾有兩個步驟:生成 json 形式的語料,然後進行蒸餾。

第一步,使用 use pregenerate_training_data.py 文件,生成語料。

第二步,使用 use general_distill.py 進行蒸餾。

在項目中,研究者提供了已蒸餾過的 TinyBERT 模型。

2. 數據增強

數據增強是一個能夠擴展特定任務中訓練集的方法。通過學習更多任務相關的樣本,學生模型的泛化能力可以進一步提升。研究者在數據增強階段結合了 BERT 和 GloVe 的方法,進行詞級別的替換,以此來增強數據。

在這裡,用戶可以使用 data_augmentation.py 文件進行數據增強。增強後的數據集文件會自動保存在對應的 $$ 中。

在運行 GLUE 任務中的數據增強代碼前,你需要下載 GLUE 數據,並解壓文件到 GLUE_DIR 中。在命令行中,TASK_NAME 可以是 GLUE 任務中的 CoLA、SST-2、MRPC、STS-B、QQP、MNLI、QNLI 和 RTE。

3. 特定任務蒸餾

這一階段主要對 transformer 進行進一步蒸餾,以提升在特定任務上的性能。這一階段分兩步:首先進行中間層蒸餾,然後進行預測層蒸餾。

運行 task_distill.py 即可進行中間層蒸餾。

之後運行 task_distill.py 即可進行預測層蒸餾。

模型性能評估

TinyBERT 的模型性能評估使用的是單獨的代碼,運行 task_distill.py 即可。

安裝方法

對於 TinyBERT,用戶需要下載專門的模型,安裝相關依賴(基於 Python3):

模型分為以下幾種:

1. 沒有特定任務蒸餾的泛化模型:

論文複現版本:

General_TinyBERT(4layer-312dim)

下載地址:https://drive.google.com/uc?export=download&id=1dDigD7QBv1BmE6pWU71pFYPgovvEqOOj

General_TinyBERT(6layer-768dim)

下載地址:https://drive.google.com/uc?export=download&id=1wXWR00EHK-Eb7pbyw0VP234i2JTnjJ-x

第二版 (2019/11/18) 使用更多數據、無 [MASK] 語料版本:

General_TinyBERT_v2(4layer-312dim)

下載地址:https://drive.google.com/open?id=1PhI73thKoLU2iliasJmlQXBav3v33-8z

General_TinyBERT_v2(6layer-768dim)

下載地址:https://drive.google.com/open?id=1r2bmEsQe4jUBrzJknnNaBJQDgiRKmQjF

2. GLUE 任務上蒸餾後的模型

每個任務對應一個模型,這些模型可以使用之前提供的評估代碼進行評估:

TinyBERT(4layer-312dim)

下載地址:https://drive.google.com/uc?export=download&id=1_sCARNCgOZZFiWTSgNbE7viW_G5vIXYg

TinyBERT(6layer-768dim)

下載地址:https://drive.google.com/uc?export=download&id=1Vf0ZnMhtZFUE0XoD3hTXc6QtHwKr_PwS

項目作者表示,之後他們會測試 TinyBERT 在中文任務上的表現、嘗試使用哪吒或 ALBERT 作為教師模型進行蒸餾,以及公開性能更好的模型等。

獲得更多的PTT最新消息
按讚加入粉絲團