深度语言模型-ELMo

简介

2018年3月,ELMo这篇paper发表,《Deep contextualized word representations》, 是NAACL18 Best Paper。
ELMo是指一个训练好的模型, 而非一个向量, 是动态的,是一个过程。当给出一句话时,模型会根据上下文来判断每个词对应的词向量,最后输出。这样做之后明显的好处之一就是对于多义词,可以结合前后语境对多义词进行理解。解决了word2vec的静态权重问题。

原理:

image.png

损失:

image.png

对于给定的k-1个词,推断第k个词为目标词的概率,然后将该概率最大化。

输入:

word embedding使用的Jozefowicz的CNN-BIG-LSTM, 和Word2Vec,glove等都是同类的词向量。可以表示为xkLM, 即第0层的E1E2E3...、EN

中间过程

图中虚线框是某一个中间层,即一个Encoder,实际应用时,可以加很多中间层Encoder,比如我们常说的12层的模型,也就是是中间有12个这种Encoder,即这种虚线框里的部件。可以看到图中的这一个中间层,是由两个Bi-LSTM(双向LSTM)组成. 其中:

  • 一个是从fisrt word 到 last word, 正序Bi-LSTM,其输出为:
    image.png

    表示第j层encoder,第k个的词的正向Bi-LSTM输出。

  • 另一个是从last word 到 first word, 逆序Bi-LSTM,其输出为:
    image.png

    表示第j层encoder,第k个的词的逆向Bi-LSTM输出。
    这样以来,每一层每一个词都会有一个输出,我们称为Rk, 如下所示:
    image.png

    Rk表示第k层的所有输出,包括正向Bi-LSTM输出,逆向Bi-LSTM输出,以及拼接上最原始的WordEmbeding向量xkLM

输出

经过上面中间过程后,对于L层(L个encoder)的ELMO网络,每个词就会有L个正向向量表示,即L个正向特征表示。L个逆向特征表示。再加一个输入的word embeding表示,所以每个词有2L+1个特征表征。

那么针对每个词,我们在定义两个参数,或者叫权重 γ 和 sj,其中用法如下:

image.png

ELMoktask就是整个ELMO网络最终的关于第k个词的向量输出。
其计算也很简单,就是给每一层第k个词的输出hk,jLM(包括正向Bi-LSTM,和反向Bi-LSTM两部分)乘以该层的整体权重sj, 请注意此时的sj是在正向Bi-LSTM,和反向Bi-LSTM共享的,即该层两个网络用的是同一个 sj。然后将所有层的乘以本层权重sj后的输出结果相加求和,最后再乘以整体网络的参数γ,就得到了ELMo*ktask
其实,这个过程就是改词每一层的输出的线性组合。

特点

  • ELMo学到了什么???或者说解决哪些问题
    实验表明:
  1. 解决Word sense disambiguation(词义消歧)问题
    单独用每层输出测试,发现越高层,对语义理解越好,表示对词义消歧做的越好。越能捕获词意信息。
  2. 解决POS tagging(词性标注)问题
    单独用每层输出测试,发现底层的输出更能学到词的句法信息和词性信息。

缺点

  • 特征抽取器选择方面,ELMO 使用了 LSTM 而不是新贵 Transformer,很多研究已经证明了 Transformer 提取特征的能力是要远强于 LSTM 的。如果 ELMO 采取 Transformer 作为特征提取器,那么估计 Bert 的反响远不如现在的这种火爆场面。
  • ELMO 采取双向拼接这种融合特征的能力可能比 Bert一体化的融合特征方式弱,但是,这只是一种从道理推断产生的怀疑,目前并没有具体实验说明这一点。
  • 貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,但由于融合模式过于简单,所以效果其实并不是太好。

一句话总结

每一层都用了两个方向的Bi-LSTM, 然后将每层的输出和原始word2vec Embedding拼接,然后将拼接后的向量线性加和得到最后的向量表示。

利用预训练的ELMO模型,训练下游任务时,分两步

对于下游任务的一句话 S
首先: S先走预训练好的ELMO网络,拿到该网络对该句话每个词的提取的特征,即Embeding向量。
然后: 利用第一步中得到的EMbeding向量在下游任务中,进行训练。 此时之前ELMO预训练的网络参数就不变了,仅用于提取特征。
反复执行上面两步。

你可能感兴趣的:(深度语言模型-ELMo)