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的序列:

t1,t2,...,tN{t_1, t_2, ..., t_N}t1,t2,...,tN

其前向表示为:

p(t1,t2...tN)=∏k=1Np(tk∣t1,t2...tk−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(t1,t2...tN)=∏k=1Np(tk∣tk+1,tk+2...tN)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是 xkLMx_k^{LM}xkLM,在每一个位置 k ,每一层LSTM 上都输出相应的context-dependent的表征 h→k,jLM\overrightarrow{h}_{k, j}^{LM}hk,jLM。这里 j=1,2,...,Lj = 1, 2, ..., Lj=1,2,...,LL表示LSTM的层数。顶层的LSTM 输出 h→k,LLM\overrightarrow{h}_{k, L}^{LM}hk,LLM ,通过softmax层来预测下一个 tokenk+1token_{k+1}tokenk+1

对数似然函数表示如下:

∑k=1N(logp(tk∣t1,t2...tk−1;Θx,Θ→LSTM,Θs)+logp(tk∣tk+1,tk+2...tN;Θx,Θ←LSTM,Θ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 个表征:

Rk={xkLM,h→k,jLM,h←k,jLM∣j=1...L}={hk,jLM∣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,hk,jLM,hk,jLMj=1...L}={hk,jLMj=0,1...L}

在下游任务中会把 RkR_kRk 压缩成一个向量:

ELMotask=E(Rk;Θtask)=γtask∑j=0Lsjtaskhk,jLMELMo^{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

其中 sjtasks_j^{task}sjtask是softmax标准化权重,γtask\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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值