《芝麻街》人物赏析

《芝麻街》人物赏析

这个题目其实是我们组一个同学在年初时关于预训练语言模型的一次主题分享,听完之后感觉很有趣。这几天读完一些paper后,也觉得把它们放在一起看,也许更有意思,于是有了今天这篇番外——《芝麻街》人物赏析。希望以更轻松、简明的笔法和大家聊聊这些年来从NNLM到BERT的历史过程,谈谈自己的一些认识和观察。

前面的几篇中,我们已经认识了一些《芝麻街》里的角色,例如BERTERNIE(据媒体报道,这两个布偶角色可不止好朋友这么简单,恰巧在NLP里面,这两个也是关系非常密切,😂)。然而,前面还是遗漏了一个重要的主角——ELMO,这个在剧中可是当之无愧的灵魂人物。所以,在进入整个家庭介绍前,还是先来了解一下NLP中的这位ELMo朋友吧。

ELMo (Embeddings from Language Models)

论文地址:Deep contextualized word representations

代码地址:https://github.com/allenai/bilm-tf

题外话:这是AllenNLP团队在2018年发在NAACL 2018上的Paper。还记得上篇文章谈到的Yoshua Bengio早在2003年发表的用神经网络来训练语言模型的论文吗?其实在那篇论文末尾展望部分,Bengio就提出可以用循环神经网络搞更大的新闻。15年之后,ELMo诞生了,一个构建在双向循环神经网络上的语言模型。这样看来,以ELMo作为今天的主角介绍,引出整个芝麻街人物大家庭,更有趣了。

模型结构

发现现在很多介绍ELMo的文章都没有将ELMo的结构讲全,论文里也没有给出模型结构图,网上找到一篇博文有比较好的图解,如下:

image-20190810153408807

来源:https://www.mihaileric.com/posts/deep-contextualized-word-representations-elmo/,致谢。论文里的设置:两层biLSTM,每个rnn-cell都是4096维度然后经过512维转换(后文拼接的准确来说是512这个输出),两层biLSTM间有残差连接(residual connection);底层词向量是通过卷积神经网络获得的,用了2048个filters,经过2层highway layers,最后线性映射同样得到512维的词向量输入。

整个模型结构,其实很多组成部分在前人的工作里都有过尝试,例如双向LSTM、character CNN等。但是ELMo将所有这些模块整合的比较好,而且通过大规模无监督预训练语言模型这个任务,获得了上下文相关的词表示。注意到这里的双向语言模型biLM是分开计算的,整体的损失函数是:
\sum_{k=1}^{N}(\log p(t_k|t_1,...,t_k-1;\Theta_x, \overrightarrow{\Theta}_{LSTM},\Theta_s)+\log p(t_k|t_{k+1},...,t_N;\Theta_x, \overleftarrow{\Theta}_{LSTM},\Theta_s))
注:论文写的是”We tie the parameters for both the token representation (\Theta_x) and Softmax layer (\Theta_s) in the forward and backward direction”,所以就如同上面式子写的,前向和后向的输入词向量\Theta_x和输出词向量矩阵\Theta_s是共享的,但是两者的LSTM参数显然是不同的。插一句,很多之前的研究中,\Theta_x\Theta_s可以设置相同,这里由于输入层的\Theta_x其实是通过character-CNN建模的,所以写成不同的。

因此针对一个L层的biLM,便能获取到2L+1种表示,集合如下(注:论文实现中,h_{k,j}^{LM}=[\overrightarrow{h}_{k,j}^{LM};\overleftarrow{h}_{k,j}^{LM}],特别地,h_{k,0}^{LM}=[x_k^{LM};x_k^{LM}]):
R_k=\{{x_k^{LM},\overrightarrow{h}_{k,j}^{LM},\overleftarrow{h}_{k,j}^{LM}|j=1,...,L}\} \\ ={\{h_{k,j}^{LM}|j=0,...,L\}}
不同于以往一般取最后1层输出加以利用,这篇论文提出利用所有层的线性组合(根据具体任务),公式计算如下:
\textbf{ELMo}_k^{task}=E(R_k;\Theta^{task})=\gamma^{task}\sum_{j=0}^{L}s_j^{task}h_{k,j}^{LM}
上式中s^{task}就是softmax-normalized weights,而\gamma^{task}是一个缩放因子(超参数),主要是为了平衡ELMo和具体任务模型在分布上的差异,这两个参数都是在下游任务中训练而得的。另外,考虑到ELMo不同层之间也存在分布差异,还可以在加权求和前对各层先应用归一化(Layer normalization)。

与以往介绍过的Pre-training+Fine-tuning模式不同,预训练得到的ELMo词向量是以特征(Feature-based)形式加入到下游的监督任务中的。具体加入位置也可以有不同设定,例如1) 拼接到输入层 [x_k;\textbf{ELMo}_k^{task}] ,甚至2) 在输出层也可以拼接[h_k;\textbf{ELMo}_k^{task}](注:这里的x_kh_k是下游模型的输入输出,与之前的biLM无关;两个\textbf{ELMo}_k由不一样的线性加权而来),更进一步地还可以3) 在下游任务的损失项中添加ELMo词向量的L2正则化项\lambda ||w||_2^2注:包括ELMo向量在内,在下游任务中都是trainable的

