文本分類實戰--從TFIDF到深度學習CNN系列效果對比(附代碼)

2021-03-02 機器學習AI算法工程


向AI轉型的程式設計師都關注了這個號👇👇👇

機器學習AI算法工程  公眾號: datayx

這裡將主要介紹我在比賽中用到的幾個模型,從理論到代碼實現進行總結,其中涉及CHI選擇特徵詞,TFIDF計算權重,樸素貝葉斯、決策樹、SVM、XGBoost等算法,實現傳統的文本分類並取得了不錯的效果。

此外,還是用cnn卷積神經網絡實現了中文的文本分類,效果要優於上述算法。

完整源碼(包括冠軍源碼) 獲取方式:

關注微信公眾號 datayx  然後回復 文本分類 即可獲取。

數據集

數據集中主要包含下面幾個文件,可見數據集很小也很簡單,只需要使用training.csv文件進行訓練我們的文本分類模型,使用testing.csv進行預測並提交結果即可:


下面是訓練集的前兩行,每一行的第一個數字表示該行文本的類別,後面的描述就是要建模的文本。這個數據集是11個公司的描述數據,我們要根據4774條訓練數據去預測2381條數據的類別標籤。除此之外,我們還可以看到這些訓練數據存在較嚴重的類別不平衡問題。如下圖所示:


2,合晟資產是一家專注於股票、債券等二級市場投資,為合格投資者提供專業資產管理服務的企業。公司業務範圍包括資產管理、投資諮詢和投資顧問服務。公司管理的私募基金產品主要包括股票型、債券型資產管理計劃或證券投資基金,管理總資產規模80億元左右。根據中國證券投資基金業協會數據,公司管理的私募證券投資基金(顧問管理)類規模較大,公司管理規模處於50億元以上的第一梯隊。
2,公司的主營業務為向中小微企業、個體工商戶、農戶等客戶提供貸款服務,自設立以來主營業務未發生過變化。


了解完數據集,接下來我們開始進行文本分類,開始提交結果。

2, 樸素貝葉斯分類法

在這裡插句題外話,往往這種競賽大家喜歡一上來什麼都不做先提交一個結果站站場面==也就是提交一個隨機結果、均值等。因為我看到這個比賽的時候都已經快結束了,比較匆忙,所以第一次提交的也是直接用隨機數生成的,後來還自作多情的按照訓練集的類比佔比作為每個類別概率生成隨機數(結果顯示確實有提高),代碼如下所示

好,接下來說正經的,我用的第一種方法就是樸素貝葉斯,可以參見我之前的一篇博客,http://blog.csdn.net/liuchonge/article/details/52204218

介紹了使用CHI選擇特徵,TFIDF計算特徵權重,樸素貝葉斯分類的整體流程。因為之前做了這樣的嘗試,所以這裡直接套過來看看效果如何,代碼入下,這裡的代碼都是自己實現的,太醜,其實可以直接調用gensim的接口去做,以後有時間改改代碼:

這裡我們可以為每個類選出最具代表性的十個詞語看一下,從下面的特徵詞可以看出來,我們程序提取的特徵詞還是很具有類別區分度的,也可以看出第四類和第九類、第五類和第八類較為相似,可能在分類上會比較難區分:

接下來調用train.py函數,就可以得到我們的預測結果,這裡我使用了樸素貝葉斯、決策樹、SVC三種算法,但是結果顯示樸素貝葉斯效果更好,根據參數不同測試集準確率大概達到了78%~79%左右。此外還有幾個地方可以調節:

    特徵詞維度的選擇,即上面代碼feature_select_use_new_CHI()函數中每個類別選擇多少個特徵詞,取值範圍在100-500
    特徵權重的計算方式,即上面代碼document_features()函數中對每個特徵詞的權重計算方式,我們可以認為只要出現就記為1,否則為零;或者使用其在該文本中出現次數作為權重;或者使用TF-IDF作為權重,或者其他方法。。。
    分類器的選擇及參數調整,其實我們應該取出500條記錄作為測試集去驗證模型好壞以及作為參數選擇的依據,但是因為時間比較緊迫,所以我並未作這部分工作==

此外,在獲得了上面所說的類別特徵詞之後(每類取十個),我還嘗試著用簡單的類別匹配方法進行分類,思路很簡單,就是看測試集包含哪個特徵集中的單詞更多,代碼入下:

這個效果一般,準確率好像是在69%或者74%左右。

XGBoost算法–文本分類

考慮到xgboost算法在各類競賽中都有很好的效果,我也決定使用該算法嘗試一下效果如何,在網上找了一篇博客,直接套用到這裡。我們使用所有的詞作為特徵進行one-hot編碼(使用from sklearn.feature_extraction.text import CountVectorizer和 from sklearn.feature_extraction.text import TfidfTransformer),代碼如下:

 

效果不錯,測試集可以達到80%的準確度,出乎意料的好==然後我還嘗試將提取出來的特徵用到XGBoost模型上,也就是在train.py中調用xgboost模型,結果發現準確度出不多也是80%左右,沒有很大提升。其實這裡也應該做參數優化的工作,比如xgboost的max_depth、n_estimate、學習率等參數等應該進行調節,因為時間太緊我這部分工作也沒做,而是使用的默認設置==

