02-扩展-ELMo原理解析及简单上手使用

转载自:https://zhuanlan.zhihu.com/p/51679783

2018年3月份,ELMo[1][2]出世,该paper是NAACL18 Best Paper。在之前2013年的word2vec及2014年的GloVe的工作中,每个词对应一个vector,对于多义词无能为力。ELMo的工作对于此,提出了一个较好的解决方案。不同于以往的一个词对应一个向量,是固定的。在ELMo世界里,预训练好的模型不再只是向量对应关系,而是一个训练好的模型。使用时,将一句话或一段话输入模型,模型会根据上线文来推断每个词对应的词向量。这样做之后明显的好处之一就是对于多义词,可以结合前后语境对多义词进行理解。比如apple,可以根据前后文语境理解为公司或水果。

笔者也看了网上的很多资料,感觉很多资料要么含糊其辞,要么蜻蜓点水,并不能让笔者真正明白ELMo到底是怎么一回事,又是怎么工作的。ELMo的原理也不复杂,只是单纯的看此篇paper又缺乏很多nlp的语言模型(LM)知识的话,就不容易理解了。同时,paper不同于教科书,一点一点的来,paper是假设很多背景点到你都明白的情况下写的。本博客中,笔者试图对EMLo论文所做工作做一个较为清晰的解释,同时基于tensorflow hub的ELMo模型进行简单的上手使用。

目前,深度学习有各种网络结构及各种名称,在笔者眼中,不过是一些数学公式起了名字罢了。ok,开始吧

一、 ELMo原理

1.1 RNN及LSTM基础

这里先简单介绍下RNN和LSTM。这些对于后面理解ELMo是很有用的。对于此内容的读者可以跳过此内容。

RNN的网络结构如下图图1,这是一层RNN的结构,这个结构是展开图。RNN是有时序的,每个时序里,都是单元的重复。

image-20230906144303210

RNN有各种问题,比如梯度消失问题,所以下面介绍LSTM。LSTM的结构如下图图3,对于LSTM的输入和输出下图图4。关于LSTM里面的参数及公式,如下图图5。可以结合图4和图5来理解LSTM。LSTM是复杂、高级版的RNN。这里可以参考我以前写的博客。

1.2 前向 LSTM 语言模型基础 & ELMo 的双向LSTM语言模型

这里分为两部分,1.2.1讲述一些 LSTM 语言模型的基础,1.2.2讲述 ELMo 中的 LSTM 模型。

1.2.1 前向 LSTM 语言模型基础

1.2.1 前向 LSTM 语言模型基础

给定一串长度为N的词条 ( t 1 , t 2 , … , t N ) (t_1,t_2,\ldots,t_N) (t1,t2,,tN) ,前向语言模型通过对给定历史 ( t 1 , t 2 , … , t k − 1 ) (t_1,t_2,\ldots,t_{k-1}) (t1,t2,,tk1)预测 t k t_k tk进行建模,图如下图6(值得注意的是,图6不是ELMo的最终图,只是解释 LSTM 语言模型的图),对应的公式如下图图7。

image-20230906144744834

到了此处,大家可能会迷惑这个网络的输入输出是什么?具体的流程是什么?这个问题很基础又关键。

以“the cat sat on the mat”这句话为例。在某一个时刻 k(对应于1.1节中的t时刻)时,输入为the,输出cat的概率。过程是这里面包含了几步。

第一步:将the转换成word embedding。所谓word embedding就是一个 n∗1 维的列向量,这个很好理解。那单词怎么转成word embedding的呢?如果大家用过Word2Vec,GloVe就知道,就是简单的查表。在本篇paper中,用的不是Word2vec,GloVe,毕竟2018年了。作者用的是cnn-big-lstm[5]生成的word embedding,其实跟Word2Vec等也差不多,就是提前单独训练好的模型,模型喂入单词就能得到单词的word embedding。总之,在这里一步里,就是简单将单词转换成了 n∗1 的列向量,而这个列向量,对应于1.1节中的输入 x t x_t xt

第二步:将上一时刻的输出/隐状态 h k − 1 h_{k-1} hk1及第一步中的word embedding一并送入LSTM,并得到输出及隐状态 ℎk 对应于1.1中的 ℎt)。其中,隐状态 h k − 1 h_{k-1} hk1 是一个 m∗1 的列向量。在1.1中,我们有讲 LSTM 的原理。在这一步里,LSTM 的输出及隐状态都是 ℎt ,是一个 m∗1 维的列向量。请大家务必注意 ℎk ,这个 ℎk 与我们后文提到 ELMo 向量有着直接的关系。

第三步:将 LSTM 的输出 ℎk ,与上下文矩阵 W′ 相乘,即 W′ℎk 得到一个列向量,再将该列向量经过softmax归一化。其中,假定数据集有 V 个单词, W′ 是V∗m 的矩阵, ℎk 是 m∗1 的列向量,于是最终结果是 V∗1 的归一化后向量,即从输入单词得到的针对每个单词的概率。

从上面三步,就可以明白这个前向 LSTM 语言模型的工作流程了。其实很多神经网络语言模型都很类似,除了 LSTM,还可以用 RNN 及前馈神经网络,原理都差不多。

1.2.2 ELMo 的双向 LSTM 语言模型

