基於CNN的中文文本分類算法(可應用於垃圾文本過濾、情感分析等場景)

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

                                                                                                                              


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

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

文本分類任務是一個經久不衰的課題,其應用包括垃圾郵件檢測、情感分析等。

傳統機器學習的做法是先進行特徵工程,構建出特徵向量後,再將特徵向量輸入各種分類模型(貝葉斯、SVM、神經網絡等)進行分類。

隨著深度學習的發展以及RNN、CNN的陸續出現,特徵向量的構建將會由網絡自動完成,因此我們只要將文本的向量表示輸入到網絡中就能夠完成自動完成特徵的構建與分類過程。

就分類任務而言,CNN比RNN更為合適。CNN目前在圖像處理方向應用最為廣泛,在文本處理上也有一些的應用。本文將參考Denny Britz的WILDML教程

IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW

http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/

來設計一個簡單的CNN,並將其應用於中文垃圾郵件檢測任務。

1.1神經網絡基礎知識

如果你對深度學習或RNN、CNN等神經網絡並不太熟悉,請先移步至這裡

http://www.wildml.com/

尋找相關文章進行精讀,這個博主寫的每一篇文章都很好,由淺至深,非常適合入門。

1.2如何將CNN運用到文本處理

參考understanding-convolutional-neural-networks-for-nlp

http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

1.3CNN網絡結構和實現方法(必讀)

此博文中的CNN網絡結構和實現方法絕大部分是參考了 IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW 這篇文章的,CNN的結構和實現細節在這篇文章均有詳述。

2 訓練數據
2.1 中文垃圾郵件數據集

說明:對TREC06C進行了簡單的清洗得到,以utf-8格式存儲

完整代碼  數據集下載地址:


1、轉發本文至朋友圈

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

2.2垃圾郵件
spam_5000.utf8



3 預處理
3.1輸入

    上述兩個文件 ( spam_5000.utf8 ham_5000.utf8)
    embedding_dim (word embedding的維度, 即用多少維度的向量來表示一個單詞)

3.2 輸出:

    max_document_length (最長的郵件所包含的單詞個數)
    x (所有郵件的向量表示, 維度為[所有郵件個數,max_doument_length, embedding_dim])
    y (所有郵件對應的標籤,[0, 1]表示正常郵件,[1, 0]表示垃圾郵件,y的維度為[所有郵件個數, 2])

3.3 主要流程:

    3.3.1 過濾字符
    為了分詞的方便,示例程序中去除了所有的非中文字符,你也可以選擇保留標點符號,英文字符,數字等其他字符,但要在分詞時進行一定的特殊處理

    3.3.2 分詞
    為了訓練Word2Vec 模型,需要先對訓練文本進行分詞。這裡為了方便起見,直接對每個中文字符進行分隔,即最後訓練處的word2vec 的向量是對字的embedding, 效果也比較不錯

    3.3.3 對齊
    為了加快網絡的訓練過程,需要進行批量計算,因此輸入的訓練樣本需要進行對齊(padding)操作,使得其維度一致。這裡的對齊就是把所有的郵件長度增加到max_document_length (最長的郵件所包含的單詞個數),空白的位置用一個指定單詞進行填充(示例程序中用的填充單詞為」PADDING」)

    3.3.4 訓練word2vec
    在對文本進行分詞和對齊後,就可以訓練處word2vec模型了,具體的訓練過程不在此闡述,程序可以參考項目文件中的word2vec_helpers.py。

4 定義CNN網絡與訓練步驟
4.1 網絡結構

此博文中的CNN網絡結構和實現方法絕大部分是參考了 IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW 這篇文章的,CNN的結構和實現細節在這篇文章均有詳述。重複的地方不再說明,主要說說不同的地方。
那篇文章中實現的CNN是用於英文文本二分類的,並且在卷積之前,有一層embedding層,用於得到文本的向量表示。
而本博文中實現的CNN在上面的基礎上略有修改,用於支持中文文本的分類。CNN的結構的唯一變化是去掉了其中的embedding層,改為直接將word2vec預訓練出的embedding向量輸入到網絡中進行分類。

網絡結構圖如下圖所示:
 

4.2 訓練步驟

在預處理階段得到了x和y, 接下來將x 和 y 按照一定比例分成訓練集train_x, train_y和測試集dev_x, dev_y。
接著按照batch_size分批將train_x輸入至網絡TextCNN中進行訓練,經過三個卷積層的卷積和max-pool之後,合併得到一個向量,這個向量代表了各個卷積層學到的關於訓練數據的某些特徵,最後將這個向量輸入到一個單層的神經網絡並用softmax分類,得到最終的分類結果,計算損失(交叉熵)並開始後向傳播,執行批量梯度下降來更新網絡參數。

5 結果
準確率:  

誤差:

