首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

相关视频

准备数据集

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

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

导入所需的软件包

Python

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

Python

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

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

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

左右滑动查看更多

01

02

03

04

拆分数据进行训练和测试

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

混淆矩阵

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

保存模型

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

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

输出

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

结论

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OrPVJwQuoTaMP8w8su2MnOJg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券