ELMo:Deep contextualized word representations

ELMo 通过两个单向的LSTM对原始词向量进行训练,训练是用上下文来预测当前词,两个LSTM不共享参数,最后的softmax共享参数。训练完成后,结合原始词向量,L层的LSTM输出,对一共(L + 1)层向量进行权重加权和,得到最终的ELMo向量。

1. 从Word Embedding到ELMo

Word Embedding:词嵌入。最简单粗劣的理解就是:将词进行向量化表示。在ELMo之前做Word Embedding比较流行的是Word2Vec和Glove。通过语言模型任务,可以获得每个单词的Word Embedding,但是无法解决多义词的问题,用一个词在不同的上下文表示不用的意思。但是在这类语言模型中,会映射到用一个 word embedding空间里去。如何根据句子上下进行单词的word embedding表示,ELMo提供了解决方案。

一次多义通过双向语言模型来解决。

2. ELMo

2.1 ELMo原理

ELMo的本质思想是:我事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。在我实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以ELMo本身是个根据当前上下文对Word Embedding动态调整的思路。

2.2 双向语言模型(Bidirectionbbal language models, BiLM)

首先介绍一下什么是双向语言模型,即BiLM。

前向:
给定一个长度为N的词汇序列 t 1 , t 2 , . . . , t N t_1, t_2,...,t_N t1,t2,...,tN,我们知道,在每个时间步,前向语言模型会根据前面的词汇预测当前词汇的概率。最终对每个时间步的输出概率进行累积来作为整个序列的预测概率,并期望盖概率越大越好,即:
p ( t 1 , t 2 , … , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , … , t k − 1 ) p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} \mid t_{1}, t_{2}, \ldots, t_{k-1}\right) p(t1,t2,,tN)=k=1Np(tkt1,t2,,tk1)
这里前向语言模型可能会包含多层单向LSTM,但是最后对概率进行预测是利用最后一层LSTM每个时间步的隐藏状态向量进行预测。

后向:
而后向语言模型则与前向语言模型相反,后向语言模型将词汇序列进行逆排序,因此,对于每一个时间步都是基于后面词汇信息计算预测概率,具体如下:
p ( t 1 , t 2 , … , t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 , … , t N ) p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} \mid t_{k+1}, t_{k+2}, \ldots, t_{N}\right) p(t1,t2,,tN)=k=1Np(tktk+1,tk+2,,tN)

结合:
biLM模型则将前向语言模型和后向语言模型进行结合,直接最大化前向和后向语言模型的对数概率进行训练,即:

用两个单向的LSTM,结合上下文信息,对当前词进行预测。

∑ k = 1 N ( log ⁡ p ( t k ∣ t 1 , … , t k − 1 ; Θ x , Θ ⃗ L S T M , Θ s ) + log ⁡ p ( t k ∣ t k + 1 , … , t N ; Θ x , Θ ← L S T M , Θ s ) ) \begin{aligned} &\sum_{k=1}^{N}\left(\log p\left(t_{k} \mid t_{1}, \ldots, t_{k-1} ; \Theta_{x}, \vec{\Theta}_{L S T M}, \Theta_{s}\right)\right. \\ &\left.\quad+\log p\left(t_{k} \mid t_{k+1}, \ldots, t_{N} ; \Theta_{x}, \overleftarrow{\Theta}_{L S T M}, \Theta_{s}\right)\right) \end{aligned} k=1N(logp(tkt1,,tk1;Θx,Θ LSTM,Θs)+logp(tktk+1,,tN;Θx,Θ LSTM,Θs))

LSTM 参数不共享,softmax 参数共享

其中, Θ x \Theta_{x} Θx Θ s \Theta_{s} Θs分别表示词向量矩阵softmax层的参数,从左向右方向的LSTM Θ ⃗ L S T M \vec{\Theta}_{L S T M} Θ LSTM 和从右向左的 Θ ← L S T M \overleftarrow{\Theta}_{L S T M} Θ LSTM是两套参数,不共享。而 Θ s \Theta_{s} Θs 是共享的。具体的模型结构如下图所示:
请添加图片描述

ELMo向量的计算

在训练完BiLM后,每一层有一个前向LSTM的输出,一个后向LSTM的输出,有这么多层的输出,我们怎么使用呢?

第一层是普通的 word embedding ,可以用word2vec或者glova来得到

后面链接两个不同方向的LSTM做encoder输入,每一层的LSTM得到的输出作为每个词的上下文相关的word vectors

这样每个词就会有(L + 1)个词向量,不同的词向量做不同的权重加和。其中权重s是一个维度为L的vector,参与训练。

ELMo向量与具体NLP任务结合

