第十届中国大学生服务外包创新创业大赛
基于TextCNN的電商產品短文本分類
分類一直是數據科學界研究的重點問題,它被廣泛地應用到生活的各個方面。伴隨著電商行業的快速發展。商品的數量越來越多,需要對商品制定分類,便于找尋自己所需的商品。針對現在每天都會產生的大量商品名稱,如果人工去為商品分類,不僅工作量巨大,速度慢,而且也會出現分類錯誤的情況。因此本項目旨在尋找一種分類方法,能夠實現商品的快速準確的分類,降低人工成本以及出錯率。
Github項目完整內容鏈接:https://github.com/Cynicicm/Service-outsourcing
項目宣傳視頻鏈接:https://pan.baidu.com/s/1jFQ3mY7QW1waBWzvP2JOQg?提取碼:n0fp
項目創意
本項目采用基于CNN的文本分類模型實現自動分類。文本分類模型大體上分為基于傳統機器學習和基于深度學習的文本分類模型,后者與前者最主要的區別是隨著數據規模的增加其性能也不斷增長。本項目的數據集在萬級以上,因此基于深度學習的文本分類模型能夠更加完美地解釋它。
隨著現在大數據時代的到來,基于深度學習模型的文本分類模型已經成為了主流,其中CNN模型在文本分類任務中是兼具效率與質量的理想模型。因此基于CNN的文本分類模型具有良好的商業價值和社會應用價值。
項目特色
- 采用針對大量數據集的深度學習框架從而可以自動地從已構建的數據集上歸納出一套分類規則;
- 采用結巴中文分詞技術能夠將句子最精確地切開,適合文本分析;
- 采用One-Hot技術使文本數值化能夠有效降低異常值對模型的影響,增強模型穩定性;
- 采用目前業界普遍認為準確度最高的模型TextCNN進行文本分類,兼具效率與質量;
- 采用MVC架構實現用戶與系統之間的交互,支持多種查詢數據的方式,可視化效果好。
數據集
數據集請自行下載:?https://pan.baidu.com/s/1Fw9Zb9gV3Y6GaloOSne6hQ?提取碼: r1p0
訓練結果模型地址:https://pan.baidu.com/s/1hZSDZmBfbA04E_NKfm0taA?提取碼:wznj
通過比對模型的訓練的結果,最終采取訓練集:驗證集為?19:1?.
數據集劃分如下:
- 訓練集: 475,000
- 驗證集: 25,000
- 測試集: 4,500,000
環境
- python 3
- jieba(中文分詞) 0.39
- pandas 0.24.1
- numpy 1.16.2
- tensorflow 1.13.1
數據預處理
我們希望能夠得知商品信息,自動對其進行分類,比如針對“騰訊QQ幣148元148QQ幣148個直充148Q幣148個Q幣148個QQB★自動充值”這樣一個商品信息,預期得到“本地生活--游戲充值--QQ充值”,那么首先第一步就是要對原始數據進行預處理,在本項目中主要處理以下問題:
-
除去非文本部分
-
處理中文編碼
-
處理某些行堆積幾百條數據
-
結巴中文分詞處理
-
one-hot表示數據與標簽
CNN文本分類模型
CNN的大致結構:
CNN配置參數
CNN可配置的參數如下所示,在train_cnn.py中。
class TCNNConfig(object):"""CNN配置參數"""# 模型參數embedding_dim = 128 # 詞向量維度seq_length = 40 # 序列長度num_classes = 1199 # 類別數num_filters = 128 # 卷積核數目filter_sizes = 3,4,5 # 卷積核尺寸vocab_size = 160000 # 詞匯表大小fc_hidden_size = 1024 # 全連接層神經元dropout_keep_prob = 0.5 # 防止過擬合dropout # 保留比例learning_rate = 0.001 # 學習率batch_size = 256 # 每批訓練大小num_epochs = 40 # 總迭代輪次evaluate_every = 800 # 每多少步進行一次驗證參數變化過程
| num_epochs | 35 | 35 | 100 | 40 |
| batch_size | 64 | 512 | 256 | 256 |
| Learn_rate | 0.001 | 0.01 | 0.001 | 0.001 |
| 訓練集驗證集比例 | 19:1 | 19:1 | 4:1 | 19:1 |
| Recall | 0.628637 | 0.824505 | 0.843764 | 0.857021 |
| accuracy | 0.624419 | 0.823446 | 0.83916 | 0.857925 |
| F | 0.625825 | 0.823799 | 0.840695 | 0.853659 |
根據上表,在這里我們展示第四次效果最佳情況下的一些結果變化過程. 再此之前我們先解釋一下一些結果值的概念。
現在假設我們的分類目標只有兩類,計為正例(positive)和負例(negtive)分別是:
1)True positives(TP): 被正確地劃分為正例的個數,即實際為正例且被分類器劃分為正例的實例數(樣本數);
2)False positives(FP): 被錯誤地劃分為正例的個數,即實際為負例但被分類器劃分為正例的實例數;
3)False negatives(FN):被錯誤地劃分為負例的個數,即實際為正例但被分類器劃分為負例的實例數;
4)True negatives(TN): 被正確地劃分為負例的個數,即實際為負例且被分類器劃分為負例的實例數?! ?/p>
結語
整個模型讀取450萬待預測數據并處理的效率為?128,571個/分鐘,打標簽的效率為?97,825個/分鐘、準確率為?85.792%,為訓練集打標簽的準確率為?91.593%。實際上如果原始數據集更加規范準確、每類商品信息的數據集更大,我們模型的準確率會更高。
文件說明
data_helper.py 包含數據預處理函數,以及對文件的操作函數都在里面predict_cnn.py 提供模型的預測textCNN.py CNN模型train_cnn.py 訓練模型運行步驟:
每次更改訓練集需要重新運行步驟1,2再進行預測
1.運行data_helper.py 構造詞匯表,獲得數據分類2.運行train_cnn.py 進行模型的訓練(在logs文件可以找到相關日志文件查看記錄)3.運行predict_cnn.py進行預測總結
以上是生活随笔為你收集整理的第十届中国大学生服务外包创新创业大赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工厂设备管理中经常会遇到哪些问题?
- 下一篇: QuartusII 13.0自带的Mod