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

如何基于TensorFlow实现CNN-RNN中文文本分类,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了门头沟免费建站欢迎大家使用!

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

使用THUCNews的一个子集进行训练与测试,数据集请自行到THUCTC:一个高效的中文文本分类工具包

本次训练使用了其中的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表示的数据重新转换为文字;

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

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

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

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

CNN模型

具体参看cnn_model.py的实现。

大致结构如下:

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

训练与验证

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

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

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

准确率和误差如图所示:

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

测试

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

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

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

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

RNN循环神经网络

配置项

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

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

RNN模型

具体参看rnn_model.py的实现。

大致结构如下:

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

训练与验证

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

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

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

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

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

准确率和误差如图所示:

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

测试

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

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

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

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

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

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

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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。

网站栏目:如何基于TensorFlow实现CNN-RNN中文文本分类
本文链接:https://www.cdcxhl.com/article8/jjpoop.html

成都网站建设公司_创新互联,为您提供网站建设网站设计定制网站建站公司品牌网站建设自适应网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网页设计公司