当前位置: 首页 > 编程日记 > 正文

中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍

640?wx_fmt=jpeg

(图片由AI科技大本营付费下载自视觉中国)


作者 | 徐亮(实在智能算法专家) 
来源 | AINLP(ID:nlpjob)


谷歌ALBERT论文刚刚出炉一周,中文预训练ALBERT模型来了,感兴趣的同学可以直接尝鲜试用。


项目链接:

https://github.com/brightmart/albert_zh


An Implementation of A Lite Bert For Self-Supervised Learning Language Representations with TensorFlow.


ALBert is based on Bert, but with some improvements. It achieves state of the art performance on main benchmarks with 30% parameters less.


For albert_base_zh it only has ten percentage parameters compare of original bert model, and main accuracy is retained.


Chinese version of ALBERT pre-trained model, including checkpoints both for TensorFlow and PyTorch, will be available.


海量中文语料上预训练ALBERT模型:参数更少,效果更好。预训练小模型也能拿下13项NLP任务,ALBERT三大改造登顶GLUE基准。


***** 2019-10-02: albert_large_zh *****


Relased albert_large_zh with only 16% parameters of bert_base(64M)


***** 2019-10-01: albert_base_zh *****


Relesed albert_base_zh with only 10% parameters of bert_base, a small model(40M) & training can be very fast.


***** 2019-09-28: codes and test functions *****


Add codes and test functions for three main changes of albert from bert


模型下载 Download Pre-trained Models of Chinese


1、albert_large_zh,参数量,层数24,大小为64M


参数量和模型大小为bert_base的六分之一;在口语化描述相似性数据集LCQMC的测试集上相比bert_base上升0.2个点


2、albert_base_zh(小模型体验版), 参数量12M,层数12,大小为40M

参数量为bert_base的十分之一,模型大小也十分之一;在口语化描述相似性数据集LCQMC的测试集上相比bert_base下降约1个点;
相比未预训练,albert_base提升14个点


3、albert_xlarge、 albert_xxlarge will coming recently.


if you want use a albert model with best performance among all pre-trained models, just wait a few days.


ALBERT模型介绍 Introduction of ALBERT

ALBERT模型是BERT的改进版,与最近其他State of the art的模型不同的是,这次是预训练小模型,效果更好、参数更少。


它对BERT进行了三个改造 Three main changes of ALBert from Bert:


1)词嵌入向量参数的因式分解 Factorized embedding parameterization


O(V * H) to O(V * E + E * H)

 如以ALBert_xxlarge为例,V=30000, H=4096, E=128

 那么原先参数为V * H= 30000 * 4096 = 1.23亿个参数,现在则为V * E + E * H = 30000*128+128*4096 = 384万 + 52万 = 436万,

 词嵌入相关的参数变化前是变换后的28倍。


2)跨层参数共享 Cross-Layer Parameter Sharing


参数共享能显著减少参数。共享可以分为全连接层、注意力层的参数共享;注意力层的参数对效果的减弱影响小一点。


3)段落连续性任务 Inter-sentence coherence loss.

使用段落连续性任务。正例,使用从一个文档中连续的两个文本段落;负例,使用从一个文档中连续的两个文本段落,但位置调换了。

 避免使用原有的NSP任务,原有的任务包含隐含了预测主题这类过于简单的任务。

  We maintain that inter-sentence modeling is an important aspect of language understanding, but we propose a loss 
  based primarily on coherence. That is, for ALBERT, we use a sentence-order prediction (SOP) loss, which avoids topic 
  prediction and instead focuses on modeling inter-sentence coherence. The SOP loss uses as positive examples the 
  same technique as BERT (two consecutive segments from the same document), and as negative examples the same two 
  consecutive segments but with their order swapped. This forces the model to learn finer-grained distinctions about
  discourse-level coherence properties. 

其他变化,还有 Other changes:

1)去掉了dropout  Remvoe dropout to enlarge capacity of model.
    最大的模型,训练了1百万步后,还是没有过拟合训练数据。说明模型的容量还可以更大,就移除了dropout
    (dropout可以认为是随机的去掉网络中的一部分,同时使网络变小一些)
    We also note that, even after training for 1M steps, our largest models still do not overfit to their training data. 
    As a result, we decide to remove dropout to further increase our model capacity.
    其他型号的模型,在我们的实现中我们还是会保留原始的dropout的比例,防止模型对训练数据的过拟合。