有了前面1.1节及1.2.1节的基础,ELMo 的双向 LSTM 语言模型就很好解释了。ELMo的整体图如下图图8。相对于上面的图6,有两个改进,第一个是使用了多层LSTM,第二个是增加了后向语言模型(backward LM)。

对于多层 LSTM ,每层的输出都是1.1节中提到的隐向量 h t ℎ_t ht,在ELMo里,为了区分,前向 LSTM 语言模型的第j层第k时刻的输出向量命名为 h k , j L M → \overrightarrow{h_{k,j}^{LM}} hk,jLM

对于后向语言模型,跟前向语言模型类似,除了它是给定后文来预测前文。后向 LSTM 语言模型的公式如下图图9所示,可以对照着前向语言 LSTM 语言模型的公式(图7所示)来看。还是非常好理解的。类似的,我们设定后向 LSTM 的第j层的第k时刻的输出向量命名为 h k , j L M ← \overleftarrow{h_{k,j}^{LM}} hk,jLM

image-20230906145753919

图7和图9分别是前向、后向 LSTM 语言模型所要学习的目标函数(注意此处是追求概率最大化的,跟通常的目标函数追求最小化有所不同,要是追求最小化,前面加负号即可)。ELMo 使用的双向 LSTM 语言模型,论文中简称biLM。作者将图7和图9的公式结合起来,得到所要优化的目标:最大化对数前向和后向的似然概率,如下图图10所示。

image-20230906150015070

图10中的参数说明, → Θ L S T M \xrightarrow[\Theta_{LSTM}]{} ΘLSTM表示前向 LSTM 的网络参数, ← Θ L S T M \xleftarrow[\Theta_{LSTM}]{} ΘLSTM表示反向的 LSTM 的网络参数。两个网络里都出现了 Θ x \Theta x Θx Θ s \Theta s Θs ,表示两个网络共享的参数。其中 Θ x \Theta x Θx 表示映射层的共享,即1.2.1节中提到的第一步中,将单词映射为word embedding的共享,就是说同一个单词,映射为同一个word embedding。 Θ s \Theta s Θs 表示1.2.1节中提到的第三步中的上下文矩阵的参数,这个参数在前向和后向 LSTM 中是相同的。

image-20230906150343724

笔者思考一个问题,为何不把L+1个向量一起拼接起来?在nlp通常都是这么做的,使用相加而不是拼接,可能因为维度的原因,并不是十分清楚。

很明显的是,一个单词的word embedding,最简单的办法是使用最顶层的embedding表示这个单词,也就是 h k , j L M {h_{k,j}^{LM}} hk,jLM;次之是使用每层的这个词对应的embedding输出进行加权,这些权重可以训练

image-20230906150533239

总之,看到上图图12,就是我们所说的ELMo向量了。它是多个输出层及输入层,按照一定权重相乘得到的。这个权重怎么来的?针对具体的nlp任务,我们用的时候,需要再次训练去得到的这个权重。最简单的方法,就是权重都设为一样。

1.4 预训练的双向语言模型架构

论文的作者有预训练好的 ELMo 模型,映射层(单词到word embedding)使用的Jozefowicz的CNN-BIG-LSTM[5],即输入为512维的列向量。同时LSTM的层数L,最终使用的是2,即L=2。每层的LSTM的单元数是4096。每个LSTM的输出也是512维列向量。每层LSTM(含前、向后向两个)的单元个数是4096个(从1.1节可以知公式4m2 = 4512*2 = 4096)。也就是每层的单个lstm的输入是512维,输出也是512维。

一旦模型预训练完成,便可以用于nlp其他任务。在一些领域,可以对biLM(双向 LSTM 语言模型)进行微调,对任务的表现会有所提高,这种可以认为是一种迁移学习(transfer learning)。

1.5 ELMo使用方法总结 及 效果展示

对于预训练好的双向 LSTM 语言模型,我们可以送入一段话,然后模型会得到图11的向量,然后我们加上一定的权重(可训练)即可得到图12的ELMo向量。最终将ELMo向量与 x k x_k xk拼接作为单词的特征,用于后续的处理。

对于部分任务,可以对双向 LSTM 语言模型微调,可能有所提升。

1.7 ELMo的缺点

前文提了这么多 ELMo 的优点,现在说一说缺点。这些缺点笔者是搬运[6]的观点。[6]的观点是站在现在的时间点上(BERT已发布)看的,他的观点如下:

前文提了这么多 ELMo 的优点,现在说一说缺点。这些缺点笔者是搬运[6]的观点。[6]的观点是站在现在的时间点上(BERT已发布)看的,他的观点如下:

那么站在现在这个时间节点看,ELMo 有什么值得改进的缺点呢?首先,一个非常明显的缺点在特征抽取器选择方面,ELMo 使用了 LSTM 而不是新贵 Transformer,Transformer 是谷歌在 17 年做机器翻译任务的“Attention is all you need”的论文中提出的,引起了相当大的反响,很多研究已经证明了 Transformer 提取特征的能力是要远强于 LSTM 的。如果 ELMo 采取 Transformer 作为特征提取器,那么估计 Bert 的反响远不如现在的这种火爆场面。另外一点,ELMo 采取双向拼接这种融合特征的能力可能比 Bert 一体化的融合特征方式弱,但是,这只是一种从道理推断产生的怀疑,目前并没有具体实验说明这一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值