Spaces:
Sleeping
Sleeping
Commit
·
c9a87cd
1
Parent(s):
ef54a66
Upload 3 files
Browse files- lstm_smsspam_model.h5 +3 -0
- lstm_smsspam_model.ipynb +413 -0
- lstm_smsspam_tokenizer.pickle +3 -0
lstm_smsspam_model.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d2dcb7b3b2911e84a301b8a74f6ae4af3bfa7878cac61939e3269c02c1f5b8bc
|
3 |
+
size 1775224
|
lstm_smsspam_model.ipynb
ADDED
@@ -0,0 +1,413 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"metadata": {},
|
6 |
+
"source": [
|
7 |
+
"#### SMS spam detection model using LSTM and glove embeddings"
|
8 |
+
]
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"cell_type": "code",
|
12 |
+
"execution_count": 1,
|
13 |
+
"metadata": {},
|
14 |
+
"outputs": [],
|
15 |
+
"source": [
|
16 |
+
"import pandas as pd\n",
|
17 |
+
"from numpy import asarray\n",
|
18 |
+
"from numpy import zeros\n",
|
19 |
+
"import seaborn as sns\n",
|
20 |
+
"import matplotlib.pyplot as plt\n",
|
21 |
+
"import tensorflow as tf\n",
|
22 |
+
"from sklearn.model_selection import train_test_split\n",
|
23 |
+
"from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n",
|
24 |
+
"import pickle"
|
25 |
+
]
|
26 |
+
},
|
27 |
+
{
|
28 |
+
"cell_type": "code",
|
29 |
+
"execution_count": 2,
|
30 |
+
"metadata": {},
|
31 |
+
"outputs": [],
|
32 |
+
"source": [
|
33 |
+
"def getGloveEmbeddings(glovefolderpath):\n",
|
34 |
+
" print(\"---------------------- Getting Glove Embeddings -------------------------\\n\")\n",
|
35 |
+
" embeddings_dictionary = dict()\n",
|
36 |
+
" glove_file = open(f\"{glovefolderpath}\", encoding=\"utf8\")\n",
|
37 |
+
" for line in glove_file:\n",
|
38 |
+
" records = line.split()\n",
|
39 |
+
" word = records[0]\n",
|
40 |
+
" vector_dimensions = asarray(records[1:], dtype='float32')\n",
|
41 |
+
" embeddings_dictionary [word] = vector_dimensions\n",
|
42 |
+
" glove_file.close()\n",
|
43 |
+
" print(\"---------------------- -------------------------\\n\")\n",
|
44 |
+
" return embeddings_dictionary"
|
45 |
+
]
|
46 |
+
},
|
47 |
+
{
|
48 |
+
"cell_type": "code",
|
49 |
+
"execution_count": 3,
|
50 |
+
"metadata": {},
|
51 |
+
"outputs": [],
|
52 |
+
"source": [
|
53 |
+
"glove_folder=r'D:/STUDY/Sem3/deeplearning/glove.6B/glove.6B.50d.txt'\n",
|
54 |
+
"maxlen = 50"
|
55 |
+
]
|
56 |
+
},
|
57 |
+
{
|
58 |
+
"cell_type": "code",
|
59 |
+
"execution_count": 4,
|
60 |
+
"metadata": {},
|
61 |
+
"outputs": [],
|
62 |
+
"source": [
|
63 |
+
"dataset = pd.read_csv('SMSSpamCollection.txt',sep='\\t',names=['label','message'])"
|
64 |
+
]
|
65 |
+
},
|
66 |
+
{
|
67 |
+
"cell_type": "code",
|
68 |
+
"execution_count": 5,
|
69 |
+
"metadata": {},
|
70 |
+
"outputs": [],
|
71 |
+
"source": [
|
72 |
+
"dataset['label'] = dataset['label'].map( {'spam': 1, 'ham': 0} )\n",
|
73 |
+
"X = dataset['message'].values\n",
|
74 |
+
"y = dataset['label'].values"
|
75 |
+
]
|
76 |
+
},
|
77 |
+
{
|
78 |
+
"cell_type": "code",
|
79 |
+
"execution_count": 6,
|
80 |
+
"metadata": {},
|
81 |
+
"outputs": [],
|
82 |
+
"source": [
|
83 |
+
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)"
|
84 |
+
]
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"cell_type": "code",
|
88 |
+
"execution_count": 7,
|
89 |
+
"metadata": {},
|
90 |
+
"outputs": [],
|
91 |
+
"source": [
|
92 |
+
"tokeniser = tf.keras.preprocessing.text.Tokenizer()\n",
|
93 |
+
"tokeniser.fit_on_texts(X_train)\n",
|
94 |
+
"\n",
|
95 |
+
"# Save the tokenizer using pickle\n",
|
96 |
+
"with open('lstm_smsspam_tokenizer.pickle', 'wb') as handle:\n",
|
97 |
+
" pickle.dump(tokeniser, handle, protocol=pickle.HIGHEST_PROTOCOL)\n",
|
98 |
+
"\n",
|
99 |
+
"X_train = tokeniser.texts_to_sequences(X_train)\n",
|
100 |
+
"X_test = tokeniser.texts_to_sequences(X_test)\n",
|
101 |
+
"vocab_size = len(tokeniser.word_index) + 1\n",
|
102 |
+
"X_train = tf.keras.preprocessing.sequence.pad_sequences(X_train, padding='post', maxlen=maxlen)\n",
|
103 |
+
"X_test = tf.keras.preprocessing.sequence.pad_sequences(X_test, padding='post', maxlen=maxlen)"
|
104 |
+
]
|
105 |
+
},
|
106 |
+
{
|
107 |
+
"cell_type": "code",
|
108 |
+
"execution_count": 8,
|
109 |
+
"metadata": {},
|
110 |
+
"outputs": [
|
111 |
+
{
|
112 |
+
"name": "stdout",
|
113 |
+
"output_type": "stream",
|
114 |
+
"text": [
|
115 |
+
"---------------------- Getting Glove Embeddings -------------------------\n",
|
116 |
+
"\n",
|
117 |
+
"---------------------- -------------------------\n",
|
118 |
+
"\n"
|
119 |
+
]
|
120 |
+
}
|
121 |
+
],
|
122 |
+
"source": [
|
123 |
+
"embeddings_dictionary=getGloveEmbeddings(glove_folder)\n",
|
124 |
+
"embedding_matrix = zeros((vocab_size, maxlen))\n",
|
125 |
+
"for word, index in tokeniser.word_index.items():\n",
|
126 |
+
" embedding_vector = embeddings_dictionary.get(word)\n",
|
127 |
+
" if embedding_vector is not None:\n",
|
128 |
+
" embedding_matrix[index] = embedding_vector"
|
129 |
+
]
|
130 |
+
},
|
131 |
+
{
|
132 |
+
"cell_type": "code",
|
133 |
+
"execution_count": 9,
|
134 |
+
"metadata": {},
|
135 |
+
"outputs": [],
|
136 |
+
"source": [
|
137 |
+
"model=tf.keras.models.Sequential([\n",
|
138 |
+
" tf.keras.layers.Embedding(input_dim=vocab_size,output_dim= maxlen, weights=[embedding_matrix], input_length=maxlen , trainable=False),\n",
|
139 |
+
" tf.keras.layers.LSTM(maxlen),\n",
|
140 |
+
" tf.keras.layers.Dense(1, activation='sigmoid')\n",
|
141 |
+
"]) "
|
142 |
+
]
|
143 |
+
},
|
144 |
+
{
|
145 |
+
"cell_type": "code",
|
146 |
+
"execution_count": 10,
|
147 |
+
"metadata": {},
|
148 |
+
"outputs": [
|
149 |
+
{
|
150 |
+
"name": "stdout",
|
151 |
+
"output_type": "stream",
|
152 |
+
"text": [
|
153 |
+
"Model: \"sequential\"\n",
|
154 |
+
"_________________________________________________________________\n",
|
155 |
+
" Layer (type) Output Shape Param # \n",
|
156 |
+
"=================================================================\n",
|
157 |
+
" embedding (Embedding) (None, 50, 50) 375100 \n",
|
158 |
+
" \n",
|
159 |
+
" lstm (LSTM) (None, 50) 20200 \n",
|
160 |
+
" \n",
|
161 |
+
" dense (Dense) (None, 1) 51 \n",
|
162 |
+
" \n",
|
163 |
+
"=================================================================\n",
|
164 |
+
"Total params: 395351 (1.51 MB)\n",
|
165 |
+
"Trainable params: 20251 (79.11 KB)\n",
|
166 |
+
"Non-trainable params: 375100 (1.43 MB)\n",
|
167 |
+
"_________________________________________________________________\n",
|
168 |
+
"None\n"
|
169 |
+
]
|
170 |
+
}
|
171 |
+
],
|
172 |
+
"source": [
|
173 |
+
"print(model.summary())"
|
174 |
+
]
|
175 |
+
},
|
176 |
+
{
|
177 |
+
"cell_type": "code",
|
178 |
+
"execution_count": 11,
|
179 |
+
"metadata": {},
|
180 |
+
"outputs": [],
|
181 |
+
"source": [
|
182 |
+
"early_stop = tf.keras.callbacks.EarlyStopping(monitor='accuracy', mode='min', patience=10)"
|
183 |
+
]
|
184 |
+
},
|
185 |
+
{
|
186 |
+
"cell_type": "code",
|
187 |
+
"execution_count": 12,
|
188 |
+
"metadata": {},
|
189 |
+
"outputs": [],
|
190 |
+
"source": [
|
191 |
+
"model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])"
|
192 |
+
]
|
193 |
+
},
|
194 |
+
{
|
195 |
+
"cell_type": "code",
|
196 |
+
"execution_count": 13,
|
197 |
+
"metadata": {},
|
198 |
+
"outputs": [
|
199 |
+
{
|
200 |
+
"name": "stdout",
|
201 |
+
"output_type": "stream",
|
202 |
+
"text": [
|
203 |
+
"Epoch 1/50\n",
|
204 |
+
"98/98 [==============================] - 4s 18ms/step - loss: 0.4414 - accuracy: 0.8683 - val_loss: 0.4173 - val_accuracy: 0.8538\n",
|
205 |
+
"Epoch 2/50\n",
|
206 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.3887 - accuracy: 0.8689 - val_loss: 0.4154 - val_accuracy: 0.8538\n",
|
207 |
+
"Epoch 3/50\n",
|
208 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.3772 - accuracy: 0.8689 - val_loss: 0.2920 - val_accuracy: 0.8538\n",
|
209 |
+
"Epoch 4/50\n",
|
210 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.1656 - accuracy: 0.9433 - val_loss: 0.1561 - val_accuracy: 0.9526\n",
|
211 |
+
"Epoch 5/50\n",
|
212 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.1173 - accuracy: 0.9654 - val_loss: 0.1311 - val_accuracy: 0.9590\n",
|
213 |
+
"Epoch 6/50\n",
|
214 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.1005 - accuracy: 0.9657 - val_loss: 0.1243 - val_accuracy: 0.9654\n",
|
215 |
+
"Epoch 7/50\n",
|
216 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.0860 - accuracy: 0.9715 - val_loss: 0.1189 - val_accuracy: 0.9679\n",
|
217 |
+
"Epoch 8/50\n",
|
218 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.0850 - accuracy: 0.9737 - val_loss: 0.1192 - val_accuracy: 0.9654\n",
|
219 |
+
"Epoch 9/50\n",
|
220 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.0748 - accuracy: 0.9760 - val_loss: 0.1159 - val_accuracy: 0.9654\n",
|
221 |
+
"Epoch 10/50\n",
|
222 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.0666 - accuracy: 0.9808 - val_loss: 0.1291 - val_accuracy: 0.9667\n",
|
223 |
+
"Epoch 11/50\n",
|
224 |
+
"98/98 [==============================] - 1s 12ms/step - loss: 0.0658 - accuracy: 0.9801 - val_loss: 0.1123 - val_accuracy: 0.9692\n"
|
225 |
+
]
|
226 |
+
}
|
227 |
+
],
|
228 |
+
"source": [
|
229 |
+
"history=model.fit(x=X_train,\n",
|
230 |
+
" y=y_train,\n",
|
231 |
+
" epochs=50,\n",
|
232 |
+
" callbacks=[early_stop],\n",
|
233 |
+
" validation_split=0.2\n",
|
234 |
+
" )"
|
235 |
+
]
|
236 |
+
},
|
237 |
+
{
|
238 |
+
"cell_type": "code",
|
239 |
+
"execution_count": 14,
|
240 |
+
"metadata": {},
|
241 |
+
"outputs": [],
|
242 |
+
"source": [
|
243 |
+
"def c_report(y_true, y_pred):\n",
|
244 |
+
" print(\"Classification Report\")\n",
|
245 |
+
" print(classification_report(y_true, y_pred))\n",
|
246 |
+
" acc_sc = accuracy_score(y_true, y_pred)\n",
|
247 |
+
" print(f\"Accuracy : {str(round(acc_sc,2)*100)}\")\n",
|
248 |
+
" return acc_sc\n",
|
249 |
+
"def plot_confusion_matrix(y_true, y_pred):\n",
|
250 |
+
" mtx = confusion_matrix(y_true, y_pred)\n",
|
251 |
+
" sns.heatmap(mtx, annot=True, fmt='d', linewidths=.5, cmap=\"Blues\", cbar=False)\n",
|
252 |
+
" plt.ylabel('True label')\n",
|
253 |
+
" plt.xlabel('Predicted label')\n",
|
254 |
+
" plt.show()"
|
255 |
+
]
|
256 |
+
},
|
257 |
+
{
|
258 |
+
"cell_type": "code",
|
259 |
+
"execution_count": 15,
|
260 |
+
"metadata": {},
|
261 |
+
"outputs": [
|
262 |
+
{
|
263 |
+
"name": "stdout",
|
264 |
+
"output_type": "stream",
|
265 |
+
"text": [
|
266 |
+
"53/53 [==============================] - 1s 4ms/step\n",
|
267 |
+
"Classification Report\n",
|
268 |
+
" precision recall f1-score support\n",
|
269 |
+
"\n",
|
270 |
+
" 0 0.97 1.00 0.99 1448\n",
|
271 |
+
" 1 0.97 0.83 0.90 224\n",
|
272 |
+
"\n",
|
273 |
+
" accuracy 0.97 1672\n",
|
274 |
+
" macro avg 0.97 0.92 0.94 1672\n",
|
275 |
+
"weighted avg 0.97 0.97 0.97 1672\n",
|
276 |
+
"\n",
|
277 |
+
"Accuracy : 97.0\n"
|
278 |
+
]
|
279 |
+
},
|
280 |
+
{
|
281 |
+
"data": {
|
282 |
+
"image/png": "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",
|
283 |
+
"text/plain": [
|
284 |
+
"<Figure size 640x480 with 1 Axes>"
|
285 |
+
]
|
286 |
+
},
|
287 |
+
"metadata": {},
|
288 |
+
"output_type": "display_data"
|
289 |
+
}
|
290 |
+
],
|
291 |
+
"source": [
|
292 |
+
"preds = (model.predict(X_test) > 0.5).astype(\"int32\")\n",
|
293 |
+
"c_report(y_test, preds)\n",
|
294 |
+
"plot_confusion_matrix(y_test, preds)"
|
295 |
+
]
|
296 |
+
},
|
297 |
+
{
|
298 |
+
"cell_type": "code",
|
299 |
+
"execution_count": 16,
|
300 |
+
"metadata": {},
|
301 |
+
"outputs": [
|
302 |
+
{
|
303 |
+
"name": "stderr",
|
304 |
+
"output_type": "stream",
|
305 |
+
"text": [
|
306 |
+
"d:\\STUDY\\Sem3\\deeplearning\\DLENV\\lib\\site-packages\\keras\\src\\engine\\training.py:3079: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.\n",
|
307 |
+
" saving_api.save_model(\n"
|
308 |
+
]
|
309 |
+
}
|
310 |
+
],
|
311 |
+
"source": [
|
312 |
+
"# Save the model\n",
|
313 |
+
"model.save('lstm_smsspam_model.h5')"
|
314 |
+
]
|
315 |
+
},
|
316 |
+
{
|
317 |
+
"cell_type": "code",
|
318 |
+
"execution_count": 17,
|
319 |
+
"metadata": {},
|
320 |
+
"outputs": [],
|
321 |
+
"source": [
|
322 |
+
"lstm_smsspam_model=tf.keras.models.load_model('lstm_smsspam_model.h5')"
|
323 |
+
]
|
324 |
+
},
|
325 |
+
{
|
326 |
+
"cell_type": "code",
|
327 |
+
"execution_count": 18,
|
328 |
+
"metadata": {},
|
329 |
+
"outputs": [],
|
330 |
+
"source": [
|
331 |
+
"def predict_sms_sentiment(message):\n",
|
332 |
+
" sequence = tokeniser.texts_to_sequences([message])\n",
|
333 |
+
" sequence = tf.keras.preprocessing.sequence.pad_sequences(sequence, padding='post', maxlen=maxlen)\n",
|
334 |
+
" prediction = lstm_smsspam_model.predict(sequence)[0, 0]\n",
|
335 |
+
" if prediction > 0.5:\n",
|
336 |
+
" return 'Spam'\n",
|
337 |
+
" else:\n",
|
338 |
+
" return 'Not spam'\n",
|
339 |
+
"\n"
|
340 |
+
]
|
341 |
+
},
|
342 |
+
{
|
343 |
+
"cell_type": "code",
|
344 |
+
"execution_count": 19,
|
345 |
+
"metadata": {},
|
346 |
+
"outputs": [
|
347 |
+
{
|
348 |
+
"name": "stdout",
|
349 |
+
"output_type": "stream",
|
350 |
+
"text": [
|
351 |
+
"1/1 [==============================] - 0s 499ms/step\n",
|
352 |
+
"The message is classified as: Not spam\n"
|
353 |
+
]
|
354 |
+
}
|
355 |
+
],
|
356 |
+
"source": [
|
357 |
+
"# Example usage:\n",
|
358 |
+
"sample_message = \"Check out this amazing offer!\"\n",
|
359 |
+
"result = predict_sms_sentiment(sample_message)\n",
|
360 |
+
"print(f\"The message is classified as: {result}\")"
|
361 |
+
]
|
362 |
+
},
|
363 |
+
{
|
364 |
+
"cell_type": "code",
|
365 |
+
"execution_count": 20,
|
366 |
+
"metadata": {},
|
367 |
+
"outputs": [
|
368 |
+
{
|
369 |
+
"name": "stdout",
|
370 |
+
"output_type": "stream",
|
371 |
+
"text": [
|
372 |
+
"1/1 [==============================] - 0s 23ms/step\n",
|
373 |
+
"The message is classified as: Spam\n"
|
374 |
+
]
|
375 |
+
}
|
376 |
+
],
|
377 |
+
"source": [
|
378 |
+
"# Example usage:\n",
|
379 |
+
"sample_message = \"BangBabes Ur order is on the way. U SHOULD receive a Service Msg 2 download UR content. If U do not, GoTo wap. bangb. tv on UR mobile internet/service menu\"\n",
|
380 |
+
"result = predict_sms_sentiment(sample_message)\n",
|
381 |
+
"print(f\"The message is classified as: {result}\")"
|
382 |
+
]
|
383 |
+
},
|
384 |
+
{
|
385 |
+
"cell_type": "code",
|
386 |
+
"execution_count": null,
|
387 |
+
"metadata": {},
|
388 |
+
"outputs": [],
|
389 |
+
"source": []
|
390 |
+
}
|
391 |
+
],
|
392 |
+
"metadata": {
|
393 |
+
"kernelspec": {
|
394 |
+
"display_name": "DLENV",
|
395 |
+
"language": "python",
|
396 |
+
"name": "python3"
|
397 |
+
},
|
398 |
+
"language_info": {
|
399 |
+
"codemirror_mode": {
|
400 |
+
"name": "ipython",
|
401 |
+
"version": 3
|
402 |
+
},
|
403 |
+
"file_extension": ".py",
|
404 |
+
"mimetype": "text/x-python",
|
405 |
+
"name": "python",
|
406 |
+
"nbconvert_exporter": "python",
|
407 |
+
"pygments_lexer": "ipython3",
|
408 |
+
"version": "3.10.11"
|
409 |
+
}
|
410 |
+
},
|
411 |
+
"nbformat": 4,
|
412 |
+
"nbformat_minor": 2
|
413 |
+
}
|
lstm_smsspam_tokenizer.pickle
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:396cfc85560227160d9b6ee7b9cabd78445fb71d79cb5bfba780b736f3bf5af2
|
3 |
+
size 290462
|