2)为加快训练速度,使用LAMB做为优化器 Use lAMB as optimizer, to train with big batch size
  使用了大的batch_size来训练(4096)。LAMB优化器使得我们可以训练,特别大的批次batch_size,如高达6万。

3)使用n-gram(uni-gram,bi-gram, tri-gram)来做遮蔽语言模型 Use n-gram as make language model
   即以不同的概率使用n-gram,uni-gram的概率最大,bi-gram其次,tri-gram概率最小。
   本项目中目前使用的是在中文上做whole word mask,稍后会更新一下与n-gram mask的效果对比。n-gram从spanBERT中来。


发布计划 Release Plan


1、albert_base,参数量12M, 层数12,10月7号

2、albert_large,参数量18M, 层数24,10月13号

3、albert_xlarge,参数量59M, 层数24,10月6号

4、albert_xxlarge,参数量233M, 层数12,10月7号(效果最佳的模型)


训练语料/训练配置 Training Data & Configuration


30g中文语料,超过100亿汉字,包括多个百科、新闻、互动社区。


预训练序列长度sequence_length设置为512,批次batch_size为4096,训练产生了3.5亿个训练数据(instance);每一个模型默认会训练125k步,albert_xxlarge将训练更久。


作为比较,roberta_zh预训练产生了2.5亿个训练数据、序列长度为256。由于albert_zh预训练生成的训练数据更多、使用的序列长度更长,


我们预计albert_zh会有比roberta_zh更好的性能表现,并且能更好处理较长的文本。


训练使用TPU v3 Pod,我们使用的是v3-256,它包含32个v3-8。每个v3-8机器,含有128G的显存。


模型性能与对比(英文) Performance and Comparision


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg


中文任务集上效果对比测试 Performance on Chinese datasets


  • 自然语言推断:XNLI of Chinese Version


640?wx_fmt=png


注:BERT-wwm-ext来自于这里;XLNet来自于这里; RoBERTa-zh-base,指12层RoBERTa中文模型


  • 问题匹配语任务:LCQMC(Sentence Pair Matching) 


640?wx_fmt=png


  • 语言模型、文本段预测准确性、训练时间 Mask Language Model Accuarcy & Training Time


640?wx_fmt=png

注:? 将很快替换


模型参数和配置 Configuration of Models


640?wx_fmt=jpeg


代码实现和测试 Implementation and Code Testing

通过运行以下命令测试主要的改进点,包括但不限于词嵌入向量参数的因式分解、跨层参数共享、段落连续性任务等。


python test_changes.py


预训练 Pre-training


  • 生成特定格式的文件(tfrecords) Generate tfrecords Files


运行以下命令即可。项目自动了一个示例的文本文件(data/news_zh_1.txt)


bash create_pretrain_data.sh


如果你有很多文本文件,可以通过传入参数的方式,生成多个特定格式的文件(tfrecords)

执行预训练 pre-training on GPU/TPU


GPU:
export BERT_BASE_DIR=albert_config
nohup python3 run_pretraining.py --input_file=./data/tf*.tfrecord  \
--output_dir=my_new_model_path --do_train=True --do_eval=True --bert_config_file=$BERT_BASE_DIR/albert_config_xxlarge.json \
--train_batch_size=4096 --max_seq_length=512 --max_predictions_per_seq=76 \
--num_train_steps=125000 --num_warmup_steps=12500 --learning_rate=0.00176    \
--save_checkpoints_steps=2000   --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt &

TPU, add following information:
    --use_tpu=True  --tpu_name=grpc://10.240.1.66:8470 --tpu_zone=us-central1-a

注:如果你从头开始训练,可以不指定init_checkpoint;
如果你从现有的模型基础上训练,指定一下BERT_BASE_DIR的路径,并确保bert_config_file和init_checkpoint两个参数的值能对应到相应的文件上;
领域上的预训练,根据数据的大小,可以不用训练特别久。


下游任务 Fine-tuning


以使用albert_base做LCQMC任务为例。LCQMC任务是在口语化描述的数据集上做文本的相似性预测。


下载LCQMC数据集,包含训练、验证和测试集,训练集包含24万口语化描述的中文句子对,标签为1或0。1为句子语义相似,0为语义不相似。


通过运行下列命令做LCQMC数据集上的fine-tuning:


1. Clone this project:

      git clone https://github.com/brightmart/albert_zh.git

