ELMo:基于语境的深度词表示模型 NAACL 2018 Best Paper

ELMo是一种基于语境的深度词表示模型,解决了Word2Vec和GloVe等传统模型无法处理的语法和语义问题。通过预训练的双向语言模型,ELMo能为每个单词生成基于上下文的词向量,缓解歧义。模型采用多层Bi-LSTM,高层捕捉语义,底层学习语法信息。预训练的ELMo可以在多种NLP任务中通过加权合并各层表示来提升性能。
摘要由CSDN通过智能技术生成

在这里插入图片描述
论文链接:https://arxiv.org/abs/1802.05365
代码链接:https://github.com/allenai/allennlp
论文来源:NAACL 2018

导读

参考来源:https://mp.weixin.qq.com/s/myYKfOvN9LvMmSRUJudmpA
参考来源:https://zhuanlan.zhihu.com/p/37915351

今天学习的是 AllenNLP 和华盛顿大学 2018 年的论文《Deep contextualized word representations》,是 NAACL 2018 best paper。

这篇论文提出的 ELMo 模型是 2013 年以来 Embedding 领域非常精彩的转折点,并在 2018 年及以后的很长一段时间里掀起了迁移学习在 NLP 领域的风潮。

ELMo 是一种基于语境的深度词表示模型(Word Representation Model),它可以捕获单词的复杂特征(词性句法),也可以解决同一个单词在不同语境下的不同表示(语义)。

1、引言

以 Word2Vec 和 GloVe 为代表的词表示模型通过训练为每个单词训练出固定大小的词向量,这在以往的 NLP 任务中都取得了不错的效果,但是他们都存在两个问题:

  • 没法处理复杂的单词用法,即语法问题;
  • 没办法结合语境给出正确词向量,即一词多义;

为了解决这个问题,作者提出了一个新的深层语境词表示模型——ELMo。

之前的做法的缺点是对于每一个单词都有唯一的一个embedding表示, 而对于多义词显然这种做法不符合直觉, 而单词的意思又和上下文相关, ELMo的做法是我们只预训练language model, 而word embedding是通过输入的句子实时输出的, 这样单词的意思就是上下文相关的了, 这样就很大程度上缓解了歧义的发生.

区别于传统模型生成的固定单词映射表的形式(为每个单词生成一个固定的词向量),ELMo使用了预训练的语言模型(Language Model),模型会扫描句子结构,并更新内部状态,从而为句子中的每个单词都生成一个基于当前的句子的词向量(Embedding)。这也是就是 ELMo 取名的由来:Embeddings from Language Models。

此外,ELMo 采用字符级的多层 BI-LM 模型作为语言模型,高层的网络能够捕获基于语境的词特征(例如主题情感),而底层的 LSTM 可以学到语法层次的信息(例如词性句法),前者可以处理一词多义,后者可以被用作词性标注,作者通过线性组合多层 LSTM 的内部状态来丰富单词的表示。

2、ELMo模型

ELMo 是一种称为 Bi-LM 的特殊类型的语言模型,它是两个方向上的 LM 的组合,如下图所示:
在这里插入图片描述
ELMo 利用正向和反向扫描句子计算单词的词向量,并通过级联的方式产生一个中间向量(下面会给出具体的级联方式)。通过这种方式得到的词向量它可以了解到当前句子的结构和该单词的使用方式。

值得注意是,ELMo 使用的 Bi-LM 与 Bi-LSTM 不同,虽然长得相似,但是 Bi-LM 是两个 LM 模型的串联,一个向前,一个向后;而 Bi-LSTM 不仅仅是两个 LSTM 串联,Bi-LSTM 模型中来自两个方向的内部状态在被送到下层时进行级联(注意下图的 out 部分,在 out 中进行级联),而在 Bi-LM 中,两个方向的内部状态仅从两个独立训练的 LM 中进行级联。
在这里插入图片描述

2.1、Bi-LM

设一个序列有 N 个 token ( t 1 , t 2 , ⋯   , t N ) (t_1,t_2,\cdots,t_N) (t1,t2,,tN)(这里说 token 是为了兼容字符和单词,EMLo 使用的是字符级别的 Embedding)

对于一个前向语言模型来说,是基于先前的序列来预测当前 token: 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,\cdots,t_N)=\prod_{k=1}^{N}p(t_k|t_1,t_2,\cdots,t_{k-1}) p(t1,t2,,tN)=k=1Np(tkt1,t2,,tk1)而对于一个后向语言模型来说,是基于后面的序列来预测当前 token: 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,\cdots,t_N)=\prod_{k=1}^{N}p(t_k|t_{k+1},t_{k+2},\cdots,t_N) p(t1,t2,,tN)=k=1Np(tktk+1,tk+2,,tN)可以用 h k , j → \overrightarrow{h_{k,j}} hk,j h k , j ← \overleftarrow{h_{k,j}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值