1 概述
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是怎麼實作這樣的結果的。
2 模型結構
ELMO 基于語言模型的,确切的來說是一個 Bidirectional language models,也是一個 Bidirectional LSTM結構。我們要做的是給定一個含有N個tokens的序列
$ {t_1, t_2, ..., t_N}$
其前向表示為:
反向表示為:
從上面的聯合機率來看是一個典型的語言模型,前向利用上文來預測下文,後向利用下文來預測上文。假設輸入的token是 $ x_k^{LM}$,在每一個位置 $k$ ,每一層LSTM 上都輸出相應的context-dependent的表征 $\overrightarrow{h}_{k, j}^{LM}$。這裡
$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提供了詞級别的動态表示,能有效的捕捉語境資訊,解決多義詞的問題。