@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}
}
English | 中文
TencentPretrain:腾讯预训练模型框架
预训练已经成为人工智能技术的重要组成部分,为大量人工智能相关任务带来了显著提升。TencentPretrain是一个用于对文本、图像、语音等模态数据进行预训练和微调的工具包。TencentPretrain遵循模块化的设计原则。通过模块的组合,用户能迅速精准的复现已有的预训练模型,并利用已有的接口进一步开发更多的预训练模型。通过TencentPretrain,我们建立了一个模型仓库,其中包含不同性质的预训练模型(例如基于不同模态、编码器、目标任务)。用户可以根据具体任务的要求,从中选择合适的预训练模型使用。TencentPretrain继承了开源项目UER (https://github.com/dbiir/UER-py/) 的部分工作,并在其基础上进一步开发,形成支持多模态的预训练模型框架。
项目使用文档:https://github.com/Tencent/TencentPretrain/wiki/主页
目录
项目特色
TencentPretrain有如下几方面优势:
依赖环境
快速上手
这里我们通过常用的例子来简要说明如何使用TencentPretrain,更多的细节请参考使用说明章节。我们首先使用文本预训练模型BERT和书评情感分类数据集。我们在书评语料上对模型进行预训练,然后在书评情感分类数据集上对其进行微调。这个过程有三个输入文件:书评语料,书评情感分类数据集和中文词典。这些文件均为UTF-8编码,并被包括在这个项目中。
BERT模型要求的预训练语料格式是一行一个句子,不同文档使用空行分隔,如下所示:
书评语料是由书评情感分类数据集去掉标签得到的。我们将一条评论从中间分开,从而形成一个两句话的文档,具体可见corpora文件夹中的book_review_bert.txt。
分类数据集的格式如下:
标签和文本之间用\t分隔,第一行是列名。对于n分类,标签应该是0到n-1之间(包括0和n-1)的整数。
词典文件的格式是一行一个单词,我们使用谷歌提供的包含21128个中文字符的词典文件models/google_zh_vocab.txt。
我们首先对书评语料进行预处理。预处理阶段需要将语料处理成为指定预训练模型要求的数据格式(*–data_processor*):
注意我们需要安装 six>=1.12.0。
预处理非常耗时,使用多个进程可以大大加快预处理速度(*–processes_num)。默认的分词器为 –tokenizer bert 。原始文本在预处理之后被转换为pretrain.py可以接收的输入,dataset.pt。然后下载Google中文预训练模型google_zh_model.bin(此文件为TencentPretrain支持的格式,原始模型来自于这里),并将其放在 models 文件夹中。接着加载Google中文预训练模型,在书评语料上对其进行增量预训练。预训练模型通常由词向量层,编码层和目标任务层组成。因此要构建预训练模型,我们应该给出这些信息,比如编码层使用什么类型的Encoder模块。这里我们通过配置文件(–config_path)指定模型使用的模块类型和超参数等信息。具体可见models/bert/base_config.json*。假设我们有一台带有8个GPU的机器:
请注意,pretrain.py输出的模型会带有记录训练步数的后缀(*–total_steps*),这里我们可以删除后缀以方便使用。
然后,我们在下游分类数据集上微调预训练模型,我们使用 pretrain.py 的输出book_review_model.bin(加载词向量层和编码层参数):
微调后的模型的默认路径是models/finetuned_model.bin。注意到预训练的实际batch size大小是 –batch_size 乘以 –world_size;分类等下游任务微调的实际的batch size大小是 –batch_size 。然后我们利用微调后的分类器模型进行预测:
–test_path 指定需要预测的文件,文件需要包括text_a列; –prediction_path 指定预测结果的文件; 注意到我们需要指定分类任务标签的个数 –labels_num ,这里是二分类任务。
以上我们给出了用TencentPretrain进行预处理、预训练、微调、推理的基本使用方式。更多的例子参见完整的
快速上手
。完整的快速上手包含了全面的例子,覆盖了大多数预训练相关的使用场景。推荐用户完整阅读快速上手章节,以便能合理的使用本项目。
预训练数据
我们提供了链接,指向一系列开源的
预训练数据
。TencentPretrain可以直接加载这些预训练数据。
下游任务数据集
我们提供了链接,指向一系列开源的
下游任务数据集
。TencentPretrain可以直接加载这些数据集。
预训练模型仓库
借助TencentPretrain,我们训练不同性质的预训练模型(例如基于不同模态、编码器、目标任务)。用户可以在
预训练模型仓库
中找到各种性质的预训练模型以及它们对应的描述和下载链接。所有预训练模型都可以由TencentPretrain直接加载。
使用说明
TencentPretrain使用解耦的设计框架,方便用户使用和扩展,项目组织如下:
在
使用说明
中给出了全面的TencentPretrain使用示例。这些示例可以帮助用户快速实现BERT、GPT-2、ELMo、T5、CLIP等预训练模型以及使用这些预训练模型在一系列下游任务上进行微调。
竞赛解决方案
TencentPretrain已被用于许多竞赛的获奖解决方案中。在本章节中,我们提供了一些使用TencentPretrain在竞赛中获得SOTA成绩的示例,例如CLUE。更多详细信息参见
竞赛解决方案
。
引用
如果您在您的学术工作中使用我们的工作(比如模型仓库中的预训练模型),可以引用我们的论文: