一种新的embedding方法 ELMo

背景

word2vec以及glove在nlp任务中都取得了较好的效果。

“Deep contextualized word representations”, NAACL 2018

我们常用的获取embedding方法都是通过训练language model, 将language model中预测的hidden state做为word的表示, 给定N个tokens的序列(t1,t2,…,tn), 前向language model就是通过前k-1个输入序列(t1,t2,…,tk)的hidden表示, 预测第k个位置的token, 反向的language model就是给定后面的序列, 预测之前的, 然后将language model的第k个位置的hidden输出做为word embedding.

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

简介

ELMO(Embeddings from Language Models) ,来自于语言模型的词向量表示,也是利用了深度上下文单词表征,该模型的好处:

(1)能够处理单词用法中的复杂特性(比如句法和语义

(2)这些用法在不同的语言上下文中如何变化(比如为词的多义性建模)。

它首先在大文本语料库上预训练了一个深度双向语言模型(biLM),然后把根据它的内部状态学到的函数作为词向量。

该模型的显著特征:

  • Contextual: The representation for each word depends on the entire context in which it is used. (即词向量不是一成不变的,而是根据上下文而随时变化,这与word2vec或者glove具有很大的区别)
  • Deep: The word representations combine all layers of a deep pre-trained neural network. (采用了较深的网络来实现,如文中采用了双向的LSTM)
  • Character based: ELMo representations are purely character based, allowing the network to use morphological clues to form robust representations for out-of-vocabulary tokens unseen in training. (基于字符的,所以具有更好的鲁棒性)

效果上:ELMo虽然看起来很简单,非常有效。

ELMo: Embeddings from Language Models

ELMo用到上文提到的双向的language model, 给定N个tokens (t1, t2,…,tN), language model通过给定前面的k-1个位置的token序列计算第k个token的出现的概率:

$$p(t_1, t_2, …, t_N) = \prod_{k=1}^N p(t_k|t_1, t_2, …, t_{k-1})$$

后向的计算方法与前向相似:

$$p(t_1, t_2, …, t_N) = \prod_{k=1}^N p(t_k\vert t_{k+1}, t_{k+2}, …, t_{N})$$

biLM训练过程中的目标就是最大化:

源码

疑问

  • 通过char-level(CNN)+biLSTM的结构训练语言模型,最后获得输入层和隐藏层的表示,ELMo再将这些层进行线性组合,但是ELMo最后对每层的权重如何获得呢,是针对不同的任务继续训练以获得各层对应的权重?那么是否可以理解为attention呢?
    -

扩展阅读