华为诺亚方舟预训练语言模型NEZHA、TinyBERT开源代码
点上方蓝字计算机视觉联盟获取更多干货
在右上方 ··· 设为星标 ★,与你不见不散
编辑:Sophia
计算机视觉联盟 报道 | 公众号 CVLianMeng
转载于 :华为,专知
【人工智能资源(书籍+视频)全网收集,附下载!】
推荐文章【点击下面可直接跳转】:
如何快速下载不同网站文档!
AI博士笔记系列推荐:
博士笔记 | 周志华《机器学习》手推笔记“神经网络”
预训练语言模型对自然语言处理领域产生了非常大的影响,华为诺亚方舟实验首席科学家刘群,前不久在AICon全球人工智能与机器学习技术大会上,分享了华为诺亚方舟实验室在预训练语言模型研究与应用。最近就在github上开源了中文预训练模型NEZHA与高效的BERT压缩模型TinyBERT。
github链接:
https://github.com/huawei-noah/Pretrained-Language-Model
NEZHA:诺亚方舟实验室的中文预训练语言模型
首先,在华为内部服务器上重现了Google BERT-base和BERT-large的实验
在华为云上训练和运行成功
中文预训练模型包括:Wikipedia+Baike+News
训练与优化
基于华为云
多卡多机的数据并行
混合精读训练
LAMB优化器
模型改进
函数式相对位置编码
全词覆盖
高效的BERT压缩模型:TinyBERT
BERT性能强大,但不便于部署到算力、内存有限的设备上
提出一种专为Transformer模型设计的知识蒸馏方法,以BERT 作为老师蒸馏出一个小模型—TinyBERT
TinyBERT参数量为 BERT 的 1/7,预测速度是 BERT 的 9 倍, 在GLUE评测上相比BERT下降3个百分点
TinyBERT蒸馏:预训练蒸馏+下游任务蒸馏+数据增强
相关工作
Google新推出ALBERT模型
主要改进:
- Factorized embedding parameterization
- Cross-layer parameter sharing
- Inter-sentence coherence loss
优点:
- 大幅度减少模型参数,并加快训练速度
- 通过加深模型,可以在参数减少的情况下获得更好的性能
缺点:
- 模型如果不加深性能会有较多的下降
- 模型加深后推理时间增加了
开源代码
NEZHA
NEZHA是当前基于华为诺亚方舟实验室开发的BERT的中文预训练语言模型。
请注意,此代码用于在普通GPU集群上训练NEZHA,与我们训练华为云提供的NEZHA ModelArts所使用的代码不同。
为了方便重现我们的结果,此代码是在NVIDIA代码和Google代码的早期版本的基础上进行了修订,并整合了我们采用的所有技术。
预训练过程
准备数据的方法与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
微调过程
目前,NEZHA支持三种微调任务:文本分类,序列标记和类似SQuAD的机器阅读理解。微调的代码主要基于Google BERT,BERT NER,CMRC2018-DRCD-BERT,在NEZHA/中下载预训练模型并解压模型文件、词汇文件和配置文件。
微调过程如下:
scripts / run_clf.sh用于文本分类任务,例如LCQMC,ChnSenti,XNLI。
scripts / runseqlabelling.sh用于序列标记任务,例如Peoples-daily-NER
scripts / run_reading.sh用于类似SQuAD的机器阅读理解任务,例如CMRC2018
https://github.com/ymcui/cmrc2018
需要注意的是,CMRC任务评估有些不同, 因此需要单独运行此脚本:
python cmrc2018_evaluate.py data/cmrc/cmrc2018_dev.json output/cmrc/dev_predictions.json output/cmrc/metric.txt.
已有4种中文与训练模型可以下载:bert-base,bert-large,WWM,Whole Word Masking
TinyBERT
TinyBERT比BERT的小7.5倍,速度快9.4倍,并且在自然语言处理任务中具有竞争优势。它在预训练和任务特定的学习阶段都进行了变压器蒸馏。TinyBERT学习的概述如下所示:
安装方法
依赖于Python3中的部分库:
pip install -r requirements.txt
使用方法
TinyBERT的使用过程分为以下三个步骤:蒸馏、数据增强以及特定任务蒸馏。接下来将会对每个步骤进行详细的介绍:
1、蒸馏
在泛化蒸馏中,使用原始而不进行微调的BERT库作为老师模型,并使用大型文本语料库作为学习数据。通过对通用域中的文本执行Transformer蒸馏,就可以获得了泛化的TinyBERT,它为特定任务的蒸馏提供了良好的初始化。
泛化蒸馏有两个步骤:(1)生成json格式的语料库;(2)进行蒸馏。
step1:使用pregeneratetrainingdata.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}$
step2:使用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模型:
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
GeneralTinyBERTv2(4layer-312dim):
https://drive.google.com/open?id=1PhI73thKoLU2iliasJmlQXBav3v33-8z
GeneralTinyBERTv2(6layer-768dim):
https://drive.google.com/open?id=1r2bmEsQe4jUBrzJknnNaBJQDgiRKmQjF
2、数据增强
数据增强是为了扩展特定任务的训练集。,学习更多与任务相关的示例,可以进一步提高模型的泛化能力。项目中结合了预训练的语言模型BERT和GloVe嵌入来进行词级别替换,以此进行增强数据。
具体使用dataaugmentation.py进行数据增强,增强后的数据集trainaug.tsv自动保存在对应的${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数据并将其解压缩到GLUEDIR目录。命令中的TASKNAME可以是CoLA,SST-2,MRPC,STS-B,QQP,MNLI,QNLI,RTE中的任意一个。
3、特定任务蒸馏
在特定任务的蒸馏中,主要对transformer进行蒸馏,以进一步改善TinyBERT。特定任务的蒸馏包括两个步骤:(1)中间层蒸馏;(2)预测层蒸馏。
step1:运行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
step2:运行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
【模型下载】
项目中提供了所有GLUE任务中的蒸馏TinyBERT:
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
模型性能评估
运行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
END
声明:本文来源于网络
如有侵权,联系删除
联盟学术交流群
扫码添加联盟小编,可与相关学者研究人员共同交流学习:目前开设有人工智能、机器学习、计算机视觉、自动驾驶(含SLAM)、Python、求职面经、综合交流群扫描添加CV联盟微信拉你进群,备注:CV联盟
最新热文荐读
GitHub | 计算机视觉最全资料集锦
Github | 标星1W+清华大学计算机系课程攻略!
Github | 吴恩达新书《Machine Learning Yearning》
收藏 | 2020年AI、CV、NLP顶会最全时间表!
收藏 | 博士大佬总结的Pycharm 常用快捷键思维导图!
收藏 | 深度学习专项课程精炼图笔记!
笔记 | 手把手教你使用PyTorch从零实现YOLOv3
笔记 | 如何深入理解计算机视觉?(附思维导图)
笔记 | 深度学习综述思维导图(可下载)
笔记 | 深度神经网络综述思维导图(可下载)
点个在看支持一下吧
华为诺亚方舟预训练语言模型NEZHA、TinyBERT开源代码相关推荐
- ACL 2022丨香港大学华为诺亚方舟新工作:生成式预训练语言模型的量化压缩
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 近日,香港大学与华为诺亚方舟实验室在 ACL 2022 上联合发表了 ...
- 华为诺亚方舟开源预训练模型“哪吒”,4项任务均达到SOTA
出品 | AI科技大本营(ID:rgznai100) BERT之后,新的预训练语言模型XLnet.RoBERTa.ERNIE不断推出,这次,华为诺亚方舟实验室开源了基于BERT的中文预训练语言模型NE ...
- 刘群:华为诺亚方舟NLP预训练模型工作的研究与应用 | AI ProCon 2019
演讲嘉宾 | 刘群(华为诺亚方舟实验首席科学家) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 预训练语言模型对自然语言处理领域产生了非常大的影响,在近期由CSDN主办的 ...
- 华为诺亚方舟开源哪吒、TinyBERT模型,可直接下载使用
点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 来源:机器之心 华为诺亚方舟实验室开源了一批优秀预训练语言模型,性能更好.使用更方便. 昨日, ...
- 1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...
行早 发自 凹非寺 量子位 | 公众号 QbitAI 华为诺亚方舟实验室开源了第一个亿级中文多模态数据集:悟空. 这个新发布的数据集不仅规模大--包含1亿组图文对,而且质量也很高. 所有图像都是筛选过 ...
- 华为诺亚方舟实验室主任李航:神经符号处理开启自然语言处理新篇章
华为诺亚方舟实验室主任李航:神经符号处理开启自然语言处理新篇章 本文作者:王金许 2017-07-26 19:29 导语:深度学习(神经处理)给自然语言处理带来了革命性的进步,基于深度学习的机器翻译 ...
- 内存占用少,计算速度快!华为诺亚方舟Lab开源即插即用的多用卷积核(NeurIPS 2018)...
点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自诺亚实验室(ID:Noah_ark_lab). 华为诺亚方舟实验室开源了一种即插即用的卷积核,该项工作发表在NeurIPS 2018上,论文题 ...
- gCastle | 华为诺亚方舟实验室自研的因果结构学习工具链
文章目录 一.简介和安装 二.算法使用实践 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一.简介和安装 gCastle 是华为诺亚方舟实验室自研的因果结构学习工 ...
- 北京内推 | 华为诺亚方舟实验室招聘自动驾驶预测/规控/仿真算法研究员
合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 华为 华为诺亚方舟实验室(Noah's Ark Lab)是华为的 AI 能 ...
最新文章
- ISE MAP报错: Unsupported programming for BSCAN block and JTAG_CHAIN attribute value 1的解决方法
- Service生命周期
- Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
- 光模块是怎么分类的?光模块的应用及作用有哪些?
- 阿里云的羊毛如何薅?创业者看过来!
- 宏定义 object-c 单例
- 一款可以安利的MarkDown编辑器
- KeyMob手机聚合平台已集成多家移动广告平台
- colorbar的应用
- docker 部署 redmine 项目管理软件
- python 读取geotiff_python gdal 写GeoTiff文件
- 苹果手机怎么投屏不了,苹果手机怎么投屏电脑
- 交通灯系统设计 educoder实训项目 logisim实现
- torch.max使用示例
- 为何数据分析师更容易获得高薪工作?
- 入门的Android架构师需要掌握哪些技能?
- 人工智能和python毕业设计题目_Python与人工智能-中国大学mooc-题库零氪
- 明日之后双人十庄房子蓝图_明日之后和同居的那些事
- 【Unity】Shader效果——Snow雪地
- NC文件笔记(2020-09-14)
热门文章
- xss 全编码两次_URL编码与XSS
- fastreport 横向分栏_FastReport开发指南
- mac怎么查node版本_py2neo基本操作(v4版本,亲测有效)
- python类和对象的定义_python类与对象基本语法
- linux配置rsync服务器
- python thread join timeout_了解thread.join(超时)
- java如何批量导入题目_MyBatis 如何批量插入?
- 计算机基础项目任务教学重构,面向计算思维培养的中职课程项目式重构研究
- php inner.html,javascript – PHP:如何获得CURRENT innerHTML?
- matlab求微分方程的系数,Matlab中系数为离散值的微分方程求解【编辑完成求解答】...