4, 卷積神經網絡

這裡使用YOON KIM的模型框架,代碼使用WILDML的,可以參見我之前的一篇博客,為了適用於本任務,修改一下 data_helpers.py文件中的代碼,增加load_AI100_data_and_labels()函數,用於讀取訓練集和測試集。然後就可以訓練了,這裡使用隨機初始化的詞向量,讓其隨模型訓練,效果不錯,測試集精確度達到了82%以上,之後我還嘗試了一下使用char-cnn模型,但是效果不太好,根本就沒有辦法收斂,可能是參數選擇的不對或者訓練集太小了,但是到這比賽就結束了,我也沒有時間和機會去嘗試更所得模型和參數==

5,冠軍的方法
賽後,舉辦方請第一名的選手分享了方法和經驗,我發現他也是使用的卷積神經網絡,不過分詞的時候加入了詞性標註,然後使用gensim單獨訓練詞向量,然後卷積層的使用了1000個卷積核等等吧,其分享連結為:http://geek.ai100.com.cn/2017/05/18/1580
模型架構如下圖所示: 

閱讀過本文的人還看了以下:

《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼

《深度學習之pytorch》pdf+附書源碼

將機器學習模型部署為REST API

FashionAI服裝屬性標籤圖像識別Top1-5方案分享

重要開源!CNN-RNN-CTC 實現手寫漢字識別

yolo3 檢測出圖像中的不規則漢字

同樣是機器學習算法工程師,你的面試為什麼過不了?

前海徵信大數據算法:風險概率預測

【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類

VGG16遷移學習,實現醫學圖像識別分類工程項目

特徵工程(一)

特徵工程(二) :文本數據的展開、過濾和分塊

特徵工程(三):特徵縮放,從詞袋到 TF-IDF

特徵工程(四): 類別特徵

特徵工程(五): PCA 降維

特徵工程(六): 非線性特徵提取和模型堆疊

特徵工程(七):圖像特徵提取和深度學習

如何利用全新的決策樹集成級聯結構gcForest做特徵工程並打分?

Machine Learning Yearning 中文翻譯稿

螞蟻金服2018秋招-算法工程師(共四面)通過