那么,在具体的NLP任务中,通过上面所介绍的线性加权的方式得到每个词汇的ELMo向量后,我们怎么将这部分向量加入到具体的NLP任务的模型中去呢?

我们知道,对于具体的NLP任务,模型自身也会为每个词汇或字符初始化一个词向量 x k x_k xk,因此,作者直接将ELMo向量与该向量进行拼接得到 [ x k , E L M o k t a s k ] [x_k, ELMo^{task}_{k}] [xk,ELMoktask],然后再传入后续的层。

另一方面,作者发现引入另一组权重向量,计算得到另一组 E L M o k t a s k ] ELMo^{task}_{k}] ELMoktask],然后在模型最后的输出时将这部分向量也一起拼接得到 [ h k ; E L M o k t a s k ] [h_k;ELMo^{task}_{k}] [hk;ELMoktask],然后再计算最后的输出概率,这样的凡是也可以进一步提高模型的效果。

另外,作者发现对ELMo的权重向量进行 L2 正则化 λ ∣ ∣ w ∣ ∣ 2 2 λ||w||^2_2 λw22,也可以有效提高模型的精度。

总结

优点:

  • ELMo使得词汇的向量表示可以同时考虑语境和语法,多义词方面的极大改善。
  • 效果提升

缺点:

  • 在特征抽取器选择方面,ELMo使用了LSTM而不是Transformer;
  • 训练时间长,这是RNN的本质导致的,和上面的特征提取缺点差不多;
  • ELMo采取双向拼接这种融合特征的能力可能比BERT一体化的融合特征方式弱,但是,这知识一种从到立推断产生的怀疑,目前并没有具体实验说明这一点。

常见问题

ELMo的模型结构是怎样的?

ELMO 由一层input层 和 两层双向LSTM 组合而成的。
请添加图片描述

ELMO 基于语言模型的,确切的来说是一个 Bidirectional language models,也是一个 Bidirectional LSTM结构。我们要做的是给定一个含有N个tokens的序列。分为以下三步:

第一步:得到word embedding,即上图的E。所谓word embedding就是一个n*1维的列向量

第二步:送入双向LSTM模型中;

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

ELMo解决了一个什么样的问题?

ELMo解决了大部分问题,其中最重要的一个是:它解决了一词多义的问题

拿word2vector来说,字与vector是一一对应的,输入句子,然后输出句子中每个字对应vector,可以看成查表的过程。

如:输入 画画 ,word2vector就会输出两个一样的vector,但是第一个画是动词、第二个画是名词,他们的vector应该是不一样的,但word2vector并不能区分。即使在训练过程中对embedding矩阵进行更新,它依旧还是一一对应的关系。

向ELMO输入 画画 ,输出的两个向量是经过2层LSTM后的结果,它们是不同的。这是ELMO根据输入句子的语境得到的结果。

ELMo是怎么进行预训练的?如何使用它?

预训练

论文这么说到:

The top layer LSTM output, is used to predict the next token with a Softmax layer.

即,将ELMO输出的向量映射到 vocab_size 的长度,softmax后,取出概率最大的元素对应的下标,作为对下一个字的预测。根据当前词的上下文堆当前此进行预测,相当于做一个分类,类别数量是词表大小,类似自回归。

从左到右LSTM 的 label相对于input错位一个字(从右到左则相反),如:
请添加图片描述
使用
第一层是普通的 word embedding,后面有L层的两个方向的LSTM。一共是(L + 1)层向量,对这(L + 1)层向量进行权重的加和,得到最终的ELMo向量。其中权重s是哟个维度为L的向量,参与训练。

为什么ELMo用两个单向的LSTM代替一个双向的LSTM?

双向的模型结构共享的是同一套参数,两个单向的用的两套独立的参数。

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

如:

  • ELMO:使用两个单向LSTM代替一个双向LSTM
  • GPT :通过mask得分矩阵避免当前字看到之后所要预测的字,所以GPT是只有正向的,缺失了反向信息
  • BERT:将所要预测的字用[MASK]字符代替,无论你是正向的还是反向的,你都不知道[MASK]这个字符原来的字是什么,只有结合[MASK]左右两边的词语信息来预测。这就达到了用双向模型训练的目的,但也引入了 预训练-微调 不一致的问题
  • XLnet:不用[MASK]字符,结合GPT和BERT的思想,即:用mask得分矩阵的方法来替代[MASK]这个字符

参考:
Peters M E, Neumann M, Iyyer M, et al. Deep contextualized word representations. NAACL 2018[J].
词嵌入:ELMo原理
ELMo原理解析及简单上手使用
ELMo 原理解析
ELMo原理介绍
[NLP]高级词向量表达之ELMo详解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值