Chinese BERT中文預(yù)訓(xùn)練語言模型
在自然語言處理領(lǐng)域中,預(yù)訓(xùn)練語言模型(Pre-trained Language Models)已成為非常重要的基礎(chǔ)技術(shù)。為了進(jìn)一步促進(jìn)中文信息處理的研究發(fā)展,我們發(fā)布了基于全詞遮罩(Whole Word Masking)技術(shù)的中文預(yù)訓(xùn)練模型 BERT-wwm,以及與此技術(shù)密切相關(guān)的模型:BERT-wwm-ext,RoBERTa-wwm-ext,RoBERTa-wwm-ext-large, RBT3, RBTL3。
本項目基于谷歌官方BERT:https://github.com/google-research/bert
其他相關(guān)資源:
- 中文MacBERT預(yù)訓(xùn)練模型:https://github.com/ymcui/MacBERT
- 中文ELECTRA預(yù)訓(xùn)練模型:https://github.com/ymcui/Chinese-ELECTRA
- 中文XLNet預(yù)訓(xùn)練模型:https://github.com/ymcui/Chinese-XLNet
- 知識蒸餾工具TextBrewer:https://github.com/airaria/TextBrewer
簡介
Whole Word Masking (wwm),暫翻譯為全詞Mask或整詞Mask,是谷歌在2019年5月31日發(fā)布的一項BERT的升級版本,主要更改了原預(yù)訓(xùn)練階段的訓(xùn)練樣本生成策略。 簡單來說,原有基于WordPiece的分詞方式會把一個完整的詞切分成若干個子詞,在生成訓(xùn)練樣本時,這些被分開的子詞會隨機(jī)被mask。 在全詞Mask中,如果一個完整的詞的部分WordPiece子詞被mask,則同屬該詞的其他部分也會被mask,即全詞Mask。
需要注意的是,這里的mask指的是廣義的mask(替換成[MASK];保持原詞匯;隨機(jī)替換成另外一個詞),并非只局限于單詞替換成[MASK]標(biāo)簽的情況。 更詳細(xì)的說明及樣例請參考:#4
同理,由于谷歌官方發(fā)布的BERT-base, Chinese中,中文是以字為粒度進(jìn)行切分,沒有考慮到傳統(tǒng)NLP中的中文分詞(CWS)。 我們將全詞Mask的方法應(yīng)用在了中文中,使用了中文維基百科(包括簡體和繁體)進(jìn)行訓(xùn)練,并且使用了哈工大LTP作為分詞工具,即對組成同一個詞的漢字全部進(jìn)行Mask。
下述文本展示了全詞Mask的生成樣例。 注意:為了方便理解,下述例子中只考慮替換成[MASK]標(biāo)簽的情況。
| 說明 | 樣例 |
|---|---|
| 原始文本 | 使用語言模型來預(yù)測下一個詞的probability。 |
| 分詞文本 | 使用 語言 模型 來 預(yù)測 下 一個 詞 的 probability 。 |
| 原始Mask輸入 | 使 用 語 言 [MASK] 型 來 [MASK] 測 下 一 個 詞 的 pro [MASK] ##lity 。 |
| 全詞Mask輸入 | 使 用 語 言 [MASK] [MASK] 來 [MASK] [MASK] 下 一 個 詞 的 [MASK] [MASK] [MASK] 。 |
中文模型下載
本目錄中主要包含base模型,故我們不在模型簡稱中標(biāo)注base字樣。對于其他大小的模型會標(biāo)注對應(yīng)的標(biāo)記(例如large)。
-
BERT-large模型:24-layer, 1024-hidden, 16-heads, 330M parameters -
BERT-base模型:12-layer, 768-hidden, 12-heads, 110M parameters
| 模型簡稱 | 語料 | Google下載 | 訊飛云下載 |
|---|---|---|---|
RBT6, Chinese |
EXT數(shù)據(jù)[1] | - | TensorFlow(密碼XNMA) |
RBT4, Chinese |
EXT數(shù)據(jù)[1] | - | TensorFlow(密碼e8dN) |
RBTL3, Chinese |
EXT數(shù)據(jù)[1] | TensorFlow PyTorch |
TensorFlow(密碼vySW) |
RBT3, Chinese |
EXT數(shù)據(jù)[1] | TensorFlow PyTorch |
TensorFlow(密碼b9nx) |
RoBERTa-wwm-ext-large, Chinese |
EXT數(shù)據(jù)[1] | TensorFlow PyTorch |
TensorFlow(密碼u6gC) |
RoBERTa-wwm-ext, Chinese |
EXT數(shù)據(jù)[1] | TensorFlow PyTorch |
TensorFlow(密碼Xe1p) |
BERT-wwm-ext, Chinese |
EXT數(shù)據(jù)[1] | TensorFlow PyTorch |
TensorFlow(密碼4cMG) |
BERT-wwm, Chinese |
中文維基 | TensorFlow PyTorch |
TensorFlow(密碼07Xj) |
BERT-base, ChineseGoogle |
中文維基 | Google Cloud | - |
BERT-base, Multilingual CasedGoogle |
多語種維基 | Google Cloud | - |
BERT-base, Multilingual UncasedGoogle |
多語種維基 | Google Cloud | - |
[1] EXT數(shù)據(jù)包括:中文維基百科,其他百科、新聞、問答等數(shù)據(jù),總詞數(shù)達(dá)5.4B。
PyTorch版本
如需PyTorch版本,
1)請自行通過??Transformers提供的轉(zhuǎn)換腳本進(jìn)行轉(zhuǎn)換。
2)或者通過huggingface官網(wǎng)直接下載PyTorch版權(quán)重:https://huggingface.co/hfl
方法:點擊任意需要下載的model → 拉到最下方點擊"List all files in model" → 在彈出的小框中下載bin和json文件。
使用說明
中國大陸境內(nèi)建議使用訊飛云下載點,境外用戶建議使用谷歌下載點,base模型文件大小約400M。 以TensorFlow版BERT-wwm, Chinese為例,下載完畢后對zip文件進(jìn)行解壓得到:
chinese_wwm_L-12_H-768_A-12.zip
|- bert_model.ckpt # 模型權(quán)重
|- bert_model.meta # 模型meta信息
|- bert_model.index # 模型index信息
|- bert_config.json # 模型參數(shù)
|- vocab.txt # 詞表
其中bert_config.json和vocab.txt與谷歌原版BERT-base, Chinese完全一致。 PyTorch版本則包含pytorch_model.bin, bert_config.json, vocab.txt文件。
快速加載
使用Huggingface-Transformers
依托于Huggingface-Transformers 2.2.2,可輕松調(diào)用以上模型。
tokenizer = BertTokenizer.from_pretrained("MODEL_NAME")
model = BertModel.from_pretrained("MODEL_NAME")
注意:本目錄中的所有模型均使用BertTokenizer以及BertModel加載,請勿使用RobertaTokenizer/RobertaModel!
其中MODEL_NAME對應(yīng)列表如下:
| 模型名 | MODEL_NAME |
|---|---|
| RoBERTa-wwm-ext-large | hfl/chinese-roberta-wwm-ext-large |
| RoBERTa-wwm-ext | hfl/chinese-roberta-wwm-ext |
| BERT-wwm-ext | hfl/chinese-bert-wwm-ext |
| BERT-wwm | hfl/chinese-bert-wwm |
| RBT3 | hfl/rbt3 |
| RBTL3 | hfl/rbtl3 |
使用PaddleHub
依托PaddleHub,只需一行代碼即可完成模型下載安裝,十余行代碼即可完成文本分類、序列標(biāo)注、閱讀理解等任務(wù)。
import paddlehub as hub
module = hub.Module(name=MODULE_NAME)
其中MODULE_NAME對應(yīng)列表如下:
| 模型名 | MODULE_NAME |
|---|---|
| RoBERTa-wwm-ext-large | chinese-roberta-wwm-ext-large |
| RoBERTa-wwm-ext | chinese-roberta-wwm-ext |
| BERT-wwm-ext | chinese-bert-wwm-ext |
| BERT-wwm | chinese-bert-wwm |
| RBT3 | rbt3 |
| RBTL3 | rbtl3 |
模型對比
針對大家比較關(guān)心的一些模型細(xì)節(jié)進(jìn)行匯總?cè)缦隆?/p>
| - | BERTGoogle | BERT-wwm | BERT-wwm-ext | RoBERTa-wwm-ext | RoBERTa-wwm-ext-large |
|---|---|---|---|---|---|
| Masking | WordPiece | WWM[1] | WWM | WWM | WWM |
| Type | base | base | base | base | large |
| Data Source | wiki | wiki | wiki+ext[2] | wiki+ext | wiki+ext |
| Training Tokens # | 0.4B | 0.4B | 5.4B | 5.4B | 5.4B |
| Device | TPU Pod v2 | TPU v3 | TPU v3 | TPU v3 | TPU Pod v3-32[3] |
| Training Steps | ? | 100KMAX128 +100KMAX512 |
1MMAX128 +400KMAX512 |
1MMAX512 | 2MMAX512 |
| Batch Size | ? | 2,560 / 384 | 2,560 / 384 | 384 | 512 |
| Optimizer | AdamW | LAMB | LAMB | AdamW | AdamW |
| Vocabulary | 21,128 | ~BERT[4] | ~BERT | ~BERT | ~BERT |
| Init Checkpoint | Random Init | ~BERT | ~BERT | ~BERT | Random Init |
[1] WWM = Whole Word Masking
[2] ext = extended data
[3] TPU Pod v3-32 (512G HBM)等價于4個TPU v3 (128G HBM)
[4]~BERT表示繼承谷歌原版中文BERT的屬性
