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

 更新时间:2021年02月25日 09:18:50   作者:拓端tecdat  
这篇文章主要介绍了Python如何使用神经网络进行简单文本分类,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下

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

准备数据集

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

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

导入所需的软件包

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方法训练了我们的数据集之后,我们将如上所述评估模型。

混淆矩阵

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

保存模型

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

# 创建一个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 神经网络进行文本分类的资料请关注脚本之家其它相关文章!

相关文章

  • pyinstaller的介绍与使用超详细讲解

    pyinstaller的介绍与使用超详细讲解

    PyInstaller是一个Python库,可以将Python应用程序转换为独立的可执行文件,下面这篇文章主要给大家介绍了关于pyinstaller的介绍与使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 利用python绘制数据曲线图的实现

    利用python绘制数据曲线图的实现

    这篇文章主要介绍了利用python绘制数据曲线图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python tkinter分隔控件(Seperator)的使用

    Python tkinter分隔控件(Seperator)的使用

    这篇文章主要介绍了Python tkinter分隔控件(Seperator)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python排序方法中sort和sorted的区别详解

    Python排序方法中sort和sorted的区别详解

    在python中常用的排序函数就是sort()和sorted()这两个函数,使用 sort() 或内建函数 sorted() 对列表进行排序,本文将详细介绍sorted和sort两者之间的区别,感兴趣的可以了解一下
    2023-08-08
  • 详解在OpenCV中实现的图像标注技术

    详解在OpenCV中实现的图像标注技术

    图像标注在计算机视觉中很重要,计算机视觉是一种技术,它允许计算机从数字图像或视频中获得高水平的理解力,并以人类的方式观察和解释视觉信息,本文将重点讨论在OpenCV的帮助下创建这些注释,感兴趣的朋友一起看看吧
    2022-06-06
  • Python 3 实现定义跨模块的全局变量和使用教程

    Python 3 实现定义跨模块的全局变量和使用教程

    这篇文章主要介绍了Python 3 实现定义跨模块的全局变量和使用,本文通过实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 你知道怎么用Python监控聊天记录吗

    你知道怎么用Python监控聊天记录吗

    今天有位同事和我吐槽关于公司 XX 的问题,我告诉他不要在公司电脑上说这些,因为很可能会被狙击,这位同事刚开始还不信,直到我写了这边文章,他才恍然大悟
    2021-10-10
  • Python生成验证码实例

    Python生成验证码实例

    这篇文章主要介绍了Python生成验证码的方法,具有很好的实用价值,代码结构清晰易懂,需要的朋友可以参考下
    2014-08-08
  • Django框架下在URLconf中指定视图缓存的方法

    Django框架下在URLconf中指定视图缓存的方法

    这篇文章主要介绍了Django框架下在URLconf中指定视图缓存的方法,在Python丰富多彩的web框架中,Django是最具人气的一个,需要的朋友可以参考下
    2015-07-07
  • 通过代码简单了解django model序列化作用

    通过代码简单了解django model序列化作用

    这篇文章主要介绍了通过代码简单了解django model序列化作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论