首页 » 互联网 » 华为诺亚方舟开源哪吒、TinyBERT模型可直接下载运用_哪吒_模子

华为诺亚方舟开源哪吒、TinyBERT模型可直接下载运用_哪吒_模子

南宫静远 2024-12-07 01:09:18 0

扫一扫用手机浏览

文章目录 [+]

华为诺亚方舟实验室开源了一批精良预演习措辞模型,性能更好、利用更方便。

昨日,华为诺亚方舟实验室的 NLP 团队开源了两个主要的预演习措辞模型——哪吒和 TinyBERT。
这两个模型可以直接下载、预演习和微调。
华为语音语义首席科学家刘群在微博上转发了这一。

华为诺亚方舟开源哪吒、TinyBERT模型可直接下载运用_哪吒_模子 互联网

项目地址:https://github.com/huawei-noah/Pretrained-Language-Model

根据 GitHub 上的先容,这一项目是诺亚方舟实验室用来开源各种预演习模型的项目,目前有两个,日后不用除有更多模型加入进来。
哪吒模型该项目中第一个开源的模型是哪吒(NEZHA:NEural contextualiZed representation for CHinese lAnguage understanding),是华为诺亚方舟实验室自研的预演习措辞模型,在一些 NLP 任务上取得了 SOTA 的表现。
这一模型基于 BERT,可以在普通的 GPU 集群上进行演习,同时领悟了英伟达和谷歌代码的早期版本。

在今年的智源大会上,刘群先容了哪吒模型的干系事情。

哪吒是一个基于 BERT 进行优化和改进的预演习措辞模型,中文采取的语料是 Wikipedia 和 Baike 和 News,而谷歌的中文语料只用了 Wikipedia。
英文的哪吒采取的是 Wikipedia 和 BookCorpus,跟中文一样。

哪吒在演习过程中采取了华为云,能够实现多卡多机演习。
当然,本次发布的哪吒和华为的版本有些不同,可以在一样平常的 GPU 上演习。
此外,哪吒还采取了英伟达的稠浊精度演习方法,本次项目开源的时候也公开了。

预演习过程

模型的利用方法和 BERT 类似。
首先,用户须要准备数据,方法和 BERT 准备数据的过程类似:

python utils/create_pretraining_data.py \ --input_file=./sample_text.txt \ --output_file=/tmp/tf_examples.tfrecord \ --vocab_file=./your/path/vocab.txt \ --do_lower_case=True \ --max_seq_length=128 \ --max_predictions_per_seq=20 \ --masked_lm_prob=0.15 \ --random_seed=12345 \ --dupe_factor=5

在演习过程中,用户须要准备 horovod 分布式演习环境,然后运行 script 文件夹中的 run_pretraining.sh 文件即可。

微调过程

目前,哪吒模型支持三种任务上的微调:文本分类、序列标注和类似 SQuAD 的机器阅读理解,微调的干系代码基于谷歌的干系代码。

预演习过程如下:

下载预演习模型,解压模型文件、词汇文件和配置文件到文件夹「nezha」中;建立微调任务,根据任务不同运行不同的脚本:scripts/run_clf.sh 脚本用于文本分类任务,如 LCQMC、ChnSenti 和 XNLI;scripts/run_seq_labelling.sh 脚本用于序列标注任务,如 Peoples-daily-NER;scripts/run_reading.sh 脚本用于机器阅读理解任务,如 CMRC 2018;从干系输出位置得到结果。

须要把稳的是,CMRC 任务的评估稍有不同,须要运行以下代码:

python cmrc2018_evaluate.py data/cmrc/cmrc2018_dev.json output/cmrc/dev_predictions.json output/cmrc/metric.txt.

以上任务须要的文件都保存在了项目文件夹中。

哪吒模型已经可以下载,已有四种中文的预演习模型,分别是 base、large 和对应的 mask 和全词 mask 类型。

下载地址:https://pan.baidu.com/s/1V7btNIDqBHvz4g9LOPLeeg密码:x3qk

TinyBERT

本项目开源的另一个模型是 TinyBERT,这是一个通过蒸馏方法得到的 BERT 模型。

TinyBERT 的建模过程。

比较原版的 BERT-base,TinyBERT 比它小了 7.5 倍,推理速率则快了 9.4 倍。
无论是在预演习阶段还是特界说务学习阶段,TinyBERT 的性能都更好。

利用方法

TinyBERT 的利用方法和哪吒项目有所不同,它分为三个步骤:蒸馏、数据增强以及特界说务蒸馏。

1. 蒸馏

在第一个蒸馏阶段,研究者须要利用原版的 BERT-base(没有微调的版本)作为西席模型、通过 Transformer 蒸馏的方法,可以得到一个泛化的 TinyBERT 模型。
之后再进行特界说务蒸馏。

泛化蒸馏有两个步骤:天生 json 形式的语料,然后进行蒸馏。

第一步,利用 use pregenerate_training_data.py 文件,天生语料。

# ${BERT_BASE_DIR}$ includes the BERT-base teacher model.python pregenerate_training_data.py --train_corpus ${CORPUS_RAW} \ --bert_model ${BERT_BASE_DIR}$ \ --reduce_memory --do_lower_case \ --epochs_to_generate 3 \ --output_dir ${CORPUS_JSON_DIR}$

