【NLP論文筆記】Deep contextualized word representations(ELMO詞向量理解)

本文主要用于記錄華盛頓大學計算機院發表于2018年的一篇論文。該論文主要提出了ELMO詞向量模型。本筆記主要為方便初學者快速入門,以及自我回顧。

論文鏈接:https://arxiv.org/pdf/1802.05365.pdf
Github:https://github.com/allenai/allennlp

基本目錄如下:

  1. 摘要
  2. 核心思想
  3. 總結

------------------第一菇 - 摘要------------------

1.1 論文摘要

本文作者推出了一種新的基于深度學習框架的詞向量表征模型,這種模型不僅能夠表征詞匯的語法和語義層面的特征,也能夠隨著上下文語境的變換而改變。簡單來說,本文的模型其實本質上就是基于大規模語料訓練后的雙向語言模型內部隱狀態特征的組合。實驗證明,新的詞向量模型能夠很輕松的與NLP的現有主流模型相結合,并且在六大NLP任務的結果上有著巨頭的提升。同時,作者也發現對模型的預訓練是十分關鍵的,能夠讓下游模型去融合不同類型的半監督訓練出的特征。

------------------第二菇 - 核心思想------------------

2.1 論文模型結構 - 雙向語言模型

ELMO(Embeddings from Language Models)模型,從他的縮寫就可以看出,他的模型本質是從語言模型而來的。因此,我們先聊一聊雙向語言模型。

對于一個給定的句子(t_1,t_2,...t_N),我們構建的語言模型就是通過一個詞匯的上下文去,預測一個詞t_k

p(t_1, t_2,...t_N) = \prod_{k=1}^Np(t_k|t_1, t_2, ..., t_{k-1})

一般來說,NLP相關的首選肯定是LSTM,本文的作者當然也是采用了該模型。該語言模型的輸入就是詞向量(獲取的途徑多種多樣,作者提了一個是字符卷積),然后通過一個多層的前向LSTM網絡,在LSTM的每一層,我們都能輸出基于文本的一個向量表達,\overrightarrow{h}_{k,j}^{LM}。其中j代表層數。其最后的一層的輸出,\overrightarrow{h}_{k,L}^{LM},經過一層softmax歸一,就可以來預測詞t_k,大概流程長下面這樣【1】,

語言模型.png

當然,現在都流行雙向語言模型,本質就是把句子再逆序輸入一遍,再把前向逆向的結果結合起來,就是我們最終的雙向語言模型,而我們最終的目標函數就是去最大化,

\sum_{k=1}^N(logp(t_k|t_1,...t_{k-1};\Theta_x, \overrightarrow{\Theta}_{LSTM}, \Theta_s) + logp(t_k|t_k+1,...t_{N};\Theta_x, \overleftarrow{\Theta}_{LSTM}, \Theta_s))

其中兩個方向的LSTM的參數不是共享的,\Theta_x就是一開始輸入的詞向量,\Theta_s就是softmax層參數。因此,雙向語言模型的結構圖,可以表達如下【1】,

雙向語言模型.png
2.2 論文模型結構 - ELMO模型

對于每一個詞t_k,一個L層的biLM可以計算出2L + 1個表達如下,

R_k = \{x_k^{LM}, \overrightarrow{h}_{k,j}^{LM}, \overleftarrow{h}_{k,j}^{LM} | j = 1,...L\}

如果我們統一用h_{k,j}^{LM} = [\overrightarrow{h}_{k,j}^{LM};\overleftarrow{h}_{k,j}^{LM}]來表示biLM的每一層輸出,h_{k,0}^{LM}來表示第一層向量,那么整個表達可以統一表示為,

R_k = \{h_{k,j}^{LM} | j = 0,...L\}

而前面也說了,ELMO本質上就是一個任務導向的,雙向語言模型(biLM)內部的隱狀態層的組合。通用的表達式如下,

ELMO_k^{task} = E(R_k;\Theta^{task}) = \gamma^{task}\sum_{j=0}^Ls_j^{task}h_{k,j}^{LM}

其中,\gamma是用來控制ELMO模型生成的向量大小,原文中說該系數對于后續的模型優化過程有好處(在附件中,作者強調了這個參數的重要性,因為biLM的內核表達,與任務需要表達,存在一定的差異性,所以需要這么一個參數去轉換。并且,這個參數對于,last-only的情況(就是只取最后一層,ELMO的特殊情況),尤其重要),另一個參數s,原論文只說了softmax-normalized weights,所以我的理解,其實它的作用等同于層間的歸一化處理。

在面對具體的NLP下游任務時,ELMO模型的應用也很簡單。首先,大部分的NLP的模型都會有一層詞向量層,而我們要做的無非就是用ELMO與詞向量層結合,讓模型去訓練學習ELMO的內部狀態的線性組合,然后,生成一個共同的詞向量[x_k, ELMO_k^{task}],用于后續的訓練,整個模型結構見下圖【1】,

ELMO.png
2.3 論文模型結構 - 預訓練過程

至此,整個模型結構已經說清楚了。作者在實驗論證該預訓練模型之前,闡述了一下其預訓練過程。最終作者用于實驗的預訓練模型,為了平衡語言模型之間的困惑度以及后期NLP模型的計算復雜度,采用了2層Bi-Big-Lstm,共計4096個單元,輸入及輸出緯度為512,并且在第一層和第二層之間有殘差連接,包括最初的那一層文本向量(用了2048個過濾器, 進行基于字符的卷積計算,詳細可查看字符卷積的原論文),整個ELMO會為每一個詞提供一個3層的輸出,而下游模型學習的就是這3層輸出的組合。另外,作者強調了一下,對該模型進行FINE-TUNE訓練的話,對具體的NLP任務會有提升的作用。

2.4 論文實驗結果分析

作者的論文的實驗部分,具體展示了ELMO模型在六大nlp任務上的表現,證實了該模型的有效性。這里就不具體展開,有興趣的讀者,可以自行閱讀原論文,包括附錄有更詳細的分析。這里直接聊幾個論文中說的我認為比較有趣的點,

1)作者實驗了一把,ELMO的特殊情況,只取最后一層的輸出,和多層的線性組合,實驗結果發現,只取最后一層也取得了很好的效果,而且多層的效果提升并不是特別的明顯(較之于只取最后一層),結果見下圖,

實驗結果1.png

2)ELMO加的地方。剛才前面說了,是與之前的詞向量層一起,在最開始的地方。作者還實驗了一把,放在模型的輸出那里,并且還取得了不錯的效果。

3)ELMO不同的層,能從不同的緯度表達一個詞,作者經過實驗發現,低層的輸出能更好的從句法語法的層面表達一個詞,而高層的輸出能更好的從語意的層面表達一個詞。

2.3 論文模型實踐

這里先留個坑,以后有時間,把ELMO的實踐也擺上來。

------------------第三菇 - 總結------------------

3.1 總結

到這里,整篇論文的核心思想及其創新點已經說清楚了。本論文主要集中在于闡述ELMO架構及其預訓練的思想,并且用具體NLP實驗證明了使用這一套架構的原理,并證實了其可行性。

簡單總結一下本文就是先羅列了一下該論文的摘要,再具體介紹了一下ELMO架構,最后也談了一點自己對ELMO架構的理解,總的來說,這篇論文也是首次提出的預訓練模型的思想。希望大家讀完本文后能進一步加深對該論文的理解。有說的不對的地方也請大家指出,多多交流,大家一起進步~??

參考文獻:
【1】https://jalammar.github.io/illustrated-bert/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容