論文地址:https://arxiv.org/pdf/1802.05365.pdf
簡介
以往的詞向量如word2vec、glove等詞向量模型,針對某一個詞生成的詞向量都是固定的,無法解決一詞多義現象,如“蘋果”在不同的上下文中有不同的含義,它可表示一種水果、一個公司名稱或者手機、電腦、平板電腦等物品的品牌名等,但是如果使用上述詞向量模型生成詞向量時,一個詞只能對應一個詞向量,這明顯不能滿足我們的需求。而在2018年的NAACL上,終於出現了一個能解決這種問題的詞向量模型-ELMO(Embeddings from Language Models )。
1、ELMO的優勢:
- 它能考慮上下文,針對不同的上下文生成不同的詞向量。
- 它能表達不同的語法或語義信息。如“活動”一詞,既可以是名詞,也可以是動詞,既可以做主語,也可以做謂語等。針對這種情況,elmo能夠根據不同的語法或語義信息生成不同的詞向量。
2、ELMO的缺點:
- 使用LSTM提取特征,而LSTM提取特征的能力弱於Transformer
- 使用向量拼接方式融合上下文特征,這種方式獲取的上下文信息效果不如想象中好
ELMO模型結構
ELMO采用典型的兩階段過程:第一階段用預訓練語言模型訓練,第二階段是在做具體的下游任務時,從預訓練模型中提取對應的詞的word embedding作為特征補充到下游任務的輸入中去。
第一階段:預訓練過程,采用雙層雙向LSTM對輸入進行訓練,如下圖所示,單詞特征使用靜態的word embedding(如word2vec,glove等),每一個lstm層都將單詞特征與其上文詞向量和下文詞向量進行拼接作為當前的輸入向量,其中第一層lstm獲取句法特征,第二層lstm獲取語義特征。
第二階段:根據下游任務確認如何選擇第一階段的輸出向量作為該階段的輸入向量,具體地說,輸入語句經過第一階段訓練出的ELMO模型的處理后,會獲取三個embedding,包括單詞特征,句法特征(第一層lstm的輸出向量),語義特征(第二層lstm的輸出向量),可對這三個embedding進行加權求和后作為最終向量,輸入到下游任務中去,這被稱為“Feature-based Pre-Training”。
注1:ELMO在層與層之間使用殘差連接,這樣就可以實現雙向的效果。
注2:ELMO使用雙向的LSTM,它通過前向LSTM獲取上文信息,后向LSTM結構獲取下文信息,最終是將前向LSTM與后向LSTM生成的向量進行拼接,以表示獲取上下文信息
ELMO中字向量的計算過程
如上圖所示,對於“Let’s stick to”這一句話,如果我們想計算“stick”的字向量,
1、拼接:首先使用傳統的字向量生成方法靜態生成一個字向量vec,如圖中綠色長方塊表示;之后分別將vec輸入進第一層的前向lstm和后向lstm中,獲取隱向量h11(表示第一層的前向lstm計算結果,圖中淺粉色長方塊表示)和h12(表示第一層的后向lstm計算結果,圖中淺紫色長方塊表示);然后將h11輸入到第二層的前向lstm中,獲取隱向量h21(表示第二層的前向lstm計算結果,圖中紅色長方塊表示),將h12輸入到第二層的后向lstm中,獲取隱向量h22表示第二層的后向lstm計算結果,圖中深紫色長方塊表示)。
靜態字向量vec自己拼接自己,形成一個大的綠色長方塊;第一層隱向量h11和h12拼接形成h1;第二層隱向量h21和h22拼接形成h2。
2、加權:步驟1中的三個向量都有自己的權重(權重是訓練出來的?),然后分別對這三個向量進行加權。
3、求和:將步驟2中的三個向量求和即可。這一步輸出的就是字“stick”的根據上下文獲取的字向量。
總結
ELMO雖然能夠看到上下文信息,但是它只能看到單向的上下文信息,這樣說是因為ELMO中前向lstm和后向lstm的網絡是完全獨立的,也就是說當使用前向lstm訓練時,詞 t 看不到 t+1及之后的所有詞,同理使用后向lstm訓練時,詞 t 看不到 t - 1及之前的所有詞,因此本質上來說它依然只能看到單向信息,所謂的“雙向”只是將兩個方向的信息進行拼接而已。這是ELMO的局限性。(與此相反的是,bert能夠同時看到詞 t 的上文和下文,因此bert是真正的獲取雙向信息)
參考資料
[1] https://bitjoy.net/2020/02/24/cs224n%ef%bc%882-19%ef%bc%89contextual-word-embeddings/
[2] https://www.cnblogs.com/zhaopAC/p/11219600.html
[3] https://www.analyticsvidhya.com/blog/2019/03/learn-to-use-elmo-to-extract-features-from-text/