2. Fine-tuning by running the following command:

    export BERT_BASE_DIR=./albert_large_zh
    export TEXT_DIR=./lcqmc
    nohup python3 run_classifier.py   --task_name=lcqmc_pair   --do_train=False   --do_eval=true   --data_dir=$TEXT_DIR   --vocab_file=./albert_config/vocab.txt  \
    --bert_config_file=./albert_config/albert_config_large.json --max_seq_length=128 --train_batch_size=64   --learning_rate=2e-5  --num_train_epochs=3 \
    --output_dir=albert_large_lcqmc_checkpoints --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt &

Notice/注:
    you need to download pre-trained chinese albert model, and also download LCQMC dataset 
    你需要下载预训练的模型,并放入到项目当前项目,假设目录名称为albert_large_zh; 需要下载LCQMC数据集,并放入到当前项目,
    假设数据集目录名称为lcqmc


Reference

1、ALBERT: A Lite BERT For Self-Supervised Learning Of Language Representations

2、BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

3、SpanBERT: Improving Pre-training by Representing and Predicting Spans

4、RoBERTa: A Robustly Optimized BERT Pretraining Approach

5、Large Batch Optimization for Deep Learning: Training BERT in 76 minutes(LAMB)

6、LAMB Optimizer,TensorFlow version


(*本文为 AI科技大本营转载文章,转载请联系原作者)


精彩推荐


2019 中国大数据技术大会(BDTC)历经十一载,再度火热来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。【早鸟票】【特惠学生票】限时抢购,扫码了解详情!


640?wx_fmt=png


推荐阅读


  • 100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架

  • 王霸之路:从0.1到2.0,一文看尽TensorFlow“奋斗史”

  • 伯克利人工智能研究院开源深度学习数据压缩方法Bit-Swap,性能创新高

  • NLP被英语统治?打破成见,英语不应是「自然语言」同义词

  • TensorFlow2.0正式版发布,极简安装TF2.0(CPU&GPU)教程

  • 肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019

  • AI落地遭“卡脖子”困境:为什么说联邦学习是解决良方?

  • 10分钟搭建你的第一个图像识别模型 | 附完整代码

  • 限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看!


640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

相关文章:

树莓派安装go

简介 大学的时候在使用openfalcon的时候讲过这个东西,但是那时候是介绍open-falcon的,所以感觉不是很具体,所以今天在安装frp的时候也碰到了这个问题,我就具体的说下 安装go1.4 编译最新版本的go的时候一定要先编译安装go1.4&…

设计模式中的原则

设计模式(详情click)这个术语是由Erich Gamma等人在1990年代从建筑设计领域引入到计算机科学的。它是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下…

CUDA Samples: approximate image reverse

以下CUDA sample是分别用C和CUDA实现的对图像进行某种类似reverse的操作&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;各个文件内容如下&#xff1a;common.hpp:#ifndef FBC_CUDA_TEST_COMMON_HPP_ #define FBC_CUDA_TEST_COMMON_HPP_#include<random> #i…

超详细支持向量机知识点,面试官会问的都在这里了

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 韦伟来源 | 知乎导语&#xff1a;持续准备面试中&#xff0c;准备的过程中&#xff0c;慢慢发现&#xff0c;如果死记硬背的话很难&#xff0c;可当推导一遍并且细细研究里面的缘由的话&#xff0c;面试起来应该什么都不…

vue-router点击切换路由报错

报错: 报错原因&#xff1a; 设置mode:history解决方法&#xff1a; 将router的mode设置为‘hash就不报错了 原因下次再分析?

gvim配置相关

用 vundle 来管理 vim 插件&#xff08;包含配置文件vimrc和gvimrc&#xff09; gvim插件管理神器&#xff1a;vundle的安装与使用 Vim插件管理Vundle Linux 下VIM的配置 Vim配置系列(一) ---- 插件管理 Vim配置系列(二) —- 好看的statusline vim优秀插件整理 一些有用的 VIM …

深度学习有哪些接地气又好玩的应用?

过去几年中&#xff0c;深度学习中的很多技术如计算机视觉、自然语言处理等被应用在很多实际问题中&#xff0c;而且相关成果也表明深度学习能让人们的工作效果比以前更好。我们收集了一些深度学习方面的创意应用&#xff0c;虽然没有对每项应用进行详尽描述&#xff0c;但是希…

