{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"colab":{"provenance":[]}},"nbformat_minor":0,"nbformat":4,"cells":[{"cell_type":"code","source":["# This Python 3 environment comes with many helpful analytics libraries installed\n","# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n","# For example, here's several helpful packages to load\n","\n","import numpy as np # linear algebra\n","import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n","\n","# Input data files are available in the read-only \"../input/\" directory\n","# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n","\n","import os\n","for dirname, _, filenames in os.walk('/kaggle/input'):\n"," for filename in filenames:\n"," print(os.path.join(dirname, filename))\n","\n","# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\"\n","# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session"],"metadata":{"_uuid":"d8e725fd-259f-4b0c-8256-134a9f427df7","_cell_guid":"cf754f24-e571-4113-a5ed-656f1f24bce6","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:39:36.406539Z","iopub.execute_input":"2023-10-27T19:39:36.407090Z","iopub.status.idle":"2023-10-27T19:39:36.775683Z","shell.execute_reply.started":"2023-10-27T19:39:36.407063Z","shell.execute_reply":"2023-10-27T19:39:36.774605Z"},"trusted":true,"id":"aLMiXulAq8IQ","executionInfo":{"status":"ok","timestamp":1698517883348,"user_tz":-180,"elapsed":487,"user":{"displayName":"Jasem Almansour","userId":"17867395552910147411"}}},"execution_count":1,"outputs":[]},{"cell_type":"markdown","source":["### install and import important libraries"],"metadata":{"_uuid":"6793367f-b4a4-401a-acdd-f6b5352e182a","_cell_guid":"305a9ca9-d45a-4ef2-8fdb-5cd4c2995a6f","trusted":true,"id":"97oxHEgXq8IY"}},{"cell_type":"code","source":["pip install streamlit"],"metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2023-10-27T19:40:46.121550Z","iopub.execute_input":"2023-10-27T19:40:46.122052Z","iopub.status.idle":"2023-10-27T19:41:00.894314Z","shell.execute_reply.started":"2023-10-27T19:40:46.122020Z","shell.execute_reply":"2023-10-27T19:41:00.893204Z"},"trusted":true,"id":"tXq3HLXHq8Ib","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1698517896926,"user_tz":-180,"elapsed":10830,"user":{"displayName":"Jasem Almansour","userId":"17867395552910147411"}},"outputId":"48738f3a-72bd-4975-aa11-9df1128d5324"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting streamlit\n"," Downloading streamlit-1.28.0-py2.py3-none-any.whl (8.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.4/8.4 MB\u001b[0m \u001b[31m23.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: altair<6,>=4.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (4.2.2)\n","Requirement already satisfied: blinker<2,>=1.0.0 in /usr/lib/python3/dist-packages (from streamlit) (1.4)\n","Requirement already satisfied: cachetools<6,>=4.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (5.3.2)\n","Requirement already satisfied: click<9,>=7.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (8.1.7)\n","Requirement already satisfied: importlib-metadata<7,>=1.4 in /usr/local/lib/python3.10/dist-packages (from streamlit) (6.8.0)\n","Requirement already satisfied: numpy<2,>=1.19.3 in /usr/local/lib/python3.10/dist-packages (from streamlit) (1.23.5)\n","Requirement already satisfied: packaging<24,>=16.8 in /usr/local/lib/python3.10/dist-packages (from streamlit) (23.2)\n","Requirement already satisfied: pandas<3,>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (1.5.3)\n","Requirement already satisfied: pillow<11,>=7.1.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (9.4.0)\n","Requirement already satisfied: protobuf<5,>=3.20 in /usr/local/lib/python3.10/dist-packages (from streamlit) (3.20.3)\n","Requirement already satisfied: pyarrow>=6.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (9.0.0)\n","Requirement already satisfied: python-dateutil<3,>=2.7.3 in /usr/local/lib/python3.10/dist-packages (from streamlit) (2.8.2)\n","Requirement already satisfied: requests<3,>=2.27 in /usr/local/lib/python3.10/dist-packages (from streamlit) (2.31.0)\n","Requirement already satisfied: rich<14,>=10.14.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (13.6.0)\n","Requirement already satisfied: tenacity<9,>=8.1.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (8.2.3)\n","Requirement already satisfied: toml<2,>=0.10.1 in /usr/local/lib/python3.10/dist-packages (from streamlit) (0.10.2)\n","Requirement already satisfied: typing-extensions<5,>=4.3.0 in /usr/local/lib/python3.10/dist-packages (from streamlit) (4.5.0)\n","Requirement already satisfied: tzlocal<6,>=1.1 in /usr/local/lib/python3.10/dist-packages (from streamlit) (5.2)\n","Collecting validators<1,>=0.2 (from streamlit)\n"," Downloading validators-0.22.0-py3-none-any.whl (26 kB)\n","Collecting gitpython!=3.1.19,<4,>=3.0.7 (from streamlit)\n"," Downloading GitPython-3.1.40-py3-none-any.whl (190 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m190.6/190.6 kB\u001b[0m \u001b[31m17.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting pydeck<1,>=0.8.0b4 (from streamlit)\n"," Downloading pydeck-0.8.1b0-py2.py3-none-any.whl (4.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.8/4.8 MB\u001b[0m \u001b[31m51.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: tornado<7,>=6.0.3 in /usr/local/lib/python3.10/dist-packages (from streamlit) (6.3.2)\n","Collecting watchdog>=2.1.5 (from streamlit)\n"," Downloading watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl (82 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m82.1/82.1 kB\u001b[0m \u001b[31m8.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: entrypoints in /usr/local/lib/python3.10/dist-packages (from altair<6,>=4.0->streamlit) (0.4)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from altair<6,>=4.0->streamlit) (3.1.2)\n","Requirement already satisfied: jsonschema>=3.0 in /usr/local/lib/python3.10/dist-packages (from altair<6,>=4.0->streamlit) (4.19.1)\n","Requirement already satisfied: toolz in /usr/local/lib/python3.10/dist-packages (from altair<6,>=4.0->streamlit) (0.12.0)\n","Collecting gitdb<5,>=4.0.1 (from gitpython!=3.1.19,<4,>=3.0.7->streamlit)\n"," Downloading gitdb-4.0.11-py3-none-any.whl (62 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.7/62.7 kB\u001b[0m \u001b[31m6.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata<7,>=1.4->streamlit) (3.17.0)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas<3,>=1.3.0->streamlit) (2023.3.post1)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil<3,>=2.7.3->streamlit) (1.16.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->streamlit) (3.3.1)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->streamlit) (3.4)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->streamlit) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.27->streamlit) (2023.7.22)\n","Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich<14,>=10.14.0->streamlit) (3.0.0)\n","Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich<14,>=10.14.0->streamlit) (2.16.1)\n","Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython!=3.1.19,<4,>=3.0.7->streamlit)\n"," Downloading smmap-5.0.1-py3-none-any.whl (24 kB)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->altair<6,>=4.0->streamlit) (2.1.3)\n","Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6,>=4.0->streamlit) (23.1.0)\n","Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6,>=4.0->streamlit) (2023.7.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6,>=4.0->streamlit) (0.30.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=3.0->altair<6,>=4.0->streamlit) (0.10.6)\n","Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich<14,>=10.14.0->streamlit) (0.1.2)\n","Installing collected packages: watchdog, validators, smmap, pydeck, gitdb, gitpython, streamlit\n","Successfully installed gitdb-4.0.11 gitpython-3.1.40 pydeck-0.8.1b0 smmap-5.0.1 streamlit-1.28.0 validators-0.22.0 watchdog-3.0.0\n"]}]},{"cell_type":"code","source":["import matplotlib.pyplot as plt\n","import random\n","import keras\n","import tensorflow as tf\n","\n","from transformers import AutoTokenizer\n","from transformers import TFDistilBertModel, AutoConfig\n","\n","import streamlit as st"],"metadata":{"_uuid":"764b0395-0f2e-4a26-b71b-b3b238e65803","_cell_guid":"93240b3c-c91d-45fc-afdc-6e25ccde9a76","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:14.020793Z","iopub.execute_input":"2023-10-27T19:41:14.021294Z","iopub.status.idle":"2023-10-27T19:41:14.988123Z","shell.execute_reply.started":"2023-10-27T19:41:14.021266Z","shell.execute_reply":"2023-10-27T19:41:14.987315Z"},"trusted":true,"id":"2gWitzGQq8Ic","colab":{"base_uri":"https://localhost:8080/","height":383},"executionInfo":{"status":"error","timestamp":1698517925997,"user_tz":-180,"elapsed":652,"user":{"displayName":"Jasem Almansour","userId":"17867395552910147411"}},"outputId":"0ae4e935-7486-475e-eaba-3f3dcbb01b4e"},"execution_count":4,"outputs":[{"output_type":"error","ename":"ModuleNotFoundError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtensorflow\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtransformers\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mAutoTokenizer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtransformers\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTFDistilBertModel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mAutoConfig\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'transformers'","","\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n"],"errorDetails":{"actions":[{"action":"open_url","actionText":"Open Examples","url":"/notebooks/snippets/importing_libraries.ipynb"}]}}]},{"cell_type":"markdown","source":["### Preprocessing"],"metadata":{"_uuid":"f61c70f1-311b-4dcd-938c-ff4ab102865c","_cell_guid":"b7308c78-1bfa-4dff-988f-7fcb45c5ee31","trusted":true,"id":"6_-QMa4nq8Id"}},{"cell_type":"code","source":["# Load the dataset files\n","df_train = pd.read_csv('/kaggle/input/nlp-getting-started/train.csv')\n","df_test = pd.read_csv('/kaggle/input/nlp-getting-started/test.csv')"],"metadata":{"_uuid":"64c41258-61fe-4193-a5c8-00a1fcdcd7cb","_cell_guid":"c0e5785a-3393-4e7a-a573-0da8c001bfa0","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:14.989959Z","iopub.execute_input":"2023-10-27T19:41:14.990260Z","iopub.status.idle":"2023-10-27T19:41:15.103684Z","shell.execute_reply.started":"2023-10-27T19:41:14.990233Z","shell.execute_reply":"2023-10-27T19:41:15.102798Z"},"trusted":true,"id":"DnPsxqPpq8Id","colab":{"base_uri":"https://localhost:8080/","height":355},"executionInfo":{"status":"error","timestamp":1698517943331,"user_tz":-180,"elapsed":425,"user":{"displayName":"Jasem Almansour","userId":"17867395552910147411"}},"outputId":"ce351468-1e00-439f-db42-94160b65ebcd"},"execution_count":5,"outputs":[{"output_type":"error","ename":"FileNotFoundError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)","\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Load the dataset files\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdf_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/kaggle/input/nlp-getting-started/train.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mdf_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'/kaggle/input/nlp-getting-started/test.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/util/_decorators.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 209\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnew_arg_name\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_arg_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 211\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 212\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/util/_decorators.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[0mstacklevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfind_stack_level\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 330\u001b[0m )\n\u001b[0;32m--> 331\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 332\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[0;31m# error: \"Callable[[VarArg(Any), KwArg(Any)], Any]\" has no\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[1;32m 948\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 949\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 950\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 951\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 952\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 603\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 604\u001b[0m \u001b[0;31m# Create the parser.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 605\u001b[0;31m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 606\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 607\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 1440\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1441\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandles\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mIOHandles\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1442\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1443\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1444\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[0;34m(self, f, engine)\u001b[0m\n\u001b[1;32m 1733\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m\"b\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m\"b\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1735\u001b[0;31m self.handles = get_handle(\n\u001b[0m\u001b[1;32m 1736\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1737\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pandas/io/common.py\u001b[0m in \u001b[0;36mget_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[1;32m 854\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencoding\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m\"b\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 855\u001b[0m \u001b[0;31m# Encoding\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 856\u001b[0;31m handle = open(\n\u001b[0m\u001b[1;32m 857\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 858\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/kaggle/input/nlp-getting-started/train.csv'"]}]},{"cell_type":"markdown","source":["let's look at the training data"],"metadata":{"_uuid":"5d1d2327-e567-4704-9961-dba574735645","_cell_guid":"00d3bfa5-4e1b-4db8-be5a-55d9516ddb7f","trusted":true,"id":"zTIeDUw8q8If"}},{"cell_type":"code","source":["print(df_train.columns)\n","print(df_train.shape)\n","df_train.head()"],"metadata":{"_uuid":"e6b3baf4-d084-4f76-9ec0-7f54234541cd","_cell_guid":"65b54a29-f70c-4fee-adca-9e2a9451c2e1","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:19.084998Z","iopub.execute_input":"2023-10-27T19:41:19.085364Z","iopub.status.idle":"2023-10-27T19:41:19.108415Z","shell.execute_reply.started":"2023-10-27T19:41:19.085334Z","shell.execute_reply":"2023-10-27T19:41:19.107466Z"},"trusted":true,"id":"FXivPW8Nq8If","outputId":"55982b8b-b60e-4fa6-d608-ff06718367b5"},"execution_count":null,"outputs":[{"name":"stdout","text":"Index(['id', 'keyword', 'location', 'text', 'target'], dtype='object')\n(7613, 5)\n","output_type":"stream"},{"execution_count":6,"output_type":"execute_result","data":{"text/plain":" id keyword location text \\\n0 1 NaN NaN Our Deeds are the Reason of this #earthquake M... \n1 4 NaN NaN Forest fire near La Ronge Sask. Canada \n2 5 NaN NaN All residents asked to 'shelter in place' are ... \n3 6 NaN NaN 13,000 people receive #wildfires evacuation or... \n4 7 NaN NaN Just got sent this photo from Ruby #Alaska as ... \n\n target \n0 1 \n1 1 \n2 1 \n3 1 \n4 1 ","text/html":"
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idkeywordlocationtexttarget
01NaNNaNOur Deeds are the Reason of this #earthquake M...1
14NaNNaNForest fire near La Ronge Sask. Canada1
25NaNNaNAll residents asked to 'shelter in place' are ...1
36NaNNaN13,000 people receive #wildfires evacuation or...1
47NaNNaNJust got sent this photo from Ruby #Alaska as ...1
\n
"},"metadata":{}}]},{"cell_type":"markdown","source":["Now let's look at the testing data"],"metadata":{"_uuid":"515ab512-06b7-4cce-9a95-f2916f1fd4ad","_cell_guid":"c96e4868-5978-4ca3-8272-af81f4f1d56f","trusted":true,"id":"jLhs-rRiq8Ig"}},{"cell_type":"code","source":["print(df_test.columns)\n","print(df_test.shape)\n","df_test.head()"],"metadata":{"_uuid":"1ea066a1-3a43-467a-a70f-91c131d5868c","_cell_guid":"c08cc742-e3c4-4a66-be8f-422965d1c8a8","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:19.914598Z","iopub.execute_input":"2023-10-27T19:41:19.914973Z","iopub.status.idle":"2023-10-27T19:41:19.926242Z","shell.execute_reply.started":"2023-10-27T19:41:19.914942Z","shell.execute_reply":"2023-10-27T19:41:19.925362Z"},"trusted":true,"id":"LSuuIC2jq8Il","outputId":"16e482e3-aa53-421a-ef8d-22ba2bfbc96a"},"execution_count":null,"outputs":[{"name":"stdout","text":"Index(['id', 'keyword', 'location', 'text'], dtype='object')\n(3263, 4)\n","output_type":"stream"},{"execution_count":7,"output_type":"execute_result","data":{"text/plain":" id keyword location text\n0 0 NaN NaN Just happened a terrible car crash\n1 2 NaN NaN Heard about #earthquake is different cities, s...\n2 3 NaN NaN there is a forest fire at spot pond, geese are...\n3 9 NaN NaN Apocalypse lighting. #Spokane #wildfires\n4 11 NaN NaN Typhoon Soudelor kills 28 in China and Taiwan","text/html":"
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idkeywordlocationtext
00NaNNaNJust happened a terrible car crash
12NaNNaNHeard about #earthquake is different cities, s...
23NaNNaNthere is a forest fire at spot pond, geese are...
39NaNNaNApocalypse lighting. #Spokane #wildfires
411NaNNaNTyphoon Soudelor kills 28 in China and Taiwan
\n
"},"metadata":{}}]},{"cell_type":"markdown","source":["let's check the null values"],"metadata":{"_uuid":"0a7e59be-5a02-438d-8ecb-334ada13bce9","_cell_guid":"1de18dac-da71-4512-9556-7f7d4ebea7f1","trusted":true,"id":"uOCaMj6Uq8Im"}},{"cell_type":"code","source":["df_train.isna().sum()"],"metadata":{"_uuid":"39359b8a-160a-4718-ace0-e289ac71f01e","_cell_guid":"a31bdec4-7cd0-4466-989b-cdcdbc10bee4","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:20.969504Z","iopub.execute_input":"2023-10-27T19:41:20.970222Z","iopub.status.idle":"2023-10-27T19:41:20.982161Z","shell.execute_reply.started":"2023-10-27T19:41:20.970192Z","shell.execute_reply":"2023-10-27T19:41:20.981195Z"},"trusted":true,"id":"jENpYCHVq8In","outputId":"505c10ff-2c1d-452c-d4cb-19fe183fb434"},"execution_count":null,"outputs":[{"execution_count":8,"output_type":"execute_result","data":{"text/plain":"id 0\nkeyword 61\nlocation 2533\ntext 0\ntarget 0\ndtype: int64"},"metadata":{}}]},{"cell_type":"markdown","source":["we can easily see that the colomns \"keyword, location\" doesn't provide any useful information since most of them are None values...\n","so let's Drop them"],"metadata":{"_uuid":"2676e5e8-c49a-4578-9bbc-75cd5c301b6a","_cell_guid":"999b0c97-291d-43e1-9b35-e5e0fd29be82","trusted":true,"id":"dikPAsUwq8In"}},{"cell_type":"code","source":["df_train= df_train.drop(columns=['keyword', 'location'])\n","df_test= df_test.drop(columns=['keyword', 'location'])\n","print(\"training dataset columns:\",df_train.columns)\n","print(\"testing dataset columns:\",df_test.columns)"],"metadata":{"_uuid":"c626b9de-06b9-4d4f-af1c-59bf7499196e","_cell_guid":"27988b26-0c42-4d8b-b427-1e5c3e157e64","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:21.865299Z","iopub.execute_input":"2023-10-27T19:41:21.865625Z","iopub.status.idle":"2023-10-27T19:41:21.883019Z","shell.execute_reply.started":"2023-10-27T19:41:21.865600Z","shell.execute_reply":"2023-10-27T19:41:21.882046Z"},"trusted":true,"id":"f0zEWKd9q8Io","outputId":"58efec41-8701-4295-f73f-d7c7fe6cfe64"},"execution_count":null,"outputs":[{"name":"stdout","text":"training dataset columns: Index(['id', 'text', 'target'], dtype='object')\ntesting dataset columns: Index(['id', 'text'], dtype='object')\n","output_type":"stream"}]},{"cell_type":"markdown","source":["Now let's check if the two target classes are represented equaly or if one class is under-represented."],"metadata":{"_uuid":"866bd007-6ccc-4e9c-aff7-52edd786dde9","_cell_guid":"3859d518-440f-4034-8556-02a7c0b274d3","trusted":true,"id":"TYc--H-_q8Ip"}},{"cell_type":"code","source":["# Count the number of tweets in each class\n","class_counts = df_train['target'].value_counts()\n","print('0 = Not a Disaster Tweet counts, 1 = Disaster Tweet counts')\n","print(class_counts)\n","\n","# Create a bar plot for the Class Distribution\n","plt.figure(figsize=(6, 4))\n","class_counts.plot(kind='bar', color=['green', 'red'])\n","plt.title('Class Distribution in Training Data - \"target\" column')\n","plt.xlabel('Class (0: Not Disaster, 1: Disaster)')\n","plt.ylabel('Count')\n","plt.xticks(rotation=0)\n","plt.show()"],"metadata":{"_uuid":"f01247f3-f5cc-4606-98c9-e5708bb301ea","_cell_guid":"8f319ce4-f9e0-4376-ad1c-d12a42a07dc0","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:23.009894Z","iopub.execute_input":"2023-10-27T19:41:23.010262Z","iopub.status.idle":"2023-10-27T19:41:23.288651Z","shell.execute_reply.started":"2023-10-27T19:41:23.010234Z","shell.execute_reply":"2023-10-27T19:41:23.287774Z"},"trusted":true,"id":"qt02hGGkq8Ip","outputId":"0930901a-aeec-4157-984f-434a7ff78d0d"},"execution_count":null,"outputs":[{"name":"stdout","text":"0 = Not a Disaster Tweet counts, 1 = Disaster Tweet counts\ntarget\n0 4342\n1 3271\nName: count, dtype: int64\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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Px7r16/HzJkz8f777yMqKgo7d+7EwYMHDbnpREREVIRBQ0laWhpGjBiBW7duQa1Wo3nz5jh8+DB69eoFAFi9ejWMjIwwYMAA5Obmws/PDxs3bpTmNzY2xoEDBzBhwgT4+PjA0tISAQEBWLRokdSnXr16OHjwIKZOnYrQ0FDUqVMHX375Jfz8/J779hIREVHpZPc5JXLEzymhFxk/p+Qlw88peblUgx/BL+TnlBAREVH1xlBCREREssBQQkRERLLAUEJERESywFBCREREssBQQkRERLLAUEJERESywFBCREREssBQQkRERLLAUEJERESywFBCREREssBQQkRERLLAUEJERESywFBCREREssBQQkRERLLAUEJERESywFBCREREssBQQkRERLLAUEJERESywFBCREREssBQQkRERLLAUEJERESywFBCREREssBQQkRERLKgVyipX78+7t69W6w9IyMD9evXr3RRREREVP3oFUquXbuG/Pz8Yu25ubn4559/Kl0UERERVT8mFem8f/9+6f+HDx+GWq2W3ufn5yMyMhLu7u5VVhwRERFVHxUKJf369QMAKBQKBAQE6EwzNTWFu7s7Vq1aVWXFERERUfVRoVBSUFAAAKhXrx5Onz6NmjVrPpOiiIiIqPqpUCjRSkxMrOo6iIiIqJrTK5QAQGRkJCIjI5GWliZdQdH6+uuvK10YERERVS96hZKFCxdi0aJF8Pb2Rq1ataBQKKq6LiIiIqpm9AolmzdvRlhYGIYPH17V9RAREVE1pdfnlOTl5aFjx45VXQsRERFVY3qFkjFjxmDbtm1VXQsRERFVY3rdvsnJycEXX3yBn3/+Gc2bN4epqanO9M8++6xKiiMiIqLqQ69Qcu7cObRs2RIAcOHCBZ1pfOiViIiI9KFXKDl69GhV10FERETVnF7PlBARERFVNb2ulHTv3r3M2zRRUVF6F0RERETVk16hRPs8idajR48QFxeHCxcuFPtDfURERETloVcoWb16dYntCxYsQHZ2dqUKIiIiouqpSp8pee+99/h3b4iIiEgvVRpKYmJiYG5uXpWLJCIiompCr9s3b7/9ts57IQRu3bqF33//HfPmzauSwoiIiKh60SuUqNVqnfdGRkZo3LgxFi1ahN69e1dJYURERFS96BVKtm7dWtV1EBERUTWnVyjRio2NxaVLlwAATZs2RatW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OHEievbsCSMjIwwYMABr166VpqvVahw5cgSBgYFo06YNatasiZCQEJ3PMiEiIiLDk83nlMgZP6eEXmT8nJKXDD+n5OVSDX4EvxSfU0JERETVC0MJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREckCQwkRERHJAkMJERERyQJDCREREclCtQolGzZsgLu7O8zNzdG+fXucOnXK0CURERHR/1dtQsmOHTsQFBSE+fPn48yZM2jRogX8/PyQlpZm6NKIiIgI1SiUfPbZZxg7dixGjRoFLy8vbN68GTVq1MDXX39t6NKIiIgIgImhC3ge8vLyEBsbi+DgYKnNyMgIvr6+iImJKdY/NzcXubm50vvMzEwAgEajefbFykGOoQugqlRtjluiF1E1OD+134OEEE/tWy1CyZ07d5Cfnw8nJyeddicnJ1y+fLlY/6VLl2LhwoXF2l1dXZ9ZjUTPinqZ2tAlEFFp1NXn/MzKyoL6KdtbLUJJRQUHByMoKEh6X1BQgPT0dNjb20OhUBiwMqoqGo0Grq6uuHHjBlQqlaHLIaJCeH6+XIQQyMrKgouLy1P7VotQUrNmTRgbGyM1NVWnPTU1Fc7OzsX6K5VKKJVKnTYbG5tnWSIZiEql4jc9Ipni+fnyeNoVEq1q8aCrmZkZ2rRpg8jISKmtoKAAkZGR8PHxMWBlREREpFUtrpQAQFBQEAICAuDt7Y127dphzZo1uH//PkaNGmXo0oiIiAjVKJQM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"},"metadata":{}}]},{"cell_type":"markdown","source":["from the previous histogram we can see that we have 4324 tweets that doesn't indicate a disaster and 3271 tweets that indicates a disaster which is a fare representation for the two classes."],"metadata":{"_uuid":"0f63f459-e975-41b2-9aa9-d303aa018970","_cell_guid":"abea9f31-58e7-4919-852a-fa6800caad21","trusted":true,"id":"f-3PoibEq8Iq"}},{"cell_type":"markdown","source":["let's take a random sample from the dataset \"text\" colomn to check the data:"],"metadata":{"_uuid":"97211c76-c937-4d40-a649-235edc282728","_cell_guid":"f1c9b925-ea8c-4ce8-897b-69883080bcaf","trusted":true,"id":"8pN2pN0tq8Ir"}},{"cell_type":"code","source":["random_sample_text = random.sample(list(df_train['text']), 10)\n","for i, text in enumerate(random_sample_text):\n"," print(f'text n_{i}: {text}\\n')"],"metadata":{"_uuid":"6d1b27f6-e58d-4d4d-94ae-6fff760b6ace","_cell_guid":"beef0338-988f-45b4-ad77-909f7380473b","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:24.727975Z","iopub.execute_input":"2023-10-27T19:41:24.728348Z","iopub.status.idle":"2023-10-27T19:41:24.735998Z","shell.execute_reply.started":"2023-10-27T19:41:24.728318Z","shell.execute_reply":"2023-10-27T19:41:24.735013Z"},"trusted":true,"id":"sLVaE8VQq8Ir","outputId":"88a3e2f1-44f9-448a-9f2b-14e5c5a085f9"},"execution_count":null,"outputs":[{"name":"stdout","text":"text n_0: i be on that hotboy shit\n\ntext n_1: Trial Date Set for Man Charged with Arson Burglary http://t.co/WftCrLz32P\n\ntext n_2: waiting for my chocolate lava cakes to get here ??????\n\ntext n_3: Patient-reported outcomes in long-term survivors of metastatic colorectal cancer - British Journal of Surgery http://t.co/5Yl4DC1Tqt\n\ntext n_4: @Rebelmage2 I'm glad you got away XD But My 'be safe' was in reference to a tornado near calgary and drum heller at around 4 :O\n\ntext n_5: Texas Seeks Comment on Rules for Changes to Windstorm Insurer http://t.co/BZ07c9WthX via @ijournal\n\ntext n_6: @godsfirstson1 and she wrapped his coat around herself. It practically engulfed her.\n\ntext n_7: Kosciusko police investigating pedestrian fatality hit by a train Thursday http://t.co/m5djLLxoZP\n\ntext n_8: One Direction Is my pick for http://t.co/q2eBlOKeVE Fan Army #Directioners http://t.co/eNCmhz6y34 x1441\n\ntext n_9: I'm drowning in hw now and that's w/o going to swim ohlordy\n\n","output_type":"stream"}]},{"cell_type":"markdown","source":["after taking a random sample we can see that the text contains UURL's that doesnt provide any useful information, so let's attempt to remove them...\n","also it's almost that users add this URL's at the end of the tweet.\n","so we can remove the URL's by using regural expressions"],"metadata":{"_uuid":"3be35232-2f02-4877-8e29-3b1d1f06eb90","_cell_guid":"5fdc858c-7e7f-4a7f-bd4c-d829913177c1","trusted":true,"id":"ChsFU4c7q8Is"}},{"cell_type":"code","source":["url_rgex = r'(http\\S*)'\n","\n","df_train['text'] = df_train['text'].str.replace(url_rgex, '', regex=True)\n","df_test['text'] = df_test['text'].str.replace(url_rgex, '', regex=True)"],"metadata":{"_uuid":"8e2300a3-11d4-4cb0-89eb-b9c8336d8ab9","_cell_guid":"6d14a396-a643-4059-a278-627781352814","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:25.925474Z","iopub.execute_input":"2023-10-27T19:41:25.925857Z","iopub.status.idle":"2023-10-27T19:41:25.946391Z","shell.execute_reply.started":"2023-10-27T19:41:25.925827Z","shell.execute_reply":"2023-10-27T19:41:25.945488Z"},"trusted":true,"id":"nSaVmheFq8It"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["random_sample_text = random.sample(list(df_train['text']), 2)\n","for i, text in enumerate(random_sample_text):\n"," print(f'text n_{i}: {text}\\n')"],"metadata":{"_uuid":"0257b086-caaf-46de-82ce-e66f9148548b","_cell_guid":"75011780-41e1-4270-bdc0-3a92f61af657","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:26.780011Z","iopub.execute_input":"2023-10-27T19:41:26.780832Z","iopub.status.idle":"2023-10-27T19:41:26.788250Z","shell.execute_reply.started":"2023-10-27T19:41:26.780787Z","shell.execute_reply":"2023-10-27T19:41:26.787059Z"},"trusted":true,"id":"1ADQwTspq8Iu","outputId":"78b80bb6-e19a-4a2a-b49a-213fcd0bd1c3"},"execution_count":null,"outputs":[{"name":"stdout","text":"text n_0: Obama Declares Disaster for Typhoon-Devastated Saipan: Obama signs disaster declaration for Northern Marians a... \n\ntext n_1: Now Trending in Nigeria: Police charge traditional ruler others with informant‰Ûªs murder \n\n","output_type":"stream"}]},{"cell_type":"markdown","source":["another thing to notice that there are alot of users names and hastags which don't provide a lot of information since users also sometimes use the most famous tags to increase tweets reach and the names doesn't provide alot of valuable information so let's remove them:"],"metadata":{"_uuid":"73d9d07b-6d88-4492-9441-d33a6a444461","_cell_guid":"4d3ba251-6716-47eb-8f38-9c141753cb32","trusted":true,"id":"ctuZ8JRTq8Iu"}},{"cell_type":"code","source":["user_regex = r'(@\\S*)'\n","df_train['text'] = df_train['text'].str.replace(user_regex, '', regex=True)\n","df_test['text'] = df_test['text'].str.replace(user_regex, '', regex=True)"],"metadata":{"_uuid":"c42034b7-e79b-47eb-a3fa-e5b3fce4ae63","_cell_guid":"5921e2fc-f654-41f7-9267-88a173de2e4d","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:28.696734Z","iopub.execute_input":"2023-10-27T19:41:28.697136Z","iopub.status.idle":"2023-10-27T19:41:28.715136Z","shell.execute_reply.started":"2023-10-27T19:41:28.697106Z","shell.execute_reply":"2023-10-27T19:41:28.714127Z"},"trusted":true,"id":"SQcB2dD-q8Iv"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["tags_regex = r'(#)'\n","df_train['text'] = df_train['text'].str.replace(tags_regex, '', regex=True)\n","df_test['text'] = df_test['text'].str.replace(tags_regex, '', regex=True)"],"metadata":{"_uuid":"f63bab01-04fd-454c-b128-589549169a9a","_cell_guid":"70f86e6b-7357-4c27-b9bd-edf6d0fcabf5","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:29.579409Z","iopub.execute_input":"2023-10-27T19:41:29.579802Z","iopub.status.idle":"2023-10-27T19:41:29.597782Z","shell.execute_reply.started":"2023-10-27T19:41:29.579767Z","shell.execute_reply":"2023-10-27T19:41:29.596900Z"},"trusted":true,"id":"-aYahFSNq8Iv"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["let's remove non-english alphabets"],"metadata":{"_uuid":"9888805b-4374-481b-8f32-79e828744829","_cell_guid":"e3538a3f-ac65-4f27-b8ec-b86c73592c9c","trusted":true,"id":"yGqB6QNWq8Iw"}},{"cell_type":"code","source":["error_pattern = r'(‰Û\\S*) | (‰Ûª)'\n","\n","df_train['text'] = df_train['text'].str.replace(error_pattern, '', regex=True)\n","df_test['text'] = df_test['text'].str.replace(error_pattern, '', regex=True)"],"metadata":{"_uuid":"e3107e9a-ff52-4a4c-9230-759c386cc2f3","_cell_guid":"1941cf2b-4f0c-4fbd-b67c-a1e6660b73d9","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:30.954944Z","iopub.execute_input":"2023-10-27T19:41:30.955819Z","iopub.status.idle":"2023-10-27T19:41:31.036663Z","shell.execute_reply.started":"2023-10-27T19:41:30.955785Z","shell.execute_reply":"2023-10-27T19:41:31.035742Z"},"trusted":true,"id":"VZKt2Qf8q8Iw"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["let's check another random sample after all the preprocessing:"],"metadata":{"_uuid":"2c9cb783-c9f0-4d93-a321-49107ff30e28","_cell_guid":"f88d16a1-b988-4c92-93c4-7e4fcfe2a1d7","trusted":true,"id":"y7OwlQ3eq8Ix"}},{"cell_type":"code","source":["random_sample_text = random.sample(list(df_train['text']), 10)\n","for i, text in enumerate(random_sample_text):\n"," print(f'text n_{i}: {text}\\n')"],"metadata":{"_uuid":"1fb72e54-69e1-4fa2-9dad-8a5f997ca85b","_cell_guid":"3a0c12e4-7645-46ac-97ac-f35829c1479d","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:32.387128Z","iopub.execute_input":"2023-10-27T19:41:32.388040Z","iopub.status.idle":"2023-10-27T19:41:32.398047Z","shell.execute_reply.started":"2023-10-27T19:41:32.387980Z","shell.execute_reply":"2023-10-27T19:41:32.396742Z"},"trusted":true,"id":"NETkj9Ajq8Iy","outputId":"b0f86893-d576-4b67-a875-a6b6aa55104e"},"execution_count":null,"outputs":[{"name":"stdout","text":"text n_0: Criminals Who Hijack Lorries And Buses Arrested In Enugu: According to the Nigerian Police Force... Via \n\ntext n_1: in 5 min // Speaker Deck\n\ntext n_2: NBCNightlyNews: Malaysian Officials Say Debris Found on Reunion Island Is From MH370. BillNeelyNBC reports: \n\ntext n_3: 'Nobody remembers who came in second.' Charles Schulz\n\ntext n_4: Heavy smoke pouring out of buildings on fire in Port Coquitlam \n\ntext n_5: Green line service on south side disrupted after CTA train derails passengers evacuated. \n\ntext n_6: MORE-->OSHA officers on siteinvestigating Noranda explosion -KFVS12 News Cape Girardeau Carbondale Poplar Bluff \n\ntext n_7: trapped in its disappearance\n\ntext n_8: lets hope it's a upper class white mass murderer....''' Mmmm\n\ntext n_9: Summer is lovely\n\n","output_type":"stream"}]},{"cell_type":"markdown","source":["**Now this dataset makes more sense**"],"metadata":{"_uuid":"d3134ebc-eaf9-4817-b09a-e1f11b6865db","_cell_guid":"c1f2dc4b-817a-4e51-b3d6-a9dac7820dcc","trusted":true,"id":"UzMYyknqq8Iz"}},{"cell_type":"markdown","source":["### tokanizing and creating the mask"],"metadata":{"_uuid":"f25843b2-d303-44c2-a3be-25131e5c7e89","_cell_guid":"cf16e56b-de11-41c7-ab6e-be973314dec1","trusted":true,"id":"Ak531eHNq8Iz"}},{"cell_type":"markdown","source":["I will be using the tokanizer from huggingface [sacculifer/dimbat_disaster_distilbert](http://huggingface.co/sacculifer/dimbat_disaster_distilbert) because it will serve us well in this task"],"metadata":{"_uuid":"d0a28b79-b94e-423e-a950-f24675147c0f","_cell_guid":"51d24430-4242-4931-a574-6bce4ad090a6","trusted":true,"id":"mewZUuAJq8I0"}},{"cell_type":"code","source":["tokenizer = AutoTokenizer.from_pretrained(\"sacculifer/dimbat_disaster_distilbert\", do_lower_case=True)"],"metadata":{"_uuid":"c78dd8f4-6f13-4974-ba71-10dbd558a532","_cell_guid":"d29eac28-1942-4e58-80ab-6778026cb2f9","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:34.502573Z","iopub.execute_input":"2023-10-27T19:41:34.503050Z","iopub.status.idle":"2023-10-27T19:41:35.339038Z","shell.execute_reply.started":"2023-10-27T19:41:34.503006Z","shell.execute_reply":"2023-10-27T19:41:35.338022Z"},"trusted":true,"id":"24yT7-qFq8I0","outputId":"f415002d-e201-435d-af99-ebd5a461b90d","colab":{"referenced_widgets":["3ff5527998da43628ebd563410b4f3fb","c77f453507be4607a43862b8a7338730","6ef2876ce615455396fd0215b2a4171f","f328f49ca29d4e258538071541666cd5"]}},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":"Downloading (…)okenizer_config.json: 0%| | 0.00/333 [00:00 {**'loss'**: [0.5624821186065674,\n"," 0.39667385816574097,\n"," 0.29472893476486206,\n"," 0.21065986156463623,\n"," 0.15157125890254974,\n"," 0.11613788455724716,\n"," 0.0892966166138649,\n"," 0.07200820744037628],\n"," **'accuracy'**: [0.7321194410324097,\n"," 0.8330052495002747,\n"," 0.8807414770126343,\n"," 0.9191272854804993,\n"," 0.9465222954750061,\n"," 0.9635826945304871,\n"," 0.9714567065238953,\n"," 0.977854311466217]}"],"metadata":{"_uuid":"284145c1-1eec-4899-9bb2-19c69e11b03f","_cell_guid":"42fef8ca-d698-4059-a98f-90abea1b4c49","trusted":true,"id":"i30MTUP9q8JF"}},{"cell_type":"code","source":["predictions_proba = model.predict(ds_test)"],"metadata":{"_uuid":"a1f7fba1-842f-4a12-adbb-48f557d0a2b9","_cell_guid":"851f878f-9b05-4ace-a7d8-7002a6c6c574","execution":{"iopub.status.busy":"2023-10-27T13:03:59.009556Z","iopub.execute_input":"2023-10-27T13:03:59.010333Z","iopub.status.idle":"2023-10-27T13:04:06.081126Z","shell.execute_reply.started":"2023-10-27T13:03:59.010300Z","shell.execute_reply":"2023-10-27T13:04:06.079878Z"},"jupyter":{"outputs_hidden":false},"trusted":true,"id":"AsSit086q8JG"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["avg_proba = []\n","for x in predictions_proba:\n"," avg_proba.append(np.mean(x))\n","\n","predictions = np.round(avg_proba).astype(np.int32)"],"metadata":{"_uuid":"e7979225-6341-48d1-ba36-cd4617effecc","_cell_guid":"8f5aaa4a-e682-4083-9e20-8ca0e9c47763","execution":{"iopub.status.busy":"2023-10-26T18:44:42.151613Z","iopub.execute_input":"2023-10-26T18:44:42.151905Z","iopub.status.idle":"2023-10-26T18:44:42.205692Z","shell.execute_reply.started":"2023-10-26T18:44:42.151880Z","shell.execute_reply":"2023-10-26T18:44:42.204926Z"},"jupyter":{"outputs_hidden":false},"trusted":true,"id":"y98XHzBFq8JG"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Check model accuracy"],"metadata":{"_uuid":"4ad20fe3-0b02-41b4-90cb-dd7de09a65c2","_cell_guid":"be7b15bb-823d-44b2-a0dc-715ee3291ae0","trusted":true,"id":"_Qd0xuRIq8JH"}},{"cell_type":"code","source":["history_.history"],"metadata":{"_uuid":"d31ad7e7-53bd-43e0-baa3-8495dd3c9d0e","_cell_guid":"514a5af4-6394-4859-94bc-f0f947b54f59","execution":{"iopub.status.busy":"2023-10-26T18:44:42.206688Z","iopub.execute_input":"2023-10-26T18:44:42.206950Z","iopub.status.idle":"2023-10-26T18:44:42.213372Z","shell.execute_reply.started":"2023-10-26T18:44:42.206928Z","shell.execute_reply":"2023-10-26T18:44:42.212428Z"},"jupyter":{"outputs_hidden":false},"trusted":true,"id":"3WZEaT1gq8JJ"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["so the accuracy is 0.9779 which is really good"],"metadata":{"_uuid":"d0da4eb2-385b-49ee-b3e0-dc832b062faf","_cell_guid":"966ac4b4-e3fc-4e30-8549-bf1f19ab4143","trusted":true,"id":"zq0j-zJAq8JK"}},{"cell_type":"markdown","source":["### save model"],"metadata":{"_uuid":"ba04aebe-2ca9-4892-a39c-4429fc684181","_cell_guid":"e649253e-49b4-450e-a3f0-97a5de9b5d0d","trusted":true,"id":"fCp3u4Hfq8JK"}},{"cell_type":"code","source":["model.save(\"/kaggle/working/train/custom_model.keras\")"],"metadata":{"_uuid":"4ccc0bf8-ad6a-483a-8482-f7d43324f810","_cell_guid":"f019ad6b-ce06-46ab-893c-e9aa5f6acf53","execution":{"iopub.status.busy":"2023-10-26T18:49:55.262407Z","iopub.execute_input":"2023-10-26T18:49:55.263367Z","iopub.status.idle":"2023-10-26T18:49:56.546981Z","shell.execute_reply.started":"2023-10-26T18:49:55.263325Z","shell.execute_reply":"2023-10-26T18:49:56.546171Z"},"jupyter":{"outputs_hidden":false},"trusted":true,"id":"ancz52Vzq8JL"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## USE the MODEL"],"metadata":{"_uuid":"0bc6c695-b872-463c-83a5-2b4778bf530a","_cell_guid":"6bc64039-3a17-460b-9058-71a10cd5b9b6","trusted":true,"id":"Fk2nL8Ooq8JL"}},{"cell_type":"markdown","source":["### create the test model\n","create a new instance of the model and load the wieghts"],"metadata":{"_uuid":"004282e9-49ec-427e-b8e1-01e83c65b0bf","_cell_guid":"d6b183e1-1b14-43d8-9dec-bab4d07eb1ca","trusted":true,"id":"Qx3aAQAyq8JM"}},{"cell_type":"code","source":["class twitter_model:\n"," def __init__(self,model_weights=\"/kaggle/input/model-nlp-twitter/custom_model.keras\"):\n"," #activate gpu\n"," gpu_devices = tf.config.experimental.list_physical_devices(\"GPU\")\n"," for device in gpu_devices:\n"," tf.config.experimental.set_memory_growth(device, True)\n","\n"," #define a tokenizer\n"," self.tokenizer = AutoTokenizer.from_pretrained(\"sacculifer/dimbat_disaster_distilbert\", do_lower_case=True)\n","\n"," #define the pretrained model\n"," #model = TFAutoModelForSequenceClassification.from_pretrained(\"sacculifer/dimbat_disaster_distilbert\")\n"," config = AutoConfig.from_pretrained('sacculifer/dimbat_disaster_distilbert')\n"," transformer = TFDistilBertModel.from_pretrained(\"sacculifer/dimbat_disaster_distilbert\", config=config)\n","\n"," input_ids = tf.keras.layers.Input(shape=(512,), name='input_ids', dtype='int32')\n"," attention_mask = tf.keras.layers.Input(shape=(512,), name='attention_mask', dtype='int32')\n","\n"," embeddings = transformer(input_ids, attention_mask=attention_mask)[0]\n"," pooling = tf.keras.layers.GlobalAveragePooling1D()(embeddings)\n","\n"," net = tf.keras.layers.BatchNormalization()(pooling)\n"," net = tf.keras.layers.Dense(1024, activation='relu')(net)\n"," net = tf.keras.layers.Dropout(0.2)(net)\n"," net = tf.keras.layers.Dense(1024, activation='relu')(net)\n"," net = tf.keras.layers.Dropout(0.2)(net)\n"," net = tf.keras.layers.Dense(1, activation='sigmoid')(net)\n","\n"," self.model = tf.keras.Model(inputs=(input_ids, attention_mask), outputs=net)\n"," self.model.layers[2].trainable = True # freeze for transform layers\n","\n"," self.model.compile(\n"," optimizer=tf.keras.optimizers.Adam(learning_rate=2e-5),\n"," loss=tf.keras.losses.BinaryCrossentropy(),\n"," metrics=['accuracy']\n"," )\n","\n"," # Loads the weights\n"," self.model.load_weights(model_weights)\n","\n"," def predict(self, text_input=\"help there is an flood\"):\n"," \"\"\"token['input_ids']),token['attention_mask'])\"\"\"\n","\n"," token= self.tokenizer(\n"," text_input,\n"," padding= \"max_length\",\n"," add_special_tokens= True,\n"," return_attention_mask= True,\n"," return_token_type_ids= False\n"," )\n","\n"," input_ids_tensor = tf.constant(token['input_ids'], dtype=tf.int32, shape=(1, 512))\n"," attention_mask_tensor = tf.constant(token['attention_mask'], dtype=tf.int32, shape=(1, 512))\n"," token_tensor={'input_ids': input_ids_tensor, 'attention_mask':attention_mask_tensor}\n"," prediction = self.model.predict(token_tensor)\n"," return prediction"],"metadata":{"_uuid":"b4025af5-d5ec-479d-805d-97ad628fcebc","_cell_guid":"5110913c-fa02-4b07-8104-984393031401","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:43:25.877399Z","iopub.execute_input":"2023-10-27T19:43:25.877825Z","iopub.status.idle":"2023-10-27T19:43:25.891523Z","shell.execute_reply.started":"2023-10-27T19:43:25.877792Z","shell.execute_reply":"2023-10-27T19:43:25.890554Z"},"trusted":true,"id":"l81CwzUqq8JM"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["#directory = os.getcwd()\n","#weights_path= directory+\"/custom_model.keras\"\n","weights_path=\"/kaggle/input/model-nlp-twitter/custom_model.keras\"\n","#print(weights_path, model_weights)\n","model_test= twitter_model(weights_path)"],"metadata":{"_uuid":"7055e896-cdbd-4df3-ae9e-44d284396808","_cell_guid":"5ff8fb50-1c80-48c8-8a87-c0e3eee9103f","jupyter":{"outputs_hidden":false},"trusted":true,"id":"hIu--8zCq8JO"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["input_text=\"there is a volcano\"\n","prediction= np.round(model_test.predict(input_text))\n","disaster= False\n","if prediction==1:\n"," disaster= True\n","if disaster:\n"," print(\"the text: '\",input_text, \"' means there is a disaster\" )\n","else:\n"," print(\"the text: \",input_text, \"means there is NO disaster\" )"],"metadata":{"_uuid":"c0d22cbe-27eb-4e17-9c81-3662e73f56d6","_cell_guid":"1475e514-55c6-4aeb-a0fe-20fd74d68f34","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:44:03.113207Z","iopub.execute_input":"2023-10-27T19:44:03.113654Z","iopub.status.idle":"2023-10-27T19:44:03.226016Z","shell.execute_reply.started":"2023-10-27T19:44:03.113616Z","shell.execute_reply":"2023-10-27T19:44:03.224830Z"},"trusted":true,"id":"aEU4okWsq8JP","outputId":"f401c67c-c3a1-41a3-e413-cc79b2d97d94"},"execution_count":null,"outputs":[{"name":"stdout","text":"1/1 [==============================] - 0s 58ms/step\nthe text: ' there is a volcano ' means there is a disaster\n","output_type":"stream"}]},{"cell_type":"markdown","source":["## creating the application"],"metadata":{"_uuid":"302ffcff-854c-4496-89d5-92924a6d9fea","_cell_guid":"abc90885-5d0d-4414-b06b-f64281216f53","trusted":true,"id":"LG3--Xngq8JP"}},{"cell_type":"code","source":["def main():\n"," st.header('Twitter disater detector')\n"," directory = os.getcwd()\n"," weights_path= directory+\"/custom_model.keras\"\n"," model_test= twitter_model(weights_path)\n"," input_text=st.text_input(\"Please enter your sentence:\", \"type a word\")\n"," prediction= np.round(model_test.predict(input_text))\n"," disaster= False\n"," if prediction==1:\n"," disaster= True\n"," if disaster:\n"," st.write(\"the text: '\",input_text, \"' means there is a disaster\" )\n"," else:\n"," st.write(\"the text: \",input_text, \"means there is NO disaster\" )\n","\n","\n","\n","if __name__ == '__main__':\n"," main()"],"metadata":{"_uuid":"2dbdd2ab-3fc2-4fb9-8762-5b0a5d5f9316","_cell_guid":"ad6c2251-898e-41e2-a6d4-d89ce8a1ec19","jupyter":{"outputs_hidden":false},"trusted":true,"id":"wJ4CaYC1q8JQ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"Lkn9jm-aq8JR"},"execution_count":null,"outputs":[]}]}