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中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
python版DDOS攻击脚本
Jun 12 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
python修改微信和支付宝步数的示例代码
Oct 12 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中实现中文字符进制转换原理分析
2011/12/06 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
layui实现动态和静态分页
2018/04/28 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
python之生产者消费者模型实现详解
2019/07/27 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
python中sys模块是做什么用的
2020/08/16 Python
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
信息专业大学生自我评价分享
2014/01/17 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
酒店厨房管理制度
2015/08/06 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
小学毕业教师寄语
2019/06/21 职场文书