点上方蓝字计算机视觉联盟获取更多干货

在右上方 ··· 设为星标 ★,与你不见不散

编辑: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开源代码相关推荐

  1. ACL 2022丨香港大学华为诺亚方舟新工作:生成式预训练语言模型的量化压缩

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 近日,香港大学与华为诺亚方舟实验室在 ACL 2022 上联合发表了 ...

  2. 华为诺亚方舟开源预训练模型“哪吒”,4项任务均达到SOTA

    出品 | AI科技大本营(ID:rgznai100) BERT之后,新的预训练语言模型XLnet.RoBERTa.ERNIE不断推出,这次,华为诺亚方舟实验室开源了基于BERT的中文预训练语言模型NE ...

  3. 刘群:华为诺亚方舟NLP预训练模型工作的研究与应用 | AI ProCon 2019

    演讲嘉宾 | 刘群(华为诺亚方舟实验首席科学家) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 预训练语言模型对自然语言处理领域产生了非常大的影响,在近期由CSDN主办的 ...

  4. 华为诺亚方舟开源哪吒、TinyBERT模型,可直接下载使用

    点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 来源:机器之心 华为诺亚方舟实验室开源了一批优秀预训练语言模型,性能更好.使用更方便. 昨日, ...

  5. 1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...

    行早 发自 凹非寺 量子位 | 公众号 QbitAI 华为诺亚方舟实验室开源了第一个亿级中文多模态数据集:悟空. 这个新发布的数据集不仅规模大--包含1亿组图文对,而且质量也很高. 所有图像都是筛选过 ...

  6. 华为诺亚方舟实验室主任李航:神经符号处理开启自然语言处理新篇章

    华为诺亚方舟实验室主任李航:神经符号处理开启自然语言处理新篇章 本文作者:王金许 2017-07-26 19:29 导语:​深度学习(神经处理)给自然语言处理带来了革命性的进步,基于深度学习的机器翻译 ...

  7. 内存占用少,计算速度快!华为诺亚方舟Lab开源即插即用的多用卷积核(NeurIPS 2018)...

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自诺亚实验室(ID:Noah_ark_lab). 华为诺亚方舟实验室开源了一种即插即用的卷积核,该项工作发表在NeurIPS 2018上,论文题 ...

  8. gCastle | 华为诺亚方舟实验室自研的因果结构学习工具链

    文章目录 一.简介和安装 二.算法使用实践 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一.简介和安装 gCastle 是华为诺亚方舟实验室自研的因果结构学习工 ...

  9. 北京内推 | 华为诺亚方舟实验室招聘自动驾驶预测/规控/仿真算法研究员

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 华为 华为诺亚方舟实验室(Noah's Ark Lab)是华为的 AI 能 ...

最新文章

  1. ISE MAP报错: Unsupported programming for BSCAN block and JTAG_CHAIN attribute value 1的解决方法
  2. Service生命周期
  3. Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
  4. 光模块是怎么分类的?光模块的应用及作用有哪些?
  5. 阿里云的羊毛如何薅?创业者看过来!
  6. 宏定义 object-c 单例
  7. 一款可以安利的MarkDown编辑器
  8. KeyMob手机聚合平台已集成多家移动广告平台
  9. colorbar的应用
  10. docker 部署 redmine 项目管理软件
  11. python 读取geotiff_python gdal 写GeoTiff文件
  12. 苹果手机怎么投屏不了,苹果手机怎么投屏电脑
  13. 交通灯系统设计 educoder实训项目 logisim实现
  14. torch.max使用示例
  15. 为何数据分析师更容易获得高薪工作?
  16. 入门的Android架构师需要掌握哪些技能?
  17. 人工智能和python毕业设计题目_Python与人工智能-中国大学mooc-题库零氪
  18. 明日之后双人十庄房子蓝图_明日之后和同居的那些事
  19. 【Unity】Shader效果——Snow雪地
  20. NC文件笔记(2020-09-14)

热门文章

  1. xss 全编码两次_URL编码与XSS
  2. fastreport 横向分栏_FastReport开发指南
  3. mac怎么查node版本_py2neo基本操作(v4版本,亲测有效)
  4. python类和对象的定义_python类与对象基本语法
  5. linux配置rsync服务器
  6. python thread join timeout_了解thread.join(超时)
  7. java如何批量导入题目_MyBatis 如何批量插入?
  8. 计算机基础项目任务教学重构,面向计算思维培养的中职课程项目式重构研究
  9. php inner.html,javascript – PHP:如何获得CURRENT innerHTML?
  10. matlab求微分方程的系数,Matlab中系数为离散值的微分方程求解【编辑完成求解答】...