ALBERT:更轻更快的 NLP 预训练模型

发布于:2019 年 11 月 15 日 14:40

ALBERT:更轻更快的NLP预训练模型

目前在 NLP 领域,出彩的预训练模型的新工作,几乎都是基于 BERT 的改进,前面我们就介绍了 XLNET。今天我来介绍一个更新的工作,相比于 BERT,它更轻量,效果也要好。

预训练模型进展

2018 年底,BERT 横空出世之后,预训练模型开始走进 NLP 舞台的中央,吸引了业内所有人的关注。之后,各种预训练模型开始不断的刷新 NLP 领域的 SOTA 榜单,比较有影响力的包括,GPT-2.0,XLNET,RoBERTa 等。

大体来说,上述预训练模型确实都基于 BERT 了做了一些改进,在模型结构、训练模式等方面都有一些创新。但是大部分的预训练模型也有一个共通的“特点”,即模型相对“笨重”,预训练成本高。

ALBERT 的作者就是基于这样的背景,提出 ALBERT 这个模型的。其试图解决大部分预训练模型训练成本高,参数量巨大的问题。

ALBERT 的改进点

ALBERT 为了减少模型参数主要有以下几点:

1. 词嵌入参数因式分解;

2. 隐藏层间参数共享

此外,为了提升模型性能,ALBERT 提出了一种新的训练任务 - 句子间顺序预测

下面我们详细介绍以下这几个改进点:

1)词嵌入参数因式分解

ALBERT 的提出者认为,词向量只是记忆了相对少量的词语的信息,更多的语义和句法等信息时由隐藏层记忆的。因此,他们认为,词嵌入的维度可以不必与隐藏层的维度一致,可以通过降低词嵌入的维度的方式来减少参数量。假设词表的大小为 V,词嵌入的维度为 E,隐藏层的维度为 H。

BERT 的情况是,E=H;ALBERT 的方案是,将 E 降低,在词嵌入和隐藏层之间加入一个 project 层,连接两个层。我们来分析一下,两种情况嵌入层的参数量。

ALBERT:更轻更快的NLP预训练模型

从上面的分析可以看出,通过嵌入层的参数因式分解,成功将嵌入层的参数缩小为原来的 1/8。

2)隐藏层的参数共享

ALBERT:更轻更快的NLP预训练模型

如上图所示,是 BERT 的结构示意图,BERT_base 中,包含 12 层中间的隐藏层;BERT_large 中,包含 24 层中间的隐藏层;各层之间的参数均不共享。

参数共享可以显著减少参数数量,参数共享可以分为全连接层、注意力层的参数共享;在 ALBERT 中,全连接层、注意力层的参数均是共享的,也就是 ALBERT 依然有多层的深度连接,但是各层之间的参数是一样的。很明显的,通过这种方式,ALBERT 中隐藏层的参数量变为原来的 1/12 或者 1/24。

3)句子间顺序预测

在 BERT 中,句子间关系的任务是 next sentence predict(NSP),即向模型输入两个句子,预测第二个句子是不是第一个句子的下一句。

在 ALBERT 中,句子间关系的任务是 sentence-order prediction(SOP),即句子间顺序预测,也就是给模型两个句子,让模型去预测两个句子的前后顺序。文中介绍,SOP 是比 NSP 要更为复杂的任务,相比于 NSP,通过 SOP 任务模型能够学到更多的句子间的语义关系。

ALBERT 的效果

ALBERT:更轻更快的NLP预训练模型

如上图所示,展示了 ALBERT 与 BERT 不同大小模型的参数量及其在各个数据集的效果。

从上面的结果,可以得到一个基本的结论,相比于 BERT,ALBERT 能够在不损失模型性能的情况下,显著的减少参数量。ALBERT_xxlarge 模型有 233M 的参数量,其在各个数据集上的表现却能够全面优于有 1270M 参数的 BERT_xlarge 模型。

此外,作者还分别分析了嵌入层参数因式分解、隐藏层参数共享以及 SOP 任务对 ALBERT 模型性能的影响。作者的结论是,嵌入层参数因式分解、隐藏层参数共享基本不会对模型的性能造成损失,SOP 任务能够提升模型的性能。

值得注意的一点是,作者还发现 ALBERT 在训练了 100w 步之后,模型依旧没有过拟合,于是作者尝试去掉 dropout,却意外的发现下游任务的效果竟然有了一定的提升。这是 NLP 领域第一次发现 dropout 对大规模的预训练模型会造成负面影响。

此外,ALBERT 还有一个 albert_tiny模型,其隐藏层仅有 4 层,模型参数量约为 1.8M,非常的轻便。相对于 BERT,其训练和推理预测速度提升约 10 倍,但精度基本保留,语义相似度数据集 LCQMC 测试集上达到 85.4%,相比 bert_base 仅下降 1.5 个点。

对于一些相对比较简单一些或实时性要求高的任务,如语义相似度计算、分类任务等,ALBERT 很适合。

总结

总的来说,ALBERT 利用词嵌入参数因式分解和隐藏层间参数共享两种手段,在显著减少了模型的参数量的同时,基本没有损失模型的性能;

隐藏层间参数共享能够极大的减少模型参数,对模型训练速度的提升也有一定的帮助。但是对推理预测速度却不会有任何帮助,因为前向传播时的计算量一点也没有减少。基于此,ALBERT 的研究者们,提供了 albert_tiny 模型,提高了模型的推理速度,代价却很低(准确率降低很少)。此外,通过引进 SOP 的训练任务,模型的准确度也有一定的提升。

作者介绍

小 Dream 哥,公众号“有三 AI”作者。该公号聚焦于让大家能够系统性地完成 AI 各个领域所需的专业知识的学习。

原文链接:

https://mp.weixin.qq.com/s/R2MW_5kskvXyuSOh7kfJaA

阅读数:1642 发布于:2019 年 11 月 15 日 14:40

评论

发布
暂无评论