英语|中文
预训练已经成为人工智能技术的重要组成部分。 TencentPretrain是一个用于对不同模态(例如文本和视觉)的数据进行预训练和微调的工具包。腾讯Pretrain的特点是模块化设计。它方便了现有预训练模型的使用,并为用户提供了进一步扩展的接口。通过TencentPretrain,我们构建了一个模型动物园,其中包含不同属性的预训练模型。 TencentPretrain继承了开源工具包UER(https://github.com/dbiir/UER-py/),并将其扩展为多模态预训练框架。
腾讯Pretrain具有以下特点:
本节通过几个常用的例子来演示如何使用TencentPretrain。更多细节将在说明部分讨论。我们首先在书评情感分类数据集上使用 BERT(文本预训练模型)。我们在书评语料库上预训练模型,然后在书评情感分类数据集上对其进行微调。共有三个输入文件:书评语料库、书评情感分类数据集和词汇表。所有文件均以 UTF-8 编码并包含在该项目中。
BERT的语料格式如下(每行一个句子,文档之间以空行分隔):
doc1-sent1
doc1-sent2
doc1-sent3
doc2-sent1
doc3-sent1
doc3-sent2
书评语料库是从书评情感分类数据集中获得的。我们删除标签并将评论从中间分成两部分,以构建一个包含两个句子的文档(请参阅语料库文件夹中的book_review_bert.txt )。
分类数据集的格式如下:
label text_a
1 instance1
0 instance2
1 instance3
标签和实例由 t 分隔。第一行是列名称列表。对于 n 路分类,标签 ID 应为 0 和 n-1 之间(含)之间的整数。
我们使用Google的中文词汇文件models/google_zh_vocab.txt ,其中包含21128个汉字。
我们首先对书评语料库进行预处理。在预处理阶段,需要将语料处理成指定预训练模型( --data_processor )所需的格式:
python3 preprocess.py --corpus_path corpora/book_review_bert.txt --vocab_path models/google_zh_vocab.txt
--dataset_path dataset.pt --processes_num 8 --data_processor bert
请注意,需要6>=1.12.0 。
预处理非常耗时。使用多个进程可以大大加快预处理速度( --processes_num )。默认使用 BERT 分词器 ( --tokenizer bert )。预处理后,原始文本转换为dataset.pt ,这是pretrain.py的输入。然后我们下载Google预训练的中文BERT模型google_zh_model.bin (TencentPretrain格式,原始模型来自这里),并将其放在models文件夹中。我们加载预训练的中文 BERT 模型,并在书评语料库上进一步对其进行预训练。预训练模型通常由嵌入层、编码器层和目标层组成。为了构建预训练模型,我们应该提供相关信息。配置文件( --config_path )指定预训练模型使用的模块和超参数。更多详细信息可以在models/bert/base_config.json中找到。假设我们有一台有 8 个 GPU 的机器:
python3 pretrain.py --dataset_path dataset.pt --vocab_path models/google_zh_vocab.txt
--pretrained_model_path models/google_zh_model.bin
--config_path models/bert/base_config.json
--output_model_path models/book_review_model.bin
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7
--total_steps 5000 --save_checkpoint_steps 1000 --batch_size 32
mv models/book_review_model.bin-5000 models/book_review_model.bin
请注意,由pretrain.py训练的模型带有记录训练步骤的后缀 ( --total_steps )。我们可以删除后缀以方便使用。
然后我们在下游分类数据集上微调预训练模型。我们使用book_review_model.bin的嵌入层和编码器层,它是pretrain.py的输出:
python3 finetune/run_classifier.py --pretrained_model_path models/book_review_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--train_path datasets/book_review/train.tsv
--dev_path datasets/book_review/dev.tsv
--test_path datasets/book_review/test.tsv
--epochs_num 3 --batch_size 32
微调分类器模型的默认路径是models/finetuned_model.bin 。值得注意的是,预训练的实际批量大小为--batch_size乘以--world_size ;下游任务(例如分类)的实际批量大小为--batch_size 。然后我们用微调后的模型进行推理。
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--test_path datasets/book_review/test_nolabel.tsv
--prediction_path datasets/book_review/prediction.tsv
--labels_num 2
--test_path指定要预测的文件的路径。该文件应包含 text_a 列。 --prediction_path指定预测结果文件的路径。我们需要通过--labels_num显式指定标签的数量。上述数据集是一个双向分类数据集。
以上内容提供了使用TencentPretrain进行预处理、预训练、微调、推理的基本方法。更多用例可以在完整的➡️快速入门⬅️中找到。完整的快速入门包含丰富的用例,涵盖了大部分预训练相关的应用场景。建议用户阅读完整的快速入门,以便合理使用该项目。
本部分提供一系列 ➡️预训练数据⬅️ 的链接。 TencentPretrain可以直接加载这些预训练数据。
本部分提供一系列➡️下游数据集⬅️的链接。 TencentPretrain可以直接加载这些数据集。
在TencentPretrain的帮助下,我们预训练了不同属性的模型(例如基于不同模态、编码器和目标的模型)。预训练模型的详细介绍及其下载链接可以在➡️modelzoo⬅️找到。所有预训练模型都可以直接由TencentPretrain加载。
腾讯Pretrain的组织方式如下:
TencentPretrain/
|--tencentpretrain/
| |--embeddings/ # contains modules of embedding component
| |--encoders/ # contains modules of encoder component such as RNN, CNN, Transformer
| |--decoders/ # contains modules of decoder component
| |--targets/ # contains modules of target component such as language modeling, masked language modeling
| |--layers/ # contains frequently-used NN layers
| |--models/ # contains model.py, which combines modules of different components
| |--utils/ # contains frequently-used utilities
| |--model_builder.py
| |--model_loader.py
| |--model_saver.py
| |--opts.py
| |--trainer.py
|
|--corpora/ # contains pre-training data
|--datasets/ # contains downstream tasks
|--models/ # contains pre-trained models, vocabularies, and configuration files
|--scripts/ # contains useful scripts for pre-training models
|--finetune/ # contains fine-tuning scripts for downstream tasks
|--inference/ # contains inference scripts for downstream tasks
|
|--preprocess.py
|--pretrain.py
|--README.md
|--README_ZH.md
|--requirements.txt
|--LICENSE
代码是根据组件(例如嵌入、编码器)进行组织的。用户可以毫不费力地使用和扩展它。
➡️使用说明⬅️提供了TencentPretrain的综合使用示例,帮助用户快速实现BERT、GPT-2、ELMo、T5、CLIP等预训练模型,并在一系列下游任务上对预训练模型进行微调。
腾讯Pretrain已被用于众多竞赛的获奖方案中。在本节中,我们提供了一些使用TencentPretrain在CLUE等比赛中取得SOTA结果的示例。更多详细信息请参阅➡️竞赛解决方案⬅️。
@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}
}