今天給你們介紹一篇2018年提出的論文《Deep contextualized word representations》,在這篇論文中提出了一個很重要的思想ELMo。本人認爲ELMo的提出對後面的的GPT和BRET有一個很好的引導和啓發的做用。ELMo是一種是基於特徵的語言模型,用預訓練好的語言模型,生成更好的特徵。html
ELMo是一種新型深度語境化詞表徵,可對詞進行復雜特徵(如句法和語義)和詞在語言語境中的變化進行建模(即對多義詞進行建模)。咱們的詞向量是深度雙向語言模型(biLM)內部狀態的函數,在一個大型文本語料庫中預訓練而成。算法
說到詞向量,咱們必定會聯想到word2vec,由於在它提出的詞向量概念給NLP的發展帶來了巨大的提高。而ELMo的主要作法是先訓練一個完整的語言模型,再用這個語言模型去處理須要訓練的文本,生成相應的詞向量,因此在文中一直強調ELMo的模型對同一個字在不一樣句子中能生成不一樣的詞向量。函數
前面也說過ELMo最重要的一點是就是訓練語言模型,語言模型的結構以下:學習
他們使用的是一個雙向的LSTM語言模型,由一個前向和一個後向語言模型構成,目標函數就是取這兩個方向語言模型的最大似然。spa
前向LSTM結構:
\[ p(t_1,t_2,...,t_N) = \prod^N_{k=1}p(t_k|t_1,t_2,...,t_{k-1}) \]code
反向LSTM結構:
\[ p(t_1,t_2,...,t_N) = \prod^N_{k=1}p(t_k|t_{k+1},t_{k+2},...,t_{N}) \]orm
最大似然函數:htm
\[ \sum_{k=1}^N(logp(t_k|t_1,t_2,...,t_{k-1}) + logp(t_k|t_{k+1},t_{k+2},...,t_{N})) \]blog
在預訓練好這個語言模型以後,ELMo就是根據公式來用做詞表示,其實就是把這個雙向語言模型的每一中間層進行一個求和。最簡單的也可使用最高層的表示來做爲ELMo。而後在進行有監督的NLP任務時,能夠將ELMo直接當作特徵拼接到具體任務模型的詞向量輸入或者是模型的最高層表示上。get
你們有想過爲何ELMo的效果會比word2vec的效果好?我我的認爲有一下幾點: