NLP最新進展之ELMo

  說是NLP最新進展,其實已經是2018年的論文了。提出ELMo的論文《Deep contextualized word representations》獲得NAACL 2018的best paper,並且有效的提升了state-of-art模型在不同評測中的效果。
  18年NLP屆最新最耀眼的進展包括ELMo、GPT、GPT-2和號稱史上最強NLP模型BERT、中文任務領域全面超越BERT的ERNIE(百度,集成在PaddlePaddle中)等,提出的這些模型在諸多評測中大放異彩,並且也被業界應用到不同的實際場景中。本系列的博客將對ELMo、GPT、GPT-2和BERT進行介紹,爭取在畢業前寫完。

詞向量發展

  自詞向量提出之後,利用distributed representation將每個詞映射到向量空間再進行下游的task specific傳統模型或者深度學習模型處理逐漸成爲了NLP中標準流程,傳統的WordNet或以One-hot representation爲代表的Discrete representation由於存在各種缺陷無法有效的表達詞意,因此以word2vec一經提出就成爲了最常用的distributed representation方式。
  但是word2vec的表現也沒有想象中那麼驚豔,其大部分原因在於word2vec難以處理多義詞問題,即靜態詞向量無法滿足不同上下文的動態變化,而ELMo的Contextual有效的解決了這個問題,The representation for each word depends on the entire context in which it is used。

NNLM

  由於預訓練即詞向量的訓練都是基於語言模型的,因此需要從語言模型講起,但統計語言模型,n-gram模型由於網上資料太多就按下不表了。
  神經網絡語言模型早在2003年就在Bengio的論文《A neural probabilistic lagnguage model》中提出,但是直到14年深度學習在NLP領域大展身手之後使得詞向量有了用武之地才引起大家越來越多的關注。
  在神經網絡語言模型(NNLM)中,目標是生成語言模型,而詞向量只是一個副產品。通過將one-hot編碼映射到look-up table中隨機初始化矩陣得到m維詞向量,接着將m維向量拼接再通過softmax後利用最大似然估計預測下一個單詞,由於隨機初始化的V * m矩陣係數作爲參數更新,因此得到的矩陣就成了詞向量表。

word2vec、LSA和Glove

  關於word2vec的資料網上實在是不要太多,這裏也不做太多介紹,各位也可以參考這篇博客中有關word2vec內容的介紹。
word2vec的問題:
  同樣的詞對(word pair),在同一個窗口中只計算一次並更新詞向量(This captures co-occurrence of words one at a time),當下次再遇到相同的詞對時,需要對此詞對再做相同的處理,而沒有統計此詞對在整個語料中出現的次數信息。通常這種詞對出現次數的統計信息可以通過co-occurrence matrix(共現矩陣) X,採用長度爲1的時間窗口表達。
  但是對於co-occurrence矩陣,由於採用長度爲1的窗口,整個矩陣有較大的稀疏性。因此在這種矩陣的基礎上,可以利用SVD減少向量維度。
在這裏插入圖片描述
Dimension Reduction on X: (SVD)
  當然SVD也存在很多問題,對詞和文檔而言,共現矩陣X需要很大的存儲空間和計算量,此外常用詞比如the,a會大量的出現。
在這裏插入圖片描述
  下圖是對SVD代表的統計次數爲代表的方法和Skip-Gram代表的直接預測的方法的比較。
在這裏插入圖片描述
  在以SVD代表的統計方法中,共現矩陣統計了詞對出現的頻率,但是在統計中,對於詞對缺乏不一致性(即缺乏對常用詞和非常用詞,常用詞比如the or and能表達的語義信息很少)的考慮,此外在詞類比任務(word analogy task)中表現較差,也即得到的語義向量難以把握詞與詞之間的線性關係(類似於queen,king,man,woman這類關係)。These methods utilize low-rank approximations to decompose large matrices that captures statistics information about a corpus.對於co-occurrence matrix,SVD僅僅只是做了一個矩陣分解,對於全局信息的利用還是比較低級的分析。

  而局部上下文窗口(以Skip-gram爲例)方法,只利用了局部的上下文信息,而沒有考慮整個語料庫中出現的詞頻信息,缺乏全局統計信息(lack of global co-occurrence counts),比如:相同的詞對(word1,word2),出現在當前位置時需要計算並更新詞向量,在下一個位置再次組成詞對時,又需要再次計算詞向量。Unlike the matrix factorization methods,the shallow window-based methods suffer from the disadvantage that they do not operate directly on the co-occurrence statistic of the corpus,and they fail to take advantage of the vast amount of repetition in the data.

  考慮到上述問題,在論文《Glove: Global Vectors for Word Representation》中提出Glove。The result is a new log-bilinear regression model that combines the advantages of the two major model families in the literature:global matrix factorization and local context window methods. Our model efficiently leverages statistical information by training only on the nonzero elements in a word-word co-occurrence matrix,rather than on the entire sparse matrix or on individual context windows in a large corpus.
在這裏插入圖片描述
  在GloVe中,the matrix X denoted by a matrix of word-word co-occurrence counts, while the entries X(ij) tabulate the number of times word i occur in the context of word j. 其中, 爲了減弱那些常用詞的權值(The performance can be increased by filtering the data so as to reduce the effective value of the weighting factor for frequent words)
  此時,計算的複雜度集中體現在矩陣X的元素個數上,因此在GloVe中,只是用那些非零的實體。
