matrix-spam-ml/bert.ipynb

575 lines
116 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"model_1\"\n",
"__________________________________________________________________________________________________\n",
" Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
" text (InputLayer) [(None,)] 0 [] \n",
" \n",
" preprocessing (KerasLayer) {'input_type_ids': 0 ['text[0][0]'] \n",
" (None, 128), \n",
" 'input_word_ids': \n",
" (None, 128), \n",
" 'input_mask': (Non \n",
" e, 128)} \n",
" \n",
" BERT_encoder (KerasLayer) {'sequence_output': 13548801 ['preprocessing[0][0]', \n",
" (None, 128, 256), 'preprocessing[0][1]', \n",
" 'encoder_outputs': 'preprocessing[0][2]'] \n",
" [(None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256), \n",
" (None, 128, 256)], \n",
" 'default': (None, \n",
" 256), \n",
" 'pooled_output': ( \n",
" None, 256)} \n",
" \n",
" dropout_1 (Dropout) (None, 256) 0 ['BERT_encoder[0][13]'] \n",
" \n",
" classifier (Dense) (None, 1) 257 ['dropout_1[0][0]'] \n",
" \n",
"==================================================================================================\n",
"Total params: 13,549,058\n",
"Trainable params: 13,549,057\n",
"Non-trainable params: 1\n",
"__________________________________________________________________________________________________\n",
"Training model with https://tfhub.dev/google/electra_small/2\n",
"Epoch 1/34\n",
"42/42 [==============================] - 37s 255ms/step - loss: 0.5633 - binary_accuracy: 0.7036 - val_loss: 0.3529 - val_binary_accuracy: 0.8482\n",
"Epoch 2/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 0.2114 - binary_accuracy: 0.9289 - val_loss: 0.0842 - val_binary_accuracy: 0.9773\n",
"Epoch 3/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 0.0651 - binary_accuracy: 0.9813 - val_loss: 0.0626 - val_binary_accuracy: 0.9791\n",
"Epoch 4/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 0.0376 - binary_accuracy: 0.9903 - val_loss: 0.0551 - val_binary_accuracy: 0.9843\n",
"Epoch 5/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 0.0199 - binary_accuracy: 0.9948 - val_loss: 0.0757 - val_binary_accuracy: 0.9773\n",
"Epoch 6/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 0.0143 - binary_accuracy: 0.9970 - val_loss: 0.0709 - val_binary_accuracy: 0.9773\n",
"Epoch 7/34\n",
"42/42 [==============================] - 10s 235ms/step - loss: 0.0080 - binary_accuracy: 0.9978 - val_loss: 0.0553 - val_binary_accuracy: 0.9843\n",
"Epoch 8/34\n",
"42/42 [==============================] - 10s 239ms/step - loss: 0.0042 - binary_accuracy: 0.9993 - val_loss: 0.0608 - val_binary_accuracy: 0.9860\n",
"Epoch 9/34\n",
"42/42 [==============================] - 10s 244ms/step - loss: 0.0027 - binary_accuracy: 1.0000 - val_loss: 0.0617 - val_binary_accuracy: 0.9860\n",
"Epoch 10/34\n",
"42/42 [==============================] - 10s 239ms/step - loss: 0.0018 - binary_accuracy: 1.0000 - val_loss: 0.0679 - val_binary_accuracy: 0.9843\n",
"Epoch 11/34\n",
"42/42 [==============================] - 10s 239ms/step - loss: 0.0014 - binary_accuracy: 1.0000 - val_loss: 0.0721 - val_binary_accuracy: 0.9843\n",
"Epoch 12/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 0.0011 - binary_accuracy: 1.0000 - val_loss: 0.0772 - val_binary_accuracy: 0.9843\n",
"Epoch 13/34\n",
"42/42 [==============================] - 10s 235ms/step - loss: 0.0026 - binary_accuracy: 0.9993 - val_loss: 0.0946 - val_binary_accuracy: 0.9756\n",
"Epoch 14/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 0.0048 - binary_accuracy: 0.9985 - val_loss: 0.0864 - val_binary_accuracy: 0.9791\n",
"Epoch 15/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 0.0021 - binary_accuracy: 1.0000 - val_loss: 0.0864 - val_binary_accuracy: 0.9791\n",
"Epoch 16/34\n",
"42/42 [==============================] - 10s 238ms/step - loss: 0.0011 - binary_accuracy: 1.0000 - val_loss: 0.0792 - val_binary_accuracy: 0.9825\n",
"Epoch 17/34\n",
"42/42 [==============================] - 10s 232ms/step - loss: 8.2108e-04 - binary_accuracy: 1.0000 - val_loss: 0.0830 - val_binary_accuracy: 0.9808\n",
"Epoch 18/34\n",
"42/42 [==============================] - 10s 235ms/step - loss: 7.7923e-04 - binary_accuracy: 1.0000 - val_loss: 0.0829 - val_binary_accuracy: 0.9825\n",
"Epoch 19/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 6.6255e-04 - binary_accuracy: 1.0000 - val_loss: 0.0806 - val_binary_accuracy: 0.9843\n",
"Epoch 20/34\n",
"42/42 [==============================] - 10s 238ms/step - loss: 6.3440e-04 - binary_accuracy: 1.0000 - val_loss: 0.0848 - val_binary_accuracy: 0.9825\n",
"Epoch 21/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 5.3386e-04 - binary_accuracy: 1.0000 - val_loss: 0.0854 - val_binary_accuracy: 0.9825\n",
"Epoch 22/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 5.6435e-04 - binary_accuracy: 1.0000 - val_loss: 0.0874 - val_binary_accuracy: 0.9825\n",
"Epoch 23/34\n",
"42/42 [==============================] - 10s 235ms/step - loss: 5.6810e-04 - binary_accuracy: 1.0000 - val_loss: 0.0868 - val_binary_accuracy: 0.9825\n",
"Epoch 24/34\n",
"42/42 [==============================] - 10s 235ms/step - loss: 4.5731e-04 - binary_accuracy: 1.0000 - val_loss: 0.0867 - val_binary_accuracy: 0.9825\n",
"Epoch 25/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 4.4671e-04 - binary_accuracy: 1.0000 - val_loss: 0.0877 - val_binary_accuracy: 0.9825\n",
"Epoch 26/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 4.9401e-04 - binary_accuracy: 1.0000 - val_loss: 0.0900 - val_binary_accuracy: 0.9825\n",
"Epoch 27/34\n",
"42/42 [==============================] - 10s 238ms/step - loss: 3.6857e-04 - binary_accuracy: 1.0000 - val_loss: 0.0903 - val_binary_accuracy: 0.9825\n",
"Epoch 28/34\n",
"42/42 [==============================] - 10s 235ms/step - loss: 3.8106e-04 - binary_accuracy: 1.0000 - val_loss: 0.0905 - val_binary_accuracy: 0.9825\n",
"Epoch 29/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 3.7847e-04 - binary_accuracy: 1.0000 - val_loss: 0.0910 - val_binary_accuracy: 0.9825\n",
"Epoch 30/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 3.7153e-04 - binary_accuracy: 1.0000 - val_loss: 0.0911 - val_binary_accuracy: 0.9825\n",
"Epoch 31/34\n",
"42/42 [==============================] - 10s 237ms/step - loss: 3.4990e-04 - binary_accuracy: 1.0000 - val_loss: 0.0913 - val_binary_accuracy: 0.9825\n",
"Epoch 32/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 3.6358e-04 - binary_accuracy: 1.0000 - val_loss: 0.0911 - val_binary_accuracy: 0.9825\n",
"Epoch 33/34\n",
"42/42 [==============================] - 10s 236ms/step - loss: 3.5723e-04 - binary_accuracy: 1.0000 - val_loss: 0.0910 - val_binary_accuracy: 0.9825\n",
"Epoch 34/34\n",
"42/42 [==============================] - 10s 234ms/step - loss: 3.7230e-04 - binary_accuracy: 1.0000 - val_loss: 0.0915 - val_binary_accuracy: 0.9825\n",
"18/18 [==============================] - 1s 64ms/step - loss: 0.0915 - binary_accuracy: 0.9825\n",
"Loss: 0.09151919186115265\n",
"Accuracy: 0.9825479984283447\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:absl:Found untraced functions such as restored_function_body, restored_function_body, restored_function_body, restored_function_body, restored_function_body while saving (showing 5 of 360). These functions will not be directly callable after loading.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Assets written to: ./bert_models/1670690385.641988/assets\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:tensorflow:Assets written to: ./bert_models/1670690385.641988/assets\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Message: \"Greg, can you call me back once you get this?\"\n",
"Likeliness of spam in percentage: 0.000258\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Congrats on your new iPhone! Click here to claim your prize...\"\n",
"Likeliness of spam in percentage: 0.858939\n",
"Vote by AI: Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Really like that new photo of you\"\n",
"Likeliness of spam in percentage: 0.007752\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Did you hear the news today? Terrible what has happened...\"\n",
"Likeliness of spam in percentage: 0.000284\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Attend this free COVID webinar today: Book your session now...\"\n",
"Likeliness of spam in percentage: 0.998953\n",
"Vote by AI: Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Are you coming to the party tonight?\"\n",
"Likeliness of spam in percentage: 0.007384\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Your parcel has gone missing\"\n",
"Likeliness of spam in percentage: 0.003767\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Do not forget to bring friends!\"\n",
"Likeliness of spam in percentage: 0.000505\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"You have won a million dollars! Fill out your bank details here...\"\n",
"Likeliness of spam in percentage: 0.947860\n",
"Vote by AI: Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Looking forward to seeing you again\"\n",
"Likeliness of spam in percentage: 0.152917\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"oh wow https://github.com/MGCodesandStats/tensorflow-nlp/blob/master/spam%20detection%20tensorflow%20v2.ipynb works really good on spam detection. Guess I go with that as the base model then lol :D\"\n",
"Likeliness of spam in percentage: 0.999562\n",
"Vote by AI: Spam\n",
"Model failed to predict correctly\n",
"\n",
"\n",
"Message: \"ayo\"\n",
"Likeliness of spam in percentage: 0.027977\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Almost all my spam is coming to my non-gmail address actually\"\n",
"Likeliness of spam in percentage: 0.057861\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Oh neat I think I found the sizing sweetspot for my data :D\"\n",
"Likeliness of spam in percentage: 0.000136\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"would never click on buttons in gmail :D always expecting there to be a bug in gmail that allows js to grab your google credentials :D XSS via email lol. I am too scared for touching spam in gmail\"\n",
"Likeliness of spam in percentage: 0.212154\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"back to cacophony \"\n",
"Likeliness of spam in percentage: 0.066419\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"Room version 11 when\"\n",
"Likeliness of spam in percentage: 0.944931\n",
"Vote by AI: Spam\n",
"Model failed to predict correctly\n",
"\n",
"\n",
"Message: \"skip 11 and go straight to 12\"\n",
"Likeliness of spam in percentage: 0.006444\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"100 events should clear out any events that might be causing a request to fail lol\"\n",
"Likeliness of spam in percentage: 0.019123\n",
"Vote by AI: Not Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"Message: \"I'll help anyone interested on how to invest and earn $30k, $50k, $100k, $200k or more in just 72hours from the crypto market.But you will have to pay me my commission! when you receive your profit! if interested send me a direct message let's get started or via WhatsApp +1 (605) 9536801\"\n",
"Likeliness of spam in percentage: 0.999778\n",
"Vote by AI: Spam\n",
"Model predicted correctly\n",
"\n",
"\n",
"18 out of 20 are detected correctly\n",
"\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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IyPx1VdfwdzcXKd83rx5mDdvHhQKBV5//XWsXbtWOvbss8+iV69e+Mc//oHPP/8cMTExuHz5MqysrAAA33//PYYPH45r165BpVKhXbt2mDJlChYvXlxrDAqFAvPnz8d7770H4EHCZm1tjd27dyMkJAQvvfQSnJycsG7dusf0KRARkSHgM1dERGT0XnjhBZ3kCQAcHByk1wEBATrHAgICkJGRAQDIysqCj4+PlFgBwHPPPQetVovs7GwoFApcu3YNQUFB9cbg7e0tvbaysoKtrS2uX78OAHjjjTcwevRonD59GoMHD0ZoaCj69u37SO+ViIgMF5MrIiIyelZWVjVu09MXCwuLRtVr3bq1zr5CoYBWqwUADBkyBL/++iu+//57pKSkICgoCFFRUVi+fLne4yUiIvnwmSsiInriHTt2rMZ+t27dAADdunXDmTNnUFJSIh1PS0uDiYkJunTpAhsbG3Ts2BGpqalNisHZ2RkRERH46quvsGrVKnz22WdNao+IiAwPZ66IiMjolZeXo6CgQKesVatW0qIRycnJ6N27N55//nl8/fXXOHHiBBITEwEA4eHhWLhwISIiIrBo0SL89ttvmDFjBiZNmgSVSgUAWLRoEV5//XW0bdsWQ4YMwZ07d5CWloYZM2Y0Kr4FCxbA19cXPXr0QHl5Ob777jspuSMioicHkysiIjJ6e/bsgYuLi05Zly5dcOHCBQAPVvJLSkrCm2++CRcXF2zevBndu3cHAFhaWmLv3r2YOXMm+vTpA0tLS4wePRorVqyQ2oqIiEBZWRlWrlyJOXPmwMnJCWPGjGl0fGZmZoiNjcUvv/wCCwsL9OvXD0lJSXp450REZEi4WiARET3RFAoFtm/fjtDQULlDISKiJxyfuSIiIiIiItIDJldERERERER6wGeuiIjoica734mIqLlw5oqIiIiIiEgPmFwRERERERHpAZMrIiIiIiIiPWByRUREREREpAdMroiIiIiIiPSAyRUREREREZEeMLkiIiIiIiLSAyZXREREREREevD/ACHCGDyB91ItAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1000x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"!pip3 install --quiet tensorflow-text numpy pandas tf-models-official\n",
"\n",
"import csv\n",
"import numpy as np\n",
"import tensorflow as tf\n",
"import tensorflow_hub as hub\n",
"import pandas as pd\n",
"import tensorflow as tf\n",
"import tensorflow_hub as hub\n",
"import tensorflow_models as tfm\n",
"#from official.nlp import optimization # to create AdamW optimizer\n",
"import tensorflow_text as text # needed even if unused\n",
"import time\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"def change_labels(x):\n",
" return 1 if x == \"spam\" else 0\n",
"\n",
"data = pd.read_csv(\n",
" \"./input/MatrixData.tsv\", sep=\"\\t\", quoting=csv.QUOTE_NONE, encoding=\"utf-8\"\n",
")\n",
"\n",
"# Minimum length\n",
"data = data[data[\"message\"].str.split().str.len().gt(18)]\n",
"# Remove unknown\n",
"data.dropna(inplace=True)\n",
"data.reset_index(drop=True, inplace=True)\n",
"data[\"label\"] = data[\"label\"].apply(change_labels)\n",
"\n",
"# Remove stopwords\n",
"#data[\"message\"] = data[\"message\"].apply(remove_stopwords)\n",
"# Shuffle data\n",
"data = data.sample(frac=1).reset_index(drop=True)\n",
"\n",
"# Split data into messages and label sets\n",
"sentences = data[\"message\"].tolist()\n",
"labels = data[\"label\"].tolist()\n",
"\n",
"# Separate out the sentences and labels into training and test sets\n",
"# training_size = int(len(sentences) * 0.8)\n",
"training_size = int(len(sentences) * 0.7)\n",
"training_sentences = sentences[0:training_size]\n",
"testing_sentences = sentences[training_size:]\n",
"training_labels = labels[0:training_size]\n",
"testing_labels = labels[training_size:]\n",
"\n",
"# Make labels into numpy arrays for use with the network later\n",
"test_labels = np.array(testing_labels)\n",
"train_labels = np.array(training_labels)\n",
"train_examples = np.array(training_sentences)\n",
"test_examples = np.array(testing_sentences)\n",
"\n",
"# Build dataset\n",
"AUTOTUNE = tf.data.AUTOTUNE\n",
"batch_size = 32\n",
"\n",
"raw_train_ds = tf.data.Dataset.from_tensor_slices((train_examples,train_labels))\n",
"train_ds = raw_train_ds.batch(batch_size).cache().prefetch(buffer_size=AUTOTUNE)\n",
"\n",
"raw_val_ds = tf.data.Dataset.from_tensor_slices((test_examples,test_labels))\n",
"val_ds = raw_val_ds.batch(batch_size).cache().prefetch(buffer_size=AUTOTUNE)\n",
"test_ds = raw_val_ds.batch(batch_size).cache().prefetch(buffer_size=AUTOTUNE)\n",
"\n",
"# Load the BERT encoder and preprocessing models\n",
"# Alternative https://tfhub.dev/google/electra_small/2\n",
"tfhub_handle_preprocess = 'https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3'\n",
"tfhub_handle_encoder = 'https://tfhub.dev/google/electra_small/2'\n",
"\n",
"def build_classifier_model():\n",
" text_input = tf.keras.layers.Input(shape=(), dtype=tf.string, name='text')\n",
" preprocessing_layer = hub.KerasLayer(tfhub_handle_preprocess, name='preprocessing')\n",
" encoder_inputs = preprocessing_layer(text_input)\n",
" encoder = hub.KerasLayer(tfhub_handle_encoder, trainable=True, name='BERT_encoder')\n",
" outputs = encoder(encoder_inputs)\n",
" net = outputs['pooled_output']\n",
" net = tf.keras.layers.Dropout(0.1)(net)\n",
" net = tf.keras.layers.Dense(1, activation=None, name='classifier')(net)\n",
" return tf.keras.Model(text_input, net)\n",
"\n",
"\n",
"classifier_model = build_classifier_model()\n",
"classifier_model.summary()\n",
"# bert_raw_result = classifier_model(tf.constant(sentences))\n",
"# print(tf.sigmoid(bert_raw_result))\n",
"tf.keras.utils.plot_model(classifier_model, show_dtype=True)\n",
"\n",
"loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)\n",
"metrics = tf.metrics.BinaryAccuracy()\n",
"\n",
"epochs = 34\n",
"steps_per_epoch = tf.data.experimental.cardinality(train_ds).numpy()\n",
"num_train_steps = steps_per_epoch * epochs\n",
"num_warmup_steps = int(0.1*num_train_steps)\n",
"\n",
"init_lr = 3e-5\n",
"linear_decay = tf.keras.optimizers.schedules.PolynomialDecay(\n",
" initial_learning_rate=init_lr,\n",
" end_learning_rate=0,\n",
" decay_steps=num_train_steps)\n",
"warmup_schedule = tfm.optimization.lr_schedule.LinearWarmup(\n",
" warmup_learning_rate = 0,\n",
" after_warmup_lr_sched = linear_decay,\n",
" warmup_steps = num_warmup_steps\n",
")\n",
"x = tf.linspace(0, num_train_steps, 1001)\n",
"y = [warmup_schedule(xi) for xi in x]\n",
"plt.plot(x,y)\n",
"plt.xlabel('Train step')\n",
"plt.ylabel('Learning rate')\n",
"\n",
"\n",
"\n",
"#optimizer = optimization.create_optimizer(init_lr=init_lr,\n",
"# num_train_steps=num_train_steps,\n",
"# num_warmup_steps=num_warmup_steps,\n",
"# optimizer_type='adamw')\n",
"optimizer = tf.keras.optimizers.experimental.Adam(\n",
" learning_rate = warmup_schedule)\n",
"\n",
"\n",
"classifier_model.compile(optimizer=optimizer,\n",
" loss=loss,\n",
" metrics=metrics)\n",
"\n",
"print(f'Training model with {tfhub_handle_encoder}')\n",
"history = classifier_model.fit(x=train_ds,\n",
" validation_data=val_ds,\n",
" epochs=epochs)\n",
"\n",
"loss, accuracy = classifier_model.evaluate(test_ds)\n",
"\n",
"print(f'Loss: {loss}')\n",
"print(f'Accuracy: {accuracy}')\n",
"\n",
"\n",
"history_dict = history.history\n",
"\n",
"acc = history_dict['binary_accuracy']\n",
"val_acc = history_dict['val_binary_accuracy']\n",
"loss = history_dict['loss']\n",
"val_loss = history_dict['val_loss']\n",
"\n",
"epochs = range(1, len(acc) + 1)\n",
"fig = plt.figure(figsize=(10, 6))\n",
"fig.tight_layout()\n",
"\n",
"plt.subplot(2, 1, 1)\n",
"# r is for \"solid red line\"\n",
"plt.plot(epochs, loss, 'r', label='Training loss')\n",
"# b is for \"solid blue line\"\n",
"plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
"plt.title('Training and validation loss')\n",
"# plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"\n",
"plt.subplot(2, 1, 2)\n",
"plt.plot(epochs, acc, 'r', label='Training acc')\n",
"plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
"plt.title('Training and validation accuracy')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Accuracy')\n",
"plt.legend(loc='lower right')\n",
"\n",
"\n",
"saved_model_path = f'./bert_models/{time.time()}'\n",
"\n",
"classifier_model.save(saved_model_path, include_optimizer=False)\n",
"\n",
"def test_model(model):\n",
" # Use the model to predict whether a message is spam\n",
" text_messages = [\n",
" \"Greg, can you call me back once you get this?\",\n",
" \"Congrats on your new iPhone! Click here to claim your prize...\",\n",
" \"Really like that new photo of you\",\n",
" \"Did you hear the news today? Terrible what has happened...\",\n",
" \"Attend this free COVID webinar today: Book your session now...\",\n",
" \"Are you coming to the party tonight?\",\n",
" \"Your parcel has gone missing\",\n",
" \"Do not forget to bring friends!\",\n",
" \"You have won a million dollars! Fill out your bank details here...\",\n",
" \"Looking forward to seeing you again\",\n",
" \"oh wow https://github.com/MGCodesandStats/tensorflow-nlp/blob/master/spam%20detection%20tensorflow%20v2.ipynb works really good on spam detection. Guess I go with that as the base model then lol :D\",\n",
" \"ayo\",\n",
" \"Almost all my spam is coming to my non-gmail address actually\",\n",
" \"Oh neat I think I found the sizing sweetspot for my data :D\",\n",
" \"would never click on buttons in gmail :D always expecting there to be a bug in gmail that allows js to grab your google credentials :D XSS via email lol. I am too scared for touching spam in gmail\",\n",
" \"back to cacophony \",\n",
" \"Room version 11 when\",\n",
" \"skip 11 and go straight to 12\",\n",
" \"100 events should clear out any events that might be causing a request to fail lol\",\n",
" \"I'll help anyone interested on how to invest and earn $30k, $50k, $100k, $200k or more in just 72hours from the crypto market.But you will have to pay me my commission! when you receive your profit! if interested send me a direct message let's get started or via WhatsApp +1 (605) 9536801\",\n",
" ]\n",
"\n",
" spam_no_spam = [\n",
" False,\n",
" True,\n",
" False,\n",
" False,\n",
" True,\n",
" False,\n",
" False,\n",
" False,\n",
" True,\n",
" False,\n",
" False,\n",
" False,\n",
" False,\n",
" False,\n",
" False,\n",
" False,\n",
" False,\n",
" False,\n",
" False,\n",
" True,\n",
" ]\n",
"\n",
" # print(text_messages)\n",
"\n",
" # Create the sequences\n",
" results = tf.sigmoid(model(tf.constant(text_messages)))\n",
"\n",
" # The closer the class is to 1, the more likely that the message is spam\n",
" correct = 0\n",
" expected = len(spam_no_spam)\n",
" for x in range(len(text_messages)):\n",
" print(f'Message: \"{text_messages[x]}\"')\n",
" print(f\"Likeliness of spam in percentage: {results[x][0]:.6f}\")\n",
" spam = results[x][0] >= 0.8\n",
" if spam:\n",
" print(\"Vote by AI: Spam\")\n",
" else:\n",
" print(\"Vote by AI: Not Spam\")\n",
"\n",
" if spam_no_spam[x] != spam:\n",
" print(\"Model failed to predict correctly\")\n",
" else:\n",
" correct = correct+1\n",
" print(\"Model predicted correctly\")\n",
" print(\"\\n\")\n",
" print(f\"{correct} out of {expected} are detected correctly\\n\")\n",
"\n",
"\n",
"test_model(classifier_model)\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.15 ('tf')",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.15"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "86eece18b6898e5d361741678d0e9a4298e9b9ab2411f93d35b863e6e254e93a"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}