Chinese Xlarge Whole Word Masking RoBERTa Model

Model description

This is an xlarge Chinese Whole Word Masking RoBERTa model pre-trained by TencentPretrain introduced in this paper, which inherits UER-py to support models with parameters above one billion, and extends it to a multimodal pre-training framework.

In order to facilitate users in reproducing the results, we used a publicly available corpus and word segmentation tool, and provided all training details.

You can download the model either from the UER-py Modelzoo page, or via HuggingFace from the link roberta-xlarge-wwm-chinese-cluecorpussmall:

How to use

You can use this model directly with a pipeline for masked language modeling:

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='uer/roberta-xlarge-wwm-chinese-cluecorpussmall')
>>> unmasker("北京是[MASK]国的首都。")
[
  {'score': 0.9298505783081055,
   'token': 704,
   'token_str': '中',
   'sequence': '北 京 是 中 国 的 首 都 。'},
  {'score': 0.05041525512933731,
   'token': 2769,
   'token_str': '我',
   'sequence': '北 京 是 我 国 的 首 都 。'},
  {'score': 0.004921116400510073,
   'token': 4862,
   'token_str': '祖',
   'sequence': '北 京 是 祖 国 的 首 都 。'},
  {'score': 0.0020684923510998487,
   'token': 3696,
   'token_str': '民',
   'sequence': '北 京 是 民 国 的 首 都 。'},
  {'score': 0.0018144999630749226,
   'token': 3926,
   'token_str': '清',
   'sequence': '北 京 是 清 国 的 首 都 。'}
]
    

Here is how to use this model to get the features of a given text in PyTorch:

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('uer/roberta-xlarge-wwm-chinese-cluecorpussmall')
model = BertModel.from_pretrained("uer/roberta-xlarge-wwm-chinese-cluecorpussmall")
text = "用你喜欢的任何文本替换我。"
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)

and in TensorFlow:

from transformers import BertTokenizer, TFBertModel
tokenizer = BertTokenizer.from_pretrained('uer/roberta-xlarge-wwm-chinese-cluecorpussmall')
model = TFBertModel.from_pretrained("uer/roberta-xlarge-wwm-chinese-cluecorpussmall")
text = "用你喜欢的任何文本替换我。"
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)

Training data

CLUECorpusSmall is used as training data.

Training procedure

Models are pre-trained by TencentPretrain on Tencent Cloud. We pre-train 500,000 steps with a sequence length of 128 and then pre-train 250,000 additional steps with a sequence length of 512.

jieba is used as word segmentation tool.

Stage1:

python3 preprocess.py --corpus_path corpora/cluecorpussmall.txt \
                      --vocab_path models/google_zh_vocab.txt \
                      --dataset_path cluecorpussmall_seq128_dataset.pt \
                      --processes_num 32 --seq_length 128 \
                      --dynamic_masking --data_processor mlm
deepspeed pretrain.py --deepspeed --deepspeed_config models/deepspeed_config.json --dataset_path cluecorpussmall_seq128_dataset.pt \
                      --vocab_path models/google_zh_vocab.txt \
                      --config_path models/bert/xlarge_config.json \
                      --output_model_path models/cluecorpussmall_wwm_roberta_xlarge_seq128_model \
                      --world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
                      --total_steps 500000 --save_checkpoint_steps 50000 --report_steps 500 \
                      --learning_rate 2e-5 --batch_size 128 --deep_init \
                      --whole_word_masking  --deepspeed_checkpoint_activations \
                      --data_processor mlm --target mlm

Before stage2, we extract fp32 consolidated weights from a zero 2 and 3 DeepSpeed checkpoints:

python3 models/cluecorpussmall_wwm_roberta_xlarge_seq128_model/zero_to_fp32.py models/cluecorpussmall_wwm_roberta_xlarge_seq128_model/ \
                                                                        models/cluecorpussmall_wwm_roberta_xlarge_seq128_model.bin

Stage2:

python3 preprocess.py --corpus_path corpora/cluecorpussmall.txt \
                      --vocab_path models/google_zh_vocab.txt \
                      --dataset_path cluecorpussmall_seq512_dataset.pt \
                      --processes_num 32 --seq_length 512 \
                      --dynamic_masking --data_processor mlm
deepspeed pretrain.py --deepspeed --deepspeed_config models/deepspeed_config.json --dataset_path cluecorpussmall_seq512_dataset.pt \
                      --vocab_path models/google_zh_vocab.txt \
                      --config_path models/bert/xlarge_config.json \
                      --pretrained_model_path models/cluecorpussmall_wwm_roberta_xlarge_seq128_model.bin \
                      --output_model_path models/cluecorpussmall_wwm_roberta_xlarge_seq512_model \
                      --world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
                      --total_steps 250000 --save_checkpoint_steps 50000 --report_steps 500 \
                      --learning_rate 5e-5 --batch_size 32 \
                      --whole_word_masking --deepspeed_checkpoint_activations \
                      --data_processor mlm --target mlm

Then, we extract fp32 consolidated weights from a zero 2 and 3 DeepSpeed checkpoints:

python3 models/cluecorpussmall_wwm_roberta_xlarge_seq512_model/zero_to_fp32.py models/cluecorpussmall_wwm_roberta_xlarge_seq512_model/ \
                                                                               models/cluecorpussmall_wwm_roberta_xlarge_seq512_model.bin

Finally, we convert the pre-trained model into Huggingface's format:

python3 scripts/convert_bert_from_tencentpretrain_to_huggingface.py --input_model_path models/cluecorpussmall_wwm_roberta_xlarge_seq512_model.bin \
                                                                    --output_model_path pytorch_model.bin \
                                                                    --layers_num 36 --type mlm

BibTeX entry and citation info

@article{zhao2019uer,
  title={UER: An Open-Source Toolkit for Pre-training Models},
  author={Zhao, Zhe and Chen, Hui and Zhang, Jinbin and Zhao, Xin and Liu, Tao and Lu, Wei and Chen, Xi and Deng, Haotang and Ju, Qi and Du, Xiaoyong},
  journal={EMNLP-IJCNLP 2019},
  pages={241},
  year={2019}
}

@article{zhao2023tencentpretrain,
  title={TencentPretrain: A Scalable and Flexible Toolkit for Pre-training Models of Different Modalities},
  author={Zhao, Zhe and Li, Yudong and Hou, Cheng and Zhao, Jing and others},
  journal={ACL 2023},
  pages={217},
  year={2023}
}
Downloads last month
15
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.