ELMo解读

背景

之前我们提到的NNLMWord2Vec开辟了词向量的先河。仔细回顾,我们可以知道,为了解决统计语言模型存在的稀疏性,平滑等问题,NNLM运用神经网络对语言模型进行建模,采用输入若干个词预测下一个词,结果发现第一层的embedding vector可以很好的反应词的语义在空间上的表达,因此NNLM是语言模型,词向量是副产物。对于word2vec同样如此,相比NNLM, word2vec做了多改进(删掉隐藏层减少参数,negative sampling,层次softmax等),使得得到词向量更加快速高效。但这两个模型存在一个缺点,模型训练完毕后,词向量就固定了,但是一个词在不同语境下的词又很大的不同(比如苹果这个词,可以代表水果也能是手机);另外一个词在不同语境相同意思,也有不同词性,比如一个词既可以是动词也可以是名词,因此我们发现 无论是NNLM还是word2vec都无法解决这两个问题。
ELMo(Embedding from Language Model)和之前的词向量模型最大的区别就在于解决了这个问题。论文为2018NAACL最佳论文《Deep contextualized word representations》

ELMo

Elmo解决了如下两个问题

(1) complex characteristics of word use (e.g., syntax and semantics),
(2) how these uses vary across linguistic contexts (i.e., to model polysemy)

一个是词使用时的复杂语法和语义(一个词在不同语境词性不同,比如既可以是动词也可以是名词,既可以是主语也可以是谓语),第二个是一词多义。

Our representations differ from traditional word type embeddings in that each token is assigned a representation that is a function of the entire input sentence. We use vectors derived from a bidirectional LSTM that is trained with a coupled language model (LM) objective on a large text corpus.

ELMo和之前词向量模型的不同就是词向量不是固定唯一,是由整个输入的句子动态决定的,具体是用一个多层双向的LSTM网络训练语言模型,最后的representation是每层LSTM状态的线性组合。

Bidirection Language Model

首先介绍双向语言模型。
对于前向语言模型
p(t1,t2,,tN)=k=1Np(tkt1,t2,,tk1) p(t1,t2,{\cdots},t_N) = \prod_{k=1}^Np(t_k|t1,t2,{\cdots},t_{k-1})
其中句子的概率通过某个词tkt_k的前k-1的概率连乘得到。对于前向LSTM,每层LSTM的隐状态hk,jLM(j=1,2,...L)\overrightarrow{h}_{k,j}^{LM}(j=1,2,...L)表示第j层第k个词的输出,输出层hk,LLM\overrightarrow{h}_{k,L}^{LM}使用softmax计算预测下一个词(即第k+1k+1个词)tk+1t_{k+1}的概率
对于后向语言模型, 基本类似,我们可以得到
p(t1,t2,,tN)=k=1Np(tktk+1,tk+2,,tN) p(t1,t2,{\cdots},t_N) = \prod_{k=1}^Np(t_k|t_{k+1},t_{k+2},{\cdots},t_N)
对于后向LSTM,每层LSTM的隐状态则用hk,jLM(j=1,2,...L)\overleftarrow{h}_{k,j}^{LM}(j=1,2,...L)表示

双向语言模型(Bidirection Language Model, Bi-LM)结合以上两个部分, 目标是最大化前向和后项似然log概率之和
kN(log(p(tkt1,t2,...tk1;Θx,ΘLSTM,Θs))+log(p(tktk+1,tk+2,...tN;Θx,ΘLSTM,Θs))) \sum_k^N(\log(p(t_k|t_1,t_2,...t_{k-1};\Theta_x, \overrightarrow{\Theta}_{LSTM}, \Theta_s)) + \log(p(t_k|t_{k+1},t_{k+2},...t_N;\Theta_x, \overleftarrow{\Theta}_{LSTM}, \Theta_s)))
其中Θx\Theta_x表示输入的embedding和Θs\Theta_s表示输出的softmax layer。可以发现前向和后项共享softmax layer和输入embedding等参数,但是LSTM网络的参数是互相独立的。

ELMo模型架构

模型架构如下图所示
ELM模型架构
ELMo就是以上Bi-LM的中间层的组合,具体组合方式取决与后续任务。对于一个L层stack的LSTM网络结构,这里我们第k个词的representation和2L+1个的representation有关
Rk={xkLM,hk,jLM,hk,jLMj=1,2,...,L}={hk,jLMj=0,1,...,L} \begin{aligned} R_k & =\{x_k^{LM},\overrightarrow{h}_{k,j}^{LM},\overleftarrow{h}_{k,j}^{LM}|j=1,2,...,L\} \\ & = \{{h}_{k,j}^{LM}|j=0,1,...,L\} \\ \end{aligned}
这里hk,0LM{h}_{k,0}^{LM}表示输入embedding,hk,jLM{h}_{k,j}^{LM}为前向后项的concat结果,hk,jLM=[hk,jLM;hk,jLM]{h}_{k,j}^{LM}=[\overrightarrow{h}_{k,j}^{LM};\overleftarrow{h}_{k,j}^{LM}]
对于下游模型,ELMo将以上进行线性叠加
ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM ELMo_k^{task} = E(R_k;\Theta^{task}) = \gamma^{task}\sum_{j=0}^Ls_j^{task}{h}_{k,j}^{LM}
sjtasks_j^{task}为第j层的softmax后的加权系数,γtask\gamma^{task}为最后的scale系数

模型训练好后,对于下游监督学习的NLP任务,对于给定的的Bi-LM模型,我们首先freeze双向语言模型参数,学习ELMo中的softmax后的线性权重参数sjtasks_j^{task}和scaling系数γtask\gamma^{task},计算得到ELMo的输出作为具体下游任务的输入,并且同时下游任务的具体参数也同时进行学习

总结

实验结局表明那些对词义消歧有需求的任务就更容易通过训练给第二隐层一个很大的权重,而对词性、句法有明显需求的任务则可能对第一隐层的参数学习到比较大的值,这样一来,一开始说到的两个问题即一词多义问题和语法语义问题就能通过学习不同的参数进行解决。

总结一下,本质上ELMo解决一词多义的方法是先通过双向语言模型预训练出一个词向量,实际下游任务中通过学习不同语境下的不同线性组合,动态调整词在输入时的词向量,从而达到更好的语义语法表达同时消除一词多义。

优点

  1. word embeding不再是静态不变,而是根据输入句子不同而动态变化解决了一次多义问题
  2. 采用双向LSTM语言模型,比word2vec一个固定窗口,得到句子更长的依赖关系,更多的context信息,模型效果更佳

缺点

  1. 双向lstm对语言模型建模不如attention model
  2. 双向语言模型采用拼接的方式得到,特征融合能力较弱
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章