首页
学习
活动
专区
工具
TVP
发布

CNN与RNN中文文本分类-基于TensorFlow 实现

摘要:本文是基于TensorFlow在中文数据集上的简化实现,使用了字符级CNN和RNN对中文文本进行分类,达到了较好的效果。

CNN做句子分类的论文可以参看:

Convolutional Neural Networks for Sentence Classification

还可以去读dennybritz大牛的博客:

Implementing a CNN for Text Classification in TensorFlow

以及字符级CNN的论文:

Character-level Convolutional Networks for Text Classification

如今,TensorFlow大版本已经升级到了1.3,对很多的网络层实现了更高层次的封装和实现,甚至还整合了如Keras这样优秀的一些高层次框架,使得其易用性大大提升。相比早起的底层代码,如今的实现更加简洁和优雅。

本文是基于TensorFlow在中文数据集上的简化实现,使用了字符级CNN和RNN对中文文本进行分类,达到了较好的效果。

数据集

本次训练使用了其中的10个分类,每个分类6500条数据。

类别如下:

体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐

数据集划分如下:

训练集: 5000*10

验证集: 500*10

测试集: 1000*10

从原数据集生成子集的过程请参看helper下的两个脚本。其中,copy_data.sh用于从每个分类拷贝6500个文件,cnews_group.py用于将多个文件整合到一个文件中。

执行该文件后,得到三个数据文件:

预处理

data/cnews_loader.py为数据的预处理文件。

read_file():读取文件数据;

build_vocab():构建词汇表,使用字符级的表示,这一函数会将词汇表存储下来,避免每一次重复处理;

read_vocab():读取上一步存储的词汇表,转换为表示;

read_category():将分类目录固定,转换为表示;

to_words():将一条由id表示的数据重新转换为文字;

preocess_file():将数据集从文字转换为固定长度的id序列表示;

batch_iter():为神经网络的训练准备经过shuffle的批次的数据。

经过数据预处理,数据的格式如下:

CNN卷积神经网络

配置项

CNN可配置的参数如下所示,在cnn_model.py中。

CNN模型

具体参看cnn_model.py的实现。

大致结构如下:

训练与验证

运行python run_cnn.py train,可以开始训练。

若之前进行过训练,请把tensorboard/textcnn删除,避免TensorBoard多次训练结果重叠。

在验证集上的最佳效果为94.12%,且只经过了3轮迭代就已经停止。

准确率和误差如图所示:

测试

运行python run_cnn.py test在测试集上进行测试。

在测试集上的准确率达到了96.04%,且各类的precision, recall和f1-score都超过了0.9。

从混淆矩阵也可以看出分类效果非常优秀。

RNN循环神经网络

配置项

RNN可配置的参数如下所示,在rnn_model.py中。

RNN模型

具体参看rnn_model.py的实现。

大致结构如下:

训练与验证

这部分的代码与 run_cnn.py极为相似,只需要将模型和部分目录稍微修改。

运行 python run_rnn.py train,可以开始训练。

若之前进行过训练,请把tensorboard/textrnn删除,避免TensorBoard多次训练结果重叠。

在验证集上的最佳效果为91.42%,经过了8轮迭代停止,速度相比CNN慢很多。

准确率和误差如图所示:

测试

运行 python run_rnn.py test 在测试集上进行测试。

在测试集上的准确率达到了94.22%,且各类的precision, recall和f1-score,除了家居这一类别,都超过了0.9。

从混淆矩阵可以看出分类效果非常优秀。

对比两个模型,可见RNN除了在家居分类的表现不是很理想,其他几个类别较CNN差别不大。

还可以通过进一步的调节参数,来达到更好的效果。

为方便预测,repo 中 predict.py 提供了 CNN 模型的预测方法。

来源 | Github

作者 | Gaussic

End

今日学习推荐

【深度学习集训营第二期】

火热报名中

顶级的DL专家带领你从DL基础开始学起

通过5大阶段的学习

6大DL实战项目的完成

最终成长为优秀的深度学习工程师

报名送CPU&GPU双平台

11月13日起正式上课

努力5周,挑战年薪40万,甚至更高薪

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181030A1EKKI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券