深度语言模型-ELMo

2021-02-05  本文已影响0人  南朝容止

简介

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)组成. 其中:

输出

经过上面中间过程后,对于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
其实,这个过程就是改词每一层的输出的线性组合。

特点

  1. 解决Word sense disambiguation(词义消歧)问题
    单独用每层输出测试,发现越高层,对语义理解越好,表示对词义消歧做的越好。越能捕获词意信息。
  2. 解决POS tagging(词性标注)问题
    单独用每层输出测试,发现底层的输出更能学到词的句法信息和词性信息。

缺点

一句话总结

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读