天天看点

ELMo - Deep contextualized word representationsDeep contextualized word representations (ELMo)elmo语言模型Reference

Deep contextualized word representations (ELMo)

最近NLP突飞猛进,现有ELMo,后有BERT。

glove以及word2vec的word embedding在nlp任务中都取得了最好的效果, 现在几乎没有一个NLP的任务中不加word embedding.

常用的获取embedding方法都是通过训练language model, 将language model中预测的hidden state做为word的表示, 给定N个tokens的序列

(t1,t2,...,tn)(t1,t2,...,tn)

, 前向language model就是通过前k-1个输入序列

(t1,t2,...,tk)(t1,t2,...,tk)

的hidden表示, 预测第k个位置的token, 反向的language model就是给定后面的序列, 预测之前的, 然后将language model的第k个位置的hidden输出做为word embedding。

之前的做法的缺点是对于每一个单词都有唯一的一个embedding表示, 而对于多义词显然这种做法不符合直觉, 而单词的意思又和上下文相关, ELMo的做法是我们只预训练language model, 而word embedding是通过输入的句子实时输出的, 这样单词的意思就是上下文相关的了, 这样就很大程度上缓解了歧义的发生。且ELMo输出多个层的embedding表示, 试验中已经发现每层LM输出的信息对于不同的任务效果不同, 因此对每个token用不同层的embedding表示会提升效果。

elmo语言模型

ELMo - Deep contextualized word representationsDeep contextualized word representations (ELMo)elmo语言模型Reference

目标:

  1. 正向:对于序列,通过前n-1个token,预测第n个token。

    p ( t 1 , t 2 , … , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , … , t k − 1 ) 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​)

  2. 反向:通过当前词语后的[n+1, n + 2,…, seq_len]位置的token,预测第n个token。

    p ( t 1 , t 2 , … , t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 , … , t N ) 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​)

使用的网络是Bi_LSTM,正向LSTM任务为正向目标,反向为反向目标,通过在语料上训练出模型,用于下游的任务。

fine-tuning

对于一个L层的elmo,共有2L+1个向量,对于下游网络使用,是直接用最上层的输出?还是将所有向量concat呢?

文中方法:提出基于任务的权重矩阵,通过目标任务来训练权重:

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

模型下载:https://allennlp.org/elmo

Reference

  1. 论文:https://arxiv.org/abs/1802.05365
  2. 应用:https://arxiv.org/abs/1806.06259
  3. github开源代码(TensorFlow):https://github.com/allenai/bilm-tf
  4. GitHub(PyTorch):https://github.com/allenai/allennlp

继续阅读