因為數據集並沒有標準的訓練集和測試集,本文只是按照0.1的比例進行了簡單的分割,且並沒有對一些重複的文檔進行篩選,所以準確率能夠達到99%左右。如果用比較標準的數據集,並加入交叉驗證等方法,相信準確率會降低一些,但相信準確率仍能夠超過絕大部分用傳統機器學習的方法寫出的分類器。

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

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

Machine Learning Yearning 中文翻譯稿

深度學習500問,輕鬆掌握從基礎到進階(附答案)

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

CNN-RNN中文文本分類,基於TensorFlow 實現

不斷更新資源

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

 搜索公眾號添加: datayx  

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


深度學習500問

Batch_Size 值如何選擇?

假如每次只訓練一個樣本,即 Batch_Size = 1。線性神經元在均方誤差代價函數的錯誤面 是一個拋物面,橫截面是橢圓。對於多層神經元、非線性網絡,在局部依然近似是拋物面。此 時,每次修正方向以各自樣本的梯度方向修正,橫衝直撞各自為政,難以達到收斂。

既然 Batch_Size 為全數據集或者 Batch_Size = 1 都有各自缺點,可不可以選擇一個適中的 Batch_Size 值呢?

此時,可採用批梯度下降法(Mini-batches Learning)。因為如果數據集足夠充分,那麼用 一半(甚至少得多)的數據訓練算出來的梯度與用全部數據訓練出來的梯度是幾乎一樣的。

