[CLS]預訓練語言模型的前世今生[SEP]萌芽時代[SEP]
- 2020 年 3 月 5 日
- 筆記
轉載自:晴天1號
之前,我們公眾號發表過幾篇前沿論文的閱讀筆記,歡迎大家去閱讀和交流。而在這裡,我們將會做一個NLP專題的系列閱讀,專門閱讀某些專題的論文。第一個當然是預訓練語言模型,之後可能會有閱讀理解,以及其他專題的閱讀。
因為文章較多,每個專題系列,都會分多篇推送來給大家呈現,敬請期待!
前言
前段時間,在github里發現一個很不錯的repo,是母校自然語言處理實驗室維護的關於自然語言處理中預訓練語言模型的必讀論文推薦,在此奉上鏈接,並由衷感謝他們的整理。https://github.com/thunlp/PLMpapers

在學術界,預訓練語言模型的研究,已經變成一個非常火熱的課題,最近幾年迸發出許多可以說改變整個NLP世界格局的文章,包括BERT, GPT2等等。近段時間來,我們在工作和研究中使用BERT等來進行模型訓練或業務開發變得越來越普遍。使用預訓練模型大大提升了在相關任務上的效果,同時降低了訓練的難度。所以,我想趁這個機會,來通過閱讀這些文章,梳理和分享一下我眼中的預訓練語言模型的演進,同時總結一些在使用預訓練模型時的心得和總結,希望能給NLP的初學者們一點幫助和啟示,同時也希望拋磚引玉,能吸引更多的NLP專家們交流,對我們進行指點和指正。
萌芽時代(2015-2016)
這篇文章起名為萌芽時代,一方面指的是我們今天將要介紹的兩篇文章是NLP預訓練語言模型剛剛如雨後春筍般冒出萌芽的階段,他們開創了預訓練語言模型的先河,並且與當時流行的詞嵌入方法相承接。同時我們的公眾號也處於萌芽階段,日後會與大家分享更多NLP方面的思考。
語言模型
言歸正傳
我們通常所理解的語言模型簡單來說就是建模一句句子存在的可能性,我們提到的預訓練語言模型 (PLM,Pre-trained Language Model)指的是利用大量在人們生活中出現過的文本來訓練,使模型在這些文本中,學習到每一個詞或字出現的概率分佈,以此來建模出符合這些文本分佈的模型。比如這個模型預測「我要吃蘋果」這句話在現實生活中出現的可能性比較高,而「我吃要果蘋」就不那麼高了。語言模型,幾乎都是根據上下文來預測相鄰的詞或字是什麼,根據訓練任務不同會有一些差別,這個我們後面會介紹到。所以語言模型的語料的標籤就是它的上下文,不需要重新標註,這就決定了人們幾乎可以無限制地利用大規模的語料來訓練語言模型,使其學習到豐富的語義知識,這點非常重要,在相關論文中也通常會提及所使用的語料,比如BERT使用了BooksCorpus (800M words) (Zhu et al., 2015) 和English Wikipedia (2,500M words) 來訓練語言模型。正因為語料的規模之大,使預訓練語言模型得以獲得了強大的能力,進一步在我們下游相關任務上展現了其出色的效果。
預訓練模型其實在圖像中早已被應用,而預訓練語言模型的概念於2015 年被認為首次提出(Dai & Le,2015,Semi-supervised Sequence Learning)。直到近期,PLM才被證明在各個任務中的效果優異。在此之前,NLP領域更流行的是使用詞嵌入(word embedding),將詞嵌入一個多維空間中,並且在比較大的語料庫上訓練後,用以捕捉詞和詞之間的特定關係。比較知名的詞向量訓練模型有Word2vec,GloVe 等。詞嵌入可以用於初始化下游模型的第一層嵌入層,加上其他功能層,進行整個模型的構建,但早期的詞嵌入的方法沒有保留每個詞上下文的信息,有其局限性。

Semi-supervised Sequence Learning(2015)
這樣就引出了,我們今天要介紹的第一篇文章,也可以說是預訓練語言模型的開山之作,由Google的兩位作者Andrew M. Dai和Quoc V. Le發表的 Semi-supervised Sequence Learning。
他們主要使用無標籤的數據(即普通的文本)和RNN進行了兩種嘗試,實際上是通過兩種不同訓練目標來預訓練了LSTM。第一種是訓練模型去預測一句句子里下一個詞是什麼,這是一種典型的語言模型訓練方法,第二種是訓練模型成為一個autoencoder,用於將句子映射成向量後重建原來的句子。他們明確提出了,這兩種算法可以為接下來的監督學習算法提供 「pretraining step",換句話說這兩種無監督訓練得到的參數可以作為接下來有監督學習的模型的起始點,他們發現這樣做了以後,可以使後續模型更穩定,泛化得更好,並且經過更少的訓練,就能在很多分類任務上得到很不錯的結果。
眾所周知,RNN模型雖然對時序數據建模很強大,但是因為訓練時需要 「back-propagation through time」, 所以訓練過程是比較困難的。Dai 和 Le 提出的預訓練的方法,可以幫助RNN更好的收斂和泛化,而且在特定業務上不需要額外的標註數據,只需要收集成本很低的無標註的文本。而且這些文本與你的特定業務越相關,效果就會越好,他們認為如此一來,這種做法就支持使用大量的無監督數據來幫助監督任務提高效果,在大量無監督數據上預訓練以後只要在少量監督數據上fine-tuning就能獲得良好的效果,所以他們給這篇論文取名為 「半監督序列學習」。
他們接下來使用他們的兩種預訓練方法,第一種稱為LM-LSTM, 第二種稱為SA-LSTM。在 sentiment analysis 任務(IMDB and Rotten Tomatoes) and text classification 任務 (20 Newsgroups and DBpedia),與當時的state-of-the-art 方法進行對比,我就簡單截取了一段對比結果如下。之後他們又進行了一些更細緻的對比,不再贅述。可以看出SA-LSTM的效果會普遍優於之前的最佳結果

