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

2018 年 10 月 30 日 七月在线实验室

点击上方     蓝字关注七月在线实验室



摘要:本文是基于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对中文文本进行分类,达到了较好的效果。



数据集


本文采用了清华NLP组提供的THUCNews新闻文本分类数据集的一个子集(原始的数据集大约74万篇文档,训练起来需要花较长的时间)。数据集请自行到THUCTC:一个高效的中文文本分类工具包下载,请遵循数据提供方的开源协议。(下载地址:http://thuctc.thunlp.org/


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


类别如下:

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


数据集划分如下:

  • 训练集: 5000*10

  • 验证集: 500*10

  • 测试集: 1000*10


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


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

  • cnews.train.txt: 训练集(50000条)

  • cnews.val.txt: 验证集(5000条)

  • cnews.test.txt: 测试集(10000条)



预处理


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


  • read_file(): 读取文件数据;

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

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

  • read_category(): 将分类目录固定,转换为 {类别: id}表示;

  • 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

原文链接:https://github.com/gaussic/text-classification-cnn-rnn



End


今日学习推荐


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

火热报名中

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

通过5大阶段的学习

6大DL实战项目的完成

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

报名送CPU&GPU双平台


11月13日 起正式上课

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


最后两天优惠价,11.1(本周四)即将涨价500元,有意的亲们抓紧时间喽,报名即送三门课程《机器学习工程师 第八期》、《深度学习 第三期》、《TensorFlow框架案例实战》,助力您更好的学习集训营课程。且2人及2人以上组团报名,可各减500元,咨询/报名/组团请加微信客服:julyedukefu_02


长按识别二维码



 更多资讯

 请戳一戳

往期推荐

贺「七月在线」获好未来产业基金千万元天使投资(送书等炒鸡福利)←明天31号活动即将结束,还没参加的速戳

送你9个常用的人脸数据库(附链接、报告)

【Github 3.5K 星】PyTorch资源列表:450个NLP/CV/SP、论文实现、库、教程&示例

【盘点】深度学习最常用到的20个Python库

如何交付机器学习项目:一份机器学习工程开发流程指南

拼团,咨询,查看课程,请点击 “ 阅读原文 

↓↓↓ 
登录查看更多
13

相关内容

文本分类(Text Classification)任务是根据给定文档的内容或主题,自动分配预先定义的类别标签。
基于多头注意力胶囊网络的文本分类模型
专知会员服务
76+阅读 · 2020年5月24日
CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
专知会员服务
43+阅读 · 2020年4月17日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
下载 | 最全中文文本分类模型库,上手即用
机器学习算法与Python学习
30+阅读 · 2019年10月17日
NLP - 15 分钟搭建中文文本分类模型
AINLP
79+阅读 · 2019年1月29日
收藏!CNN与RNN对中文文本进行分类--基于TENSORFLOW实现
全球人工智能
12+阅读 · 2018年5月26日
word2vec中文语料训练
全球人工智能
12+阅读 · 2018年4月23日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
新手|TensorFlow实现神经网络入门篇!
全球人工智能
9+阅读 · 2017年11月17日
tensorflow LSTM + CTC实现端到端OCR
机器学习研究会
26+阅读 · 2017年11月16日
开源|基于tensorflow使用CNN-RNN进行中文文本分类!
全球人工智能
11+阅读 · 2017年11月12日
TensorFlow学习笔记2:构建CNN模型
黑龙江大学自然语言处理实验室
3+阅读 · 2016年6月14日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
5+阅读 · 2018年1月30日
VIP会员
相关资讯
下载 | 最全中文文本分类模型库,上手即用
机器学习算法与Python学习
30+阅读 · 2019年10月17日
NLP - 15 分钟搭建中文文本分类模型
AINLP
79+阅读 · 2019年1月29日
收藏!CNN与RNN对中文文本进行分类--基于TENSORFLOW实现
全球人工智能
12+阅读 · 2018年5月26日
word2vec中文语料训练
全球人工智能
12+阅读 · 2018年4月23日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
新手|TensorFlow实现神经网络入门篇!
全球人工智能
9+阅读 · 2017年11月17日
tensorflow LSTM + CTC实现端到端OCR
机器学习研究会
26+阅读 · 2017年11月16日
开源|基于tensorflow使用CNN-RNN进行中文文本分类!
全球人工智能
11+阅读 · 2017年11月12日
TensorFlow学习笔记2:构建CNN模型
黑龙江大学自然语言处理实验室
3+阅读 · 2016年6月14日
Top
微信扫码咨询专知VIP会员