python神经网络包_Python使用神经网络进行简单文本分类

Decoding-digital-transformation-1536x1536.jpg

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

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

准备数据集

format,png

image-130.gif

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

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

导入所需的软件包

R

1

2

3

4

5

6

7

8

9

10

importpandasaspd

importnumpyasnp

importpickle

fromkeras.preprocessing.textimportTokenizer

fromkeras.modelsimportSequential

fromkeras.layersimportActivation,Dense,Dropout

fromsklearn.preprocessingimportLabelBinarizer

importsklearn.datasetsasskds

frompathlibimportPath

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# For reproducibility

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=[]

# Read and add data from file to a list

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

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

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

在以上代码的结尾,我们将有一个数据框,其中包含文件名,类别和实际数据。

拆分数据进行训练和测试

R

1

2

3

4

5

6

7

8

9

10

11

# lets take 80% data as training and remaining 20% for test.

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:]

标记化并准备词汇

R

1

2

3

4

5

6

7

8

9

# 20 news groups

num_labels=20

vocab_size=15000

batch_size=100

# define Tokenizer with Vocab Size

tokenizer=Tokenizer(num_words=vocab_size)

tokenizer.fit_on_texts(train_posts)

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

预处理输出标签/类

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

建立Keras模型并拟合

R

1

2

model=Sequential()

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

这是一些适合度和测试准确性的代码段

R

1

2

3

4

5

6

7

8

9

10

11

12

13

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[==============================]-29s4ms/step-loss:0.1293-acc:0.9854-val_loss:1.0597-val_acc:0.8742

Testaccuracy:0.8767123321648251

评估模型

R

1

2

3

4

5

6

7

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

混淆矩阵

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70

image-131.gif

保存模型

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

R

1

2

3

4

5

6

7

# creates a HDF5 file 'my_model.h5'

model.model.save('my_model.h5')

# Save Tokenizer i.e. Vocabulary

withopen('tokenizer.pickle','wb')ashandle:

pickle.dump(tokenizer,handle,protocol=pickle.HIGHEST_PROTOCOL)

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

加载Keras模型

R

1

2

encoder.classes_#LabelBinarizer

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

预测

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

R

1

2

3

4

5

6

7

8

9

10

11

12

13

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'])

...

forx_tinx_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

输出量

R

1

2

3

4

File->C:\DL\20news-bydate\20news-bydate-test\comp.graphics\38758Predictedlabel:comp.graphics

File->C:\DL\20news-bydate\20news-bydate-test\misc.forsale\76115Predictedlabel:misc.forsale

File->C:\DL\20news-bydate\20news-bydate-test\soc.religion.christian\21329Predictedlabel:soc.religion.christian

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

结论

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

可下载资源

完整代码、数据和文档(word)

关于作者

本文借鉴了作者最近为《

​非常感谢您阅读本文,如需帮助请联系我们!

联系我们 ✉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值