Chinese BERT中文预训练语言模型
在自然语言处理领域中,预训练语言模型(Pre-trained Language Models)已成为非常重要的基础技术。为了进一步促进中文信息处理的研究发展,我们发布了基于全词遮罩(Whole Word Masking)技术的中文预训练模型 BERT-wwm,以及与此技术密切相关的模型:BERT-wwm-ext,RoBERTa-wwm-ext,RoBERTa-wwm-ext-large, RBT3, RBTL3。
本项目基于谷歌官方BERT:https://github.com/google-research/bert
其他相关资源:
- 中文MacBERT预训练模型:https://github.com/ymcui/MacBERT
- 中文ELECTRA预训练模型:https://github.com/ymcui/Chinese-ELECTRA
- 中文XLNet预训练模型:https://github.com/ymcui/Chinese-XLNet
- 知识蒸馏工具TextBrewer:https://github.com/airaria/TextBrewer
简介
Whole Word Masking (wwm),暂翻译为全词Mask
或整词Mask
,是谷歌在2019年5月31日发布的一项BERT的升级版本,主要更改了原预训练阶段的训练样本生成策略。 简单来说,原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时,这些被分开的子词会随机被mask。 在全词Mask
中,如果一个完整的词的部分WordPiece子词被mask,则同属该词的其他部分也会被mask,即全词Mask
。
需要注意的是,这里的mask指的是广义的mask(替换成[MASK];保持原词汇;随机替换成另外一个词),并非只局限于单词替换成[MASK]
标签的情况。 更详细的说明及样例请参考:#4
同理,由于谷歌官方发布的BERT-base, Chinese
中,中文是以字为粒度进行切分,没有考虑到传统NLP中的中文分词(CWS)。 我们将全词Mask的方法应用在了中文中,使用了中文维基百科(包括简体和繁体)进行训练,并且使用了哈工大LTP作为分词工具,即对组成同一个词的汉字全部进行Mask。
下述文本展示了全词Mask
的生成样例。 注意:为了方便理解,下述例子中只考虑替换成[MASK]标签的情况。
说明 | 样例 |
---|---|
原始文本 | 使用语言模型来预测下一个词的probability。 |
分词文本 | 使用 语言 模型 来 预测 下 一个 词 的 probability 。 |
原始Mask输入 | 使 用 语 言 [MASK] 型 来 [MASK] 测 下 一 个 词 的 pro [MASK] ##lity 。 |
全词Mask输入 | 使 用 语 言 [MASK] [MASK] 来 [MASK] [MASK] 下 一 个 词 的 [MASK] [MASK] [MASK] 。 |
中文模型下载
本目录中主要包含base模型,故我们不在模型简称中标注base
字样。对于其他大小的模型会标注对应的标记(例如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数据[1] | - | TensorFlow(密码XNMA) |
RBT4, Chinese |
EXT数据[1] | - | TensorFlow(密码e8dN) |
RBTL3, Chinese |
EXT数据[1] | TensorFlow PyTorch |
TensorFlow(密码vySW) |
RBT3, Chinese |
EXT数据[1] | TensorFlow PyTorch |
TensorFlow(密码b9nx) |
RoBERTa-wwm-ext-large, Chinese |
EXT数据[1] | TensorFlow PyTorch |
TensorFlow(密码u6gC) |
RoBERTa-wwm-ext, Chinese |
EXT数据[1] | TensorFlow PyTorch |
TensorFlow(密码Xe1p) |
BERT-wwm-ext, Chinese |
EXT数据[1] | TensorFlow PyTorch |
TensorFlow(密码4cMG) |
BERT-wwm, Chinese |
中文维基 | TensorFlow PyTorch |
TensorFlow(密码07Xj) |
BERT-base, Chinese Google |
中文维基 | Google Cloud | - |
BERT-base, Multilingual Cased Google |
多语种维基 | Google Cloud | - |
BERT-base, Multilingual Uncased Google |
多语种维基 | Google Cloud | - |
[1] EXT数据包括:中文维基百科,其他百科、新闻、问答等数据,总词数达5.4B。
PyTorch版本
如需PyTorch版本,
1)请自行通过🤗Transformers提供的转换脚本进行转换。
2)或者通过huggingface官网直接下载PyTorch版权重:https://huggingface.co/hfl
方法:点击任意需要下载的model → 拉到最下方点击"List all files in model" → 在弹出的小框中下载bin和json文件。
使用说明
中国大陆境内建议使用讯飞云下载点,境外用户建议使用谷歌下载点,base模型文件大小约400M。 以TensorFlow版BERT-wwm, Chinese
为例,下载完毕后对zip文件进行解压得到:
chinese_wwm_L-12_H-768_A-12.zip
|- bert_model.ckpt # 模型权重
|- bert_model.meta # 模型meta信息
|- bert_model.index # 模型index信息
|- bert_config.json # 模型参数
|- 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,可轻松调用以上模型。
tokenizer = BertTokenizer.from_pretrained("MODEL_NAME")
model = BertModel.from_pretrained("MODEL_NAME")
注意:本目录中的所有模型均使用BertTokenizer以及BertModel加载,请勿使用RobertaTokenizer/RobertaModel!
其中MODEL_NAME
对应列表如下:
模型名 | 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,只需一行代码即可完成模型下载安装,十余行代码即可完成文本分类、序列标注、阅读理解等任务。
import paddlehub as hub
module = hub.Module(name=MODULE_NAME)
其中MODULE_NAME
对应列表如下:
模型名 | 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 |
模型对比
针对大家比较关心的一些模型细节进行汇总如下。
- | 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的属性