全球AI挑戰-場景分類的比賽源碼(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(列印收藏)

python+flask搭建CNN在線識別手寫中文網站

中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程

不斷更新資源

深度學習、機器學習、數據分析、python

 搜索公眾號添加: datayx  

長按圖片,識別二維碼,點關注

相關焦點

  • tf2+cnn+中文文本分類優化系列(2)
    1 前言接著上次的tf2+cnn+中文文本分類優化系列(1),本次進行優化:使用多個卷積核進行特徵抽取。
  • Tensorflow實戰系列:手把手教你使用LSTM進行文本分類(附完整代碼)
    【導讀】專知小組計劃近期推出Tensorflow實戰系列,計劃教大家手把手實戰各項子任務。
  • CNN與RNN中文文本分類-基於TensorFlow 實現
    相比早起的底層代碼,如今的實現更加簡潔和優雅。本文是基於TensorFlow在中文數據集上的簡化實現,使用了字符級CNN和RNN對中文文本進行分類,達到了較好的效果。本文採用了清華NLP組提供的THUCNews新聞文本分類數據集的一個子集(原始的數據集大約74萬篇文檔,訓練起來需要花較長的時間)。
  • 【深度學習】textCNN論文與原理——短文本分類(基於pytorch)
    前言前文已經介紹了TextCNN的基本原理,如果還不熟悉的建議看看原理:【深度學習】textCNN論文與原理[1]及一個簡單的基於pytorch的圖像分類案例:【深度學習】卷積神經網絡-圖片分類案例(pytorch實現)[2]。
  • 深度學習如何做文本分類——TextCNN原理詳解及代碼實踐(附數據集&Github)
    原作者準備寫一個系列,每周更新一篇,現在更新了兩篇,後續還有幾篇更新,對TextCNN文本分類和自然語言處理感興趣的可以後續關注公眾號ModifyAI正文:最近一直在研究TextCNN算法,準備寫一個系列,每周更新一篇,大致包括以下內容:    今天主要講TextCNN的基本原理和優劣勢,包括網絡結構、如何更新參數以及應用場景等。
  • 基於Text-CNN模型的中文文本分類實戰
    文本分類作為一種有監督學習的任務,毫無疑問的需要一個可用於有監督學習的語料集(X,Y)。本文中使用以下標記,X為特徵,文本分類中即為文本序列,Y是標籤,即文本的分類名稱。機器學習與傳統編程技術的明顯區別就是:機器學習是以數據為驅動的,傳統的編程中,我們核心任務是人工設計分類規則(指令代碼),然後實現輸入特徵X獲得分類標籤Y。
  • 深度學習目標檢測系列:faster RCNN實現|附python源碼
    最終預測效果應如下所示:選擇該數據集的原因是我們血液中RBC、WBC和血小板的密度提供了大量關於免疫系統和血紅蛋白的信息,這些信息可以幫助我們初步地識別一個人是否健康,如果在其血液中發現了任何差異,我們就可以迅速採取行動來進行下一步的診斷。
  • 基於CNN的中文文本分類算法(可應用於垃圾文本過濾、情感分析等場景)
    傳統機器學習的做法是先進行特徵工程,構建出特徵向量後,再將特徵向量輸入各種分類模型(貝葉斯、SVM、神經網絡等)進行分類。隨著深度學習的發展以及RNN、CNN的陸續出現,特徵向量的構建將會由網絡自動完成,因此我們只要將文本的向量表示輸入到網絡中就能夠完成自動完成特徵的構建與分類過程。就分類任務而言,CNN比RNN更為合適。
  • 文本分類的14種算法
    2)深度學習是運用了多層的人工神經網絡(ANN)的機器學習方法。3)集成學習是指通過將多個弱分類器的分類結果進行整合,獲得比單個弱分類器更好效果的機器學習方法。集成學習和深度學習屬於機器學習。2.集成學習的bagging和boosting思想:bagging中的各個弱分類器取值是相互獨立的、無關的,常使用有放回抽樣實現。
  • NLP實戰之基於TFIDF的文本相似度計算
    TFIDF算法介紹TF-IDF(Term Frequency–InverseDocument Frequency)是一種用於資訊檢索與文本挖掘的常用加權技術。TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。
  • 深度學習用於自然語言處理中的文本分類:工程實踐、三級文本、整體認識
    目錄一、深度學習用於文本分類自然語言處理等(13638字)11文本分類實戰--從TFIDF到深度學習(附代碼)[1](2714字)12文本分類實戰--分詞時加詞性標註,單獨訓練詞向量(附代碼)[2](1705字)83深度學習在三級文本分類中的應用[3](589字)9
  • 一文讀懂深度學習文本分類方法
    最近有很多小夥伴想了解深度學習在文本分類的發展,因此,筆者整理最近幾年比較經典的深度文本分類方法,希望幫助小夥伴們了解深度學習在文本分類中的應用。筆者整理了近些年的相關深度文本分類論文,關注「AI算法之心」,後臺回復「文本分類論文」即可下載。
  • 基於TensorFlow的深度學習實戰
    圖像、視頻、文本、音頻等領域的問題,都可以通過深度學習解決。TensorFlow可以用於實現前述所有應用。TensorFlow很快成為GitHub上用戶最多的深度學習框架。這個庫之所以如此流行,是因為開發人員可以輕鬆的用其來搭建、測試和部署機器學習應用。上面是一個TensorFlow的示意圖。
  • 帶你用深度學習虛擬機進行文本遷移學習(附代碼)
    動機現代機器學習模型,尤其是深度神經網絡,通常可以從遷移學習中顯著受益。在計算機視覺中,在大型圖像分類數據集(如ImageNet)上訓練的深卷積神經網絡已被證明對初始化其他視覺任務(如物體檢測)模型非常有用(Zeiler和Fergus,2014)。但是,我們如何文本上應用遷移學習技術?
  • MIT 深度學習基礎教程:七個基本框架TensorFlow代碼實戰
    【導讀】麻省理工學院發布一系列深度學習視頻課和代碼實戰,今天給大家介紹的是研究科學家Lex Fridman整理的常用的深度學習七個基本框架實戰,
  • 用深度學習(CNN RNN Attention)解決大規模文本分類問題 - 綜述和...
    近來在同時做一個應用深度學習解決淘寶商品的類目預測問題的項目,恰好碩士畢業時論文題目便是文本分類問題,趁此機會總結下文本分類領域特別是應用深度學習解決文本分類的相關的思路、做法和部分實踐的經驗。業務問題描述:淘寶商品的一個典型的例子見下圖,圖中商品的標題是「夏裝雪紡條紋短袖t恤女春半袖衣服夏天中長款大碼胖mm顯瘦上衣夏」。
  • CVPR 2020文本圖像檢測與識別論文/代碼
    python就業班學習視頻,從入門到實戰項目2019最新《PyTorch自然語言處理》英、中文版PDF+源碼《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼《深度學習之pytorch》pdf+附書源碼
  • 乾貨| 深度學習在文本分類中的應用
    2 傳統機器學習方法傳統的機器學習方法主要利用自然語言處理中的n-gram概念對文本進行特徵提取,並且使用TFIDF對n-gram特徵權重進行調整,然後將提取到的文本特徵輸入到Logistics回歸、SVM等分類器中進行訓練。
  • 【NLP傻瓜式教程】手把手帶你RNN文本分類(附代碼)
    文章來源於NewBeeNLP,作者kaiyuan寫在前面這是NLP傻瓜式教程的第二篇----基於RNN的文本分類實現(Text RNN)參考的的論文是來自2016年復旦大學IJCAI上的發表的關於循環神經網絡在多任務文本分類上的應用:Recurrent