2019.03 -NAACL 2019
CommonsenseQA 任务排名结果
数据众包连接及demo
训练集
测试集
论文地址
论文解读1
论文解读2
技术分享丨ALBERT在CommonsenseQA方向的应用
ALBERT代码
ALBERT论文
任务关键
CommonsenseQA任务的关键是让模型学到更多的先验知识,这样在一些给定相关文件或上下文的问题(只需要很少的背景知识)上,模型获得的先验知识越多,给出正确预测答案的概率越大。
预训练本质
预训练本质上是通过设计好一个网络结构来做语言模型任务,然后把大量甚至是无穷尽的无标注的自然语言文本利用起来,预训练任务把大量语言学知识抽取出来编码到网络结构中,当手头任务带有标注信息的数据有限时,这些先验的语言学特征当然会对手头任务有极大的特征补充作用,因为当数据有限的时候,很多语言学现象是覆盖不到的,泛化能力就弱,集成尽量通用的语言学知识自然会加强模型的泛化能力。
改进方向
针对CommonsenseQA任务主要有两大改进方向,一是采用更强大,引用更多高质量、大规模数据集训练的预训练模型–xlnet、roberta、albert等。越强大的预训练语言模型其特征抽取能力越强,能更好的引入大量无监督数据中包含的语言学知识,其推理能力也就越强大。二是引入外部知识。针对常识问答在问题中只给定很少的背景知识,而预训练模型本身蕴含的知识不足以让模型“推理”出正确答案,于是,引入跟答案或者问题关联的外部知识就成了关键。
XLNet与Bert
XLNet通过引入permutation language modeling,解决了BERT预训练阶段和微调阶段差异性,消除了BERT的预测目标独立性假设,同时数据规模扩充到了126G。
RoBERTa与Bert
RoBERTa在BERT基础上主要做了四点改进:使用动态mask;移除NSP任务;更大的batch size;更长的输入序列。
同时,它使用了更大规模的数据集(160G)。
这或许证明不了这三个模型的内部机制谁更为优秀,但至少证明了一点:引入更大规模,更高质量的数据集能更好的提升模型表现。
本质上预训练是通过设计好一个网络结构来做语言模型任务,然后把大量甚至是无穷尽的无标注的自然语言文本利用起来,预训练任务把大量语言学知识抽取出来编码到网络结构中。这样,引入的数据集规模越大,质量越高,模型学到的先验的语言学特征越多,集成更多的通用的语言学知识,模型的泛化能力也就越强。
在CommonsenseQA任务上,目前由于并没有引入外部数据,并且需要正确预测只需要很少背景知识的问答,所以预训练模型本身蕴含的知识就成了关键。相比之下,RoBERTa引用了最大规模、更高质量的数据集(160G),故而目前效果最好。
ALBERT带来的变化
通常而言,在预训练自然语言表征时增加模型大小可以提升模型在下游任务中的性能。但在某些情况下,由于 GPU/TPU 内存限制、训练时间延长以及意外的模型退化等原因,进一步增加模型大小的难度也随之增加。为了解决这些问题,
谷歌提出了ALBERT(A Lite BERT),通过两种参数精简技术来降低内存消耗,提高BERT的训练速度。
-
Factorized Embedding Parameterization。研究者通过将大的词汇嵌入矩阵分解为两个小的矩阵,从而将隐藏层的大小与词汇嵌入的大小分离开来。这种分隔使得在不显着增加词汇表嵌入参数大小的情况下更容易增加隐藏层的大小。
-
Cross-layer Parameter Sharing。研究者共享了所有层的参数,这一技术可以避免参数量随着网络深度的增加而增加。
-
为了进一步提升 ALBERT 的性能,研究者还引入了一个自监督损失函数,用于句子级别的预测(SOP)。SOP 主要聚焦于句间连贯,用于解决原版 BERT 中下一句预测(NSP)损失低效的问题。
评价
ALBERT通过两大参数削减技术(嵌入向量参数化的因式分解、跨层参数共享)可以充当某种形式的正则化,使训练更加稳定,而且有利于泛化。然后为了进一步提升 ALBERT 的性能,研究者还引入了一个自监督损失函数,用于句子级别的预测(SOP)。SOP 主要聚焦于句间连贯,用于解决原版 BERT 中下一句预测(NSP)损失低效的问题。正是由于这些改造技术,能让ALBERT在很大程度上降低内存消耗,从而能够扩展为更大的版本。尤其要注意到ALBERT_xxlarge的隐藏层已经扩展到4096规模了(BER-TLarge隐藏层H为1024),这是模型能够进一步提升的重要原因。同时,由于所有层共享一样的参数,不断加深ALBERT的网络结构,无法获得持续的性能提升,所以ALBERT_xxlarge只有12层(BERTLarge为24层)。
ALBERT通过一系列改造,大大降低了内存消耗,从而能够扩展为更大版本-
ALBERT-xxlarge,成功地提升了模型的规模并且减少了参数(规模为BERTLarge的70%)。ALBERT_xxlarge超过RoBERTa也不奇怪了,毕竟,这两者“规模”不一样。
有趣的例子
Q: bob早上想吃冰的、甜的东西,下面哪个合适?
A 冰淇淋 B 米饭 C 蛋糕 机器答: C
将C 蛋糕 改为 苦蛋糕 机器答: A
将C 蛋糕 改为 甜蛋糕 机器答: C
也就是说当前训练的72%准确率的模型知道 苦蛋糕不符合冰的、甜的概念,但同时也并不知道冰淇淋是冰的且甜的东西,至少不知道冰淇淋比甜蛋糕更符合问题的描述。