收藏!CNN与RNN对中文文本进行分类--基于TENSORFLOW实现

2018 年 5 月 26 日 全球人工智能
收藏!CNN与RNN对中文文本进行分类--基于TENSORFLOW实现

高薪招聘兼职AI讲师和AI助教!

加入高端数字货币投资者群!

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

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

数据集

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

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

类别如下:

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

这个子集可以在此下载:链接:http://pan.baidu.com/s/1bpq9Eub 密码:ycyw

数据集划分如下:

  • 训练集: 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差别不大。

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

原文链接:http://ai.51cto.com/art/201711/558773.htm

- 加入AI学院学习 -

点击“ 阅读原文 ”进入学习

登录查看更多
12

相关内容

RNN:循环神经网络,是深度学习的一种模型。
小贴士
相关资讯
下载 | 最全中文文本分类模型库,上手即用
机器学习算法与Python学习
27+阅读 · 2019年10月17日
NLP - 15 分钟搭建中文文本分类模型
AINLP
75+阅读 · 2019年1月29日
CNN与RNN中文文本分类-基于TensorFlow 实现
七月在线实验室
12+阅读 · 2018年10月30日
word2vec中文语料训练
全球人工智能
11+阅读 · 2018年4月23日
Github 项目推荐 | 用 TensorFlow 实现的模型集合
AI研习社
4+阅读 · 2018年2月14日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
tensorflow LSTM + CTC实现端到端OCR
机器学习研究会
24+阅读 · 2017年11月16日
开源|基于tensorflow使用CNN-RNN进行中文文本分类!
全球人工智能
11+阅读 · 2017年11月12日
深度学习入门篇--手把手教你用 TensorFlow 训练模型
全球人工智能
4+阅读 · 2017年10月21日
【推荐】一步一步带你用TensorFlow玩转LSTM
机器学习研究会
9+阅读 · 2017年9月12日
相关论文
Speech2Action: Cross-modal Supervision for Action Recognition
Arsha Nagrani,Chen Sun,David Ross,Rahul Sukthankar,Cordelia Schmid,Andrew Zisserman
6+阅读 · 2020年3月30日
Fabio Petroni,Tim Rocktäschel,Patrick Lewis,Anton Bakhtin,Yuxiang Wu,Alexander H. Miller,Sebastian Riedel
5+阅读 · 2019年9月4日
Senmao Wang,Pan Zhou,Wei Chen,Jia Jia,Lei Xie
4+阅读 · 2019年4月23日
Huan Ling,Jun Gao,Amlan Kar,Wenzheng Chen,Sanja Fidler
14+阅读 · 2019年3月16日
Haoyu Wang,Vivek Kulkarni,William Yang Wang
6+阅读 · 2018年10月31日
End-to-end Speech Recognition with Word-based RNN Language Models
Takaaki Hori,Jaejin Cho,Shinji Watanabe
3+阅读 · 2018年8月8日
Bidirectional Attention for SQL Generation
Tong Guo,Huilin Gao
4+阅读 · 2018年6月21日
Yue Zhang,Jie Yang
13+阅读 · 2018年5月15日
Amritanshu Agrawal,Wei Fu,Tim Menzies
3+阅读 · 2018年2月20日
Kaiming He,Georgia Gkioxari,Piotr Dollár,Ross Girshick
7+阅读 · 2018年1月24日
Top