-
Notifications
You must be signed in to change notification settings - Fork 526
预训练模型仓库
借助UER-py,我们使用不同的语料、编码器和目标任务等模块,进行了预训练。以下所有的预训练模型都是UER格式的,可以由UER直接加载。未来会发布更多的预训练模型。除非另有说明,否则中文预训练模型使用 models/google_zh_vocab.txt 作为词典(原始Google BERT项目中的中文词典)以及BERT tokenizer作为分词器。models/bert/base_config.json 为默认的配置文件;常用的词典和配置文件包含在 models 文件夹中,用户无需下载。此外,我们通过 scripts/convert_xxx_from_uer_to_huggingface.py 将UER预训练的模型转换为Huggingface Transformers支持的格式,并上传到了Huggingface模型仓库(uer用户)。下面介绍这些预训练模型权重,给出它们的下载链接,以及说明它们的使用方式。注意到,受限于篇幅,我们将预训练权重的细节描述放到了相应的Huggingface模型仓库中。在介绍具体预训练模型权重的时候,我们会给出其对应的Huggingface模型仓库链接。
24个不同尺寸的中文RoBERTa预训练模型。语料为CLUECorpusSmall。配置文件在 models/bert/ 路径下。我们只为Tiny,Mini,Small,Medium,Base,Large模型提供了配置文件。为了加载下面的其他模型,我们需要修改配置文件中的 emb_size,feedforward_size,hidden_size,heads_num,layers_num。注意到emb_size等于hidden_size,feedforward_size是hidden_size的4倍,heads_num等于hidden_size除以64。更多的细节请参考这里。
下面列出不同层数 L(layers_num),不同隐层维度 H(hidden_size)的中文RoBERTa预训练权重链接:
层数/隐层维度 | H=128 | H=256 | H=512 | H=768 |
---|---|---|---|---|
L=2 | 2/128 (Tiny) | 2/256 | 2/512 | 2/768 |
L=4 | 4/128 | 4/256 (Mini) | 4/512 (Small) | 4/768 |
L=6 | 6/128 | 6/256 | 6/512 | 6/768 |
L=8 | 8/128 | 8/256 | 8/512 (Medium) | 8/768 |
L=10 | 10/128 | 10/256 | 10/512 | 10/768 |
L=12 | 12/128 | 12/256 | 12/512 | 12/768 (Base) |
这里以Tiny预训练模型权重为例说明以上权重的使用方法。我们通过上面的链接下载Tiny预训练模型权重,放到 models/ 文件夹下。我们可以在其基础上增量的预训练:
python3 preprocess.py --corpus_path corpora/book_review.txt --vocab_path models/google_zh_vocab.txt \
--dataset_path dataset.pt --processes_num 8 --data_processor mlm
python3 pretrain.py --dataset_path dataset.pt --pretrained_model_path models/cluecorpussmall_roberta_tiny_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt --config_path models/bert/tiny_config.json \
--output_model_path models/output_model.bin \
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
--total_steps 5000 --save_checkpoint_steps 2500 --batch_size 64 \
--data_processor mlm --target mlm
或者用其进行分类:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_roberta_tiny_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt --config_path models/bert/tiny_config.json \
--train_path datasets/douban_book_review/train.tsv \
--dev_path datasets/douban_book_review/dev.tsv \
--test_path datasets/douban_book_review/test.tsv \
--learning_rate 3e-4 --epochs_num 8 --batch_size 64
在微调阶段,不同尺寸的预训练模型,通常需要不同的超参数。使用网格搜索寻找分类模型的最佳超参数示例:
python3 finetune/run_classifier_grid.py --pretrained_model_path models/cluecorpussmall_roberta_tiny_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/tiny_config.json \
--train_path datasets/douban_book_review/train.tsv \
--dev_path datasets/douban_book_review/dev.tsv \
--learning_rate_list 3e-5 1e-4 3e-4 --epochs_num_list 3 5 8 --batch_size_list 32 64
通过上面的网格搜索脚本,可以复现这里列出的实验结果。
5个不同尺寸的基于词的中文RoBERTa预训练模型。语料为CLUECorpusSmall。配置文件在 models/bert/ 路径下。分词工具为Google sentencepiece,使用的sentencepiece模型为 models/cluecorpussmall_spm.model 。目前主流的中文预训练模型是基于字的。我们发现基于词的预训练模型在下游任务上往往有更好的效果,并且在推理速度上更有优势(由于更短的序列长度)。更多的细节请参考这里。
下面列出不同尺寸的基于词的中文RoBERTa预训练权重链接:
模型链接 |
---|
L=2/H=128 (Tiny) |
L=4/H=256 (Mini) |
L=4/H=512 (Small) |
L=8/H=512 (Medium) |
L=12/H=768 (Base) |
这里以基于词的Tiny预训练模型权重为例说明以上权重的使用方法。我们通过上面的链接下载基于词的Tiny预训练模型权重,放到 models/ 文件夹下。我们可以在其基础上增量的预训练:
python3 preprocess.py --corpus_path corpora/book_review.txt --spm_model_path models/cluecorpussmall_spm.model \
--dataset_path dataset.pt --processes_num 8 --data_processor mlm
python3 pretrain.py --dataset_path dataset.pt --pretrained_model_path models/cluecorpussmall_word_roberta_tiny_seq512_model.bin \
--spm_model_path models/cluecorpussmall_spm.model --config_path models/bert/tiny_config.json \
--output_model_path models/output_model.bin \
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
--total_steps 5000 --save_checkpoint_steps 2500 --batch_size 64 \
--data_processor mlm --target mlm
或者用其进行分类:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_word_roberta_tiny_seq512_model.bin \
--spm_model_path models/cluecorpussmall_spm.model \
--config_path models/bert/tiny_config.json \
--train_path datasets/douban_book_review/train.tsv \
--dev_path datasets/douban_book_review/dev.tsv \
--test_path datasets/douban_book_review/test.tsv \
--learning_rate 3e-4 --epochs_num 8 --batch_size 64
使用网格搜索寻找基于词的分类模型的最佳超参数示例:
python3 finetune/run_classifier_grid.py --pretrained_model_path models/cluecorpussmall_word_roberta_tiny_seq512_model.bin \
--spm_model_path models/cluecorpussmall_spm.model \
--config_path models/bert/tiny_config.json \
--train_path datasets/douban_book_review/train.tsv \
--dev_path datasets/douban_book_review/dev.tsv \
--learning_rate_list 3e-5 1e-4 3e-4 --epochs_num_list 3 5 8 --batch_size_list 32 64
通过上面的网格搜索脚本,可以复现这里列出的实验结果。
我们基于不同的语料,训练了一系列GPT-2语言模型。配置文件在 models/gpt2/ 路径下。下面列出它们的权重链接和细节描述链接(Huggingface模型仓库):
需要注意的是,古诗词和文言文模型使用了扩展的词典(分别为models/google_zh_poem_vocab.txt和models/google_zh_ancient_vocab.txt)。通用中文GPT-2预训练小模型使用的配置文件是 models/gpt2/distil_config.json ,其余的预训练权重使用的配置文件是 models/gpt2/config.json 。
这里以通用中文GPT-2预训练小模型权重为例说明以上权重的使用方法。我们通过上面的链接下载通用中文GPT-2预训练小模型权重,放到 models/ 文件夹下。我们可以在其基础上增量的预训练:
python3 preprocess.py --corpus_path corpora/book_review.txt \
--vocab_path models/google_zh_vocab.txt \
--dataset_path dataset.pt --processes_num 8 \
--seq_length 128 --data_processor lm
python3 pretrain.py --dataset_path dataset.pt \
--pretrained_model_path models/cluecorpussmall_gpt2_distil_seq1024_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/gpt2/distil_config.json \
--output_model_path models/book_review_gpt2_model.bin \
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
--total_steps 10000 --save_checkpoint_steps 5000 --report_steps 1000 \
--learning_rate 5e-5 --batch_size 64
或者用其进行分类:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_gpt2_distil_seq1024_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/gpt2/distil_config.json \
--train_path datasets/douban_book_review/train.tsv \
--dev_path datasets/douban_book_review/dev.tsv \
--test_path datasets/douban_book_review/test.tsv \
--learning_rate 3e-5 --epochs_num 8 --batch_size 64
我们可以通过GPT-2模型进行文本生成。首先创建 story_beginning.txt ,在里面输入文本的开头,然后利用 scripts/ 文件夹下的 generate_lm.py 脚本进行文本生成:
python3 scripts/generate_lm.py --load_model_path models/cluecorpussmall_gpt2_distil_seq1024_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/gpt2/distil_config.json \
--test_path story_beginning.txt --prediction_path story_full.txt \
--seq_length 128
我们基于CLUECorpusSmall语料,训练了一系列ALBERT预训练模型。配置文件在 models/albert/ 路径下。下面列出它们的权重链接和细节描述链接(Huggingface模型仓库):
模型链接 | 细节描述链接 |
---|---|
通用中文ALBERT-base预训练模型 | https://huggingface.co/uer/albert-base-chinese-cluecorpussmall |
通用中文ALBERT-large预训练模型 | https://huggingface.co/uer/albert-large-chinese-cluecorpussmall |
我们基于CLUECorpusSmall语料,训练了一系列T5预训练模型。配置文件在 models/t5/ 路径下。下面列出它们的权重链接和细节描述链接(Huggingface模型仓库):
模型链接 | 细节描述链接 |
---|---|
通用中文T5-small预训练模型 | https://huggingface.co/uer/t5-small-chinese-cluecorpussmall |
通用中文T5-base预训练模型 | https://huggingface.co/uer/t5-base-chinese-cluecorpussmall |
这里以通用中文T5-small预训练模型权重为例说明以上权重的使用方法。我们通过上面的链接下载通用中文T5-small预训练模型权重,放到 models/ 文件夹下。我们可以在其基础上增量的预训练:
python3 preprocess.py --corpus_path corpora/book_review.txt \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--dataset_path dataset.pt \
--processes_num 8 --seq_length 128 \
--dynamic_masking --data_processor t5
python3 pretrain.py --dataset_path dataset.pt \
--pretrained_model_path models/cluecorpussmall_t5_small_seq512_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5/small_config.json \
--output_model_path models/book_review_t5_model.bin \
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
--total_steps 10000 --save_checkpoint_steps 5000 --report_steps 1000 \
--learning_rate 5e-4 --batch_size 64 \
--span_masking --span_geo_prob 0.3 --span_max_length 5
或者在其之上进行微调:
python3 finetune/run_text2text.py --pretrained_model_path models/cluecorpussmall_t5_small_seq512_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5/small_config.json \
--train_path datasets/tnews_text2text/train.tsv \
--dev_path datasets/tnews_text2text/dev.tsv \
--seq_length 128 --tgt_seq_length 8 --learning_rate 3e-4 --epochs_num 3 --batch_size 32
python3 inference/run_text2text_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5/small_config.json \
--test_path datasets/tnews_text2text/test_nolabel.tsv \
--prediction_path datasets/tnews_text2text/prediction.tsv \
--seq_length 128 --tgt_seq_length 8 --batch_size 32
可以在这里下载text2text格式的tnews数据集。
我们基于CLUECorpusSmall语料,训练了一系列T5-v1_1预训练模型。配置文件在 models/t5-v1_1/ 路径下。下面列出它们的权重链接和细节描述链接(Huggingface模型仓库):
模型链接 | 细节描述链接 |
---|---|
通用中文T5-v1_1-small预训练模型 | https://huggingface.co/uer/t5-v1_1-small-chinese-cluecorpussmall |
通用中文T5-v1_1-base预训练模型 | https://huggingface.co/uer/t5-v1_1-base-chinese-cluecorpussmall |
这里以通用中文T5-v1_1-small预训练模型权重为例说明以上权重的使用方法。我们通过上面的链接下载通用中文T5-v1_1-small预训练模型权重,放到 models/ 文件夹下。我们可以在其基础上增量的预训练:
python3 preprocess.py --corpus_path corpora/book_review.txt \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--dataset_path dataset.pt \
--processes_num 8 --seq_length 128 \
--dynamic_masking --data_processor t5
python3 pretrain.py --dataset_path dataset.pt \
--pretrained_model_path models/cluecorpussmall_t5-v1_1_small_seq512_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5-v1_1/small_config.json \
--output_model_path models/book_review_t5-v1_1_model.bin \
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
--total_steps 10000 --save_checkpoint_steps 5000 --report_steps 1000 \
--learning_rate 5e-4 --batch_size 64 \
--span_masking --span_geo_prob 0.3 --span_max_length 5
或者在其之上进行微调:
python3 finetune/run_text2text.py --pretrained_model_path models/cluecorpussmall_t5-v1_1_small_seq512_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5-v1_1/small_config.json \
--train_path datasets/tnews_text2text/train.tsv \
--dev_path datasets/tnews_text2text/dev.tsv \
--seq_length 128 --tgt_seq_length 8 --learning_rate 3e-4 --epochs_num 3 --batch_size 32
python3 inference/run_text2text_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5-v1_1/small_config.json \
--test_path datasets/tnews_text2text/test_nolabel.tsv \
--prediction_path datasets/tnews_text2text/prediction.tsv \
--seq_length 128 --tgt_seq_length 8 --batch_size 32
我们基于CLUECorpusSmall语料,训练了PEGASUS预训练模型。配置文件在 models/pegasus/ 路径下。下面列出它们的权重链接和细节描述链接(Huggingface模型仓库):
模型链接 | 细节描述链接 |
---|---|
通用中文PEGASUS-base预训练模型 | https://huggingface.co/uer/pegasus-base-chinese-cluecorpussmall |
我们基于CLUECorpusSmall语料,训练了BART预训练模型。配置文件在 models/bart/ 路径下。下面列出它们的权重链接和细节描述链接(Huggingface模型仓库):
模型链接 | 细节描述链接 |
---|---|
通用中文BART-base预训练模型 | https://huggingface.co/uer/bart-base-chinese-cluecorpussmall |
我们基于RoBERTa预训练模型,在一系列下游任务上进行了微调。这些模型的配置文件均为 models/bert/base_config.json 。下面列出它们的权重链接和细节描述链接(Huggingface模型仓库):
可以加载上面的模型进行增量预训练、微调、推理。
我们基于CLUECorpusSmall语料,训练了一系列Transformer之外的预训练模型。下面列出它们的权重链接和细节描述:
模型链接 | 配置文件 | 模型结构细节 | 训练细节 |
---|---|---|---|
通用中文LSTM语言模型 | models/rnn_config.json | --embedding word --remove_embedding_layernorm --encoder lstm --target lm | 步数:500000 学习率:1e-3 batch size:64*8(GPU数量) 长度:256 |
通用中文GRU语言模型 | models/rnn_config.json | --embedding word --remove_embedding_layernorm --encoder gru --target lm | 步数:500000 学习率:1e-3 batch size:64*8(GPU数量) 长度:256 |
通用中文GatedCNN语言模型 | models/gatedcnn_9_config.json | --embedding word --remove_embedding_layernorm --encoder gatedcnn --target lm | 步数:500000 学习率:1e-4 batch size:64*8(GPU数量) 长度:256 |
通用中文ELMo预训练模型 | models/birnn_config.json | --embedding word --remove_embedding_layernorm --encoder bilstm --target bilm | 步数:500000 学习率:5e-4 batch size:64*8(GPU数量) 长度:256 |
模型链接 | 描述 | 细节描述链接 |
---|---|---|
Google Chinese BERT-Base | 配置文件:models/bert/base_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/google-research/bert |
Google Chinese ALBERT-Base | 配置文件:models/albert/base_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/google-research/albert |
Google Chinese ALBERT-Large | 配置文件:models/albert/large_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/google-research/albert |
Google Chinese ALBERT-Xlarge | 配置文件:models/albert/xlarge_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/google-research/albert |
Google Chinese ALBERT-Xxlarge | 配置文件:models/albert/xxlarge_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/google-research/albert |
HFL Chinese BERT-wwm | 配置文件:models/bert/base_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/ymcui/Chinese-BERT-wwm |
HFL Chinese BERT-wwm-ext | 配置文件:models/bert/base_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/ymcui/Chinese-BERT-wwm |
HFL Chinese RoBERTa-wwm-ext | 配置文件:models/bert/base_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/ymcui/Chinese-BERT-wwm |
HFL Chinese RoBERTa-wwm-large-ext | 配置文件:models/bert/large_config.json 词典:models/google_zh_vocab.txt 分词器:BertTokenizer |
https://github.com/ymcui/Chinese-BERT-wwm |
UER预训练模型
预训练模型 | Link | 描述 |
---|---|---|
Wikizh(word-based)+BertEncoder+BertTarget | 模型:https://share.weiyun.com/5s4HVMi 词典:https://share.weiyun.com/5NWYbYn | 在中文维基百科语料上训练的基于词的BERT模型,训练步数:50万步。 |
RenMinRiBao+BertEncoder+BertTarget | https://share.weiyun.com/5JWVjSE | 训练语料为人民日报,适合用于新闻相关的数据集。 |
Webqa2019+BertEncoder+BertTarget | https://share.weiyun.com/5HYbmBh | 训练语料为社区问答,包含问题,问题描述,答案,适合社交场景相关的数据集,训练步数:50万步。 |
Weibo+BertEncoder+BertTarget | https://share.weiyun.com/5ZDZi4A | 训练语料为微博。 |
Weibo+BertEncoder(large)+MlmTarget | https://share.weiyun.com/CFKyMkp3 | 训练语料为微博。配置文件为bert_large_config.json |
Reviews+BertEncoder+MlmTarget | https://share.weiyun.com/tBgaSx77 | 训练语料为评论。 |
Reviews+BertEncoder(large)+MlmTarget | https://share.weiyun.com/hn7kp9bs | 训练语料为评论,配置文件为 bert_large_config.json |
MixedCorpus+BertEncoder(xlarge)+MlmTarget | https://share.weiyun.com/J9rj9WRB | 训练语料为大规模混合语料,配置文件是bert_xlarge_config.json |
MixedCorpus+BertEncoder(xlarge)+BertTarget(WWM) | https://share.weiyun.com/UsI0OSeR | 训练语料为大规模混合语料,配置文件是bert_xlarge_config.json |
MixedCorpus+BertEncoder(large)+BertTarget | https://share.weiyun.com/5G90sMJ | 训练语料为大规模混合语料,配置文件是bert_large_config.json |
MixedCorpus+BertEncoder(base)+BertTarget | https://share.weiyun.com/5QOzPqq | 训练语料为大规模混合语料,配置文件是bert_base_config.json |
MixedCorpus+BertEncoder(small)+BertTarget | https://share.weiyun.com/fhcUanfy | 训练语料为大规模混合语料,配置文件是bert_small_config.json |
MixedCorpus+BertEncoder(tiny)+BertTarget | https://share.weiyun.com/yXx0lfUg | 训练语料为大规模混合语料,配置文件是bert_tiny_config.json |
MixedCorpus+GptEncoder+LmTarget | https://share.weiyun.com/51nTP8V | 训练语料为大规模混合语料,训练步数为50万 (句长128) + 10万 (句长512) |
Reviews+LstmEncoder+LmTarget | https://share.weiyun.com/57dZhqo | 训练语料是亚马逊网站评论 + 京东评论 + 点评 (共11.4M 评论),使用语言模型作为目标任务。适用于与评论相关的数据集。与随机初始化相比,它在某些评论数据集上实现了5%以上的改进。在使用它之前,将models/rnn_config.json中的hidden_size设置为512。训练步数:200,000;句长:128。 |
(MixedCorpus & Amazon reviews)+LstmEncoder+(LmTarget & ClsTarget) | https://share.weiyun.com/5B671Ik | 首先以LM作为目标任务对混合中文大语料库进行预训练,然后使用lm目标任务和cls目标任务对亚马逊评论进行预训练。它适用于与评论相关的数据集。在某些评论数据集上,它可以与BERT取得可比的结果。 训练步数:500,000 + 100,000; 句长:128 |
IfengNews+BertEncoder+BertTarget | https://share.weiyun.com/5HVcUWO | 训练语料是来自Ifeng网站的新闻数据,使用新闻标题来预测新闻摘要。训练步数:100,000; 句长:128 |
jdbinary+BertEncoder+ClsTarget | https://share.weiyun.com/596k2bu | 训练语料是京东的审查数据,以cls作为目标任务进行预训练。它适用于与购物评论相关的数据集。训练步数:50,000;句长:128 |
jdfull+BertEncoder+MlmTarget | https://share.weiyun.com/5L6EkUF | 训练语料是京东的审查数据,以mlm作为目标任务进行预训练。训练步数:50,000;句长:128 |
Amazonreview+BertEncoder+ClsTarget | https://share.weiyun.com/5XuxtFA | 训练语料是来自亚马逊网站的评论数据(包括书评,电影评论等),以cls作为目标任务进行预训练。它适用于与评论相关的数据集,例如与Google BERT相比,该模型将豆瓣图书评论数据集的准确性从87.6提高到88.5。 训练步数:20,000; 句长:128 |
XNLI+BertEncoder+ClsTarget | https://share.weiyun.com/5oXPugA | 用BertEncoder进行推理 |