Ubuntu下通过CMake文件编译CUDA+OpenCV代码操作步骤

在 CUDA_Test 工程中&#xff0c;CUDA测试代码之前仅支持在Windows10 VS2013编译&#xff0c;今天在Ubuntu 14.04下写了一个CMakeLists.txt文件&#xff0c;支持在Linux下也可以通过CMake编译CUDA_Test工程&#xff0c;CMakeLists.txt文件内容如下&#xff1a;# CMake file f…

JAVA 多用户商城系统b2b2c-Spring Cloud常见问题与总结(一)

在使用Spring Cloud的过程中&#xff0c;难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 一、Eureka常见问题 1.1 Eureka 注册服务慢 默认情况下&#xff0c;服务…

TinyFrame升级之八:实现简易插件化开发

本章主要讲解如何为框架新增插件化开发功能。 在.net 4.0中&#xff0c;我们可以在Application开始之前&#xff0c;通过PreApplicationStartMethod方法加载所需要的任何东西。那么今天我们主要做的工作就集中在这个时间段&#xff1a; 1.将插件DLL及文件拷贝入主网站目录并编译…

快手王华彦:端上视觉技术的极致效率及其短视频应用实践 | AI ProCon 2019

演讲嘉宾 | 王华彦&#xff08;快手硅谷Y-tech实验室负责人&#xff09; 编辑 | Just 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 快手用户日均上传1500万个视频&#xff0c;要把这些作品准确的分发给超2亿活跃用户&#xff0c;如果没有强大的AI技术系统去理解…

tmux简介及安装

tmux是一个开源工具&#xff0c;用于在一个终端窗口中运行多个终端会话。它可以减少过多的打开终端控制台。tmux的源码在 https://github.com/tmux/tmux &#xff0c;它的License是BSD。tmux可以直接通过sudo apt-get install tmux命令安装(通过sudo apt-get remove tmux移除)…

Swift中依赖注入的解耦策略

原文地址&#xff1a;Dependency Injection Strategies in Swift 简书地址&#xff1a;Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入&#xff0c;这是软件开发中最重要的技术之一&#xff0c;也是许多编程语言中使用频繁的概念。 具体来说&#xff0c;我们将…

Eclipse mac 下的快捷键

2019独角兽企业重金招聘Python工程师标准>>> Eclipse&#xff0c;MyEclipse 的preference 在“windows”下边&#xff0c;mac下在左上角苹果图标边上 win下我们都习惯了ctrl c&#xff0c;在Mac 下使用标准键盘变成了win键c 系统的偏好设定 -> 键盘 -> 修饰…

Ubuntu上使终端显示Git分支(oh-my-zsh)

