华为诺亚方舟开源哪吒、TinyBERT模型,可直接下载使用
点击上方“视学算法”,选择“星标”公众号
重磅干货,第一时间送达
来源:机器之心
华为诺亚方舟实验室开源了一批优秀预训练语言模型,性能更好、使用更方便。
昨日,华为诺亚方舟实验室的 NLP 团队开源了两个重要的预训练语言模型——哪吒和 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 作为教师模型进行蒸馏,以及公开性能更好的模型等。
- END -
如果看到这里,说明你喜欢这篇文章,请转发、点赞。扫描下方二维码或者微信搜索「perfect_iscas」,添加好友后即可获得10套程序员全栈课程+1000套PPT和简历模板,向我私聊「进群」二字即可进入高质量交流群。
↓扫描二维码进群↓
喜欢文章,点个在看
华为诺亚方舟开源哪吒、TinyBERT模型,可直接下载使用相关推荐
- 华为诺亚方舟开源预训练模型“哪吒”,4项任务均达到SOTA
出品 | AI科技大本营(ID:rgznai100) BERT之后,新的预训练语言模型XLnet.RoBERTa.ERNIE不断推出,这次,华为诺亚方舟实验室开源了基于BERT的中文预训练语言模型NE ...
- 华为诺亚方舟预训练语言模型NEZHA、TinyBERT开源代码
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :华为,专知 [人工智能资源 ...
- 1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...
行早 发自 凹非寺 量子位 | 公众号 QbitAI 华为诺亚方舟实验室开源了第一个亿级中文多模态数据集:悟空. 这个新发布的数据集不仅规模大--包含1亿组图文对,而且质量也很高. 所有图像都是筛选过 ...
- 内存占用少,计算速度快!华为诺亚方舟Lab开源即插即用的多用卷积核(NeurIPS 2018)...
点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自诺亚实验室(ID:Noah_ark_lab). 华为诺亚方舟实验室开源了一种即插即用的卷积核,该项工作发表在NeurIPS 2018上,论文题 ...
- 刘群:华为诺亚方舟NLP预训练模型工作的研究与应用 | AI ProCon 2019
演讲嘉宾 | 刘群(华为诺亚方舟实验首席科学家) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 预训练语言模型对自然语言处理领域产生了非常大的影响,在近期由CSDN主办的 ...
- ACL 2022丨香港大学华为诺亚方舟新工作:生成式预训练语言模型的量化压缩
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 近日,香港大学与华为诺亚方舟实验室在 ACL 2022 上联合发表了 ...
- 收藏 | 图像处理Transformer:华为诺亚、北大等IPT模型,刷榜
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...
- 【华为诺亚方舟实验室】2022届毕业生招聘--决策(强化学习)推理方向
深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 来源:华为诺亚方舟实验室官微 诺亚方舟实验室(No ...
- 【学习求职必备】认真认识一下世界末日那年成立的“华为诺亚方舟实验室”...
Yolo 计算机视觉爱好者,大连理工大学大四在读,保研至武汉大学 作者 | Yolo 编辑 | Yolo 接着上一篇介绍百度AI研究院之后,今天带大家认识一下国内最神秘的AI研究院--华为诺亚方舟实验 ...
最新文章
- SpringMVC4.x源码分析(五):request请求寻址HandlerMethod原理
- luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
- CVPR 2021|SensatUrban:城市规模点云数据集
- springboot activiti 整合项目框架源码 shiro 安全框架 druid 数据库连接池
- opencv4.2.0 视频去抖动算法代码
- 【opencv系列05】OpenCV4.X鼠标回调函数
- 对Spring IOC的理解(转)
- part-time job
- 哪些事是你当了大学老师之后才知道的?
- 《机器学习训练秘籍》中文版58章节 完整开源 吴恩达
- 音乐播放器App界面优秀案例,通过案例看大咖如何设计?
- 暴力破解(一)——python脚本暴力破解 加密的zip压缩文件
- 元胞自动机及其MATLAB实例
- python 中的拷贝、浅拷贝与深拷贝
- 分享台阶价格对比逻辑。(商城中购买数量越多,单价越低)
- lzma java sdk,Java LZMA 磁盘与内存压缩实现
- 解决2K 显示器的尴尬为MacBook 开启HiDPI(新方法支持M1)
- 海洋重力数据处理步骤
- arcade 物理系统_RetroPie和X-Arcade Tankstick-完美的Retro Arcade(加上键绑定,配置和操作方法)
- 分块专题整理(分块+莫队)
热门文章
- A-模块 配置splunk
- 带你了解ASA苹果搜索广告审核不通过的原因
- 关于知道区块的geohash值,求区块中点坐标和四角坐标
- dxo手机拍照排名_重磅!这款全能旗舰手机通过相机评测新基准,实力依旧强势|相机|镜头|广角镜头|手机|oppo...
- 求一个数组的最大k个数(java)
- 如何从0到1做一次完整的安全测试
- android将彩图转为黑白_如何快速修出高质感黑白照片
- 高一计算机二进制,高中信息技术《二进制及其转换》课件--人教版.ppt
- 【Java 虚拟机原理】垃圾收集器 ( Serial | ParNew | Parallel Scavenge | CMS | Serial Old - MSC | Parallel Old )
- 软件行业律师咨询实录