必威体育Betway必威体育官网
当前位置:首页 > IT技术

Elmo

时间:2019-10-29 05:14:55来源:IT技术作者:seo实验室小编阅读:65次「手机版」
 

elmo

Elmo

1 Elmo简介

ELMo是一种新型深度语境化词表征,可对词进行复杂特征(如句法和语义)和词在语言语境中的变化进行建模(即对多义词进行建模)。词向量是深度双向语言模型(biLM)内部状态的函数,在一个大型文本语料库中预训练而成。

2 Elmo原理

模型架构图如下:

在这里插入图片描述

2.1 LSTM

Elmo的基本由LSTM构成 首先理解下何为LSTM

LSTM网络引入一个新的内部状态(internal state)ctc_tct​ 专门进行

线性的循环信息传递,同时(非线性)输出信息给隐藏层的外部状态hth_tht​。

ct=ftct1+itctc_t = f_t \bigodot c_t-1 + i_t \bigodot c'_tct​=ft​⨀ct​−1+it​⨀ct′​

ht=ottanh(ct)h_t = o_t \bigodot tanh(c_t)ht​=ot​⨀tanh(ct​)

其中ftitf_t,i_tft​,it​ 和oto_tot​ 为三个门(gate)来控制信息传递的路径;⊙为向量元素乘积;

ct1c_{t−1}ct−1​ 为上一时刻的记忆单元;ctc'_tct′​ 是通过非线性函数得到候选状态

在数字电路中,门(Gate)为一个二值变量{0, 1},0代表关闭状态,不许

任何信息通过;1代表开放状态,允许所有信息通过。

LSTM网络中的“门”是一种“软”门,取值在(0, 1)之间,表示以一定的比例运行信息通过。

LSTM网络中三个门的作用为

• 遗忘门ftf_tft​ 控制上一个时刻的内部状态ct1c_{t−1}ct−1​ 需要遗忘多少信息。

• 输入门iti_tit​ 控制当前时刻的候选状态ctc'_tct′​ 有多少信息需要保存。

• 输出门oto_tot​控制当前时刻的内部状态ctc_tct​有多少信息需要输出给外部状态hth_tht​。

ft=0,it=1f_t = 0, i_t = 1ft​=0,it​=1时,记忆单元将历史信息清空,并将候选状态向量ctc'_tct′​ 写入。

但此时记忆单元ctc_tct​ 依然和上一时刻的历史信息相关。

ft=1,it=0f_t = 1, i_t = 0ft​=1,it​=0时,记忆单元将复制上一时刻的内容,不写入新的信息。

三个门的计算方式为:

it=σ(Wixt+Uiht1+bi)i_t = \sigma(W_ix_t + U_ih_{t-1} +b_i)it​=σ(Wi​xt​+Ui​ht−1​+bi​)

ft=σ(Wfxt+Ufht1+bf)f_t = \sigma(W_fx_t + U_fh_{t-1} +b_f)ft​=σ(Wf​xt​+Uf​ht−1​+bf​)

ot=σ(Woxt+Uoht1+bo)o_t = \sigma(W_ox_t + U_oh_{t-1} +b_o)ot​=σ(Wo​xt​+Uo​ht−1​+bo​)

其中σ(x)\sigma(x)σ(x)为logistic函数,其输出区间为(0, 1),xtx_txt​ 为当前时刻的输入,ht1h_{t−1}ht−1​ 为

上一时刻的外部状态。

下图给出了 LSTM 网络的循环单元结构,其计算过程为:

(1)首先利用上一时刻的外部状态ht1h_{t−1}ht−1​ 和当前时刻的输入xtx_txt​,计算出三个门,以及候选状态

ctc'_tct′​;

(2)结合遗忘门ftf_tft​ 和输入门iti_tit​ 来更新记忆单元ctc_tct​;

(3)结合输出门oto_tot​,将内部状态的信息传递给外部状态hth_tht​。

在这里插入图片描述

循环神经网络中的隐状态h存储了历史信息,可以看作是一种记忆(Memory)。

在简单循环网络中,隐状态每个时刻都会被重写,因此可以看作是一种短期记忆(Short-Term Memory)。

在神经网络中,长期记忆(Long-Term Memory)可以看作是网络参数

,隐含了从训练数据中学到的经验,并更新周期要远远慢于短期记忆。

而在LSTM网络中,记忆单元c可以在某个时刻捕捉到某个关键信息,

并有能力将此关键信息保存一定的时间间隔。

记忆单元c中保存信息的生命周期要长于短期记忆h,但又远远短于长期记忆,

因此称为长的短期记忆(Long Short-Term Memory)。

2.2 Elmo的双向LSTM模型

2.2.1 前向模型

给定一串长度为N的词条(t1,t2,,tN)(t_1,t_2,…,t_N)(t1​,t2​,…,tN​),前向语言模型通过对给定历史(t1,tk1)(t_1,…t_{k−1})(t1​,…tk−1​)预测tkt_ktk​进行建模

p(t1,t2,,tN)=k=1Np(tkt1,t2,,tk1)p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} | t_{1}, t_{2}, \ldots, t_{k-1}\right)p(t1​,t2​,…,tN​)=k=1∏N​p(tk​∣t1​,t2​,…,tk−1​)

第一步:将单词转换成了n*1的列向量,进行word embedding,得到 LSTM的输入 xtx_txt​。

第二步:将上一时刻的输出/隐状态hk1h_{k−1}hk−1​及第一步中的 xtx_txt​送入lstm,

