代码地址:https://github.com/gaussic/text-classification-cnn-rnn
数据集
采用了清华NLP组提供的THUCNew新闻文本分类数据集的一个子集。数据集可在此链接http://thuctc.thunlp.org/下载。
本次训练有十个分类,每个分类6500条,总共65000条新闻数据。
具体类别如下
体育、财经、房产、家具、教育、科技、时政、游戏、娱乐
数据集划分如下:
- 训练集:5000*10
- 验证集:500*10
- 测试集:1000*10
从原始数据中获得子数据参看helper
的两个脚本。
预处理数据
data/cnews_loader.py
为数据的预处理文件。
read_file()
:读取文件;- build_vocab():构建词汇表,使用字符级的表示,这一函数会将词汇表储存下来;
- read_category():将分类目录固定,转换为{类别:id}表示
- to_words():将一条有id表示的数据重新转换为文字;
- process_file():将数据集从文字转换为固定长度的id序列表示;
- batch_iter():为神经网络的训练准备经过shuffle的批次的数据。
经过处理,数据格式如下:
Data | Shape | Data | Shape |
---|---|---|---|
x_train | [50000,600] | y_train | [50000,10] |
x_val | [5000,600] | y_val | [5000,10] |
x_test | [10000,600] | y_test | [10000,10] |
CNN卷积神经网络
配置项参数如下,在cnn_model.py中
class TCNNConfig(object):
"""CNN配置参数"""
embedding_dim = 64 # 词向量维度
seq_length = 600 # 序列长度
num_classes = 10 # 类别数
num_filters = 256 # 卷积核数目
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