2018年10月13日笔记
tensorflow是谷歌google的深度学习框架,tensor中文叫做张量,flow叫做流。
CNN是convolutional neural network的简称,中文叫做卷积神经网络。
文本分类是NLP(自然语言处理)的经典任务。
0.编程环境
操作系统:Win10
python版本:3.6
集成开发环境:jupyter notebook
tensorflow版本:1.6
1.致谢声明
本文是作者学习《使用卷积神经网络以及循环神经网络进行中文文本分类》的成果,感激前辈;
github链接:https://github.com/gaussic/text-classification-cnn-rnn
2.配置环境
使用卷积神经网络模型要求有较高的机器配置,如果使用CPU版tensorflow会花费大量时间。
读者在有nvidia显卡的情况下,安装GPU版tensorflow会提高计算速度50倍。
安装教程链接:https://blog.csdn.net/qq_36556893/article/details/79433298
如果没有nvidia显卡,但有visa信用卡,请阅读我的另一篇文章《在谷歌云服务器上搭建深度学习平台》,链接:https://www.jianshu.com/p/893d622d1b5a
3.下载并解压数据集
数据集下载链接: https://pan.baidu.com/s/1cfHHr5aLk76AE7qi7L122g 提取码: tvgn
压缩文件夹基于CNN的搜狐新闻文本分类中有8个文件,如下图所示:
1.cnn_package.ipynb是本文的代码文件,读者可以直接运行;
2.getTrainTestDataSet.ipynb文件是获取训练集测试集数据的代码文件;
3.sohu_test.txt文件是测试集文件;
4.sohu_train.txt文件是训练集文件;
5.test_content_list.pickle是作者整理好的 测试集文本内容文件;
6.test_label_list.pickle是作者整理好的 测试集文本标签文件;
7.train_content_list.pickle是作者整理好的 训练集文本内容文件;
8.train_label_list.pickle是作者整理好的 训练集文本标签文件;
4.完整代码
完整代码已经在数据集文件中给出,即cnn_package.ipynb文件和getTrainTestDataSet.ipynb文件;
getTrainTestDataSet.ipynb文件中代码的作用是将文本文件转换为二进制文件,即4个pickle文件;
从工程开发的角度考虑,本文作者在cnn_package.ipynb文件中封装了一个类TextClassification,对于样本数量在10万左右的分类任务较为适用。
后面章节中将讲解实现细节。
5.获取数据
第1行代码导入库pandas,起别名pd;
第2行代码导入库pickle;
第4-5行代码分别读取训练集文件sohu_train.txt和测试集文件sohu_test.txt。
第6行代码将获取训练集内容列表train_content_list;
第7行代码将获取训练集标签列表train_label_list;
第8行代码将获取测试集内容列表test_content_list;
第9行代码将获取测试集标签列表test_label_list。
第10-17行代码调用pickle库的dump方法将python的对象转换为二进制文件。
import pandas as pd
import pickle
train_df = pd.read_csv('sohu_train.txt', sep='\t', header=None)
test_df = pd.read_csv('sohu_test.txt', sep='\t', header=None)
train_content_list = [k for k in train_df[1]]
train_label_list = [k for k in train_df[0]]
test_content_list = [k for k in test_df[1]]
test_label_list = [k for k in test_df[0]]
with open('train_content_list.pickle', 'wb') as file:
pickle.dump(train_content_list, file)
with open('train_label_list.pickle', 'wb') as file:
pickle.dump(train_label_list, file)
with open('test_content_list.pickle', 'wb') as file:
pickle.dump(test_content