并得到输出及隐状态hkh_khk​。其中,隐状态hkh_khk​是一个m*1的列向量。

第三步:将lstm的输出hkh_khk​,与上下文矩阵WWW相乘,即WhkWh_kWhk​得到一个列向量,再将该列向量经过softmax归一化。其中,假定数据集有V个单词,WWW是Vm|V|*m∣V∣∗m的矩阵,hkh_khk​是m1m*1m∗1的列向量,于是最终结果是V1|V|*1∣V∣∗1的归一化后向量,即从输入单词得到的针对每个单词的概率。

2.2.2 双向模型

对于多层lstm,每层的输出都是1.1节中提到的隐向量hth_tht​,在ELMo里,为了区分,前向lstm语言模型的第j层第k时刻的输出向量命名为hk,jL,Mh_{k,j}^{L,M\rightarrow}hk,jL,M→​ 。

对于后向语言模型,跟前向语言模型类似,除了它是给定后文来预测前文。

p(t1,t2,,tN)=k=1Np(tktk+1,tk+2,,tN)p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} | t_{k+1}, t_{k+2}, \ldots, t_{N}\right)p(t1​,t2​,…,tN​)=k=1∏N​p(tk​∣tk+1​,tk+2​,…,tN​)

类似的,设定后向lstm的第j层的第k时刻的输出向量命名为hk,jL,Mh_{k,j}^{L,M\leftarrow}hk,jL,M←​。

前向、后向lstm语言模型所要学习的目标函数。elmo使用的双向lstm语言模型,论文中简称biLM。作者将前后向公式结合起来,得到所要优化的目标:最大化对数前向和后向的似然概率。

k=1N(logp(tkt1,,tk1;Θx,ΘLSTM,Θs)+logp(tktk+1,,tN;Θx,ΘLSTM,Θs))\begin{array}{l}{\sum_{k=1}^{N}\left(\log p\left(t_{k} | t_{1}, \ldots, t_{k-1} ; \Theta_{x}, \vec{\Theta}{L S T M}, \Theta{s}\right)\right.} \\ {\quad+\log p\left(t_{k} | t_{k+1}, \ldots, t_{N} ; \Theta_{x}, \stackrel{\leftarrow}{\Theta}{L S T M}, \Theta{s}\right) )}\end{array}∑k=1N​(logp(tk​∣t1​,…,tk−1​;Θx​,ΘLSTM,Θs)+logp(tk​∣tk+1​,…,tN​;Θx​,Θ←​LSTM,Θs))​

2.2.3 Elmo模型

Elmo就是把输入xkL,Mx_{k}^{L,M}xkL,M​,前向输出hk,jL,M,h_{k,j}^{L,M,\rightarrow}hk,jL,M,→​ ,后向输出hk,jL,Mh_{k,j}^{L,M\leftarrow}hk,jL,M←​ 结合起来

Rk=(xkL,M,hk,jL,M,,hk,jL,Mj=1,...,L)=(hk,jL,Mj=0,...,L)R_k = (x_k^{L,M},h_{k,j}^{L,M,\rightarrow},h_{k,j}^{L,M\leftarrow}|j = 1,...,L) \\ = (h_{k,j}^{L,M}|j = 0,...,L)Rk​=(xkL,M​,hk,jL,M,→​,hk,jL,M←​∣j=1,...,L)=(hk,jL,M​∣j=0,...,L)

1.最简单的方法就是使用最顶层的lstm输出

2.对于每层向量,加一个权重sjtasks^{task}_jsjtask​,将每层的向量与权重相乘,然后再乘以一个权重γγγ。对于每一个tokentokentoken,一个L层的biLM要计算出共2L+12L+12L+1个表征。

ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLMELMo_{k}^{\text { task }}=E\left(R_{k} ; \Theta^{\text { task }}\right)=\gamma^{\text { task }} \sum_{j=0}^{L} s_{j}^{\text { task }} \mathbf{h}_{k, j}^{L M}ELMoktask​=E(Rk​;Θtask)=γtaskj=0∑L​sjtask​hk,jLM​

3 训练

论文的作者有预训练好的ELMo模型,映射层(单词到word embedding)使用的Jozefowicz的CNN-BIG-LSTM[5],即输入为512维的列向量。同时LSTM的层数L,最终使用的是2,即L=2。每层的LSTM的单元数是4096。每个LSTM的输出也是512维列向量。每层LSTM(含前、向后向两个)的单元个数是4096个(从1.1节可以知公式4m2 = 4512*2 = 4096)。也就是每层的单个lstm的输入是512维,输出也是512维。

一旦模型预训练完成,便可以用于nlp其他任务。在一些领域,可以对biLM(双向lstm语言模型)进行微调,对任务的表现会有所提高,这种可以认为是一种迁移学习(transfer learning)

4 模型效果

对于诸多NLP任务 Elmo有少许提升 其中SQuAD 提升4.7%

在这里插入图片描述对于多义词不同语义的学习

在这里插入图片描述

参考 :

[1]: Peters, Matthew E., et al. “Deep contextualized word representations.” arXiv preprint arXiv:1802.05365 (2018)

[2] :https://zhuanlan.zhihu.com/p/51679783

文章最后发布于: 2019-06-22 20:53:57

相关阅读

ELMo词向量用于中文

转载自 http://www.linzehui.me/2018/08/12/碎片知识/如何将ELMo词向量用于中文/ ELMo于今年二月由AllenNLP提出,与word2vec或GloV

分享到:

栏目导航

推荐阅读

热门阅读