ELMo

論文:《Deep contextualized word representations

1. word2vector

我們先簡單回顧下word2vector。我們想解的問題的是:如何將一個詞語用向量來表示?

1.1 one-hot

首先想到的是使用one-hot來表示,如我們有一個詞典:【a,apple,…,zoo,】,詞典有n個詞語,那麼就用n維向量表示某個詞。向量中詞語下標位的值爲1,其餘爲0:
在這裏插入圖片描述
該方法的主要缺點爲:

  • 向量太長,詞彙量增加,向量維度增加。
  • 該向量無法表達出詞彙之間的關係:
    模型學不到「I want a glass of apple _____」該填什麼的。
    「orange」和「apple」的特徵表示沒有任何的關係。

1.2 Neural Architecture of language model

語言模型簡單可以理解是某一句話是合理的概率模型。如給出「I want a glass of orange __」,通過語言模型我們可能得到空格處最可能的單詞爲「juice」。基於神經網絡結構的語言模型如下所示:
在這裏插入圖片描述

  • 第一層:綠色方塊爲onehot向量
  • 第二層:各個one-hot向量(10000維)會乘以共享矩陣C,即詞向量矩陣(10000*300)。
  • 第三層:乘完的向量(300維)連接(3*300=900維),並代入tanh函數
  • 第四層:第三層到第四層(10000維)使用的是全連接
  • Softmax:Vi表示輸出V中的第i個元素,那麼這個元素的Softmax爲
    在這裏插入圖片描述

1.3 word2vector

Neural Architecture of language model 非常重,一個比較輕巧訓練詞向量的方式就是最流行的word2vector:
在這裏插入圖片描述

  • CBOW模型:獲得中間詞兩邊的的上下文,然後用周圍的詞去預測中間的詞。經過詞嵌入後,將向量按位素數相加。
  • Skip-gram模型正好和CBOW模型相反,輸入爲中間的詞,使用預測兩邊的的上下文的單詞。
    爲了加速訓練,還做了優化:
  • hierarchical softmax:不使用one-hot,而是利用哈夫曼編碼。節點數logV。
  • 負採樣:將模型變成2分類任務模型:
    相鄰: [V orange ​ ,V juice ​ ] -> 1
    非相鄰:[ V orange ​ ,V man ​ ] - > 0

word2vector的顯而易見的缺點是沒考慮上下文含義。比如說「我 用 蘋果 手機 上網 買了 一箱 蘋果」,這裏的兩個「蘋果」我們從詞向量矩陣中lookup出來的是相同的向量,但是顯然這兩個蘋果的含義的不同的。這個問題之前的解法有如,訓練多個詞向量矩陣,可參閱《improving word representations via global context and multiple word prototypes》。但是,這個方法存在比較大我問題是,如何確定一個詞有多少種意思(多少個矩陣)?如何更好的確定選哪個詞向量的矩陣?

2. ELMo

2.1 核心創新

ELMo 借鑑CV中低、中、高特徵的表示,如圖:
在這裏插入圖片描述
ELMo用多層的BiLSTM語言模型,也想訓練出多層次的文本表示:
在這裏插入圖片描述
可認爲,低層特徵表示是詞語級別的特徵,中層特徵表示是句法級別的特徵、高層特徵表示是語義級別的特徵。

2.2 核心公式

  • 各層的表示向量爲:
    在這裏插入圖片描述
    其中: h 0 = [ x , x ] h_0 =[x,x] h l = [ h l , h l ] h_l=[\stackrel{\rightarrow}{h_l},\stackrel{\leftarrow}{h_l}]

  • 各層的表示向量加權求和得到該token的ELMo表示:
    在這裏插入圖片描述
    其中: s s 爲各層表示的權重, γ \gamma 爲改次任務的權重。

2.3 實驗效果

如下表所示,ELMo能非常好的找到相同語境含義的「play」:
在這裏插入圖片描述
在這裏插入圖片描述