論文:《Deep contextualized word representations》
我們先簡單回顧下word2vector。我們想解的問題的是:如何將一個詞語用向量來表示?
首先想到的是使用one-hot來表示,如我們有一個詞典:【a,apple,…,zoo,】,詞典有n個詞語,那麼就用n維向量表示某個詞。向量中詞語下標位的值爲1,其餘爲0:
該方法的主要缺點爲:
語言模型簡單可以理解是某一句話是合理的概率模型。如給出「I want a glass of orange __」,通過語言模型我們可能得到空格處最可能的單詞爲「juice」。基於神經網絡結構的語言模型如下所示:
Neural Architecture of language model 非常重,一個比較輕巧訓練詞向量的方式就是最流行的word2vector:
word2vector的顯而易見的缺點是沒考慮上下文含義。比如說「我 用 蘋果 手機 上網 買了 一箱 蘋果」,這裏的兩個「蘋果」我們從詞向量矩陣中lookup出來的是相同的向量,但是顯然這兩個蘋果的含義的不同的。這個問題之前的解法有如,訓練多個詞向量矩陣,可參閱《improving word representations via global context and multiple word prototypes》。但是,這個方法存在比較大我問題是,如何確定一個詞有多少種意思(多少個矩陣)?如何更好的確定選哪個詞向量的矩陣?
ELMo 借鑑CV中低、中、高特徵的表示,如圖:
ELMo用多層的BiLSTM語言模型,也想訓練出多層次的文本表示:
可認爲,低層特徵表示是詞語級別的特徵,中層特徵表示是句法級別的特徵、高層特徵表示是語義級別的特徵。
各層的表示向量爲:
其中:
,
各層的表示向量加權求和得到該token的ELMo表示:
其中:
爲各層表示的權重,
爲改次任務的權重。
如下表所示,ELMo能非常好的找到相同語境含義的「play」: