論文:Deep contextualized word representations
參考:https://www.cnblogs.com/huangyc/p/9860430.html
https://blog.csdn.net/firesolider/article/details/88092831
ELMo的語言理解是通過預測訓練單詞序列中的下一個單詞來實現,這項任務被稱爲語言建模。這是很方便的,因爲我們有大量的文本數據,這樣的模型不需要標籤就可以從中學習。
1. 前言
今天給大家介紹一篇2018年提出的論文《Deep contextualized word representations》,在這篇論文中提出了一個很重要的思想ELMo。ELMo是一種是基於特徵的語言模型,用預訓練好的語言模型,生成更好的特徵。
2. ELMo模型介紹
ELMo是一種新型深度語境化詞表徵,可對詞進行複雜特徵(如句法和語義)和詞在語言語境中的變化進行建模(即對多義詞進行建模)。我們的詞向量是深度雙向語言模型(biLM)內部狀態的函數,在一個大型文本語料庫中預訓練而成。
說到詞向量,我們一定會聯想到word2vec,因爲在它提出的詞向量概念給NLP的發展帶來了巨大的提升。而ELMo的主要做法是先訓練一個完整的語言模型,再用這個語言模型去處理需要訓練的文本(怎麼理解?),生成相應的詞向量,所以在文中一直強調ELMo的模型對同一個字在不同句子中能生成不同的詞向量。
3. ELMo原理介紹
3.1 ELMo的預訓練
前面也說過ELMo最重要的一點是就是訓練語言模型,語言模型的結構如下:
他們使用的是一個雙向的LSTM語言模型,由一個前向和一個後向語言模型構成,目標函數就是取這兩個方向語言模型的最大似然。
前向LSTM結構:
反向LSTM結構:
最大似然函數:
實際的BiLSTM是這樣的:
由上面EMLo語言模型結構可以看出,實際上,有兩層BiLSTM。
初始輸入的詞向量,作者推薦使用字符卷積網絡來生成。當然爲了加速訓練,也可以在輸入時直接使用word2vec或glove等傳統詞向量。
3.2 使用語言模型
在預訓練好這個語言模型之後,ELMo就是根據公式來用作詞表示,其實就是把這個雙向語言模型的每一中間層進行一個加權求和。最簡單的也可以使用最高層的表示來作爲ELMo。然後在進行有監督的NLP任務時,可以將ELMo直接當做特徵拼接到具體任務模型的詞向量輸入或者是模型的最高層表示上。
4. 總結
大家有想過爲什麼ELMo的效果會比word2vec的效果好?我個人認爲有一下幾點:
- ELMo的假設前提一個詞的詞向量不應該是固定的,所以在一詞多意方面ELMo的效果一定比word2vec要好。
- word2vec的學習詞向量的過程是通過中心詞的上下窗口去學習,學習的範圍太小了,而ELMo在學習語言模型的時候是從整個語料庫去學習的,而後再通過語言模型生成的詞向量就相當於基於整個語料庫學習的詞向量,更加準確代表一個詞的意思。
- ELMo還有一個優勢,就是它建立語言模型的時候,可以運用非任務的超大語料庫去學習,一旦學習好了,可以平行的運用到相似問題。
- 個人補充:其實,感覺這裏還有一點,word2vec只是學習了固定小窗口範圍的中心詞與附近詞的空間關係,但沒有強調語法及語義關係,而BiLSTM更能學習到這種語法、語義關係,其實說白了,就是把word2vec中的簡單線性求和,用更復雜的BiLSTM來代替,同時堆疊了2層。