oh-my-zsh是基于Zsh(Zsh是一个Linux用户很少使用的power-shell&#xff0c;这是由于大多数Linux产品安装&#xff0c;以及默认使用bash shell)的功能作了一个扩展&#xff0c;方便插件管理、主体自定义等。oh-my-zsh源码在 https://github.com/robbyrussell/oh-my-zsh &#x…

天哪!我的十一假期被AI操控了

&#xff08;图片付费下载自视觉中国&#xff09;导语&#xff1a;这个假期&#xff0c;除了脑海一直在唱歌&#xff0c;庆祝祖国成立的 70 周年&#xff0c;当然也闲不住&#xff0c;要乘机出去浪一浪。目前小长假进度条已经进行到 71.4% 了&#xff0c;有没有发现这个假期与以…

使用SVN+Axure RP 8.0创建团队项目

一、使用到的工具&#xff1a;VisualSVN Server --SVN服务器&#xff1a;https://www.visualsvn.com/server/ Axure RP 8.0 &#xff1a;http://www.downcc.com/soft/103078.html 二、VisualSVN Server 安装以及操作1、安装 &#xff1a; 默认安装即可 2、操作&#xff1a; &a…

no no no.不要使用kill -9.

2019独角兽企业重金招聘Python工程师标准>>> no no no.不要使用kill -9. 它没有给进程留下善后的机会&#xff1a; 1) 关闭socket链接 2) 清理临时文件 3) 将自己将要被销毁的消息通知给子进程 4) 重置自己的终止状态 等等。 通常&#xff0c;应该发送15&#xff0c…

人工智能的“天罗地网”

&#xff08;图片付费下载自视觉中国&#xff09;整理 | 弯月编辑 | 郭芮来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;人工智能&#xff08;AI&#xff09;技术正在全球迅速崛起。不断涌现的最新发展令世人瞩目&#xff0c;从以假乱真的深度伪造视频&#xff0c…

Ubuntu下安装Cppcheck源码操作步骤

Cppcheck是用在C、C中对code进行静态检查的工具。它的源码在 https://github.com/danmar/cppcheck 。它的License是GPL-3.0。Cppcheck可以检查不通过编译的文件&#xff0c;执行的检查包括&#xff1a;(1)、自动变量检查&#xff1b;(2)、数组的边界检查&#xff1b;(3)、clas…

用“脸”打卡,抬头就能签到!

科技正在飞速改变我们的生活&#xff0c;以前我们上班的时候&#xff0c;脖子上总会挂一个IC卡用来验证身份和签到打卡&#xff0c;后来指纹识别出现了&#xff0c;我们又逐渐习惯了指纹打卡&#xff0c;到如今&#xff0c;随着人脸识别技术的出现&#xff0c;我们开始用“脸”…

OC基础第四讲--字符串、数组、字典、集合的常用方法

OC基础第四讲--字符串、数组、字典、集合的常用方法 字符串、数组、字典、集合有可变和不可变之分。以字符串为例&#xff0c;不可变字符串本身值不能改变&#xff0c;必须要用相应类型来接收返回值&#xff1b;而可变字符串调用相应地方法后&#xff0c;本身会改变&#xff1b…

分类、检测、分割任务均有SOTA表现,ACNet有多强?

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 路一直都在来源 | 知乎专栏Abstract本文提出了一种新的自适应连接神经网络(ACNet)&#xff0c;从两个方面对传统的卷积神经网络(CNNs)进行了改进。首先&#xff0c;ACNet通过自适应地确定特征节点之间的连接状态&#xf…

CUDA Samples: approximate prior vbox layer

以下CUDA sample是分别用C和CUDA实现的类似prior vbox layer的操作&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;各个文件内容如下&#xff1a;common.hpp:#ifndef FBC_CUDA_TEST_COMMON_HPP_ #define FBC_CUDA_TEST_COMMON_HPP_#include <typeinfo> #inc…

如何成为一名成功的 iOS 程序员?

前言&#xff1a; 编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域。你必须充满激情&#xff0c;并且持之以恒地不断汲取更多有关编程的知识。只是对编程感兴趣还不足以功成名就——众所周知&#xff0c;我们工作起来像疯子。 编程是一个没有极限的职业&#xff0c;所以要成为一…

C#之委托与事件

委托与事件废话一堆&#xff1a;网上关于委托、事件的文章有很多&#xff0c;一千个哈姆雷特就有一千个莎士比亚&#xff0c;以下内容均是本人个人见解。1. 委托1.1 委托的使用这一小章来学习一下怎么简单的使用委托&#xff0c;了解一些基本的知识。这里先看一下其他所要用到的…

24式加速你的Python

作者 | 梁云1991来源 Python与算法之美一、分析代码运行时间第1式&#xff0c;测算代码运行时间平凡方法快捷方法&#xff08;jupyter环境&#xff09;第2式&#xff0c;测算代码多次运行平均时间平凡方法快捷方法&#xff08;jupyter环境&#xff09;第3式&#xff0c;按调用函…

pip、NumPy、Matplotlib在Windows上的安装过程

Windows上Python 3.6.2 64位的安装步骤&#xff1a;1. 从 https://www.python.org/downloads/windows/ 下载Windows x86-64 executable installer(即python-3.6.2-amd64.exe)&#xff1b;2. 直接以管理员身份运行安装&#xff0c;勾选添加到环境变量、pip等即可。可以同时在Wi…

分享:个人是怎么学习新知识的

为什么80%的码农都做不了架构师&#xff1f;>>> 挺多童鞋问我是怎么学习新知识的&#xff0c;干脆写篇文章总结一下&#xff0c;希望对大家有所帮助。对照书、技术博客、极客时间等学习的方式我就不说了。 一、早期 在15年及更早&#xff0c;由于知识储备少&#x…

easyui的datagrid

datagrid数据的绑定方式&#xff1a; 1&#xff09;data 后跟数据行的json串 2&#xff09;url 后跟{"total":,"rows":,"foot":},其中total代码返回总行数&#xff0c;rows为数据行json串 .NET MVC&#xff0c;controll控制类方法中获取datagrid…