Text classification with CNN and Word2vec
本文是参考gaussic大牛的“text-classification-cnn-rnn”后,基于同样的数据集,嵌入词级别所做的CNN文本分类实验结果,gaussic大牛是基于字符级的;
本实验的主要目是为了探究基于Word2vec训练的词向量嵌入CNN后,对模型的影响,实验结果得到的模型在验证集达到96.5%的效果,gaussic大牛为94.12%;
更多详细可以阅读gaussic大牛的博客:text-classification-cnn-rnn
1 环境
python3
tensorflow 1.3以上CPU环境下
gensim
jieba
scipy
numpy
scikit-learn
2 CNN卷积神经网络
模型CNN配置的参数在text_model.py中,具体为:
模型CNN大致结构为:
3 数据集
本实验同样是使用THUCNews的一个子集进行训练与测试,数据集请自行到THUCTC:一个高效的中文文本分类工具包下载,请遵循数据提供方的开源协议;
文本类别涉及10个类别:categories = ['体育', '财经', '房产', '家居', '教育', '科技', '时尚', '时政', '游戏', '娱乐'],每个分类6500条数据;
cnews.train.txt: 训练集(5000*10)
cnews.val.txt: 验证集(500*10)
cnews.test.txt: 测试集(1000*10)
训练所用的数据,以及训练好的词向量可以下载:链接: https://pan.baidu.com/s/1gka7SgYIRijSaXgRfYZzwA ,密码: mmbk
4 预处理
本实验主要对训练文本进行分词处理,一来要分词训练词向量,二来输入模型的以词向量的形式;
另外,除掉文本的标点符号,但没有停用词的处理;
处理的程序都放在loader.py文件中;
5 运行步骤
python train_word2vec.py,对训练数据进行分词,利用Word2vec训练词向量(vector_word.txt)
python text_train.py,进行训练模型
python text_test.py,对模型进行测试
python text_predict.py,提供模型的预测
6 训练结果
运行:python text_train.py
本实验经过6轮的迭代,满足终止条件结束,在global_step=3200时在验证集得到最佳效果96.5%
7 测试结果
运行:python text_test.py
对测试数据集显示,test_loss=0.13,test_accuracy=96.7%,其中“体育”类测试为100%,整体的precision=recall=F1=97%
8 预测结果
运行:python text_predict.py
随机从测试数据中挑选了五个样本,输出原文本和它的原文本标签和预测的标签,下图中5个样本预测的都是对的;