跟Kaggle大神17枚金牌得主學NLP實戰
- 2019 年 10 月 6 日
- 筆記

新智元推薦
來源:圖靈TOPIA
作者:Dean Sublett
編譯:安然
整理編輯:元子
【新智元導讀】本文作者Dean Sublett是Kaggle大神Abhishek Thakur的迷弟,通過學習Abhishek的相關教程受益良多,因此,近期他在medium上撰文對相關自然語言處理的知識做了梳理總結。
本文作者Dean Sublett是Kaggle大神Abhishek Thakur的迷弟,通過學習Abhishek的相關教程受益良多,因此,近期他在medium上撰文對相關自然語言處理的知識做了梳理總結。
提起Abhishek Thakur,很多kaggler對他都非常熟悉,2017年,他在 Linkedin 發表了一篇名為Approaching (Almost) Any Machine Learning Problem的文章,介紹他建立的一個自動的機器學習框架,幾乎可以解決任何機器學習問題,這篇文章曾火遍 Kaggle。
Abhishek在Kaggle上的成就:
- Competitions Grandmaster(17枚金牌,世界排名第3)
- Kernels Expert (Kagglers排名前1%)
- Discussion Grandmaster(65枚金牌,世界排名第2)
目前,Abhishek在挪威boost公司擔任首席數據科學家的職位,這是一家專門從事會話人工智慧的軟體公司。
以下是本文作者對Abhishek的NLP實戰技術學習總結:
Abhishek的NLP方法
強烈建議在閱讀本文的同時閱讀kernel。想要更全面掌握NLP或數據科學,請確保自己寫程式碼時,能理解Abhishek的每一行程式碼。我們的任務是確定測試集中每個句子的作者。
1. 研究數據並理解問題
導入必要的Python模組和數據之後,Abhishek調用數據上的head方法,查看前五行是什麼樣的。
由於Abhishek是專家,並且這是一個NLP問題,與涉及數值數據的問題相比,探索性數據分析EDA)是比較淺顯的問題。
數據科學的新人會從更全面的EDA中收益。對數據進行深入的研究可以發現任何缺失的值,知道需要進行多少數據清理,並在問題的後期幫你做出建模決策。
Abhishek還提醒到,我們正在解決多類文本分類問題。他指出了Kaggle將用於評分提交的評估指標。
在這次競賽中,Kaggle使用多分類的對數損失函數來衡量提交模型的性能。理想情況下,多類分類模型的對數損失函數為0。
2. 預處理
接下來,Abhishek使用scikit-learn中的LabelEncoder方法為每個作者分配一個整數值。
通過使用整數值(0,1,2)對作者列中值的文本標籤進行編碼,Abhishek使其分類模型更易於理解數據。
在對作者標籤進行編碼之後,Abhishek使用來自scikit-learn的train_test_split將數據分成訓練和驗證集。
他選擇了90:10的訓練/驗證拆分(Python數據科學中最常用的拆分通常為70:30到80:20)。
因此,他打算在數據集中的90%的句子訓練模型,然後他用剩餘10%的數據評估模型的準確性。
3. 建模
在創建第一個模型前,Abhishek在數據上使用了TF-IDF(Term Frequency – reverse Document Frequency)。
TF-IDF將對文本列中的句子出現的單詞賦予權重。
當我們試圖確定一個特定的句子是由哪個作者寫的,諸如「the」這樣的詞對於任何作者的分類都不重要,因為「the」經常出現並沒有揭示很多資訊,但是在對HP編寫的句子進行分類時,像「Cthulhu」這樣的詞會非常重要。
因此,TF-IDF將在預測作者方面,能幫助我們理解哪些詞是重要的。
對數據運行TF-IDF是一種特徵提取形式。在這裡,我們需要得出一些重要的數據預測或特徵,來幫助我們找出一個特定的句子是由哪個作者寫的。
有了TF-IDF,可以對單詞的重要性進行統計測量,以幫助我們預測句子的作者。
在訓練集和驗證集上擬合TF-IDF之後,Abhishek準備了邏輯回歸模型。如果對這種分類模型不熟悉,請先閱讀本文。
在擬合邏輯回歸模型之後,Abhishek計算了邏輯回歸模型的對數損失(回想一下,他在kernel運行初始就編寫了多分類對數損失函數)。
對於邏輯回歸模型,多分類對數損失函數返回對數損失值0.626。雖然擬合TF-IDF和邏輯回歸模型為我們提供了一個良好的開端,但是我們可以改進這個對數損失得分。
4. 模型調整
我們不滿意0.626的對數損失得分,希望優化此項評估指標。從這裡開始,我們可以採取多種途徑,而這正是Abhishek所做的。
在對數據進行探索和預處理之後,我們留下了許多不同的特徵提取和模型擬合的組合。
例如,Abhishek使用字數來進行特徵提取而不是TF-IDF。
通過這種特徵提取技術,他的邏輯回歸模型的對數損失得分從0.626提高到0.528 ,這是高達0.098的改進!
總結
從這一點開始,Abhishek的內核越來越詳細,因此,我將讓他解釋其他分類模型。
這是我們討論的內容:
EDA:如果我們想要了解數據集,探索性數據分析是至關重要的,當我們開始構建模型時,EDA可以節省我們的時間。
多類別分類問題:這類問題要求我們預測觀察屬於哪個類別,每個觀察可能屬於三個或更多類別中的任何一個類別
預處理:在構建任何模型之前,必須對數據進行預處理。在這個例子中,為了我們的模型,需要使用LabelEndcoder將文本標籤轉換成整數值
特徵提取:無論何時我們有原始數據集(在我們的示例中是句子摘錄),我們都需要派生一些預測器,來幫助我們對觀察進行分類。Abhishek向我們展示了如何使用TF-IDF和字數統計。
以下是本文中提到的所有Abhishek程式碼



參考鏈接:
https://towardsdatascience.com/what-i-learned-from-abhishek-thakur-4b905ac0fd55
本文授權轉載自圖靈TOPIA(turingtopia)
