TinyBert

#1. 概述 此模型基于[TinyBERT: Distilling BERT for Natural Language Understanding](https://arxiv.org/abs/1909.10351) 实现。TinyBERT比BERT-base小7.5倍,推理速度快9.4倍,在自然语言理解任务中取得了竞争的性能。它在**预培训**和**特定任务学习**阶段执行一种新型变压器蒸馏。 项目 | 说明 -----------------| -------------------------------------------------------------------------------- 参考论文 | TinyBERT: Distilling BERT for Natural Language Understanding 使用框架 | Mindspore-1.0.0 Pretrain训练集 | ENWiki(维基百科dump文件) 预训练总epoch数 |3 训练硬件及耗时 | 6\*v100,20小时 Fine tune训练集 | GLUE 总epoch数 | 25\~50不等 训练硬件及耗时 | 6\*v100,0.5小时 推理硬件及速度 | CPU,2.6s/pic 输入数据的尺寸 | input_ids(Batch\*128), input_mask(Batch\*128), token_type_id(Batch\*128) ### 模型在GLUE各个数据集上的Eval效果对比 模型 | MRPC (acc/f1) ---- | ----- 原论文TinyBert4 | 0.8797 复现TinyBert4 | 0.8717 ##1.2 数据准备 ### enwiki数据集处理 \# 1. 下载 zhwiki 或 enwiki 数据集,进行一般蒸馏。 axel -n 10 http://ftp.acc.umu.se/mirror/wikimedia.org/dumps/enwiki/20201001/enwiki-20201001-pages-articles.xml.bz2 \# 2. 使用[WikiExtractor 提取和清理数据集中的文本](https://github.com/attardi/wikiextractor)。 python -m wikiextractor.WikiExtractor -b 200M -o enwiki-20201001 enwiki-20201001-pages-articles.xml.bz2 \# 3. 将数据集转换为 TF 记录格式,请参阅 BERT 存储库create_pretraining_data.py[的数据库](https://github.com/google-research/bert)。处理完成后有160多GB的数据。 ## Glue数据集处理、 1. 数据下载:下载用于任务蒸馏的GLUE数据集。 2. 数据增强:参考[Pretrained-Language-Model/TinyBERT at master · huawei-noah/Pretrained-Language-Model (github.com)](https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/TinyBERT) 下的data_augmentation.py。 3. 将数据集文件从 json 格式转换为 tfrecord 格式,请参阅 run_classifier.py [BERT 存储库](https://github.com/google-research/bert)中的数据库 ## TinyBert参数设置。 见src/td_config.py #2. 训练 ##2.1 训练算法基本信息 - 任务类型:NLP 预训练 - 支持的框架引擎:Mindspore-1.0.1-python3.7 - 算法输入: - 存储在OBS上的数据集,必须按照tfrecoed的格式进行存储,详情请查看下文第4节案例指导。 - Bert-base预训练模型。可以从[mindspore model_zoo](https://download.mindspore.cn/model_zoo/official/nlp/bert/)、 [Google Bert Base](https://github.com/google-research/bert)中获取。 可以在[ModelArts Model Switch](https://console.huaweicloud.com/modelarts/?region=cn-north-4#/model-switch)中转化。 - 算法输出: - 用于Mindspore推理的ckpt模型。 ##2.2 在昇腾910上进行进行Task Distill 训练 在运行下面的命令之前,请检查和已设置。请将路径设置为绝对完整路径,例如:\"/用户名/checkpoint_100_300.ckpt\"。 - 任务类型:NLP特定任务训练 - 支持的框架引擎:Mindspore-1.0.1-python3.7 - 算法输入: - 存储在OBS上的数据集,必须按照tfrecoed的格式进行存储。 文件结构如下: ```` MRPC/ ├── dev │   └── MRPC-dev.tfrecord └── train | └── MPRC-train.tfrecord ├── schema.json ```` - Bert-base预训练模型。 - TinyBert预训练模型。(可以从修改为OBS上自己的预训练模型) - 算法输出: - 用于Mindspore推理的ckpt模型。 ```` ```` ### Task Distill 参数 #### for train in GLUD Dataset MRPC task python train.py \ --do_train=true \ --eval=false \ --data_url=obs://glue/glue_data/MRPC/ \ --train_url=obs://tinybert/outputs \ --load_weight=pre-trained_weights/tinyBert-general-uncased/General_TinyBERT_4L.ckpt \ --lr=1e-5 \ --td_phase1_epoch_size=10 \ --td_phase2_epoch_size=3 #### for eval in GLUD Dataset MRPC task python train.py \ --do_train=false \ --eval=true \ --data_url=obs://glue/glue_data/MRPC/ \ --train_url=obs://tinybert/outputs \ --load_weight=trained_model/model/tinyBERT_4L_MRPC.ckpt #3. GPU/CPU推理 元模型来源 选择 从训练中选择,选择训练作业及版本。 (1)在ModelArts左侧导航栏中选择“部署上线 -> 在线服务”,然后点击页面中的“部署”; (2)在部署页面填写参数,其中在“模型列表”选择要导入的模型及版本,计算节点规格选择Acend即可; #4. 案例指导 本算法的详细使用方法,请查看[ModelArts AI Gallery算法TinyBert使用指导](https://marketplace.huaweicloud.com/markets/aihub/article/detail/?content_id=2add2606-ee68-4dca-bc9b-b45102dfd437) 、[TinyBert官方代码](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/nlp/tinybert)。
#1. 概述
此模型基于TinyBERT: Distilling BERT for Natural Language
Understanding
实现。TinyBERT比BERT-base小7.5倍,推理速度快9.4倍,在自然语言理解任务中取得了竞争的性能。它在预培训和特定任务学习阶段执行一种新型变压器蒸馏。
项目 | 说明 |
---|---|
参考论文 | TinyBERT: Distilling BERT for Natural Language Understanding |
使用框架 | Mindspore-1.0.0 |
Pretrain训练集 | ENWiki(维基百科dump文件) |
预训练总epoch数 | 3 |
训练硬件及耗时 | 6*v100,20小时 |
Fine tune训练集 | GLUE |
总epoch数 | 25~50不等 |
训练硬件及耗时 | 6*v100,0.5小时 |
推理硬件及速度 | CPU,2.6s/pic |
输入数据的尺寸 | input_ids(Batch*128), input_mask(Batch*128), token_type_id(Batch*128) |
模型在GLUE各个数据集上的Eval效果对比
模型 | MRPC (acc/f1) |
---|---|
原论文TinyBert4 | 0.8797 |
复现TinyBert4 | 0.8717 |
##1.2 数据准备
enwiki数据集处理
# 1. 下载 zhwiki 或 enwiki 数据集,进行一般蒸馏。
axel -n 10 http://ftp.acc.umu.se/mirror/wikimedia.org/dumps/enwiki/20201001/enwiki-20201001-pages-articles.xml.bz2
# 2. 使用WikiExtractor
提取和清理数据集中的文本。
python -m wikiextractor.WikiExtractor -b 200M -o enwiki-20201001 enwiki-20201001-pages-articles.xml.bz2
# 3. 将数据集转换为 TF 记录格式,请参阅 BERT
存储库create_pretraining_data.py的数据库。处理完成后有160多GB的数据。
Glue数据集处理、
-
数据下载:下载用于任务蒸馏的GLUE数据集。
-
数据增强:参考Pretrained-Language-Model/TinyBERT at master ·
huawei-noah/Pretrained-Language-Model
(github.com)
下的data_augmentation.py。 -
将数据集文件从 json 格式转换为 tfrecord 格式,请参阅
run_classifier.py BERT
存储库中的数据库
TinyBert参数设置。
见src/td_config.py
#2. 训练
##2.1 训练算法基本信息
-
任务类型:NLP 预训练
-
支持的框架引擎:Mindspore-1.0.1-python3.7
-
算法输入:
-
存储在OBS上的数据集,必须按照tfrecoed的格式进行存储,详情请查看下文第4节案例指导。
-
Bert-base预训练模型。可以从mindspore model_zoo、
Google Bert Base中获取。
可以在ModelArts Model Switch中转化。
-
-
算法输出:
- 用于Mindspore推理的ckpt模型。
##2.2 在昇腾910上进行进行Task Distill 训练
在运行下面的命令之前,请检查和已设置。请将路径设置为绝对完整路径,例如:"/用户名/checkpoint_100_300.ckpt"。
-
任务类型:NLP特定任务训练
-
支持的框架引擎:Mindspore-1.0.1-python3.7
-
算法输入:
- 存储在OBS上的数据集,必须按照tfrecoed的格式进行存储。
文件结构如下:
MRPC/ ├── dev │   └── MRPC-dev.tfrecord └── train | └── MPRC-train.tfrecord ├── schema.json
-
Bert-base预训练模型。
-
TinyBert预训练模型。(可以从修改为OBS上自己的预训练模型)
- 存储在OBS上的数据集,必须按照tfrecoed的格式进行存储。
-
算法输出:
- 用于Mindspore推理的ckpt模型。
Task Distill 参数
for train in GLUD Dataset MRPC task
python train.py \
--do_train=true \
--eval=false \
--data_url=obs://glue/glue_data/MRPC/ \
--train_url=obs://tinybert/outputs \
--load_weight=pre-trained_weights/tinyBert-general-uncased/General_TinyBERT_4L.ckpt \
--lr=1e-5 \
--td_phase1_epoch_size=10 \
--td_phase2_epoch_size=3
for eval in GLUD Dataset MRPC task
python train.py \
--do_train=false \
--eval=true \
--data_url=obs://glue/glue_data/MRPC/ \
--train_url=obs://tinybert/outputs \
--load_weight=trained_model/model/tinyBERT_4L_MRPC.ckpt
#3. GPU/CPU推理
元模型来源 选择 从训练中选择,选择训练作业及版本。
(1)在ModelArts左侧导航栏中选择“部署上线 -> 在线服务”,然后点击页面中的“部署”;
(2)在部署页面填写参数,其中在“模型列表”选择要导入的模型及版本,计算节点规格选择Acend即可;
#4. 案例指导
本算法的详细使用方法,请查看ModelArts AI Gallery算法TinyBert使用指导 、TinyBert官方代码。
#1. 概述
此模型基于TinyBERT: Distilling BERT for Natural Language
Understanding
实现。TinyBERT比BERT-base小7.5倍,推理速度快9.4倍,在自然语言理解任务中取得了竞争的性能。它在预培训和特定任务学习阶段执行一种新型变压器蒸馏。
项目 | 说明 |
---|---|
参考论文 | TinyBERT: Distilling BERT for Natural Language Understanding |
使用框架 | Mindspore-1.0.0 |
Pretrain训练集 | ENWiki(维基百科dump文件) |
预训练总epoch数 | 3 |
训练硬件及耗时 | 6*v100,20小时 |
Fine tune训练集 | GLUE |
总epoch数 | 25~50不等 |
训练硬件及耗时 | 6*v100,0.5小时 |
推理硬件及速度 | CPU,2.6s/pic |
输入数据的尺寸 | input_ids(Batch*128), input_mask(Batch*128), token_type_id(Batch*128) |
模型在GLUE各个数据集上的Eval效果对比
模型 | MRPC (acc/f1) |
---|---|
原论文TinyBert4 | 0.8797 |
复现TinyBert4 | 0.8717 |
##1.2 数据准备
enwiki数据集处理
# 1. 下载 zhwiki 或 enwiki 数据集,进行一般蒸馏。
axel -n 10 http://ftp.acc.umu.se/mirror/wikimedia.org/dumps/enwiki/20201001/enwiki-20201001-pages-articles.xml.bz2
# 2. 使用WikiExtractor
提取和清理数据集中的文本。
python -m wikiextractor.WikiExtractor -b 200M -o enwiki-20201001 enwiki-20201001-pages-articles.xml.bz2
# 3. 将数据集转换为 TF 记录格式,请参阅 BERT
存储库create_pretraining_data.py的数据库。处理完成后有160多GB的数据。
Glue数据集处理、
-
数据下载:下载用于任务蒸馏的GLUE数据集。
-
数据增强:参考Pretrained-Language-Model/TinyBERT at master ·
huawei-noah/Pretrained-Language-Model
(github.com)
下的data_augmentation.py。 -
将数据集文件从 json 格式转换为 tfrecord 格式,请参阅
run_classifier.py BERT
存储库中的数据库
TinyBert参数设置。
见src/td_config.py
#2. 训练
##2.1 训练算法基本信息
-
任务类型:NLP 预训练
-
支持的框架引擎:Mindspore-1.0.1-python3.7
-
算法输入:
-
存储在OBS上的数据集,必须按照tfrecoed的格式进行存储,详情请查看下文第4节案例指导。
-
Bert-base预训练模型。可以从mindspore model_zoo、
Google Bert Base中获取。
可以在ModelArts Model Switch中转化。
-
-
算法输出:
- 用于Mindspore推理的ckpt模型。
##2.2 在昇腾910上进行进行Task Distill 训练
在运行下面的命令之前,请检查和已设置。请将路径设置为绝对完整路径,例如:"/用户名/checkpoint_100_300.ckpt"。
-
任务类型:NLP特定任务训练
-
支持的框架引擎:Mindspore-1.0.1-python3.7
-
算法输入:
- 存储在OBS上的数据集,必须按照tfrecoed的格式进行存储。
文件结构如下:
MRPC/ ├── dev │   └── MRPC-dev.tfrecord └── train | └── MPRC-train.tfrecord ├── schema.json
-
Bert-base预训练模型。
-
TinyBert预训练模型。(可以从修改为OBS上自己的预训练模型)
- 存储在OBS上的数据集,必须按照tfrecoed的格式进行存储。
-
算法输出:
- 用于Mindspore推理的ckpt模型。
Task Distill 参数
for train in GLUD Dataset MRPC task
python train.py \
--do_train=true \
--eval=false \
--data_url=obs://glue/glue_data/MRPC/ \
--train_url=obs://tinybert/outputs \
--load_weight=pre-trained_weights/tinyBert-general-uncased/General_TinyBERT_4L.ckpt \
--lr=1e-5 \
--td_phase1_epoch_size=10 \
--td_phase2_epoch_size=3
for eval in GLUD Dataset MRPC task
python train.py \
--do_train=false \
--eval=true \
--data_url=obs://glue/glue_data/MRPC/ \
--train_url=obs://tinybert/outputs \
--load_weight=trained_model/model/tinyBERT_4L_MRPC.ckpt
#3. GPU/CPU推理
元模型来源 选择 从训练中选择,选择训练作业及版本。
(1)在ModelArts左侧导航栏中选择“部署上线 -> 在线服务”,然后点击页面中的“部署”;
(2)在部署页面填写参数,其中在“模型列表”选择要导入的模型及版本,计算节点规格选择Acend即可;
#4. 案例指导
本算法的详细使用方法,请查看ModelArts AI Gallery算法TinyBert使用指导 、TinyBert官方代码。