基於tensorflow的文本分類總結(數據集是復旦中文語料)


代碼已上傳到github:https://github.com/taishan1994/tensorflow-text-classification

往期精彩:

利用TfidfVectorizer進行中文文本分類(數據集是復旦中文語料) 

利用RNN進行中文文本分類(數據集是復旦中文語料)   

利用CNN進行中文文本分類(數據集是復旦中文語料)  

利用transformer進行中文文本分類(數據集是復旦中文語料) 

 

基於tensorflow的中文文本分類

數據集:復旦中文語料,包含20類
數據集下載地址:https://www.kesci.com/mw/dataset/5d3a9c86cf76a600360edd04/content
數據集下載好之后將其放置在data文件夾下;
修改globalConfig.py中的全局路徑為自己項目的路徑;
處理后的數據和已訓練好保存的模型,在這里可以下載:
鏈接:https://pan.baidu.com/s/1ZHzO5e__-WFYAYFIt2Kmsg 提取碼:vvzy 

目錄結構:
|--checkpint:保存模型目錄
|--|--transformer:transformer模型保存位置;
|--config:配置文件;
|--|--fudanConfig.py:包含訓練配置、模型配置、數據集配置;
|--|--globaConfig.py:全局配置文件,主要是全局路徑、全局參數等;
|-- data:數據保存位置;
|--|--|--Fudan:復旦數據;
|--|--|--train:訓練數據;
|--|--|--answer:測試數據;
|--dataset:創建數據集,對數據進行處理的一些操作;
|--images:結果可視化圖片保存位置;
|--models:模型保存文件;
|--process:對原始數據進行處理后的數據;
|--tensorboard:tensorboard可視化文件保存位置,暫時未用到;
|--utils:輔助函數保存位置,包括word2vec訓練詞向量、評價指標計算、結果可視化等;
|--main.py:主運行文件,選擇模型、訓練、測試和預測;

初始配置:

  • 詞嵌入維度:200
  • 學習率:0.001
  • epoch:50
  • 詞匯表大小:6000+2(加2是PAD和UNK)
  • 文本最大長度:600
  • 每多少個step進行驗證:100
  • 每多少個step進行存儲模型:100

環境:

  • python=>=3.6
  • tensorflow==1.15.0

當前支持的模型:

  • bilstm
  • bilstm+attention
  • textcnn
  • rcnn
  • transformer

說明

數據的輸入格式:
(1)分詞后去除掉停止詞,再對詞語進行詞頻統計,取頻數最高的前6000個詞語作為詞匯表;
(2)像詞匯表中加入PAD和UNK,實際上的詞匯表的詞語總數為6000+2=6002;
(3)當句子長度大於指定的最大長度,進行裁剪,小於最大長度,在句子前面用PAD進行填充;
(4)如果句子中的詞語在詞匯表中沒有出現則用UNK進行代替;
(5)輸入到網絡中的句子實際上是進行分詞后的詞語映射的id,比如:
(6)輸入的標簽是要經過onehot編碼的;

"""
"我喜歡上海",
"我喜歡打羽毛球",
"""
詞匯表:['我','喜歡','打','上海','羽毛球'],對應映射:[2,3,4,5,6],0對應PAD,1對應UNK 
得到:
[
[0,2,3,5],
[2,3,4,6],
]

python main.py --model transformer --saver_dir checkpoint/transformer --save_png images/transformer --train --test --predict 

參數說明:

  • --model:選擇模型,可選[transformer、bilstm、bilstmattn、textcnn、rcnn]
  • --saver_dir:模型保存位置,一般是checkpoint+模型名稱
  • --save_png:結果可視化保存位置,一般是images+模型名稱
  • --train:是否進行訓練,默認為False
  • --test:是否進行測試,默認為False
  • --predict:是否進行預測,默認為False

結果