第二步,利用 use general_distill.py 进行蒸馏。

# ${STUDENT_CONFIG_DIR}$ includes the config file of student_model. python general_distill.py --pregenerated_data ${CORPUS_JSON}$ \ --teacher_model ${BERT_BASE}$ \ --student_model ${STUDENT_CONFIG_DIR}$ \ --reduce_memory --do_lower_case \ --train_batch_size 256 \ --output_dir ${GENERAL_TINYBERT_DIR}$

在项目中,研究者供应了已蒸馏过的 TinyBERT 模型。

2. 数据增强

数据增强是一个能够扩展特界说务中演习集的方法。
通过学习更多任务干系的样本,学生模型的泛化能力可以进一步提升。
研究者在数据增强阶段结合了 BERT 和 GloVe 的方法,进行词级别的更换,以此来增强数据。

在这里,用户可以利用 data_augmentation.py 文件进行数据增强。
增强后的数据集文件会自动保存在对应的 ${GLUE_DIR/TASK_NAME}$ 中。

python data_augmentation.py --pretrained_bert_model ${BERT_BASE_DIR}$ \ --glove_embs ${GLOVE_EMB}$ \ --glue_dir ${GLUE_DIR}$ \ --task_name ${TASK_NAME}$

在运行 GLUE 任务中的数据增强代码前,你须要下载 GLUE 数据,并解压文件到 GLUE_DIR 中。
在命令行中,TASK_NAME 可以是 GLUE 任务中的 CoLA、SST-2、MRPC、STS-B、QQP、MNLI、QNLI 和 RTE。

3. 特界说务蒸馏

这一阶段紧张对 transformer 进行进一步蒸馏,以提升在特界说务上的性能。
这一阶段分两步:首先进行中间层蒸馏,然后进行预测层蒸馏。

运行 task_distill.py 即可进行中间层蒸馏。

# ${FT_BERT_BASE_DIR}$ contains the fine-tuned BERT-base model.python task_distill.py --teacher_model ${FT_BERT_BASE_DIR}$ \ --student_model ${GENERAL_TINYBERT_DIR}$ \ --data_dir ${TASK_DIR}$ \ --task_name ${TASK_NAME}$ \ --output_dir ${TMP_TINYBERT_DIR}$ \ --max_seq_length 128 \ --train_batch_size 32 \ --num_train_epochs 10 \ --aug_train \ --do_lower_case

之后运行 task_distill.py 即可进行预测层蒸馏。

python task_distill.py --pred_distill \ --teacher_model ${FT_BERT_BASE_DIR}$ \ --student_model ${TMP_TINYBERT_DIR}$ \ --data_dir ${TASK_DIR}$ \ --task_name ${TASK_NAME}$ \ --output_dir ${TINYBERT_DIR}$ \ --aug_train \ --do_lower_case \ --learning_rate 3e-5 \ --num_train_epochs 3 \ --eval_step 100 \ --max_seq_length 128 \ --train_batch_size 32

模型性能评估

TinyBERT 的模型性能评估利用的是单独的代码,运行 task_distill.py 即可。

${TINYBERT_DIR}$ includes the config file, student model and vocab file.python task_distill.py --do_eval \ --student_model ${TINYBERT_DIR}$ \ --data_dir ${TASK_DIR}$ \ --task_name ${TASK_NAME}$ \ --output_dir ${OUTPUT_DIR}$ \ --do_lower_case \ --eval_batch_size 32 \ --max_seq_length 128

安装方法

对付 TinyBERT,用户须要下载专门的模型,安装干系依赖(基于 Python3):

pip install -r requirements.txt

模型分为以下几种:

1. 没有特界说务蒸馏的泛化模型:论文复现版本:

General_TinyBERT(4layer-312dim)下载地址:https://drive.google.com/uc?export=download&id=1dDigD7QBv1BmE6pWU71pFYPgovvEqOOj

General_TinyBERT(6layer-768dim)下载地址:https://drive.google.com/uc?export=download&id=1wXWR00EHK-Eb7pbyw0VP234i2JTnjJ-x

第二版 (2019/11/18) 利用更多数据、无 [MASK] 语料版本:

General_TinyBERT_v2(4layer-312dim)下载地址:https://drive.google.com/open?id=1PhI73thKoLU2iliasJmlQXBav3v33-8z

General_TinyBERT_v2(6layer-768dim)下载地址:https://drive.google.com/open?id=1r2bmEsQe4jUBrzJknnNaBJQDgiRKmQjF

2. GLUE 任务上蒸馏后的模型

每个任务对应一个模型,这些模型可以利用之前供应的评估代码进行评估:

TinyBERT(4layer-312dim)下载地址:https://drive.google.com/uc?export=download&id=1_sCARNCgOZZFiWTSgNbE7viW_G5vIXYg

TinyBERT(6layer-768dim)下载地址:https://drive.google.com/uc?export=download&id=1Vf0ZnMhtZFUE0XoD3hTXc6QtHwKr_PwS

项目作者表示,之后他们会测试 TinyBERT 在中文任务上的表现、考试测验利用哪吒或 ALBERT 作为西席模型进行蒸馏,以及公开性能更好的模型等。

标签:

相关文章