Python如何使用神經網絡進行簡單文本分類
深度學習無處不在。在本文中,我們將使用Keras進行文本分類。
準備數據集出于演示目的,我們將使用 20個新聞組 數據集。數據分為20個類別,我們的工作是預測這些類別。如下所示:
通常,對于深度學習,我們將劃分訓練和測試數據。
導入所需的軟件包Python
import pandas as pdimport numpy as npimport picklefrom keras.preprocessing.text import Tokenizerfrom keras.models import Sequentialfrom keras.layers import Activation, Dense, Dropoutfrom sklearn.preprocessing import LabelBinarizerimport sklearn.datasets as skdsfrom pathlib import Path將數據從文件加載到Python變量
Python
# 為了復現性np.random.seed(1237) label_index = files_train.targetlabel_names = files_train.target_nameslabelled_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 = 20vocab_size = 15000batch_size = 100 # 用Vocab Size定義Tokenizertokenizer = 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.0000200/8145 [..............................] - ETA: 31s - loss: 0.0186 - acc: 0.9950 300/8145 [>.............................] - ETA: 35s - loss: 0.0125 - acc: 0.9967400/8145 [>.............................] - ETA: 32s - loss: 0.0094 - acc: 0.9975500/8145 [>.............................] - ETA: 30s - loss: 0.0153 - acc: 0.9960...7900/8145 [============================>.] - ETA: 0s - loss: 0.1256 - acc: 0.98548000/8145 [============================>.] - ETA: 0s - loss: 0.1261 - acc: 0.98558100/8145 [============================>.] - ETA: 0s - loss: 0.1285 - acc: 0.98548145/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.graphicsFile -> C:DL20news-bydate20news-bydate-testmisc.forsale76115 Predicted label: misc.forsaleFile -> C:DL20news-bydate20news-bydate-testsoc.religion.christian21329 Predicted label: soc.religion.christian
我們知道目錄名是文件的真實標簽,因此上述預測是準確的。
結論在本文中,我們使用Keras python庫構建了一個簡單而強大的神經網絡。
以上就是Python如何使用神經網絡進行簡單文本分類的詳細內容,更多關于python 神經網絡進行文本分類的資料請關注好吧啦網其它相關文章!
相關文章: