【預訓練模型】預訓練語言模型的前世今生之風起雲湧

點擊上方,選擇星標置頂,每天給你送乾貨

閱讀大概需要14分鐘

跟隨小部落客,每天進步一丟丟

來自:晴天1號

前言

歡迎大家來到我們預訓練語言模型的專題系列分享,本篇推送是該專題的第二篇!預訓練語言模型已經成為了NLP研究中一個非常火熱的話題,優秀的模型包括BERT,GPT2等都在學術研究、工業領域、演算法比賽中大放光彩。

在專題上一期推送【萌芽時代】里,我們介紹了預訓練語言模型思想的萌芽。今天我們推出的這篇推送, 將繼續為大家介紹預訓練語言模型是如何進一步發展和演進的。在此感謝清華大學自然語言處理實驗室關於預訓練語言模型的必讀論文的整理(鏈接:https://github.com/thunlp/PLMpapers),我們將沿此脈絡繼續前行,分享在閱讀中的理解和對某些常用模型實戰中的一些心得。

圖1. PLMfamily (來源:https://github.com/thunlp/PLMpapers)

風起雲湧(2017-2018)

隨著預訓練語言模型的能力被越來越多學者認可,該領域的論文呈現了加速增長的態勢。上圖收錄了其中2015-2016年論文兩篇、2017年-2018年論文四篇、以及2019年論文二十餘篇。其中2018年底到2019年初面世的BERT以其優異的性能,徹底改變了NLP發展的格局。在此之前,EMLo也以在不少自然語言任務上的效果的不俗表現而驚艷一時。從2016年後,大多數研究都開始重視長時的上下文語義在embeddings中所起作用和語言模型在大規模語料上提前預訓練這兩個核心觀點。

上一期我們介紹了"上下文相關的embedding",這裡再來回顧一下。word2vec之類的詞嵌入是和上下文無關的;當word2vec訓練好詞向量後,每一個獨立的詞在空間中就會有一個固定維度向量對應其語意,所有的詞向量好像是被嵌入到了一個固定維度的空間中,所以叫做word embedding。朋友們可以查閱上期推薦閱讀中的word2vec以及GloVe論文,或李宏毅老師的影片

這樣的話,同樣是蘋果這個詞,在 「我今天買了一斤蘋果和香蕉」 中和在 「我的蘋果手機是去年剛買的」 這兩句話中出現,它的詞向量就還是一樣的。那這就很不合理了,因為這兩個「蘋果」一個是手機一個是水果,表達的是完全不同的意思,屬於一詞多義,如果用同樣的詞向量表示,就違背了我們想要捕捉詞與詞之間關係的初衷了。手機中的「蘋果」應該跟「華為」,「小米」,「三星」這些詞在空間中接近。而水果中的「蘋果」,應該跟「桃子」,「香蕉」,「橘子」更接近。為了彌補這個問題,許多學者就考慮,每個詞在不同上下文中,它的向量表達都應該是不一樣的,所以就有了上期專題中講過的context2vec和我們這期後面會提到的ELMo這些模型的產生。

接下來我們將重點介紹本期兩篇論文:

Unsupervised Pretraining for Sequence to Sequence Learning(2017)

這篇文章是在2017年ICLR會議上由Google Brain團隊Prajit Ramachandran 、Peter J. Liu、Quoc V. Le共同發表的,與上期介紹的Google 2015年發表的 Semi-supervised Sequence Learning 可謂一脈相承。本文描述了一種通用的非監督預訓練方法,提升了seq2seq模型的準確性。seq2seq模型是一種根據給定變長序列,通過特定方法生成另一個變長序列的方法,感興趣的朋友可以查閱本文後的參考資料[1][2]。作者用兩個語言模型的預訓練權重分別初始化了seq2seq模型的encoder 與decoder,然後再用監督數據對模型進行finetune,這種做法在機器翻譯和概要提取任務上大大超過了以前的純監督模型,證明了預訓練的過程直接提高了seq2seq模型的泛化能力,再次提出了預訓練的重要性和通用性。

文章指出seq2seq模型以及所有深度神經網路的一個共同弱點就是當監督數據量很小的情況下,模型非常容易過擬合。他們提出了一種方法,使用兩個預訓練語言模型的參數來初始化seq2seq模型的encoder網路和decoder網路。並在finetune過程中,聯合訓練seq2seq的目標和語言模型的任務目標來避免過擬合的發生。他們的結果是該方法在CNN和Daily Mail文章數據上的英文轉德文任務和概要提取任務的結果,超過了所有當時的最強演算法。

同時文中通過做對比實驗確認了,對機器翻譯來說,模型對泛化能力的主要提升就來自於預訓練的參數特徵,而對摘要提取,encoder的預訓練為模型效果的巨大提升和泛化能力的提高做出了貢獻。圖2為預訓練seq2seq模型的結構,紅色為encoder部分,藍色為decoder部分,所有方框內參數均為語言模型預訓練的,而方框外的參數為隨機初始化。在機器翻譯任務中,作者對兩種語言空間都收集了大量無標籤數據,各自獨立地訓練了語言模型,作為encoder,decoder的初始化參數。為了使其後訓練更加高效,decoder的softmax層也由目標側的語言模型softmax參數初始化。

圖2. seq2seq模型結構(來源 https://arxiv.org/pdf/1802.05365.pdf)

當seq2seq模型按照上述方式被初始化以後,接著應該在監督數據上進行fine-tune。但作者引用了2013年Goodfellow的文章[3],認為直接finetune會引起所謂的catastrophic forgetting(災難性遺忘),即是模型在之前語言模型任務上的表現會急速下降,導致模型泛化能力降低,特別如果是在較小數據集上finetune的。所以他們通過將seq2seq模型loss和語言模型loss的平均,來達成聯合訓練,並顯著提升了模型的效果。

作者提到除了為效果提供了最大貢獻的預訓練方法和seq2seq和語言模型的聯合優化,另外還有兩個貢獻小但穩定的優化點,一個是residual connections(殘差連接), 另一個是Multi-layer attention(多層注意力機制)。使用殘差連接原因是高層的LSTM參數是隨機初始化的,可能會導致隨機的梯度對預訓練好的參數造成影響。所以,同時讓第一層的LSTM也有梯度可以與decoder的Softmax之間流轉,提高了模型穩定性和效果。多層注意力機制使模型對兩層LSTM的節點都有關注,從而提升了模型效果。最後,文章在機器翻譯和概要提取任務上進行了不少模型效果的實驗比較,證明了方法可以打敗當時最好的模型。

編者認為這篇文章最大的貢獻是證明了在大量無監督數據上預訓練語言模型,並在少量有監督數據上finetune這個思路對seq2seq模型同樣具有效性,並提出了seq2seq目標和語言模型目標聯合訓練以提高泛化能力的想法。文章的思路借鑒了s上期介紹的Semi-supervised Sequence Learning對預訓練語言模型的應用,並進一步將其發展,展現了該方法在自然語言處理中的通用性

Deep contextualized word representations(ELMo)(2018)

接下來這篇就是在當時名噪一時的ELMo了,由Allen Institute for Artificial Intelligence 及 University of Washington的多位作者聯合發表,在2018年的NAACL 會議獲得了最佳論文。

文章總結性地提出,模型在理想情況下應該做到兩點,一個是對複雜的詞語運用的建模,也就是理解語法與語意;另一個是建模該運用怎麼在上下文語言內容變化時隨之變化,也就是應對一詞多義現象。本方法通過深層雙向語言模型的內部狀態來學習到詞向量。所用的語言模型在一個很龐大的語料上預訓練過。結果表明,學到的這些向量表達可以很容易地運用於現有的模型,並且大幅提升包含 question answering, textual entailment ,sentiment analysis 在內的六個NLP關鍵任務的state of the art結果。同時,論文揭示了,預訓練語言模型能生成深層特徵是關鍵,下游任務可以混合不同層的半監督語義訊號,來提高自己的效果。

ELMo在大量不同領域的NLP任務中,都不同程度提升了原有state-of-art模型的效果,一時令大家側目。之所以起名為EMLo(Embeddings from Language Models),是因為模型是從一個在大量語料上預訓練的雙向LSTM語言模型中提取embeddings。它最後得到的 embeddings 由內部不同層的加權組合所得,特別地,針對不同的任務,通過訓練獲得不同的加權方式,這也會提升模型效果,並明顯超過只用頂層LSTM的結果。同時實驗表明,更高層的LSTM層會捕捉關於詞在上下文語言環境中的意義(不加修改就能在詞義消歧任務上取得好的效果),而低層的LSTM會傾向於捕捉單個詞的語意語法資訊(在詞性標註任務上表現良好)。總之所有的訊號都很有用,下游任務可以通過訓練選取最適合他們的訊號或分配權重。

圖3. ELMo模型結構圖(來源:https://arxiv.org/pdf/1810.04805.pdf)

上圖摘自BERT的論文,示意了ELMo的模型結構。雖然論文題目中有Deep,但實際最後ELMo的語言模型為兩層。但文章指出對L層雙向LSTM的情況下,應該會有L層前向的向量表徵,L層後向的向量表徵,加上原始的向量(圖中的黃色的單元),一共2 * L + 1個向量表徵。最簡單的情況,是只提取最上層的LSTM的向量表徵。更一般的情況是,所有層的向量表徵都會被用上,並針對不同任務計算一個權重分配方式,進一步優化模型在新任務的效果。

ELMo語言模型跟之前的一些相似模型相比,首先它是雙向的深層語言模型會優於單向, 這點在同期的許多論文中都有所提到。其次,在圖3中可以看到,在上下層的LSTM之間有 residual connection ,加強了梯度的傳播。另外,雙向語言模型的訓練目標是最大化前向和後向的聯合對數似然概率,這點源於模型雙向的特性。

圖4. ELMo語言模型訓練目標 (來源:https://arxiv.org/pdf/1802.05365.pdf )

最終,ELMo的語言模型經過權衡了模型性能、大小、以及所需算力定為兩層雙向LSTM,每層4096個units,512維projections。底層用的是字向量,進行字元卷積,再經過2個highway layers進入BiLSTM。最後在1B大小的Word Benchmark上 (Chelba et al., 2014) 訓練了十輪。

經過預訓練以後,實際下游模型使用起來就比較簡單了。比如拿到一句句子,經過底層非上下文相關字嵌入層,生成字向量,就是圖3中黃色的向量表徵。經過語言模型的計算,內部各LSTM層輸出加權後得到上方綠色的向量表徵,和下方的黃色向量表徵一起,作為下游模型的輸入,進行接下來有監督的模型訓練。

編者認為ELMo這篇文章的主要貢獻是提出了深層雙向語言模型的重要性,雖然ELMo只有兩層,但作者在層數為L的假設下進行了討論,並指出各層學習到的向量表徵在各語言維度上有不同特性,加權後共同來使用會有更好的效果。同時ELMo拿出了讓人信服的結果,在多個任務上表現出色,但可惜ELMo生不逢時,沒過幾個月,BERT就王者降臨了,刷新了幾乎能刷新的所有榜單。不是我軍無能,而是敵人太狡猾呀~

未完待續

這期的論文就給大家分享到這裡,感謝大家的閱讀和支援,下期我們會給大家帶來另外兩篇2018年的重要論文的分享,敬請大家期待!

歡迎關注晴天1號,這裡有很多最新最熱的論文閱讀分享,有問題或建議可以在公眾號下留言。

參考資料

  1. Sequence to sequence learning with neural networks http://de.arxiv.org/pdf/1409.3215
  2. Learning phrase representations using RNN encoder-decoder for statistical machine translation https://www.aclweb.org/anthology/D14-1179.pdf
  3. An empirical investigation of catastrophic forgetting in gradient-based neural networks https://arxiv.org/pdf/1312.6211.pdf