相關焦點

  • 基於關鍵詞的文本內容過濾算法
    三、網頁文本過濾關鍵技術的研究 由於中文和英文的區別,中文文本與英文文本的表示方法有所不同。英文文本中詞與詞 中間都由空格或標點符號隔開,因而詞與詞之間的界限很明顯,可以很容易的獲取關鍵詞,而中文文本中詞與詞則無明顯的界限,這就影響了關鍵詞的獲取和匹配, 因此,本文將對中文信息過濾過程中的關鍵技術進行重點討論。
  • 基於關鍵詞的文本內容過濾算法的研究與應用
    基於關鍵字的文本內容過濾算法迎合了人民日報的新進展,立足於人民網為用戶個性化推送新聞、廣告等信息,可為用戶提供具有指導性的建議,也能夠為第十九次全國人民代表大會宣傳黨的路線方針、推進社會主義新聞理論創新、弘揚時代精神,為祖國歷史和民族文化作出貢獻。
  • CNN與RNN中文文本分類-基於TensorFlow 實現
    摘要:本文是基於TensorFlow在中文數據集上的簡化實現,使用了字符級CNN和RNN對中文文本進行分類,達到了較好的效果。
  • 華為雲NLP算法專家:全面解讀文本情感分析任務
    機器之心專欄 作者:李明磊 作為 NLP 領域重要的研究方向之一,情感分析在實際業務場景中存在巨大的應用價值。在此文中,華為雲 NLP 算法專家李明磊為我們介紹了情感分析的概念以及華為雲在情感分析方面的實踐和進展。
  • 基於Text-CNN模型的中文文本分類實戰
    本文介紹NLP中文本分類任務中核心流程進行了系統的介紹,文末給出一個基於Text-CNN模型在搜狗新聞數據集上二分類的Demo。文本分類是自然語言處理領域最活躍的研究方向之一,從樣本數據的分類標籤是否互斥上來說,可以分為文本多分類與文本多標籤分類。
  • tf2+cnn+中文文本分類優化系列(2)
    1 前言接著上次的tf2+cnn+中文文本分類優化系列(1),本次進行優化:使用多個卷積核進行特徵抽取。
  • 文本情感分析:讓機器讀懂人類情感
    Holder是觀點的發出者;Target是該觀點評價的對象(如實體或實體的屬性,或者話題);Polarity是所表達的情感類別,由於任務不同,情感類別體系會不同,通常包括褒貶、褒貶中、喜怒哀樂悲恐驚、情感打分(如1-5分)等分類體系。文本中的情感又分為顯式情感及隱式情感,顯式情感是指包含明顯的情感詞語(例如高興、漂亮)情感文本,隱式情感是指不包含情感詞語的情感文本,例如「這個桌子上面一層灰」。
  • 文本挖掘:避孕藥主題情感分析
    這裡有個小插曲:上次分享的是主題分析,筆者最近又重新梳理了下LDA,發現tm包中文分詞形成詞頻矩陣很不理想,這會導致LDA無法應用,因此,後續筆者會自己寫個腳本將詞頻矩陣實現,這樣會方便LDA,會方便聚類分析,以及預測分析。言回正傳,情感分析就是表達發言人對一個主題的看法,有好有壞,或者中立。
  • 文本分類的14種算法
    公眾號:datayx之前介紹了14種文本分類中的常用算法,包括8種傳統算法:k臨近、決策樹、多層感知器、樸素貝葉斯(包括伯努利貝葉斯、高斯貝葉斯和多項式貝葉斯)、邏輯回歸和支持向量機;4種集成學習算法:隨機森林、AdaBoost、lightGBM和xgBoost;2種深度學習算法:前饋神經網絡和LSTM。
  • 基礎級tf2.0+cnn 中文文本分類實踐練習
    1 前言今天講述基礎級別的中文文本分類實踐練習。數據集是復旦大學開源的文本數據集,label種類為20,該數據集有點久遠,感興趣可網上搜到。
  • 機器學習自動文本分類
    文本數據的意圖、情緒和情感分析是文本分類的極其重要的部分。這些用例在機器智能愛好者中引起了極大的轟動。我們為每個類別的分析單獨開發了分類器,因為研究每種分析本身就是一個巨大的話題。文本分類器可以處理各種文本數據集。分類器可以使用帶標記的數據來訓練,也可以對原始的非結構化文本進行操作。這兩種分類器都有很多應用。定義完分類類別時,有監督的文本分類也就完成了。
  • 中文文本分類:你需要了解的10項關鍵內容
    在人工智慧浪潮席捲全球的今天,文本分類技術已經被廣泛地應用在文本審核、廣告過濾、情感分析和反黃識別等NLP領域。本文從達觀數據中文文本分類的實踐出發,總結了從數據預處理到特徵工程、算法選擇再到後處理和評價指標等流程中的10項關鍵內容,希望能對讀者有所幫助。
  • 文本分類實戰--從TFIDF到深度學習CNN系列效果對比(附代碼)
    公眾號: datayx這裡將主要介紹我在比賽中用到的幾個模型,從理論到代碼實現進行總結,其中涉及CHI選擇特徵詞,TFIDF計算權重,樸素貝葉斯、決策樹、SVM、XGBoost等算法,實現傳統的文本分類並取得了不錯的效果。
  • 自動化文本情感分析的基本概念和研究思路
    自動化文本情感分析算法模型現已開放給個人用戶使用啦!中文、英文均可搞定,在界面首頁點擊領取免費的算法額度!本期小編將帶大家一起了解下關於文本數據自動化情感分析的基本知識!隨著主觀性文本的增多,在面對複雜的自然語言時,機器是否能夠做出準確的自我判斷?
  • python的中文文本挖掘庫snownlp進行購物評論文本情感分析實例
    ,用R語言做的,發現R語言對文本處理特別不友好,沒有很多強大的庫,特別是針對中文文本的,加上那時候還沒有學機器學習算法。現在研一,機器學習算法學完以後,又想起來要繼續學習文本挖掘了。所以前半個月開始了用Python進行文本挖掘的學習,很多人都推薦我從《python自然語言處理》這本書入門,學習了半個月以後,可能本科畢業設計的時候有些基礎了,再看這個感覺沒太多進步,並且這裡通篇將nltk庫進行英文文本挖掘的,英文文本挖掘跟中文是有很大差別的,或者說學完英文文本挖掘,再做中文的,也是完全懵逼的。
  • 中文情感分析之TextCNN
    最近接了個業務需求,需要對論壇發帖進行情感分析,以便於對惡意發帖的行為進行審核治理。在此對情感分析方法進行一個總結,並重點介紹下文本分類基準模型TextCNN在中文情感分析中的實踐應用。綜述情感分析(Sentiment Analysis)是自然語言處理領域的一個重要的研究方向。
  • 專攻中文文本情感解析,語憶科技想幫企業讀懂消費者「心聲」
    當下市面上的技術僅能對文本進行情感的正負極判斷(積極/消極),而基於公司自主研發的深度學習算法,Kismet可以在很短時間內分析出其中的細節情緒,並挖掘到引起情緒變化的關鍵詞。比如說,告訴你蘋果8的產品評論中焦慮情緒居多,引起焦慮的關鍵詞是「價格」。
  • NLP: 基於文本語義的智能問答系統
    經典應用場景包括:智能語音交互、在線客服、知識獲取、情感類聊天等。常見的分類有:生成型、檢索型問答系統;單輪問答、多輪問答系統;面向開放領域、特定領域的問答系統。本文涉及的主要是在檢索型、面向特定領域的問答系統**——智能客服機器人。
  • 文本分類經典論文:fasttext,textcnn解讀
    文本分類是自然語言處理領域一個非常經典的任務,一般文本分類分為三種,基於規則的文本分類,基於機器學習的文本分類和基於深度學習的文本分類。本文我們重點關注基於深度學習的文本分類,並為大家介紹文本分類中非常經典的fasttext和textcnn。
  • 樸素貝葉斯分類器詳解及中文文本輿情分析(附代碼實踐)
    本文主要講述樸素貝葉斯分類算法並實現中文數據集的輿情分析案例,希望這篇文章對大家有所幫助,提供些思路。