天天看點

ELMO論文學習筆記

概述

為了解決一詞多義的問題,同時表達單詞使用的文法和語義以及在上下文語境中的變化。詞向量是一個深層雙向語言模型(biLM)的内部狀态的學習函數,它是在一個大型文本語料庫上預先訓練的,這些表示可以很容易地添加到現有的模型中。

ELMO的思想是:先用語言模型學習單詞的Word Embedding,此時沒有區分多義詞,但是在實際使用Word Embedding時,單詞已經具備特定的上下文了,這時可以根據上下文單詞的語義去調整單詞的Word Embedding表示,這樣經過調整後的Word Embedding更能表達在這個上下文中的具體含義。是以ELMO實際上是根據目前上下文對Word Embedding進行動态調整的一種思路。

ELMo,word2vec,glove之間的聯系和差別

word2vec是局部語料庫訓練的,其特征提取是基于滑窗的,而glove的滑窗是為了建構共生矩陣,是基于全局語料的,需要事先統計共現機率;是以,word2vec可以進行線上學習,glove需要統計固定語料資訊。

word2vec是無監督學習,同樣不需要人工标注;glove通常認為是無監督學習,但實際上glove還是有label的,即共現次數 l o g ( X i j ) log(X_{ij}) log(Xij​)。

word2vec的損失函數實質上是帶權重的交叉熵,權重固定;glove的損失函數是最小平方損失函數,權重可以做映射變換。

glove可以看作是更換了目标函數和權重函數的全局word2vec。

ELMO相對于word2vec、glove等,捕捉了上下文語境資訊而不僅僅是字詞的單獨資訊。word2vec中,單詞在不同語境下向量表示完全一緻,而ELMo針對這一點做了優化。

ELMo模型

ELMo用到了雙向語言模型,給定N個tokens ( t 1 , t 2 , ⋯   , t n ) (t_1,t_2,\cdots,t_n) (t1​,t2​,⋯,tn​),語言模型通過給定前面的k-1個位置的token序列計算第k個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​)

後向的計算方法與前向相似:

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​)

biLM訓練過程中目标函數最大化:

∑ k = 1 N ( log ⁡ p ( t k ∣ t 1 , … , t k − 1 ; Θ x , Θ ⃗ L S T M , Θ s ) + log ⁡ p ( t k ∣ t k + 1 , … , t N ; Θ x , Θ ← L S T M , Θ s ) ) \sum_{k=1}^{N}\left(\log p\left(t_{k} | t_{1}, \ldots, t_{k-1} ; \Theta_{x}, \vec{\Theta}_{L S T M}, \Theta_{s}\right)+\log p\left(t_{k} | t_{k+1}, \ldots, t_{N} ; \Theta_{x}, \stackrel{\leftarrow}{\Theta}_{L S T M}, \Theta_{s}\right)\right) k=1∑N​(logp(tk​∣t1​,…,tk−1​;Θx​,Θ

LSTM​,Θs​)+logp(tk​∣tk+1​,…,tN​;Θx​,Θ←​LSTM​,Θs​))

ELMo對于每個token t k t_k tk​,通過一個L層的biLM計算出2L+1個表示:

R k = { x k L M , h → k , j L M , h k , j L M ← ∣ j = 1 , … , L } = { h k , j L M ∣ j = 0 , … , L } R_{k}=\left\{x_{k}^{L M}, \overrightarrow{h}_{k, j}^{L M}, \overleftarrow{h_{k, j}^{LM}} | j=1, \ldots, L\right\}=\left\{h_{k, j}^{L M} | j=0, \ldots, L\right\} Rk​={xkLM​,h

k,jLM​,hk,jLM​

​∣j=1,…,L}={hk,jLM​∣j=0,…,L}

其中 h k , 0 L M h_{k, 0}^{L M} hk,0LM​是對token進行直接編碼的結果(這裡是字元通過CNN編碼), h k , j L M = [ h → k , j L M ; h ← k , j L M ] h_{k, j}^{L M}=\left[\overrightarrow{h}_{k, j}^{L M}; \overleftarrow{h}_{k,j}^{LM}\right] hk,jLM​=[h

k,jLM​;h

k,jLM​]是每個biLSTM層輸出的結果,在實驗中還發現不同層的biLM輸出的token表示對于不同任務效果不同。

ELMo采用典型的兩階段過程,第一個階段是利用語言模型進行預訓練,第二個階段是在做下遊任務時,從預訓練網絡中提取對應單詞的網絡各層的Word Embedding作為新特征補充到下遊任務中。

繼續閱讀