乐趣区

关于算法:Python使用神经网络进行简单文本分类

原文链接:http://tecdat.cn/?p=8613

深度学习无处不在。在本文中,咱们将应用 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 库构建了一个简略而弱小的神经网络。


最受欢迎的见解

1.r 语言用神经网络改良 nelson-siegel 模型拟合收益率曲线剖析

2.r 语言实现拟合神经网络预测和后果可视化

3.python 用遗传算法 - 神经网络 - 含糊逻辑控制算法对乐透剖析

4. 用于 nlp 的 python:应用 keras 的多标签文本 lstm 神经网络分类

5. 用 r 语言实现神经网络预测股票实例

6.R 语言基于 Keras 的小数据集深度学习图像分类

7. 用于 NLP 的 seq2seq 模型实例用 Keras 实现神经机器翻译

8.python 中基于网格搜索算法优化的深度学习模型剖析糖

9.matlab 应用贝叶斯优化的深度学习

退出移动版