天天看點

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

繼續閱讀