使用 Keras 进行文本分类。
准备数据集
出于演示目的,我们将使用包含 20 个新闻组的数据集。数据分为 20 个类别,我们的任务是预测这些类别。如下图: 
通常,对于深度学习,我们将训练数据和测试数据分开。导入 paket wajib rom keras.models import Sequential
from keras.layers import Activation, Dense, Dropout
from sklearn.preprocessing import LabelBinarizer
import sklearn.datasets as skds❀♶来自路径 bi 的路径萨
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #为了重现性 np.random.seed(1237) label_index = files_train.target label_name.label_filesin。 files_train.filenames data_tags = ["filename","category", "news"] data_list = [] #从文件中读取数据并将其添加到列表中 DataFrame.from_records(data_list, columns=data_tags) |
在我们的示例中,数据不以 CSV 格式提供。我们有文本数据文件,以及将这些文件作为标签或类别存储的目录。
我们将使用load_files方法来学习scikit。这种方法为我们提供了原始数据以及标签和标签索引。
在上面代码的末尾,我们将有一个包含文件名、类别和实际数据的数据框。
分开数据进行训练和测试
Python
1 2 3 4 5 6 7 8 9 10 | #我们将80%的数据作为训练,剩下的20%用于测试。 train_size = int(len(data) . Otrain_posts = 数据 ['新闻'] [: Train_Size] tag_sepur = 数据 ['类别'] [: Train_Size] train_filename = 数据 ['FILENAME'] [: FILENAME'] [: 火车 test_posts = data['news'][train_size:] test_tags = data['category'][train_size:] test_files_name = data['文件名']♶和词汇准备 Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 20 个新闻组 num_labels = 20 vocab_size = 15000 = = 0s 1 2 3 4 5 6 | # 使用 Vocab Size 定义分词器 分词器 = 分词器(num_words = vocab_size) .fit_on_texts(train_posts) |
在对文本进行分类时,我们首先使用Bag Of Words方法来处理文本 预处理输出标签/类将文本转换为数值向量后,我们还需要确保标签以神经网络模型接收的数字格式表示。 以下是一些用于健身和测试准确性的代码片段 1 2 3 4 5 6 7 8 9 10 11 12 | 100/8145 [........................ ..] - 预计到达时间: 31 d - 损失:1.0746e-04 - 累积:1.0000 200/8145 [..............................] - 预计到达时间:31 秒 - 损失:0.0186 - 加速:0.9950 300/8145 [>........................ .. ... ] - ETA:35秒 - 损失:0.0125 - acc:0.9967 400/8145 [>.............................. .] - 预计到达时间:32 秒 - 损失:0.0094 - 加速:0.9975 500/8145 [>........................ ... ..] - ETA:30秒 - 损失:0.0153 - acc:0.9960 ... 7900/8145 [=========== =========== ====== ===>.] - ETA:0秒 - 损失:0.1256 - acc:0.9854 8000/8145 [======== =========== ========= ====>.] - ETA:0秒 - 损失:0.1261 - acc:0.9855 8100/8145 [==== ======= ==== =>.] - ETA:0s - 损失:0.1285 - acc:0.9854 8145/8145 [========= ======= =] - 29s 4ms/步 - 损失:0.1293 -ACC:0.9854 -Val_loss:1.0597 -Val_acc:0.8742 -tost的准确度。ray([x_test[i]])) predicted_labels = text_labels[np.argmax(prediksi[0])] print(test_files_name.iloc[i]) print('实际标签:' test_tags .iloc[i]) print("预测标签:" + Predicted_label) |
Fit方法训练完我们的数据集后,我们将如上所述评估模型 混淆矩阵混淆矩阵为错误是可视化模型准确性的最佳方式。 
保存模型 通常,深度学习的用例就像在多个会话中训练数据并使用经过训练的模型进行预测。 1 2 3 4 5 6 | # 创建 HDF5 文件 '' model.model.save('') # 保存分词器,即词汇 带有 open(''),如:'wb. pickle.dump(tokenizer,handle,protocol=pickle.HIGHEST_PROTOCOL) |
Keras 没有办法将 Tokenizer 与模型一起保存。我们必须将自己序列化。 硬模型加载Python 对于预测环境,还应该注意标签。 1 | encoder.classes_ #LabelBinarizer |
预测如前所述,我们已经预留了一些文件用于实际测试。 Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | labels = np.array(['', '', '', '', '', '', '', '', '', '', '','','','','', '','','', '','']) ... 对于 x_tokenized 中的 x_t: prediksi = model.predict(np.array([x_t])) predicted_label = labels[np.argmax(prediksi[0])]♾ >", test_files[i ], "预测标签: " + Predicted_label) i += 1 |
输出1 2 3 | File -> C:\DL\20news-bydate\20news-bydate-test5\\ 387 预测标签: 文件 -> C:\DL\20news-bydate\20news-bydate-test\\76115 预测标签: 文件 -> C:\DL\20news-bydate\20news-bydate-test \ \21329 预测标签: |
我们知道目录名是文件的原始标签,所以上面的预测是准确的。 结论在本文中,我们使用Keras python库构建了一个简单但功能强大的神经网络。 |
|
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。