從詞袋到transfomer,梳理十年Kaggle競賽,看自然語言處理的變遷史
大資料文摘出品
來源:medium
編譯:LYLM、胡笳
自2010年創辦以來,Kaggle作為著名的資料科學競賽平臺,一直都是機器學習領域發展趨勢的風向標,許多重大突破都在該平臺發生,數以千計的從業人員參與其中,每天在Kaggle論壇上都有著無數的討論。
各種型別的挑戰賽(計算機視覺、語音、表格處理等等)都會在這個線上平臺釋出,而自然語言處理(NLP)問題最近亦備受關注。誠然,過去幾個月裡,我們已經見證這一領域有好幾項振奮人心的創新,而目前流行的的則是transformers和預訓練語言模型。
Medium上一位從事NLP的博主就透過Kaggle競賽梳理了一遍自然語言處理的發展歷史,看看NLP這些年都是怎樣一路走來的。
2016以前:詞袋(bag of words)模型和TF-IDF演算法盛行
在2016年之前,解決(或者說贏得)Kaggle自然語言處理挑戰的標準方法是採用詞袋模型(即計算文章中各個單詞出現的次數)來建立特徵輸入機器學習分類器,典型的有樸素貝葉斯演算法。稍微完善些的則有TF-IDF演算法。
這種方法被應用在如StumbleUpon Evergreen分類挑戰。
StumbleUpon是一個推薦引擎,根據使用者的興趣向其推薦相關的網頁。網頁分為兩種,一種是暫時的,在短期內有價值的網頁,另一種是長期的,一直都有效果的網頁,該挑戰的目的就是對這兩種頁面進行二元分類。
資料集連結:
這裡順便提一句,在2013年解決該難題的冠軍是François Chollet——就是兩年後編寫出Keras的那個人。
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!
2018-2019:PyTorch殺出重圍
近幾個月,一個新的神經網路框架PyTorch在資料科學界越來越受關注。
在此不討論TensorFlow和PyTorch的優劣,但可以肯定的是,在Kaggle上越來越多的人開始使用PyTorch了。平臺上經常有PyTorch的線上筆記和教程釋出。
2019年:transformers和預訓練語言模型誕生
如上所述,直至目前為止,詞嵌入模型(在大量的無標註資料上進行預訓練)仍是解決自然語言處理難題的標準方法,利用此模型初始化神經網路的第一層,然後在特定任務(可能是文字分類,問答或自然語言推斷等等)的資料上訓練其他層。
但如果仔細想想,這種方式其實並非最優。事實上,每當需解決一項新問題時,你基本需要從零開始學起。透過詞嵌入進行初始化的模型需要從零開始學習如何從單詞序列中提取含義——哪怕那是語言理解的最核心部分。
transformers出現後,這是2018年發生的關鍵正規化轉變:從僅初始化模型的第一層到使用階梯式表達對整個模型進行預訓練。這也產生了新的訓練模式:將資訊從預訓練語言模型轉移到下游任務(也稱為遷移學習)。
實際上,使用預訓練語言模型的最好方式是利用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自然語言處理:分詞方法自然語言處理分詞
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- 自然語言處理NLP(6)——詞法分析自然語言處理詞法分析
- Pyhanlp自然語言處理中的新詞識別HanLP自然語言處理
- 自然語言處理中的遷移學習(下)自然語言處理遷移學習
- 自然語言處理中的遷移學習(上)自然語言處理遷移學習
- 從Word Embedding到Bert模型——自然語言處理預訓練技術發展史模型自然語言處理
- Hanlp自然語言處理中的詞典格式說明HanLP自然語言處理
- NLP自然語言處理中的hanlp分詞例項自然語言處理HanLP分詞
- 自然語言處理中的分詞問題總結自然語言處理分詞
- 入門自然語言處理必看:圖解詞向量自然語言處理圖解
- NPL---自然語言處理單詞界定問題自然語言處理
- 從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史模型自然語言處理
- 自然語言處理(NLP)自然語言處理
- 詞!自然語言處理之詞全解和Python實戰!自然語言處理Python
- 【自然語言處理篇】--聊天機器人從初始到應用自然語言處理機器人
- 自然語言處理歷史史詩:NLP的正規化演變與Python全實現自然語言處理Python
- 史丹佛自然語言處理習題課1——緒論自然語言處理
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- 掌握BERT:從初學者到高階的自然語言處理(NLP)全面指南自然語言處理
- 2023nlp影片教程大全 NLP自然語言處理教程 自然語言處理NLP從入門到專案實戰自然語言處理
- 自然語言處理(NLP)概述自然語言處理
- 自然語言處理NLP(四)自然語言處理
- Python自然語言處理Python自然語言處理
- Python 自然語言處理(基於jieba分詞和NLTK)Python自然語言處理Jieba分詞
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- NLP 與 NLU:從語言理解到語言處理
- 處理文字資料(上):詞袋
- Python自然語言處理 1 語言處理與PythonPython自然語言處理
- 自然語言處理的最佳實踐自然語言處理
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- [譯] 自然語言處理真是有趣!自然語言處理
- 自然語言處理與分析(one)自然語言處理
- Python自然語言處理實戰(3):中文分詞技術Python自然語言處理中文分詞
- 05.序列模型 W2.自然語言處理與詞嵌入模型自然語言處理
- 中國語文(自然語言處理)作業自然語言處理
- 自然語言處理(NLP)的主要範疇自然語言處理
- Python自然語言處理 3 處理原始文字Python自然語言處理