ELMo详解

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

1. 前向LSTM语言模型基础 & ELMo的双向LSTM语言模型(只是铺垫!)

1.1 前向LSTM语言模型基础

给定一串长度为N的词条 ( t 1 , t 2 , … , t N ) (t_1,t_2,…,t_N) (t1,t2,,tN)前向语言模型通过对给定历史 ( t 1 , … t k − 1 ) (t_1,…t_{k−1}) (t1,tk1)预测 t k t_k tk进行建模,如下图6(值得注意的是,图6只是解释LSTM语言模型的图),对应的公式如下图7。
在这里插入图片描述
这个前向LSTM网络的输入输出是什么?具体的流程是什么?

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

  1. 将 The 转换成word embedding:所谓word embedding就是一个n * 1维的列向量,这个很好理解。那单词怎么转成word embedding的呢?如果大家用过word2vec,glove就知道,就是简单的查表。在ELMo中,用的不是word2vec,glove,毕竟2018年了。作者用的是cnn-big-lstm生成的word embedding,其实跟word2vec等也差不多,就是提前单独训练好的模型,模型喂入单词就能得到单词的word embedding。总之,在这第一步里,就是简单将单词转换成了n * 1的列向量,而这个列向量,对应于我们普通LSTM中的输入 x t x_t xt,如下图所示。
    在这里插入图片描述
  2. 将上一时刻的隐状态 h k − 1 h_{k−1} hk1及第一步中的word embedding一并输入进LSTM中,并得到输出及隐状态 h k h_k hk。其中,隐状态 h k − 1 h_{k−1} hk1是一个m * 1的列向量。在这一步里,LSTM的输出及隐状态都是一个m * 1维的列向量。请大家务必注意 h k h_k hk,这个 h k h_k hk与我们后文提到ELMo向量有着直接的关系。
  3. 将LSTM的输出 h k h_k hk与上下文矩阵 W ′ W' W相乘,即 W ′ ∗ h k W'*h_k Whk得到一个列向量,再将该列向量经过softmax归一化。 其中,假定数据集有 V V V个单词, W ′ W' W ∣ V ∣ ∗ m |V|*m Vm的矩阵, h k h_k hk m ∗ 1 m * 1 m1的列向量,于是最终结果是 ∣ V ∣ ∗ 1 |V|*1 V1的归一化后向量,即从输入单词得到的针对每个单词的概率。

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

1.2 ELMo的双向LSTM语言模型(知道向量表示含义即可)

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

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

对于后向语言模型,跟前向语言模型类似,除了它是给定后文来预测前文。后向lstm语言模型的公式如下图9所示,可以对照着前向语言lstm语言模型的公式(图7所示)来看。还是非常好理解的。类似的,我们设定后向lstm的第 j j j层的第 k k k时刻的输出向量命名为 h k , j L M ← \overleftarrow{h^{LM}_{k,j}} hk,jLM
在这里插入图片描述
图7 和 图9 分别是前向、后向LSTM语言模型所要学习的目标函数(注意此处是追求概率最大化的,跟通常的目标函数追求最小化有所不同,要是追求最小化,前面加负号即可)ELMo使用的双向lstm语言模型,论文中简称biLM作者将 图7 和 图9的公式结合起来,得到所要优化的目标:最大化对数前向和后向的似然概率,如下图10所示。
在这里插入图片描述
图10中的参数说明: Θ → L S T M \overrightarrow{Θ}_{LSTM} Θ LSTM表示前向lstm的网络参数,反向的lstm的网络参数同理。两个网络里都出现了 Θ x Θ_x Θx Θ s Θ_s Θs,表示两个网络共享的参数。其中 Θ x Θ_x Θx表示映射层的共享,即将单词映射为word embedding(1.1的第一步)。 Θ s Θ_s Θs表示1.1节中提到的第三步中的上下文矩阵的参数,这个参数在前向和后向lstm中也是相同的。

2. ELMo(这才是重点)