個人感覺這篇文章最大的貢獻,就是系統地闡述了上游預訓練語言模型用以下游特定任務這個劃時代的思想,並通過兩個訓練目標,用一系列分類任務的實驗來對比支持了這個觀點。從此以後,預訓練語言模型漸漸步入了人們的視野,更在之後由一系列更優秀更強大的模型發揚光大。雖然這篇文章放在今天看來,它的思想已經讓我們感到理所當然,它的效果也沒有那麼地讓人感覺驚艷,但是放在那個歷史時刻里,它就像一盞明燈,為人們照明了一個方向。
context2vec: Learning Generic Context Embedding with Bidirectional LSTM(2016)
第二篇文章是2016年由巴伊蘭大學Oren Melamud,Jacob Goldberger, Ido Dagan 三位作者所發表的context2vec 。從題目名字就可以看出,這篇文章提出的idea是學習文本中包含上下文信息的embeddings。由於詞在不同上下文可以有歧義,相同的指代詞也經常在不同上下文中指代不同的實體。所以NLP任務中很重要的就是考慮每個詞在其上下文中所應該呈現的向量表達方式。從摘要看,這篇文章的主要貢獻,是它使用了雙向的LSTM可以從一個比較大的文本語料中,有效地學到了包含上下文信息的embeddings,在很多詞義消岐,完形填空的任務上都取得了不低於state-of-the-art的效果。同時他們提到,之前的研究有把上下文的獨立embedding收集起來,或是進行簡單的平均,而沒有一個比較好的機制來優化基於上下文的向量表達。所以,他們提出了context2vec ,一個能夠通過雙向LSTM學習廣泛上下文embedding的非監督的模型。

上圖是context2vec的結構圖,可以說沿襲了word2vec的基本思想。但在word2vec中的 CBOW架構中,上下文的embeddings只是拿過來簡單的平均了一下,而context2vec則把上下文的數據通過了雙向的LSTM,左側藍色的正向embeddings和右側綠色的反向embeddings分別經過LSTM的流轉,最後連接起來通過多層感知機,產生紅色的包含上下文信息的context embeddings,最後通過目標函數去進行整體訓練。下圖是word2vec的結構圖。

通過LSTM的長時記憶能力,context2vec可以捕捉這句話中更遠位置的上下文信息,同時將序列之間的聯繫包含到了模型中來,接着多層感知機,又將左右兩邊的序列信息很好的結合在一起,成為真正意義上包含上下文語義信息的context embeddings.
到現在我們看明白了,無論從結構還是名字都表明,context2vec是word2vec的改進版,相比於word2vec,context2vec利用雙向LSTM獲得了句子級別的的上下文語義表示。因此,我們就能夠衡量一個詞和某一整段上下文文本的相似性,比如下圖就是context2vec對於某一整段上下文的本文,最接近的目標詞的預測。

看到這我們不禁要問了,我們這個專題不是預訓練語言模型嗎?那它跟PLM有什麼關係呢?其實看着這張圖,我們就可以聯想到,建模最可能出現的文本序列,不就是語言模型的功能嗎。論文中也提到,由於context2vec 利用文本上下文的機制,context2vec 和語言模型的關係是非常緊密的,比如它們都是通過上下文和目標詞來訓練模型,從而捕捉每個詞和周圍詞的聯繫。主要區別在於語言模型着眼於優化通過上下文來預測目標詞的條件概率,而context2vec是想找出一個有效的向量表達來刻畫目標詞和整個上下文的關係,所以這篇文章可以認為是傳統詞嵌入和預訓練語言模型的一條紐帶。最後,文章又在完形填空,詞義消岐等任務上評測了一下context2vec的效果,都能達到或超過state-of-the-art的水平。
我認為的這篇文章的主要貢獻,是它開創性地通過雙向LSTM將上下文的語義信息融入到了詞嵌入中去,並且首先承接起了當時正流行的詞嵌入和語言模型之間的關係,展示了可以利用大量的無標註文本數據,在可接受的時間內,訓練出高質量的包含上下文信息的向量表示,並顯著超過使用傳統的詞向量的效果。
未完待續
由於篇幅關係,這期就先介紹這兩篇論文,他們是整張圖中發表最早的兩篇論文,也是比較有開創性的兩篇,如果想要對詞嵌入技術進行更深的了解,建議深入閱讀詞嵌入方面的相關論文,我也會在下方進行一些推薦。
本專題下期將會繼續給大家分享圖中的論文,邀請大家一起體會和見證預訓練語言模型的發展。在我們心得和記錄中難免會有不妥之處,請大家多多包涵,多多指正,下期再見,感謝!