從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史

大資料文摘發表於2020-04-06

從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史

大資料文摘出品

來源:medium

編譯:LYLM、胡笳

自2010年創辦以來,Kaggle作為著名的資料科學競賽平臺,一直都是機器學習領域發展趨勢的風向標,許多重大突破都在該平臺發生,數以千計的從業人員參與其中,每天在Kaggle論壇上都有著無數的討論。

各種型別的挑戰賽(計算機視覺、語音、表格處理等等)都會在這個線上平臺釋出,而自然語言處理(NLP)問題最近亦備受關注。誠然,過去幾個月裡,我們已經見證這一領域有好幾項振奮人心的創新,而目前流行的的則是transformers和預訓練語言模型。

Medium上一位從事NLP的博主就透過Kaggle競賽梳理了一遍自然語言處理的發展歷史,看看NLP這些年都是怎樣一路走來的。

從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史

左邊:動物沒有過馬路,因為它太累。右邊:動物沒有過馬路,因為它太寬。基於語境,句子的最後一詞“它”在這可指“動物”或是“馬路”,摘自谷歌transformers詞條。

2016以前:詞袋(bag of words)模型和TF-IDF演算法盛行

在2016年之前,解決(或者說贏得)Kaggle自然語言處理挑戰的標準方法是採用詞袋模型(即計算文章中各個單詞出現的次數)來建立特徵輸入機器學習分類器,典型的有樸素貝葉斯演算法。稍微完善些的則有TF-IDF演算法。

這種方法被應用在如StumbleUpon Evergreen分類挑戰。

StumbleUpon是一個推薦引擎,根據使用者的興趣向其推薦相關的網頁。網頁分為兩種,一種是暫時的,在短期內有價值的網頁,另一種是長期的,一直都有效果的網頁,該挑戰的目的就是對這兩種頁面進行二元分類。

資料集連結:

這裡順便提一句,在2013年解決該難題的冠軍是François Chollet——就是兩年後編寫出Keras的那個人。

從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史

François Chollet

2016-2019:詞嵌入模型+Keras以及TensorFlow 的興起

在2015年,開始出現稠密詞表徵(dense word representations)庫,如Gensim庫(包括Word2Vec和GloVe)。其他預訓練嵌入模型也陸續出現,像Facebook的FastTest或是Paragram。

同時,擁有大量使用者、簡單可用的神經網路框架的首發版本也開始流行,即上文提到的Keras和TensorFlow。它們不再僅使詞袋模型,開始使用詞序模型捕獲句意。

然而要執行深度神經網路,還有最後一項難題亟待解決:需要高處理效能。成本越來越低的GPU解決了這個難題。Kaggle平臺在2019年3月被谷歌收購後,平臺(透過合作式的Notebooks核心)可以向使用者免費提供GPU使用。

從那時起,詞嵌入和神經網路(RNN,LSTM,GRU等等,以及基於此的改進,如attention)這些可行方案就成了解決Kaggle中自然語言處理難題的標準方法

這時候就不得不說一句:永別了,TF_IDF!

從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史

使用RNN編碼單詞序列

2018-2019:PyTorch殺出重圍

近幾個月,一個新的神經網路框架PyTorch在資料科學界越來越受關注。

在此不討論TensorFlow和PyTorch的優劣,但可以肯定的是,在Kaggle上越來越多的人開始使用PyTorch了。平臺上經常有PyTorch的線上筆記和教程釋出。

從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史

2019年:transformers和預訓練語言模型誕生

如上所述,直至目前為止,詞嵌入模型(在大量的無標註資料上進行預訓練)仍是解決自然語言處理難題的標準方法,利用此模型初始化神經網路的第一層,然後在特定任務(可能是文字分類,問答或自然語言推斷等等)的資料上訓練其他層。

但如果仔細想想,這種方式其實並非最優。事實上,每當需解決一項新問題時,你基本需要從零開始學起。透過詞嵌入進行初始化的模型需要從零開始學習如何從單詞序列中提取含義——哪怕那是語言理解的最核心部分。

transformers出現後,這是2018年發生的關鍵正規化轉變:從僅初始化模型的第一層到使用階梯式表達對整個模型進行預訓練。這也產生了新的訓練模式:將資訊從預訓練語言模型轉移到下游任務(也稱為遷移學習)。

從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史

實際上,使用預訓練語言模型的最好方式是利用Hugging Face(由法國企業家創立,目前總部在美國,和我們一樣畢業於Station F微軟AI工廠的校友)開發的transformers庫。目前它與PyTorch和TensorFlow相容。

如果你想用它更上層的封裝來完成一些諸如文字分類的簡單任務,可以看看 simple-transformer 庫。

相關連結:

simple-transformer庫的github:

下一步會更有趣

上一代預訓練語言模型已有現成的庫可供大家使用,這使得大眾都可以進行尖端自然語言處理技術的研究和實驗。

可以預見的是,這些技術在後續Kaggle自然語言處理比賽中的應用會很有趣,比如最近的TensorFlow 2.0問答挑戰,需要預測使用者關於維基百科頁面內容提出的問題的真實答案。讓我們拭目以待!

連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2663987/,如需轉載,請註明出處,否則將追究法律責任。

相關文章