transformer為例:
部分訓練結果:
2020-11-01T10:43:16.955322, step: 1300, loss: 5.089711, acc: 0.8546,precision: 0.3990, recall: 0.4061, f_beta: 0.3977 * Epoch: 83 train: step: 1320, loss: 0.023474, acc: 0.9922, recall: 0.8444, precision: 0.8474, f_beta: 0.8457 Epoch: 84 train: step: 1340, loss: 0.000000, acc: 1.0000, recall: 0.7500, precision: 0.7500, f_beta: 0.7500 Epoch: 85 train: step: 1360, loss: 0.000000, acc: 1.0000, recall: 0.5500, precision: 0.5500, f_beta: 0.5500 Epoch: 86 Epoch: 87 train: step: 1380, loss: 0.000000, acc: 1.0000, recall: 0.7500, precision: 0.7500, f_beta: 0.7500 Epoch: 88 train: step: 1400, loss: 0.000000, acc: 1.0000, recall: 0.7000, precision: 0.7000, f_beta: 0.7000 開始驗證。。。 2020-11-01T10:44:07.347359, step: 1400, loss: 5.111372, acc: 0.8506,precision: 0.4032, recall: 0.4083, f_beta: 0.3982 * Epoch: 89 train: step: 1420, loss: 0.000000, acc: 1.0000, recall: 0.5500, precision: 0.5500, f_beta: 0.5500 Epoch: 90 train: step: 1440, loss: 0.000000, acc: 1.0000, recall: 0.5500, precision: 0.5500, f_beta: 0.5500 Epoch: 91 Epoch: 92 train: step: 1460, loss: 0.000000, acc: 1.0000, recall: 0.7000, precision: 0.7000, f_beta: 0.7000 Epoch: 93 train: step: 1480, loss: 0.000000, acc: 1.0000, recall: 0.7500, precision: 0.7500, f_beta: 0.7500 Epoch: 94 train: step: 1500, loss: 0.000000, acc: 1.0000, recall: 0.6000, precision: 0.6000, f_beta: 0.6000 開始驗證。。。 2020-11-01T10:44:57.645305, step: 1500, loss: 5.206666, acc: 0.8521,precision: 0.4003, recall: 0.4040, f_beta: 0.3957 Epoch: 95 train: step: 1520, loss: 0.000000, acc: 1.0000, recall: 0.6000, precision: 0.6000, f_beta: 0.6000 Epoch: 96 Epoch: 97 train: step: 1540, loss: 0.000000, acc: 1.0000, recall: 0.7500, precision: 0.7500, f_beta: 0.7500 Epoch: 98 train: step: 1560, loss: 0.000000, acc: 1.0000, recall: 0.7000, precision: 0.7000, f_beta: 0.7000 Epoch: 99 train: step: 1580, loss: 0.000000, acc: 1.0000, recall: 0.8000, precision: 0.8000, f_beta: 0.8000 Epoch: 100 train: step: 1600, loss: 0.000000, acc: 1.0000, recall: 0.5000, precision: 0.5000, f_beta: 0.5000 開始驗證。。。 2020-11-01T10:45:47.867190, step: 1600, loss: 5.080955, acc: 0.8566,precision: 0.4087, recall: 0.4131, f_beta: 0.4036 * <Figure size 1000x600 with 10 Axes> 繪圖完成了。。。 開始進行測試。。。 計算Precision, Recall and F1-Score... precision recall f1-score support Agriculture 0.89 0.90 0.89 1022 Art 0.80 0.95 0.86 742 Communication 0.19 0.26 0.22 27 Computer 0.95 0.94 0.94 1358 Economy 0.86 0.91 0.89 1601 Education 1.00 0.11 0.21 61 Electronics 0.35 0.39 0.37 28 Energy 1.00 0.03 0.06 33 Enviornment 0.88 0.96 0.92 1218 History 0.79 0.48 0.60 468 Law 1.00 0.12 0.21 52 Literature 0.00 0.00 0.00 34 Medical 0.50 0.13 0.21 53 Military 0.33 0.01 0.03 76 Mine 1.00 0.03 0.06 34 Philosophy 1.00 0.04 0.09 45 Politics 0.73 0.91 0.81 1026 Space 0.84 0.86 0.85 642 Sports 0.93 0.91 0.92 1254 Transport 0.33 0.03 0.06 59 accuracy 0.86 9833 macro avg 0.72 0.45 0.46 9833 weighted avg 0.85 0.86 0.84 9833

結果可視化圖片如下:
image-1

進行預測。。。
開始預測文本的類別。。。
輸入的文本是:自動化學報ACTA AUTOMATICA SINICA1997年 第23卷 第4期 Vol.23 No.4 1997一種在線建模方法的研究1)趙希男 粱三龍 潘德惠摘 要 針對一類系統提出了一種通用性... 預測的類別是: Computer 真實的類別是: Computer ================================================ 輸入的文本是:航空動力學報JOURNAL OF AEROSPACE POWER1999年 第14卷 第1期 VOL.14 No.1 1999變幾何渦扇發動機幾何調節對性能的影響朱之麗 李 東摘要:本文以高推重比渦扇... 預測的類別是: Space 真實的類別是: Space ================================================ 輸入的文本是:【 文獻號 】1-4242【原文出處】圖書館論壇【原刊地名】廣州【原刊期號】199503【原刊頁號】13-15【分 類 號】G9【分 類 名】圖書館學、信息科學、資料工作【 作 者 】周堅宇【復印期... 預測的類別是: Sports 真實的類別是: Sports ================================================ 輸入的文本是:產業與環境INDUSTRY AND ENVIRONMENT1998年 第20卷 第4期 Vol.20 No.4 1998科技期刊采礦——事實與數字引 言本期《產業與環境》中的向前看文章並沒有十分詳細地... 預測的類別是: Enviornment 真實的類別是: Enviornment ================================================ 輸入的文本是:環境技術ENVIRONMENTAL TECHNOLOGY1999年 第3期 No.3 1999正弦振動試驗中物理計算閆立摘要:本文通過闡述正弦振動試驗技術涉及的物理概念、力學原理,編寫了較適用的C語言... 預測的類別是: Space 真實的類別是: Enviornment ================================================

下面是一些實現的對比:
transformer

評價指標 precision recall f1-score support
accuracy     0.86 9833
macro avg 0.72 0.45 0.46 9833
weighted avg 0.85 0.86 0.84 9833

bistm

評價指標 precision recall f1-score support
accuracy     0.77 9833
macro avg 0.47 0.40 0.41 9833
weighted avg 0.76 0.77 0.76 9833

bilstmattn

評價指標 precision recall f1-score support
accuracy     0.92 9833
macro avg 0.70 0.64 0.65 9833
weighted avg 0.93 0.92 0.92 9833

textrcnn

評價指標 precision recall f1-score support
accuracy     0.89 9833
macro avg 0.71 0.46 0.48 9833
weighted avg 0.88 0.89 0.87 9833

rcnn
很奇怪,rcnn網絡並沒有得到有效的訓練

評價指標 precision recall f1-score support
accuracy     0.16 9833
macro avg 0.01 0.05 0.02 9833
weighted avg 0.04 0.16 0.05 9833

十分感謝以下倉庫,給了自己很多參考:
https://github.com/jiangxinyang227/NLP-Project/tree/master/text_classifier 
https://github.com/gaussic/text-classification-cnn-rnn

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM