ELMo模型

论文地址:
https://arxiv.org/abs/1802.05365

前言

在之前2013年的word2vec及2014年的GloVe的工作中,每个词对应一个vector,对于多义词无能为力。ELMo的工作对于此,提出了一个较好的解决方案。不同于以往的一个词对应一个向量,是固定的。在ELMo世界里,预训练好的模型不再只是向量对应关系,而是一个训练好的模型。使用时,将一句话或一段话输入模型,模型会根据上线文来推断每个词对应的词向量。这样做之后明显的好处之一就是对于多义词,可以结合前后语境对多义词进行理解。比如appele,可以根据前后文语境理解为公司或水果。

ELMO的本质思想是:事先用语言模型在一个大的语料库上学习好词的word embedding,但此时的多义词仍然无法区分,不过没关系,我们接着用我们的训练数据(去除标签)来fine-tuning 预训练好的ELMO 模型。作者将这种称为domain transfer。这样利用我们训练数据的上下文信息就可以获得词在当前语境下的word embedding。

模型结构

ELMO 基于语言模型的,确切的来说是一个 Bidirectional language models,也是一个 Bidirectional LSTM结构。我们要做的是给定一个含有N个tokens的序列:

t 1 , t 2 , . . . , t N {t_1, t_2, ..., t_N} t1,t2,...,tN

其前向表示为:

p ( t 1 , t 2 . . . t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 . . . t k − 1 ) p(t_1, t_2...t_N)= \prod^N_{k=1} p(t_k|t_1, t_2...t_{k-1}) p(t1,t2...tN)=k=1Np(tkt1,t2...tk1)

反向表示为:

p ( t 1 , t 2 . . . t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 . . . t N ) p(t_1, t_2...t_N)= \prod^N_{k=1} p(t_k|t_{k+1}, t_{k+2}...t_N) p(t1,t2...tN)=k=1Np(tktk+1,tk+2...tN)

从上面的联合概率来看是一个典型的语言模型,前向利用上文来预测下文,后向利用下文来预测上文。假设输入的token是 x k L M x_k^{LM} xkLM,在每一个位置 k ,每一层LSTM 上都输出相应的context-dependent的表征 h → k , j L M \overrightarrow{h}_{k, j}^{LM} h k,jLM。这里 j = 1 , 2 , . . . , L j = 1, 2, ..., L j=1,2,...,LL表示LSTM的层数。顶层的LSTM 输出 h → k , L L M \overrightarrow{h}_{k, L}^{LM} h k,LLM ,通过softmax层来预测下一个 t o k e n k + 1 token_{k+1} tokenk+1

对数似然函数表示如下:

∑ k = 1 N ( l o g p ( t k ∣ t 1 , t 2 . . . t k − 1 ; Θ x , Θ → L S T M , Θ s ) + l o g p ( t k ∣ t k + 1 , t k + 2 . . . t N ; Θ x , Θ ← L S T M , Θ s ) ) \sum^N_{k=1}(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)) k=1N(logp(tkt1,t2...tk1;Θx,Θ LSTM,Θs)+logp(tktk+1,tk+2...tN;Θx,Θ LSTM,Θs))

模型的结构图如下:

在这里插入图片描述

ELMO 模型不同于之前的其他模型只用最后一层的输出值来作为word embedding的值,而是用所有层的输出值的线性组合来表示word embedding的值。

对于每个token,一个L层的biLM要计算出 2L+1 个表征:

R k = { x k L M , h → k , j L M , h ← k , j L M ∣ j = 1... L } = { h k , j L M ∣ j = 0 , 1... L } R_k=\{x^{LM}_k, \overrightarrow{h}_{k, j}^{LM},\overleftarrow{h}_{k, j}^{LM}|j=1...L \} \\ =\{ h_{k, j}^{LM}|j=0,1...L \} Rk={xkLM,h k,jLM,h k,jLMj=1...L}={hk,jLMj=0,1...L}

在下游任务中会把 R k R_k Rk 压缩成一个向量:

E L M o t a s k = E ( R k ; Θ t a s k ) = γ t a s k ∑ j = 0 L s j t a s k h k , j L M ELMo^{task}=E(R_k;\Theta^{task})=\gamma^{task}\sum^L_{j=0}s_j^{task}h_{k, j}^{LM} ELMotask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM

其中 s j t a s k s_j^{task} sjtask是softmax标准化权重, γ t a s k \gamma^{task} γtask是缩放系数,允许任务模型去缩放整个ELMO向量。

使用方法

1)在大的语料库上预训练 biLM 模型。模型由两层bi-LSTM 组成,模型之间用residual connection 连接起来。而且作者认为低层的bi-LSTM层能提取语料中的句法信息,高层的bi-LSTM能提取语料中的语义信息。

2)在我们的训练语料(去除标签),fine-tuning 预训练好的biLM 模型。这一步可以看作是biLM的domain transfer。

3)利用ELMO 产生的word embedding来作为任务的输入,有时也可以即在输入时加入,也在输出时加入。

论文实验

ELMo学到了什么

加入elmo之后,可以明显将play的两种含义区分出来,而GLoVe并不能。所以答案很明显。

在这里插入图片描述

Word sense disambiguation(词义消歧)

biLM表示我们的模型。第一层,第二层分别使用的结果显示,越高层,对语义理解越好,表示对词义消歧做的越好。这表明,越高层,越能捕获词意信息。

在这里插入图片描述

POS tagging(词性标注)

这是另一个任务的实验了,第一层效果好于第二层。表明,低层的更能学到词的句法信息和词性信息。

在这里插入图片描述

参考

https://www.cnblogs.com/jiangxinyang/p/10060887.html

https://zhuanlan.zhihu.com/p/51679783

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值