本文主要用于记录华盛顿大学计算机院发表于2018年的一篇论文。该论文主要提出了ELMO词向量模型。本笔记主要为方便初学者快速入门,以及自我回顾。
论文链接:https://arxiv.org/pdf/1802.05365.pdf
Github:https://github.com/allenai/allennlp
基本目录如下:
- 摘要
- 核心思想
- 总结
------------------第一菇 - 摘要------------------
1.1 论文摘要
本文作者推出了一种新的基于深度学习框架的词向量表征模型,这种模型不仅能够表征词汇的语法和语义层面的特征,也能够随着上下文语境的变换而改变。简单来说,本文的模型其实本质上就是基于大规模语料训练后的双向语言模型内部隐状态特征的组合。实验证明,新的词向量模型能够很轻松的与NLP的现有主流模型相结合,并且在六大NLP任务的结果上有着巨头的提升。同时,作者也发现对模型的预训练是十分关键的,能够让下游模型去融合不同类型的半监督训练出的特征。
------------------第二菇 - 核心思想------------------
2.1 论文模型结构 - 双向语言模型
ELMO(Embeddings from Language Models)模型,从他的缩写就可以看出,他的模型本质是从语言模型而来的。因此,我们先聊一聊双向语言模型。
对于一个给定的句子(),我们构建的语言模型就是通过一个词汇的上下文去,预测一个词,
一般来说,NLP相关的首选肯定是LSTM,本文的作者当然也是采用了该模型。该语言模型的输入就是词向量(获取的途径多种多样,作者提了一个是字符卷积),然后通过一个多层的前向LSTM网络,在LSTM的每一层,我们都能输出基于文本的一个向量表达,。其中代表层数。其最后的一层的输出,,经过一层softmax归一,就可以来预测词,大概流程长下面这样【1】,
当然,现在都流行双向语言模型,本质就是把句子再逆序输入一遍,再把前向逆向的结果结合起来,就是我们最终的双向语言模型,而我们最终的目标函数就是去最大化,
其中两个方向的LSTM的参数不是共享的,就是一开始输入的词向量,就是softmax层参数。因此,双向语言模型的结构图,可以表达如下【1】,
2.2 论文模型结构 - ELMO模型
对于每一个词,一个L层的biLM可以计算出个表达如下,
如果我们统一用来表示biLM的每一层输出,来表示第一层向量,那么整个表达可以统一表示为,
而前面也说了,ELMO本质上就是一个任务导向的,双向语言模型(biLM)内部的隐状态层的组合。通用的表达式如下,
其中,是用来控制ELMO模型生成的向量大小,原文中说该系数对于后续的模型优化过程有好处(在附件中,作者强调了这个参数的重要性,因为biLM的内核表达,与任务需要表达,存在一定的差异性,所以需要这么一个参数去转换。并且,这个参数对于,last-only的情况(就是只取最后一层,ELMO的特殊情况),尤其重要),另一个参数,原论文只说了softmax-normalized weights,所以我的理解,其实它的作用等同于层间的归一化处理。
在面对具体的NLP下游任务时,ELMO模型的应用也很简单。首先,大部分的NLP的模型都会有一层词向量层,而我们要做的无非就是用ELMO与词向量层结合,让模型去训练学习ELMO的内部状态的线性组合,然后,生成一个共同的词向量,用于后续的训练,整个模型结构见下图【1】,
2.3 论文模型结构 - 预训练过程
至此,整个模型结构已经说清楚了。作者在实验论证该预训练模型之前,阐述了一下其预训练过程。最终作者用于实验的预训练模型,为了平衡语言模型之间的困惑度以及后期NLP模型的计算复杂度,采用了2层Bi-Big-Lstm,共计4096个单元,输入及输出纬度为512,并且在第一层和第二层之间有残差连接,包括最初的那一层文本向量(用了2048个过滤器, 进行基于字符的卷积计算,详细可查看字符卷积的原论文),整个ELMO会为每一个词提供一个3层的输出,而下游模型学习的就是这3层输出的组合。另外,作者强调了一下,对该模型进行FINE-TUNE训练的话,对具体的NLP任务会有提升的作用。
2.4 论文实验结果分析
作者的论文的实验部分,具体展示了ELMO模型在六大nlp任务上的表现,证实了该模型的有效性。这里就不具体展开,有兴趣的读者,可以自行阅读原论文,包括附录有更详细的分析。这里直接聊几个论文中说的我认为比较有趣的点,
1)作者实验了一把,ELMO的特殊情况,只取最后一层的输出,和多层的线性组合,实验结果发现,只取最后一层也取得了很好的效果,而且多层的效果提升并不是特别的明显(较之于只取最后一层),结果见下图,
2)ELMO加的地方。刚才前面说了,是与之前的词向量层一起,在最开始的地方。作者还实验了一把,放在模型的输出那里,并且还取得了不错的效果。
3)ELMO不同的层,能从不同的纬度表达一个词,作者经过实验发现,低层的输出能更好的从句法语法的层面表达一个词,而高层的输出能更好的从语意的层面表达一个词。
2.3 论文模型实践
这里先留个坑,以后有时间,把ELMO的实践也摆上来。
------------------第三菇 - 总结------------------
3.1 总结
到这里,整篇论文的核心思想及其创新点已经说清楚了。本论文主要集中在于阐述ELMO架构及其预训练的思想,并且用具体NLP实验证明了使用这一套架构的原理,并证实了其可行性。
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下ELMO架构,最后也谈了一点自己对ELMO架构的理解,总的来说,这篇论文也是首次提出的预训练模型的思想。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~
参考文献:
【1】https://jalammar.github.io/illustrated-bert/