在這裏插入圖片描述
  如Skip-Gram一樣,The model generates two sets of word vectors,W and W’,when X is symmetric, W and W’ are equivalent and differ only as a result of their random initialization. To make it robust and reduce over-fitting,we choose the sum W+W’ as our word vectors.將W+W’作爲詞向量。
  在很多任務上,不管是採用intrinsic estimation 還是extrinsic estimation,GloVe的表現都比其他兩者要好。We construct a model that utilizes the main benefit of count data while simultaneously capturing the meaningful linear substructure prevalent in recent log-bilinear prediction-based methods like word2vec.

ELMo

  當然,除了word2vec沒有利用統計信息之外,導致word2vec的效果沒有那麼驚豔的主要原因恐怕是其難以處理多義詞問題。在word2vec對多義詞編碼時,無法區分不同詞義,儘管多義詞在不同的上下文情景中可能會有不同的含義,但是在語言模型中,無論什麼上下文經過同一個詞時,預測的還是同一個詞而且同一個單詞位於同一行的參數空間,導致不同的上下文信息都會編碼到相同的word embedding空間中,因此其無法區分同一個詞的不同含義。
  因此在論文《Deep contextualized word representations》中提出ELMo,其核心想法就是詞向量根據上下文而隨時變化,也即動態詞向量

ELMo原理

  這裏對ELMo模型以及ELMo的源碼中的比較重要的點進行分析,如word_char_embedding的使用,highway network,以及現階段ELMo在中文領域的應用進行介紹。

ELMo模型

  ELMo的深度上下文向量(deep contextualized)特性帶來的優勢體現在兩個方面:

  1. Deep,採用Bi-LSTM學習單詞的複雜特性,體現在LSTM語言模型的不同隱層代表的句法特徵和語義特徵;
  2. Contextualized,將不同隱層和原始embedding根據不同上下文線性結合學習單詞的一詞多義。

Bidirectional language models
  對於 N N 個單詞的序列 ( t 1 , t 2 , . . . , t N ) (t_{1},t_{2},...,t_{N}) ,其前向語言模型爲:
p ( t 1 , t 2 , . . . , t N ) = k = 1 N p ( t k t 1 , . . . , t k 1 ) p(t_{1},t_{2},...,t_{N})=\prod_{k=1}^{N}p(t_{k}|t_{1},...,t_{k-1})
  目前state-of-art的神經網絡語言模型(本文采用類似的語言模型),首先利用word embedding或者基於CNN的char_embedding計算單詞的上下文無關representation(在下一節介紹),接着通過L層的前向LSTM,在最後一層的LSTM中,利用Softmax層預測下一個單詞。
  後向語言模型爲: p ( t 1 , t 2 , . . . , t N ) = k = 1 N p ( t k t k + 1 , . . . , t N ) p(t_{1},t_{2},...,t_{N})=\prod_{k=1}^{N}p(t_{k}|t_{k+1},...,t_{N})
  論文中採用的是雙向LSTM語言模型,將前後向語言模型結合起來,並最大化前後向語言模型的聯合對數似然損失函數: k = 1 N ( l o g p ( t k t 1 , . . . , t k 1 ; Θ x , Θ L S T M ; Θ S ) + l o g p ( t k t k + 1 , . . . , t N ; Θ x , Θ L S T M ; Θ S ) ) \sum_{k=1}^{N}(log p(t_{k}|t_{1},...,t_{k-1};\Theta _{x},\overrightarrow{\Theta}_{LSTM};\Theta _{S})+log p(t_{k}|t_{k+1},...,t_{N};\Theta _{x},\overleftarrow{\Theta}_{LSTM};\Theta _{S}))
  其中, Θ x \Theta _{x} 表示單詞的representation, Θ S \Theta _{S} 表示Softmax層參數。

ELMo
  ELMo的預訓練是一個Bi-LSTM的語言模型。對於單詞 t k t_{k} ,一個 L L 層的雙向LSTM會產生 2 L + 1 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}=(x_{k}^{LM},\overrightarrow{h}_{k,j}^{LM},\overleftarrow{h}_{k,j}^{LM}|j=1,..L)=({h}_{k,j}^{LM}|j=0,..L)
  其中, j = 0 j=0 表示單詞的embedding,而 j = 1 , . . L j=1,..L 表示雙向LSTM的隱層狀態。在下游的task specific中,ELMo將會把所有層的 R R 通過線性組合表達成一維向量, E L M o k t a s k = E ( R k ; Θ t a s k ) = γ t a s k j = 0 L s j t a s k h k , j L M ELMo_{k}^{task}=E(R_{k};\Theta ^{task})=\gamma ^{task}\sum_{j=0}^{L}s_{j}^{task}h_{k,j}^{LM}
  其中, s j t a s k s_{j}^{task} 歸一化權重,而 γ t a s k \gamma ^{task} 用來平衡不同層的向量,在後序的實驗中,可以發現該參數對結果的影響十分明顯。

  EMLo在實際的應用中分爲兩個階段,一是利用語言模型進行預訓練,首先使用biLSTM語言模型在大規模的語料中訓練單詞的word embedding並且記錄下LSTM在每一層的向量表達;當預訓練完BiLSTM後,也可以在任務語料中進行fine tuning,這會降低語言模型的困惑度同時提高下游任務的效果,這種方式也可以看作是domain transfer;二是在下游的有監督學習任務中,將任務語料輸入BiLSTM的輸入端,通過學習從底層到高層的權重參數線性組合不同層次的向量表達,並將其作爲新的特徵補充到下游任務中,此時不同的上下文通過不同的組合參數進行調整,也就達到了「動態調整」的效果。

word embedding 和 word_char_embedding

//TODO

highway Network

//TODO

ELMo源碼

//TODO

ELMo應用

//TODO