点击上方“视学算法”,选择“星标”公众号

重磅干货,第一时间送达

来源:机器之心

华为诺亚方舟实验室开源了一批优秀预训练语言模型,性能更好、使用更方便。

昨日,华为诺亚方舟实验室的 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模型,可直接下载使用相关推荐

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

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

  2. 华为诺亚方舟预训练语言模型NEZHA、TinyBERT开源代码

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :华为,专知 [人工智能资源 ...

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

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

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

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

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

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

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

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

  7. 收藏 | 图像处理Transformer:华为诺亚、北大等IPT模型,刷榜

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  8. 【华为诺亚方舟实验室】2022届毕业生招聘--决策(强化学习)推理方向

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 来源:华为诺亚方舟实验室官微 诺亚方舟实验室(No ...

  9. 【学习求职必备】认真认识一下世界末日那年成立的“华为诺亚方舟实验室”...

    Yolo 计算机视觉爱好者,大连理工大学大四在读,保研至武汉大学 作者 | Yolo 编辑 | Yolo 接着上一篇介绍百度AI研究院之后,今天带大家认识一下国内最神秘的AI研究院--华为诺亚方舟实验 ...

最新文章

  1. SpringMVC4.x源码分析(五):request请求寻址HandlerMethod原理
  2. luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
  3. CVPR 2021|SensatUrban:城市规模点云数据集
  4. springboot activiti 整合项目框架源码 shiro 安全框架 druid 数据库连接池
  5. opencv4.2.0 视频去抖动算法代码
  6. 【opencv系列05】OpenCV4.X鼠标回调函数
  7. 对Spring IOC的理解(转)
  8. part-time job
  9. 哪些事是你当了大学老师之后才知道的?
  10. 《机器学习训练秘籍》中文版58章节 完整开源 吴恩达
  11. 音乐播放器App界面优秀案例,通过案例看大咖如何设计?
  12. 暴力破解(一)——python脚本暴力破解 加密的zip压缩文件
  13. 元胞自动机及其MATLAB实例
  14. python 中的拷贝、浅拷贝与深拷贝
  15. 分享台阶价格对比逻辑。(商城中购买数量越多,单价越低)
  16. lzma java sdk,Java LZMA 磁盘与内存压缩实现
  17. 解决2K 显示器的尴尬为MacBook 开启HiDPI(新方法支持M1)
  18. 海洋重力数据处理步骤
  19. arcade 物理系统_RetroPie和X-Arcade Tankstick-完美的Retro Arcade(加上键绑定,配置和操作方法)
  20. 分块专题整理(分块+莫队)

热门文章

  1. A-模块 配置splunk
  2. 带你了解ASA苹果搜索广告审核不通过的原因
  3. 关于知道区块的geohash值,求区块中点坐标和四角坐标
  4. dxo手机拍照排名_重磅!这款全能旗舰手机通过相机评测新基准,实力依旧强势|相机|镜头|广角镜头|手机|oppo...
  5. 求一个数组的最大k个数(java)
  6. 如何从0到1做一次完整的安全测试
  7. android将彩图转为黑白_如何快速修出高质感黑白照片
  8. 高一计算机二进制,高中信息技术《二进制及其转换》课件--人教版.ppt
  9. 【Java 虚拟机原理】垃圾收集器 ( Serial | ParNew | Parallel Scavenge | CMS | Serial Old - MSC | Parallel Old )
  10. 软件行业律师咨询实录