所谓ELMo不过是一些网络层的组合。都有哪些网络层呢?对于每个单词(token) t k t_k tk,对于L层的双向lstm语言模型,一共有2L+1个表征(representations)(加的1是指初始化时的词向量),放一个集合里用 R k R_k Rk表示,如下图11所示:
在这里插入图片描述
其中, h k , j L M h^{LM}_{k,j} hk,jLM j = 0 j=0 j=0时,表示前文提到的word embedding即 X k L M X^{LM}_k XkLM,也就是LSTM的输入。对于每一层的双向LSTM语言模型, h k , j L M = [ h → k , j L M ; h k , j L M ← ] h^{LM}_{k,j}=[\overrightarrow{h}^{LM}_{k,j};\overleftarrow{h^{LM}_{k,j}}] hk,jLM=[h k,jLM;hk,jLM ]。值得注意的是,每一层有一个前向lstm的输出,一个后向lstm的输出,两者就是简单的拼接起来的。也就是如果分别都是 m ∗ 1 m*1 m1维的列向量,拼完之后就是 2 m ∗ 1 2m*1 2m1的列向量,就这么简单。

既然ELMo有这么多向量了,那怎么使用呢?最简单的方法就是使用最顶层的LSTM输出,但是我们有更好的方法使用这些向量
即如下图图12的方法,我们对于每层向量,我们加一个权重 s j t a s k s^{task}_j sjtask(一个实数),将每层的向量与权重相乘,最后再乘以一个权重 γ t a s k γ^{task} γtask。每层LSTM学到的东西是不一样的,针对每个任务,每层的向量重要性也不一样,所以对于L层LSTM,有L+1个权重(初始化词向量也有权重,所以+1),加上前面的 γ t a s k γ^{task} γtask,一共有L+2个权重。注意下此处的权重个数,后面会用到。 γ t a s k γ^{task} γtask的作用等会说。
在这里插入图片描述
这些权重怎么来的?针对具体的nlp任务,我们用的时候,需要再次训练去得到的这个权重。最简单的方法,就是权重都设为一样。

在生成了ELMo向量(图12所示)之后,使用方法依然是拼接。
将单词/词条的表征 x k x_k xk E L M o k t a s k ELMo^{task}_k ELMoktask拼接起来就可以了,即一个单词的最终向量是这样的 [ x k x_k xk; E L M o k t a s k ELMo^{task}_k ELMoktask]。 这就是最终的使用方法。而我们将 E L M o k t a s k ELMo^{task}_k ELMoktask x k x_k xk要进行拼接,所以 E L M o k t a s k ELMo^{task}_k ELMoktask会事先有一个 γ t a s k γ^{task} γtask缩放系数。

s j t a s k s^{task}_j sjtask可以直接取各层平均得到,也可以让模型自己去学习得到。

3. 预训练的双向语言模型架构(了解)

论文的作者有预训练好的ELMo模型,映射层(单词到word embedding)使用的Jozefowicz的CNN-BIG-LSTM,即输入为512维的列向量。

同时LSTM的层数L,最终使用的是2,即L=2。每层的LSTM的单元数是4096(unit_num)。每个LSTM的输出也是512维列向量。每层LSTM(含前、向后向两个)的单元个数是4096个。也就是每层的单个lstm的输入是512维,输出也是512维。

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

4. ELMo使用方法(重点)

对于预训练好的ELMo,我们可以送入一段话,然后模型会得到模型内部各层的小向量表示(包括输入的向量表示 x k x_k xk),然后我们加上一定的权重(可训练)组合即可得到最终的ELMo向量。

5. ELMo学到了什么(了解)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. ELMo的缺点

那么站在现在这个时间节点(Bert已有)看,ELMO 有什么值得改进的缺点呢?

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

7. 为什么ELMo用两个单向的LSTM代替一个双向的LSTM呢

用双向的模型结构去训练语言模型会导致“看到自己”或“看到答案”的问题。后来的预训练语言模型也都在避免或解决这个问题,解决的程度也影响着模型效果。
在这里插入图片描述

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xu_Wave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值