1 概述dom
word embedding 是如今天然語言處理中最經常使用的 word representation 的方法,經常使用的word embedding 是word2vec的方法,然而word2vec本質上是一個靜態模型,也就是說利用word2vec訓練完每一個詞以後,詞的表示就固定了,以後使用的時候,不管新句子上下文的信息是什麼,這個詞的word embedding 都不會跟隨上下文的場景發生變化,這種狀況對於多義詞是很是不友好的。例如英文中的 Bank這個單詞,既有河岸的意思,又有銀行的意思,可是在利用word2vec進行word embedding 預訓練的時候會得到一個混合多種語義的固定向量表示。即便在根據上下文的信息能明顯知道是「銀行」的狀況下,它對應的word embedding的內容也不會發生改變。函數
ELMO的提出就是爲了解決這種語境問題,動態的去更新詞的word embedding。ELMO的本質思想是:事先用語言模型在一個大的語料庫上學習好詞的word embedding,但此時的多義詞仍然沒法區分,不過不要緊,咱們接着用咱們的訓練數據(去除標籤)來fine-tuning 預訓練好的ELMO 模型。做者將這種稱爲domain transfer。這樣利用咱們訓練數據的上下文信息就能夠得到詞在當前語境下的word embedding。做者給出了ELMO 和Glove的對比學習
對於Glove訓練出來的word embedding來講,多義詞play,根據他的embedding 找出的最接近的其餘單詞大多數幾種在體育領域,這主要是由於訓練數據中包含play的句子大多數來源於體育領域,以後在其餘語境下,play的embedding依然是和體育相關的。而使用ELMO,根據上下文動態調整後的embedding不只可以找出對應的「表演」相同的句子,還能保證找出的句子中的play對應的詞性也是相同的。接下來看看ELMO是怎麼實現這樣的結果的。spa
2 模型結構blog
ELMO 基於語言模型的,確切的來講是一個 Bidirectional language models,也是一個 Bidirectional LSTM結構。咱們要作的是給定一個含有N個tokens的序列token
$ {t_1, t_2, ..., t_N}$io
其前向表示爲:model
反向表示爲:方法
從上面的聯合機率來看是一個典型的語言模型,前向利用上文來預測下文,後向利用下文來預測上文。假設輸入的token是 $ x_k^{LM}$,在每個位置 $k$ ,每一層LSTM 上都輸出相應的context-dependent的表徵 $\overrightarrow{h}_{k, j}^{LM}$。這裏im
$j = 1, 2, ..., L$, $L$表示LSTM的層數。頂層的LSTM 輸出 $\overrightarrow{h}_{k, L}^{LM}$ ,經過softmax層來預測下一個 $token_{k+1}$。
對數似然函數表示以下:
模型的結構圖以下:
ELMO 模型不一樣於以前的其餘模型只用最後一層的輸出值來做爲word embedding的值,而是用全部層的輸出值的線性組合來表示word embedding的值。
對於每一個token,一個L層的biLM要計算出 $2L + 1$ 個表徵:
在上面 $ X_k^{LM} $ 等於 $ h_{k, j} ^ {LM} $,表示的是token層的值。
在下游任務中會把$R_k$ 壓縮成一個向量:
其中 $s_j^{task}$ 是softmax標準化權重,$\gamma^{task}$ 是縮放係數,容許任務模型去縮放整個ELMO向量。
ELMO的使用主要有三步:
1)在大的語料庫上預訓練 biLM 模型。模型由兩層bi-LSTM 組成,模型之間用residual connection 鏈接起來。並且做者認爲低層的bi-LSTM層能提取語料中的句法信息,高層的bi-LSTM能提取語料中的語義信息。
2)在咱們的訓練語料(去除標籤),fine-tuning 預訓練好的biLM 模型。這一步能夠看做是biLM的domain transfer。
3)利用ELMO 產生的word embedding來做爲任務的輸入,有時也能夠即在輸入時加入,也在輸出時加入。
ELMO 在六項任務上取得了the state of the art ,包括問答,情感分析等任務。總的來講,ELMO提供了詞級別的動態表示,能有效的捕捉語境信息,解決多義詞的問題。