本文主要实现了卷积神经网络对中文文本进行分类
参考资料:
github网址:https://github.com/gaussic/text-classification-cnn-rnn
博客地址:https://blog.csdn.net/weixin_40931845/article/details/83865877
本文是基于TensorFlow在中文数据集上的简化实现,使用了字符级CNN和RNN对中文文本进行分类,达到了较好的效果。
本文主要解决了github代码中IDE运行的问题。
环境
python 3.6
tensorflow 1.18.0 训练 pycharm
tensorflow 1.12.0 测试 spyder
数据集
使用THUCNews的一个子集进行训练与测试,数据集请自行到THUCTC:一个高效的中文文本分类工具包下载,请遵循数据提供方的开源协议。
本次训练使用了其中的10个分类,每个分类6500条数据。
这个子集可以在此下载:链接: https://pan.baidu.com/s/1hugrfRu 密码: qfud
CNN卷积网络
CNN参数设置
CNN可配置的参数如下所示,在cnn_model.py中
class TCNNConfig(object):
"""CNN配置参数"""
embedding_dim = 64 # 词向量维度
seq_length = 600 # 序列长度
num_classes = 10 # 类别数
num_filters = 128 # 卷积核数目
kernel_size = 5 # 卷积核尺寸
vocab_size = 5000 # 词汇表达小
hidden_dim = 128 # 全连接层神经元
dropout_keep_prob = 0.5 # dropout保留比例
learning_rate = 1e-3 # 学习率
batch_size = 64 # 每批训练大小
num_epochs = 10 # 总迭代轮次
print_per_batch = 100 # 每多少轮输出一次结果
save_per_batch = 10 # 每多少轮存入tensorboard
训练与验证集结果
命令行运行 python run_cnn.py train,可以开始训练。
或者用Spyder、Pycharm等IDE,可以用run run_cnn.py train进行训练。
若之前进行过训练,请把tensorboard/textcnn删除,避免TensorBoard多次训练结果重叠。
Configuring TensorBoard and Saver...
Loading training and validation data...
Time usage: 0:26:03
Training and evaluating...
Epoch: 1
Iter: 0, Train Loss: 2.3, Train Acc: 18.75%, Val Loss: 2.3, Val Acc: 8.08%, Time: 0:00:43 *
Iter: 100, Train Loss: 1.0, Train Acc: 67.19%, Val Loss: 1.2, Val Acc: 67.90%, Time: 0:02:18 *
Iter: 200, Train Loss: 0.29, Train Acc: 96.88%, Val Loss: 0.63, Val Acc: 80.30%, Time: 0:03:48 *
Iter: 300, Train Loss: 0.13, Train Acc: 96.88%, Val Loss: 0.39, Val Acc: 88.72%, Time: 0:05:32 *
Iter: 400, Train Loss: 0.095, Train Acc: 98.44%, Val Loss: 0.36, Val Acc: 89.76%, Time: 0:07:03 *
Iter: 500, Train Loss: 0.17, Train Acc: 95.31%, Val Loss: 0.33, Val Acc: 90.92%, Time: 0:08:33 *
Iter: 600, Train Loss: 0.3, Train Acc: 93.75%, Val Loss: 0.31, Val Acc: 91.40%, Time