实验分析

image-20190810120506241

如前所述,添加ELMo后,在多个NLP任务上都取得了较大提升。

上节说到两个问题,1)利用哪些层?2)拼接到哪里?,在实验部分做了分析,结果如下:

实验结果 分析结论
image-20190810155716286 \lambda是正则化控制项。对比列2和最后两列,显然综合多层要比直接利用最后1层好。而\lambda = 1实际上约束了各层的权重的可变性,轻微限制了模型的能力,\lambda = 0.001会更优秀些。
image-20190810155737898 具体拼接在哪里,还是得看具体任务的具体网络结构。注:这里前两个任务SQuAD和SNLI在biRNN之后是有attention层的,可以直接attend有用的信息。

上面说的是利用ELMo能够提升下游任务的效果,那ELMo相比其他向量效果又如何呢,作者对比了CoVe,如下:

image-20190810161521263

注:这两个实验可以说明两个问题。1)biLM优胜预CoVe;2)biLM的不同层建模不同信息,高层更注重语义(WSD-Word sense disambiguation,语义消歧),而低层更关注语法(POS任务是辨别词性,语法层面)。

ELMo的加入,对于下游监督任务的积极意义还有:

  • 加速模型收敛(在SRL baseline模型中,达到最大Dev-F1需要486 epochs,加入ELMo后,在epoch 10就超过了baseline!)
  • 在少标注数据上,提升巨大,如下图(1)
(1) Sample Efficiency (2) Weights Visualization
image-20190810162916314 image-20190810162933234

注:图(2)是学习到的layer weights,好像基本都倾向于选择低层layer😂,不同任务还是希望自己学习语义。

Language Representation / Understanding

目前为止介绍的几篇文章主要还是在语言表示(Language Representation)上,其实还远没有真正理解语言(Language Understanding)。有学者总结了21世纪以来NLP神经网络发展历史中最重要的8个里程碑,如下图:

image-20190810164712869

可以看到不少工作都是和语言表示直接相关的,例如神经网络语言模型(NNLM)、词向量(Word Embeddings)、预训练语言模型(Pretrained-LM)等等。而具体到语言表示这一领域,分享一下前面说过的我的同事的主题分享中一张比较有意思的Slide:

image-20190809090947554

可以看到明显的两个趋势:Transformer复杂模型替代了原来的RNN/CNN,预训练往多任务发展。下面的表格则是我自己的一些简单总结,主要是针对其中几个典型的相关模型进行比较,欢迎留言讨论。

模型 一句话描述 优点 缺点 发展
NNLM (2003) 第一个神经网络语言模型。 词表示只是无心插柳的副产物。 启发了Word2Vec。
Word2Vec (2013) 用神经网络得到词向量表达。 思想简单,并提出两种高效优化算法。 无法解决一词多义问题,对上下文信息利用不够充分。 与后来的ELMo甚至BERT其实有千丝万缕的联系。
Glove (2014) 从词共现矩阵中得到的词向量表达。 训练速度极快,利用了全局信息。 同Word2Vec。
ELMo (2018) 通过双向语言模型学习上下文信息。 多义问题得到解决,融合双向context,语义语法信息更丰富。 LSTM特征抽取能力较弱,融合方式粗糙,预训练模型与下游模型脱轨。
GPT (2018) Transformer的解码器。 Pretrain+Finetune的训练范式。 自回归语言模型只能利用前向信息,长度受限。 Transformer XL、XLNet*
BERT (2018) Transformer的编码器。 通过Mask LM更好地获取了双向信息,工业界、学术界影响巨大。 Mask LM和下游任务的不一致,长度受限。 RoBERTa、ERNIE

注:BERT和GPT都源于2017年的Transformer框架,分别对应Encoder和Decoder。后来的很多模型只是在此基础上的改进,所以不单独列行,而放在发展之列(这其中有些其实可以综合的,例如XLNet的思想也可以用在Encoder上,简明起见,不作细究)

回顾过去十几年的发展,可以看到NLP的发展历程和CV有着惊人的相似!它们成功的共同要素:大数据、大计算、大模型、预训练

Sesame Street 50th Anniversary

《芝麻街》(Sesame Street)是美国公共广播协会(2000年后由芝麻街工作室负责)制作播出的儿童教育电视节目,自1969年11月10日在美国公共电视台首播以来,已经陪伴全球140多个国家超过1亿的儿童健康快乐成长,荣获超过160次艾美奖

芝麻街人物介绍

《芝麻街》最为人熟悉喜爱的部分应该就数里面出现的很多造型鲜明且活泼有趣的布偶角色了,Youtube上有一段播放过亿的英文歌视频,悉数登场的布偶确实可爱:

50周年经典回顾

《芝麻街》播出50周年之际,让我们一起回顾一下那些难忘的经典画面(虽然我没有怎么看过,但是想想一档走过50年历史依旧备受欢迎的节目,还是觉得不可思议):

也希望自己能一直保持童心,充满想象力,努力学习成长

Published by

admin

天空没有翅膀的痕迹,但我已飞过

Leave a Reply

Your email address will not be published. Required fields are marked *