ELMo学习笔记

这一生的挚爱 提交于 2020-01-20 08:27:16

解决什么问题

  • 在word2vec和Glove中,一个词对应一个词向量(vector),无法解决一词多义问题。
  • 在ELMo中,预训练好的模型不再只是向量对应关系,而是一个训练好的模型。使用时,将一句话或一段话输入模型,模型会根据上下文来推断每个词对应的词向量。这样做之后明显的好处之一就是对于多义词,可以结合前后语境对多义词进行理解。比如appele,可以根据前后文语境理解为公司或水果。

ELMo原理

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

语言模型

token(符号):包括单词和标点
这里的(t1,t2,...,tN)(t_1,t_2,...,t_N)是一系列的tokens
前向LSTM语言模型
p(t1,t2,t3,...tN)=i=1Np(tkt1,t2,...,tk1)=p(t1)p(t2t1)p(t3t2,t1)...p(tNt1,t2,t3,...,tN1)p(t_1,t2,t_3,...t_N) = \prod_{i=1} ^{N}p(t_k|t_1,t_2,...,t_{k-1}) = p(t_1)·p(t_2|t_1)·p(t_3|t_2,t_1)...p(t_N|t_1,t_2,t_3,...,t_{N-1})
通过前面的k-1个单词,预测单词tkt_{k}出现的概率

反向LSTM语言模型
p(t1,t2,t3,...tN)=i=1Np(tktk+1,tk+2,...,tk+N)p(t_1,t2,t_3,...t_N) = \prod_{i=1} ^{N}p(t_k|t_{k+1},t_{k+2},...,t_{k+N})
通过后面的k-1个单词,预测单词tkt_{k}出现的概率

目标函数
通过 前后
取这两个方向语言模型的最大似然
k=1N(logp(tkt1,t2,...,tk1)+logp(tktk+1,tk+2,...,tN))\sum_{k=1}^N(logp(t_k|t_1,t_2,...,t_{k-1}) + logp(t_k|t_{k+1},t_{k+2},...,t_{N}))

模型结构

模型结构
ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM(1)\textrm{ELMo}_k^{task} = E(R_k;\Theta^{task}) = \gamma^{task}\sum_{j=0}^L s_j^{task}h_{k,j}^{LM} \tag{1}
注意颜色
ELMo通过下图的方式将hidden states(的初始的嵌入)组合起来,提炼出具有语境意义的词嵌入方式(全连接后加权求和)

  • 1 . concatenate hidden layers 连接隐层
  • 2 .multiply each vector by a weight based on the task, j=0Lsjtaskhk,jLM\sum_{j=0}^L s_j^{task}h_{k,j}^{LM},权重 sjtasks_j^{task}
  • 3 .sum the (now weighted) vectors

在这里插入图片描述

ELMo pretrained embedding可以在AllenNLP的repo下找到
AllenNLP
AllenNLP

顺便说一下AllenNLP有个非常不错的关于NLP的教程
AllenNLP教程

论文

Rk={xkLM,hk,jLM,hk,jLMj=1,....,L}={hk,jLMj=0,...,L}R_k = \{x_k^{LM}, h_{k,j}^{\rightarrow LM}, h_{k,j}^{\leftarrow LM} | j = 1,....,L\} = \{h_{k,j}^{LM} | j = 0,...,L\}
xkx_k:输入的单词编码
L:共L层的BiLSTM
j:第j层的BiLSTM
k:表示tkt_k第k个token
LM:LSTM

输出

ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM(1)\textrm{ELMo}_k^{task} = E(R_k;\Theta^{task}) = \gamma^{task}\sum_{j=0}^L s_j^{task}h_{k,j}^{LM} \tag{1}
在这里插入图片描述

预训练学到了什么

语言模型就是简单的两层BiLSTM语言模型,现在的重点是如何学习输出表达式中的参数sjtasks_j^{task}以及γtask\gamma^{task}

  • the sjs_j represent softmax-normalized weights on the hidden representations from the language model and γ\gamma
    ​ represents a task-specific scaling factor.
  • sjtasks_j^{task} softmax-normalized weights,标准化权重
  • γtask\gamma^{task} scalar parameter,是缩放系数,允许任务模型去缩放整个ELMo向量

如何使用

产生pre-trained biLM模型。模型由两层bi-LSTM组成,之间用residual connection连接起来。
在任务语料上(注意是语料,忽略label)fine tuning上一步得到的biLM模型。可以把这一步看为biLM的domain transfer。
利用ELMo的word embedding来对任务进行训练。通常的做法是把它们作为输入加到已有的模型中,一般能够明显的提高原模型的表现。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!