Python如何使用神经网络进行简单文本分类


Posted in Python onFebruary 25, 2021

深度学习无处不在。在本文中,我们将使用Keras进行文本分类。

准备数据集

出于演示目的,我们将使用  20个新闻组  数据集。数据分为20个类别,我们的工作是预测这些类别。如下所示:

Python如何使用神经网络进行简单文本分类

通常,对于深度学习,我们将划分训练和测试数据。

导入所需的软件包

Python

import pandas as pd
import numpy as np
import pickle
from keras.preprocessing.text import Tokenizer
from keras.models import Sequential
from keras.layers import Activation, Dense, Dropout
from sklearn.preprocessing import LabelBinarizer
import sklearn.datasets as skds
from pathlib import Path

将数据从文件加载到Python变量

Python

# 为了复现性

np.random.seed(1237)
  
label_index = files_train.target
label_names = files_train.target_names
labelled_files = files_train.filenames
 
data_tags = ["filename","category","news"]
data_list = []
 
# 读取文件中的数据并将其添加到列表


 
data = pd.DataFrame.from_records(data_list, columns=data_tags)

我们的数据无法以CSV格式提供。我们有文本数据文件,文件存放的目录是我们的标签或类别。

我们将使用scikit-learn load_files方法。这种方法可以提供原始数据以及标签和标签索引。

最后我们得到一个数据框,其中包含文件名,类别和实际数据。

拆分数据进行训练和测试

Python

# 让我们以80%的数据作为训练,剩下的20%作为测试。


train_size = int(len(data) * .8)
 
train_posts = data['news'][:train_size]
train_tags = data['category'][:train_size]
train_files_names = data['filename'][:train_size]
 
test_posts = data['news'][train_size:]
test_tags = data['category'][train_size:]
test_files_names = data['filename'][train_size:]

标记化并准备词汇

Python

# 20个新闻组


num_labels = 20
vocab_size = 15000
batch_size = 100
 
# 用Vocab Size定义Tokenizer


tokenizer = Tokenizer(num_words=vocab_size)
tokenizer.fit_on_texts(train_posts)

在对文本进行分类时,我们首先使用Bag Of Words方法对文本进行预处理。

预处理输出标签/类

在将文本转换为数字向量后,我们还需要确保标签以神经网络模型接受的数字格式表示。

建立Keras模型并拟合

PowerShell

model = Sequential()

它为输入数据的维度以及构成模型的图层类型提供了简单的配置。

这是拟合度和测试准确性的代码段

100/8145 [..............................] - ETA: 31s - loss: 1.0746e-04 - acc: 1.0000
200/8145 [..............................] - ETA: 31s - loss: 0.0186 - acc: 0.9950    
300/8145 [>.............................] - ETA: 35s - loss: 0.0125 - acc: 0.9967
400/8145 [>.............................] - ETA: 32s - loss: 0.0094 - acc: 0.9975
500/8145 [>.............................] - ETA: 30s - loss: 0.0153 - acc: 0.9960
...
7900/8145 [============================>.] - ETA: 0s - loss: 0.1256 - acc: 0.9854
8000/8145 [============================>.] - ETA: 0s - loss: 0.1261 - acc: 0.9855
8100/8145 [============================>.] - ETA: 0s - loss: 0.1285 - acc: 0.9854
8145/8145 [==============================] - 29s 4ms/step - loss: 0.1293 - acc: 0.9854 - val_loss: 1.0597 - val_acc: 0.8742
 
Test accuracy: 0.8767123321648251

评估模型

Python

for i in range(10):
    prediction = model.predict(np.array([x_test[i]]))
    predicted_label = text_labels[np.argmax(prediction[0])]
    print(test_files_names.iloc[i])
    print('Actual label:' + test_tags.iloc[i])
    print("Predicted label: " + predicted_label)

在Fit方法训练了我们的数据集之后,我们将如上所述评估模型。

混淆矩阵

混淆矩阵是可视化模型准确性的最佳方法之一。

Python如何使用神经网络进行简单文本分类

保存模型

通常,深度学习的用例就像在不同的会话中进行数据训练,而使用训练后的模型进行预测一样。

# 创建一个HDF5文件'my_model.h5'


model.model.save('my_model.h5')
 
# 保存令牌生成器,即词汇表


with open('tokenizer.pickle', 'wb') as handle:
    pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)

Keras没有任何实用程序方法可将Tokenizer与模型一起保存。我们必须单独序列化它。

加载Keras模型

Python

预测环境还需要注意标签。

encoder.classes_ #标签二值化

预测

如前所述,我们已经预留了一些文件进行实际测试。

Python

labels = np.array(['alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc',
'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x',
'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball',
'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space',
'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast',
'talk.politics.misc', 'talk.religion.misc'])
 ...
for x_t in x_tokenized:
    prediction = model.predict(np.array([x_t]))
    predicted_label = labels[np.argmax(prediction[0])]
    print("File ->", test_files[i], "Predicted label: " + predicted_label)
    i += 1

输出

File -> C:DL20news-bydate20news-bydate-testcomp.graphics38758 Predicted label: comp.graphics
File -> C:DL20news-bydate20news-bydate-testmisc.forsale76115 Predicted label: misc.forsale
File -> C:DL20news-bydate20news-bydate-testsoc.religion.christian21329 Predicted label: soc.religion.christian

我们知道目录名是文件的真实标签,因此上述预测是准确的。

结论

在本文中,我们使用Keras python库构建了一个简单而强大的神经网络。

以上就是Python如何使用神经网络进行简单文本分类的详细内容,更多关于python 神经网络进行文本分类的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
简单介绍Python的轻便web框架Bottle
Apr 08 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
BP神经网络原理及Python实现代码
Dec 18 Python
Python函数和模块的使用总结
May 20 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
90行Python代码开发个人云盘应用
Apr 20 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 #Python
如何用 Python 制作一个迷宫游戏
Feb 25 #Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 #Python
Python 图片处理库exifread详解
Feb 25 #Python
python中if嵌套命令实例讲解
Feb 25 #Python
Matplotlib animation模块实现动态图
Feb 25 #Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 #Python
You might like
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
JS将秒换成时分秒实现代码
2013/09/03 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
django ORM之values和annotate使用详解
2020/05/19 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
师范毕业生求职信
2014/07/11 职场文书
综合实践活动报告
2015/02/05 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android