资源经验分享[深度学习] 自然语言处理 --- Albert介绍

[深度学习] 自然语言处理 --- Albert介绍

2020-01-08 | |  149 |   0

原标题:[深度学习] 自然语言处理 --- Albert介绍

原文来自:CSDN      原文链接:https://blog.csdn.net/zwqjoy/article/details/103862307


一、简介

随着Transfomer结构的普及,一时间大语料、大参数量的预训练模型成为主流。当在实际部署BERT等模型时,往往需要使用蒸馏、压缩或其他优化技术对模型进行处理。

ALBERT模型来自论文 Google 最近公布的论文 《ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》从名字就可以看出 ALBERT 是 BERT 的“改进版”,其进步的地方,一言以蔽之,就是 用更少的参数,取得了更好的效果

ALBERT模型也是基于这一点考虑,通过各种手段减少参数量,得到一个占用较小的模型,对实际落地有较大的意义,不过由于其主要还是减少参数量,所以在推断时间上并没有优化,所有对量大的需求还是很有问题的。
 

总体来说,ALBERT有意义的创新主要有:

  1. 修正了句子预测这一一直被诟病的预训练任务,改为了预测句子之间的连贯性;

  2. 对Embedding进行因式分解;

  3. 跨层的参数共享。

 

模型大小与模型性能之间的关系

  这是作者开篇讨论的问题。近一两年,预训练语言模型给自然语言处理领域带来了巨大的突破。从 ELMO,GPT,到 Bert,XLNet 和 RoBerta,我们不难看出,性能越强的模型,参数量也越大。既然模型的参数量如此重要,我们就会有一个很直接的假设:参数量越大,模型的性能就会越高。

  先不考虑硬件资源和训练时间(还是要考虑,如此大的开销已经将很多参与者挤出门外了),如果上述假设成立,那么我们只需要想方设法地扩展模型规模就可以了。作者为验证假设,将 Bert-large 模型的隐藏层 size 扩展了一倍,构建了 Bert-xlarge模型。该模型的参数量较 Bert-large 提升了一倍,然而遗憾的是,如图1所示,Bert-xlarge 出现了模型退化(model degradation)现象,性能不升反降。因此,简单地推高参数量,不仅会面临更加严峻的硬件资源不足以及训练时间过长问题,且无法获得更好的效果的。

 

04.png

                                                          Bert-large 与 Bert-xlarge 对比图

  其实这也比较好理解,参数量越大性能越好,我认为这本身是没有正确的,但前提是对模型中参数的运用没有退化,或者说模型内单位参数所发挥的作用没有退化。举个例子,鲸鱼大脑的绝对体积和重量都要超过人类,但其大脑很大一部分精力用在控制其“臃肿”的体积上,而不是用来思考和记忆,因此远不如人类聪明。
  因此为了提升模型性能,我们既可以“做加法”,在模型结构合理有效的前提下,增大模型的规模(e.g. Bert --> Bert-large, Bert --> XLNet);也可以“做减法”,降低参数量,但提升参数的利用效率、更大地发挥参数的效果。本篇论文中所设计的 ALBERT,就是在“做减法”的基础上,在性能上全面超越 Bert。

 

 

三  ALBERT的改进

1. SOP任务

BERT在提出的时候提供了两种预训练任务,一个是遮蔽语言模型,即以一定比例随机遮蔽一定比例的输入标记,然后预测那些被遮蔽的标记的预训练任务(PS:ALBERT也不是直接做这个任务,而是换成N-gram的预测任务),另一个则是预测第二个句子是不是第一个句子的下一句。但在随后的实践中,第二个任务被证明并没有给模型带来受益,主要由于这个任务过于简单。于是,在ALBERT中这个任务被换成了预测句子间的顺序,增加模型学会这种任务的能力:

05.png

从实验上看,有所提升,但个人感觉这个预训练任务还是有待改进。

2. Embedding因式分解

这一步操作其实就是没啥特别好说的,无外乎就是觉得词嵌入时的向量维度应该小一点,然后通过个网络扩充一下提升维度,这样一通操作就可以把参数量从 O(V x H)   降到了   O(V x E  + E x H)

(有点像深度可分离卷积的做法):

06.png

07.png

 

08.png

论文实验结果

从实验上看,使用这种方法降低了词向量维度,但没有损失太多的精度(相对来说吧),使用权值共享的策略时增加词向量不升反降(感觉有点神奇)。

3. 跨层的参数共享

共享权值不是什么新鲜的事情,之前一般采用只共享全连接层或只共享attention层,ALBERT则更直接全部共享,不过从实验结果看,全部共享的代价是可以接受的,同时共享权值带来了一定的训练难度,使得模型更鲁棒:

ALBERT 在参数量上要远远小于 Bert。譬如,ALBERT-large 的参数量仅有 18M,仅为 Bert-large 的 1/18;将 Bert 的隐藏层扩展到 2048 维,参数量会飙升到 1.27G 且性能下降,而 H = 2048 的 ALBERT-xlarge 模型只有 59M 的参数,更大的模型 ALBERT-xxlarge(H=4096)参数量也仅有 233M。另外作者在 ALBERT-xxlarge 中设定了 12 层的网络,之所以不设置为 24 层,是因为通过实验作者验证了二者在性能上相近,而后者的计算成本更高。

09.png

4. dropout的移除

在ALBERT的实验中作者提到对掩码任务和下游任务取消dropout都带来了提升,这一点无疑非常值得去思考:

10.png

掩码任务

11.png

下游任务

同时,作者也提到100w步之后,ALBERT依旧没有过拟合的迹象。

 

四、ALBERT的实验结果

最后作者又总结了一遍论文中提出的模型——ALBERT-xxlarge 的强大性能(使用了 Bert、XLNet 和 RoBERTa 的训练数据):在 13 项 NLP 任务上都取得了最佳,包括 GLUE 上的 9 个任务 和 SQuAD、RACE等 4 个数据集。

12.png

 

简单一句话来说,就是小但强。仅从ALBERT本身来说其实是蛮让人失望的,因为并没有带来很多有营养的创新,同时由于其的小更多是共享权值带来的,这也就导致它并没有减少推断时的时间。但另一方面来说,ALBERT减少了占用,本身就给大规模部署带来优势,如果再结合上蒸馏等技术,占用小、速度快、精度高的Bert仿佛就在眼前。

参考

  1. 「NLP」ALBERT:更轻更快的NLP预训练模型

  2. 一文揭开ALBERT的神秘面纱

  3. albert_pytorch

  4. ALBERT 论文:ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS


 

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:Python 爬虫(七):pyspider 使用

下一篇:[深度学习] 自然语言处理 --- Bert 开发实战 (huggingface-transformers)

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...