Jason22 commited on
Commit
1e2924d
β€’
1 Parent(s): 59c8be6

Upload 11 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ custom_model.keras filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,10 +1,10 @@
1
  ---
2
- title: Fake.Tweet.Detection
3
- emoji: πŸ“Š
4
- colorFrom: gray
5
- colorTo: red
6
  sdk: streamlit
7
- sdk_version: 1.28.0
8
  app_file: app.py
9
  pinned: false
10
  ---
 
1
  ---
2
+ title: TwitterDisasterClassification
3
+ emoji: πŸ“ˆ
4
+ colorFrom: pink
5
+ colorTo: pink
6
  sdk: streamlit
7
+ sdk_version: 1.27.2
8
  app_file: app.py
9
  pinned: false
10
  ---
app.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import os
4
+ import matplotlib.pyplot as plt
5
+ import random
6
+ import keras
7
+ import tensorflow as tf
8
+
9
+ from transformers import AutoTokenizer
10
+ from transformers import TFDistilBertModel, AutoConfig
11
+
12
+ import streamlit as st
13
+ from twitter import twitter_model
14
+
15
+
16
+ def main():
17
+ st.header('Twitter disater detector')
18
+ directory = os.getcwd()
19
+ weights_path= directory+"/custom_model.keras"
20
+ model_test= twitter_model(weights_path)
21
+ input_text=st.text_input("Please enter your sentence:", "type a word")
22
+ prediction= np.round(model_test.predict(input_text))
23
+ disaster= False
24
+ if prediction==1:
25
+ disaster= True
26
+ if disaster:
27
+ st.write("the text: '",input_text, "' means there is a DISASTER" )
28
+ else:
29
+ st.write("the text: '",input_text, "' means there is NO DISASTER" )
30
+
31
+
32
+
33
+ if __name__ == '__main__':
34
+ main()
custom_model.keras ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:982149bea8d23546da37f90e20cb722c5c9275dbf91a8ce9355ce3b9f8a6bf4f
3
+ size 818833328
gitattributes.txt ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ custom_model.keras filter=lfs diff=lfs merge=lfs -text
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ transformers
2
+ tensorflow
the report.docx ADDED
Binary file (86.3 kB). View file
 
the report.pdf ADDED
Binary file (167 kB). View file
 
the_application.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import os
4
+ import matplotlib.pyplot as plt
5
+ import random
6
+ import keras
7
+ import tensorflow as tf
8
+
9
+ from transformers import AutoTokenizer
10
+ from transformers import TFDistilBertModel, AutoConfig
11
+
12
+ import streamlit as st
13
+ from twitter import twitter_model
14
+
15
+
16
+ def main():
17
+ st.header('Twitter disater detector')
18
+ directory = os.getcwd()
19
+ weights_path= directory+"/custom_model.keras"
20
+ model_test= twitter_model(weights_path)
21
+ input_text=st.text_input("Please enter your sentence:", "type a word")
22
+ prediction= np.round(model_test.predict(input_text))
23
+ disaster= False
24
+ if prediction==1:
25
+ disaster= True
26
+ if disaster:
27
+ st.write("the text: '",input_text, "' means there is a disaster" )
28
+ else:
29
+ st.write("the text: ",input_text, "means there is NO disaster" )
30
+
31
+
32
+
33
+ if __name__ == '__main__':
34
+ main()
training-the-model.ipynb ADDED
@@ -0,0 +1 @@
 
 
1
+ {"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<ipython-input-4-3d89e12db8e7>\u001b[0m in \u001b[0;36m<cell line: 6>\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<ipython-input-5-3df738d3e3a7>\u001b[0m in \u001b[0;36m<cell line: 2>\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":"<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>id</th>\n <th>keyword</th>\n <th>location</th>\n <th>text</th>\n <th>target</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>Our Deeds are the Reason of this #earthquake M...</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>4</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>Forest fire near La Ronge Sask. Canada</td>\n <td>1</td>\n </tr>\n <tr>\n <th>2</th>\n <td>5</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>All residents asked to 'shelter in place' are ...</td>\n <td>1</td>\n </tr>\n <tr>\n <th>3</th>\n <td>6</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>13,000 people receive #wildfires evacuation or...</td>\n <td>1</td>\n </tr>\n <tr>\n <th>4</th>\n <td>7</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>Just got sent this photo from Ruby #Alaska as ...</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>"},"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":"<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>id</th>\n <th>keyword</th>\n <th>location</th>\n <th>text</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>Just happened a terrible car crash</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>Heard about #earthquake is different cities, s...</td>\n </tr>\n <tr>\n <th>2</th>\n <td>3</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>there is a forest fire at spot pond, geese are...</td>\n </tr>\n <tr>\n <th>3</th>\n <td>9</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>Apocalypse lighting. #Spokane #wildfires</td>\n </tr>\n <tr>\n <th>4</th>\n <td>11</td>\n <td>NaN</td>\n <td>NaN</td>\n <td>Typhoon Soudelor kills 28 in China and Taiwan</td>\n </tr>\n </tbody>\n</table>\n</div>"},"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":"<Figure size 600x400 with 1 Axes>","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--&gt;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<?, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"3ff5527998da43628ebd563410b4f3fb"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Downloading (…)solve/main/vocab.txt: 0%| | 0.00/232k [00:00<?, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c77f453507be4607a43862b8a7338730"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Downloading (…)/main/tokenizer.json: 0%| | 0.00/711k [00:00<?, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6ef2876ce615455396fd0215b2a4171f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Downloading (…)cial_tokens_map.json: 0%| | 0.00/112 [00:00<?, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f328f49ca29d4e258538071541666cd5"}},"metadata":{}}]},{"cell_type":"markdown","source":["Now since we are planning to work with transformers, we should create the masks for the inputs, The mask will tokanize the inputs and add paddings making all of the inputs the same length so they can be processed by the model."],"metadata":{"_uuid":"5816763d-7113-453a-9123-708193221bcc","_cell_guid":"875c4ff6-b4e4-41ed-a484-f83584feb8fa","trusted":true,"id":"UNkipMVvq8I2"}},{"cell_type":"code","source":["def create_masks(texts):\n"," input_ids= []\n"," attention_masks=[]\n","\n"," for text in texts:\n"," token= tokenizer(\n"," text,\n"," padding= \"max_length\",\n"," add_special_tokens= True,\n"," return_attention_mask= True,\n"," return_token_type_ids= False\n"," )\n"," input_ids.append(token['input_ids'])\n"," attention_masks.append(token['attention_mask'])\n"," return input_ids, attention_masks"],"metadata":{"_uuid":"81ba0640-b7d0-46be-be1c-08f6fbe6c06c","_cell_guid":"6772d5e3-10b1-4054-9e72-2849b2a673bb","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:35.774651Z","iopub.execute_input":"2023-10-27T19:41:35.775608Z","iopub.status.idle":"2023-10-27T19:41:35.781268Z","shell.execute_reply.started":"2023-10-27T19:41:35.775572Z","shell.execute_reply":"2023-10-27T19:41:35.780280Z"},"trusted":true,"id":"LBCR8b_1q8I2"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["input_ids_train, attention_mask_train = create_masks(df_train['text'])\n","input_ids_test, attention_mask_test = create_masks(df_test['text'])"],"metadata":{"_uuid":"9e2dd218-097b-4fbc-9f61-cbaa9f6d3d55","_cell_guid":"cf037f6e-00bf-45ab-bcc9-74c0ad2a94e4","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:36.312626Z","iopub.execute_input":"2023-10-27T19:41:36.313522Z","iopub.status.idle":"2023-10-27T19:41:38.447797Z","shell.execute_reply.started":"2023-10-27T19:41:36.313488Z","shell.execute_reply":"2023-10-27T19:41:38.446990Z"},"trusted":true,"id":"lgOdZybkq8I3"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["specify that we will be using a GPU device"],"metadata":{"_uuid":"e2a11011-9f12-4c97-8104-f259a325cc4c","_cell_guid":"89a20422-bd8e-43e4-aafb-2342058f96ea","trusted":true,"id":"QboHDymFq8I3"}},{"cell_type":"code","source":["gpu_devices = tf.config.experimental.list_physical_devices(\"GPU\")\n","for device in gpu_devices:\n"," tf.config.experimental.set_memory_growth(device, True)"],"metadata":{"_uuid":"622dc603-7800-4618-b03e-fc7a35ba81af","_cell_guid":"829a6989-2794-4393-a1b7-70b57797a163","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:38.449314Z","iopub.execute_input":"2023-10-27T19:41:38.449648Z","iopub.status.idle":"2023-10-27T19:41:38.546262Z","shell.execute_reply.started":"2023-10-27T19:41:38.449621Z","shell.execute_reply":"2023-10-27T19:41:38.545201Z"},"trusted":true,"id":"DzQkSI-Mq8I4"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["create new datasets of tensors using the tokens that was created previusly to train our models on them"],"metadata":{"_uuid":"29f3d60d-1b52-4597-bd3d-cdf09509d5d4","_cell_guid":"f36c9076-e703-4c83-9f31-1a2ba02d6fee","trusted":true,"id":"CFzBJbSrq8I5"}},{"cell_type":"code","source":["labels_train= df_train['target']\n","\n","ds_train_ = tf.data.Dataset.from_tensor_slices((input_ids_train, attention_mask_train, labels_train))\n","ds_test = tf.data.Dataset.from_tensor_slices((input_ids_test, attention_mask_test))\n","\n","\n","def map_train(ids, mask, labels):\n"," return {\n"," 'input_ids': ids,\n"," 'attention_mask': mask\n"," }, labels\n","\n","def map_test(ids, mask):\n"," return {\n"," \"input_ids\": ids,\n"," \"attention_mask\": mask\n"," }\n","ds_train_ = (ds_train_.map(map_train)).batch(24)\n","ds_test = (ds_test.map(map_test)).batch(24)"],"metadata":{"_uuid":"f0f7cbf9-e594-47b3-95e8-60bdff0a3f46","_cell_guid":"aa0fe5b1-a253-4c53-b3e2-06076012d78f","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:41:40.476874Z","iopub.execute_input":"2023-10-27T19:41:40.477224Z","iopub.status.idle":"2023-10-27T19:42:20.036287Z","shell.execute_reply.started":"2023-10-27T19:41:40.477199Z","shell.execute_reply":"2023-10-27T19:42:20.035460Z"},"trusted":true,"id":"pqInicSvq8I6"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["let's free up some space :)"],"metadata":{"_uuid":"5f5d8f89-6cc7-4479-bd70-45c2d67dcf51","_cell_guid":"d5932f7f-34c5-449d-a2a8-6fcecb3819ff","trusted":true,"id":"lWCW56_oq8I6"}},{"cell_type":"code","source":["del input_ids_train, attention_mask_train, input_ids_test, attention_mask_test"],"metadata":{"_uuid":"82a9a5a6-abd3-4ab3-8b50-028efd584d23","_cell_guid":"c086b43a-2c78-42c7-b435-8b6e2dbc1759","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:42:20.037880Z","iopub.execute_input":"2023-10-27T19:42:20.038176Z","iopub.status.idle":"2023-10-27T19:42:20.082056Z","shell.execute_reply.started":"2023-10-27T19:42:20.038136Z","shell.execute_reply":"2023-10-27T19:42:20.080785Z"},"trusted":true,"id":"taxJDrfsq8I7"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["split train dataset into train and validation:"],"metadata":{"_uuid":"372c39a1-20a7-43ad-b332-d5e4d5a33b04","_cell_guid":"96ba53b2-2ee4-4363-87f8-a9a0710fe439","trusted":true,"id":"rWRzxZwzq8I8"}},{"cell_type":"code","source":["size_train = int(len(ds_train_) * 0.8)\n","\n","ds_train = ds_train_.take(size_train)\n","ds_validation = ds_train.skip(size_train)\n","\n","del ds_train_"],"metadata":{"_uuid":"de7efbe1-8efa-481f-ac05-ed3eeff4f608","_cell_guid":"afa620e5-a5c2-49b2-801e-27db37fd2a43","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:42:20.083365Z","iopub.execute_input":"2023-10-27T19:42:20.085285Z","iopub.status.idle":"2023-10-27T19:42:20.104967Z","shell.execute_reply.started":"2023-10-27T19:42:20.085247Z","shell.execute_reply":"2023-10-27T19:42:20.104041Z"},"trusted":true,"id":"Nk6BC8DFq8I8"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## the Model"],"metadata":{"_uuid":"ba658825-9989-49cf-87dc-228eae299aae","_cell_guid":"673dcc89-5458-4191-8638-973265fffcd6","trusted":true,"id":"AJyzz5Vnq8I9"}},{"cell_type":"markdown","source":["I will be using the pretrained huggingface model [sacculifer/dimbat_disaster_distilbert](https://huggingface.co/sacculifer/dimbat_disaster_distilbert) to intialize the model's wieghts"],"metadata":{"_uuid":"4d95cf08-daef-4821-9c40-94b408626330","_cell_guid":"ccd27eea-15ea-4a13-8037-46eebb910727","trusted":true,"id":"QIOFdy3wq8I-"}},{"cell_type":"code","source":["config = AutoConfig.from_pretrained('sacculifer/dimbat_disaster_distilbert')\n","transformer = TFDistilBertModel.from_pretrained(\"sacculifer/dimbat_disaster_distilbert\", config=config)"],"metadata":{"_uuid":"2f48e550-7076-40ba-ad36-abf53c4a6919","_cell_guid":"0823482a-9592-40f9-92bb-1ab419160f93","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:42:20.106932Z","iopub.execute_input":"2023-10-27T19:42:20.107207Z","iopub.status.idle":"2023-10-27T19:42:31.290686Z","shell.execute_reply.started":"2023-10-27T19:42:20.107182Z","shell.execute_reply":"2023-10-27T19:42:31.289623Z"},"trusted":true,"id":"gux6T_8qq8I-","outputId":"ebfb8a76-7126-4ea3-8302-93aeb2821588","colab":{"referenced_widgets":["88e20c8b33844d0d856cce90d9ac0590","f51e35b0e297428187fafd732124d8af"]}},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":"Downloading (…)lve/main/config.json: 0%| | 0.00/557 [00:00<?, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"88e20c8b33844d0d856cce90d9ac0590"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Downloading tf_model.h5: 0%| | 0.00/268M [00:00<?, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f51e35b0e297428187fafd732124d8af"}},"metadata":{}},{"name":"stderr","text":"Some layers from the model checkpoint at sacculifer/dimbat_disaster_distilbert were not used when initializing TFDistilBertModel: ['pre_classifier', 'classifier', 'dropout_19']\n- This IS expected if you are initializing TFDistilBertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n- This IS NOT expected if you are initializing TFDistilBertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\nAll the layers of TFDistilBertModel were initialized from the model checkpoint at sacculifer/dimbat_disaster_distilbert.\nIf your task is similar to the task the model of the checkpoint was trained on, you can already use TFDistilBertModel for predictions without further training.\n","output_type":"stream"}]},{"cell_type":"markdown","source":["define the tensorflow model"],"metadata":{"_uuid":"de6d8d1e-3b88-4046-978a-62f77278eca0","_cell_guid":"bac2575a-e0ab-4bbd-8781-ac0f2b6f3b58","trusted":true,"id":"X6SiYEkSq8I_"}},{"cell_type":"code","source":["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","model = tf.keras.Model(inputs=(input_ids, attention_mask), outputs=net)\n","model.layers[2].trainable = True # freeze for transform layers"],"metadata":{"_uuid":"52559397-3681-453e-a178-7a517f842ddd","_cell_guid":"bc766da5-5ba8-4e99-8a85-58b7d1dbf3bc","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:42:31.292394Z","iopub.execute_input":"2023-10-27T19:42:31.292705Z","iopub.status.idle":"2023-10-27T19:42:35.561708Z","shell.execute_reply.started":"2023-10-27T19:42:31.292677Z","shell.execute_reply":"2023-10-27T19:42:35.560785Z"},"trusted":true,"id":"zPzy-k1Hq8JA"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["model.compile(\n"," optimizer=tf.keras.optimizers.Adam(learning_rate=2e-5),\n"," loss=tf.keras.losses.BinaryCrossentropy(),\n"," metrics=['accuracy']\n",")"],"metadata":{"_uuid":"91f43001-936f-4ba1-9530-b5c91a5746e9","_cell_guid":"ecde80c4-0bcf-4116-b0e5-6206eace3e76","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:42:35.562760Z","iopub.execute_input":"2023-10-27T19:42:35.563064Z","iopub.status.idle":"2023-10-27T19:42:35.581654Z","shell.execute_reply.started":"2023-10-27T19:42:35.563038Z","shell.execute_reply":"2023-10-27T19:42:35.580942Z"},"trusted":true,"id":"6P-Hm-IRq8JB"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["model.summary()"],"metadata":{"_uuid":"afedab0b-0344-4d2a-bfdf-f75955604857","_cell_guid":"9ffd434d-a42d-4d29-9718-2c9e201311e2","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:42:35.582647Z","iopub.execute_input":"2023-10-27T19:42:35.582931Z","iopub.status.idle":"2023-10-27T19:42:35.623983Z","shell.execute_reply.started":"2023-10-27T19:42:35.582907Z","shell.execute_reply":"2023-10-27T19:42:35.623093Z"},"trusted":true,"id":"JA4nYPynq8JB","outputId":"dc7816cb-20f1-4989-ae0b-f688b34c5e65"},"execution_count":null,"outputs":[{"name":"stdout","text":"Model: \"model\"\n__________________________________________________________________________________________________\n Layer (type) Output Shape Param # Connected to \n==================================================================================================\n input_ids (InputLayer) [(None, 512)] 0 [] \n \n attention_mask (InputLayer) [(None, 512)] 0 [] \n \n tf_distil_bert_model (TFDistil TFBaseModelOutput(l 66362880 ['input_ids[0][0]', \n BertModel) ast_hidden_state=(N 'attention_mask[0][0]'] \n one, 512, 768), \n hidden_states=None \n , attentions=None) \n \n global_average_pooling1d (Glob (None, 768) 0 ['tf_distil_bert_model[0][0]'] \n alAveragePooling1D) \n \n batch_normalization (BatchNorm (None, 768) 3072 ['global_average_pooling1d[0][0]'\n alization) ] \n \n dense (Dense) (None, 1024) 787456 ['batch_normalization[0][0]'] \n \n dropout_19 (Dropout) (None, 1024) 0 ['dense[0][0]'] \n \n dense_1 (Dense) (None, 1024) 1049600 ['dropout_19[0][0]'] \n \n dropout_20 (Dropout) (None, 1024) 0 ['dense_1[0][0]'] \n \n dense_2 (Dense) (None, 1) 1025 ['dropout_20[0][0]'] \n \n==================================================================================================\nTotal params: 68,204,033\nTrainable params: 68,202,497\nNon-trainable params: 1,536\n__________________________________________________________________________________________________\n","output_type":"stream"}]},{"cell_type":"code","source":["\"\"\"early_stopping = tf.keras.callbacks.EarlyStopping(\n"," monitor='val_loss',\n"," patience=2\n",")\n","history = model.fit(\n"," ds_train,\n"," callbacks=[early_stopping],\n"," validation_data=(ds_validation),\n"," epochs=4\n",")\"\"\""],"metadata":{"_uuid":"7a363172-e8bf-4543-a5eb-53fee42e230c","_cell_guid":"bf3f9353-5646-4470-993c-34f23375e889","execution":{"iopub.status.busy":"2023-10-26T17:55:22.185808Z","iopub.execute_input":"2023-10-26T17:55:22.186507Z","iopub.status.idle":"2023-10-26T17:55:22.190865Z","shell.execute_reply.started":"2023-10-26T17:55:22.186467Z","shell.execute_reply":"2023-10-26T17:55:22.189821Z"},"jupyter":{"outputs_hidden":false},"trusted":true,"id":"2MC8YTTdq8JC"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["checkpoint_path = \"/kaggle/working/training_1/cp.ckpt\"\n","checkpoint_dir = os.path.dirname(checkpoint_path)\n","\n","# Create a callback that saves the model's weights\n","cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,\n"," save_weights_only=True,\n"," verbose=1)"],"metadata":{"_uuid":"ea54b468-5ec8-4e14-9940-2218f9786a16","_cell_guid":"d3b7a67c-b46c-436e-ae78-e4c2f7fcda77","jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2023-10-27T19:42:40.224307Z","iopub.execute_input":"2023-10-27T19:42:40.225056Z","iopub.status.idle":"2023-10-27T19:42:40.230301Z","shell.execute_reply.started":"2023-10-27T19:42:40.225020Z","shell.execute_reply":"2023-10-27T19:42:40.229313Z"},"trusted":true,"id":"AISduOHOq8JD"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["history_ = model.fit(\n"," ds_train,\n"," callbacks=[cp_callback],\n"," validation_data=(ds_validation),\n"," epochs=8\n",")"],"metadata":{"_uuid":"0f0a8d23-b4c2-4f12-afbc-a1a0df84b812","_cell_guid":"dfac40bc-5fbc-4955-958d-bfd588cb960b","jupyter":{"outputs_hidden":false},"_kg_hide-output":true,"trusted":true,"id":"E8Ki0udoq8JE"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["we can see that the accuracy has improved from 0.73 at the begining of the training to 0.977 which is considered an amazing accracy:\n","here is the sumarry of the model's history:\n","> {**'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":[]}]}
training-the-model.ipynb - Colaboratory.pdf ADDED
Binary file (480 kB). View file
 
twitter.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import pandas as pd
3
+ import os
4
+ import matplotlib.pyplot as plt
5
+ import random
6
+ import keras
7
+ import tensorflow as tf
8
+
9
+ from transformers import AutoTokenizer
10
+ from transformers import TFDistilBertModel, AutoConfig
11
+
12
+ import streamlit as st
13
+
14
+
15
+ class twitter_model:
16
+ def __init__(self,model_weights="/kaggle/input/model-nlp-twitter/custom_model.keras"):
17
+ #activate gpu
18
+ gpu_devices = tf.config.experimental.list_physical_devices("GPU")
19
+ for device in gpu_devices:
20
+ tf.config.experimental.set_memory_growth(device, True)
21
+
22
+ #define a tokenizer
23
+ self.tokenizer = AutoTokenizer.from_pretrained("sacculifer/dimbat_disaster_distilbert", do_lower_case=True)
24
+
25
+ #define the pretrained model
26
+ #model = TFAutoModelForSequenceClassification.from_pretrained("sacculifer/dimbat_disaster_distilbert")
27
+ config = AutoConfig.from_pretrained('sacculifer/dimbat_disaster_distilbert')
28
+ transformer = TFDistilBertModel.from_pretrained("sacculifer/dimbat_disaster_distilbert", config=config)
29
+
30
+ input_ids = tf.keras.layers.Input(shape=(512,), name='input_ids', dtype='int32')
31
+ attention_mask = tf.keras.layers.Input(shape=(512,), name='attention_mask', dtype='int32')
32
+
33
+ embeddings = transformer(input_ids, attention_mask=attention_mask)[0]
34
+ pooling = tf.keras.layers.GlobalAveragePooling1D()(embeddings)
35
+
36
+ net = tf.keras.layers.BatchNormalization()(pooling)
37
+ net = tf.keras.layers.Dense(1024, activation='relu')(net)
38
+ net = tf.keras.layers.Dropout(0.2)(net)
39
+ net = tf.keras.layers.Dense(1024, activation='relu')(net)
40
+ net = tf.keras.layers.Dropout(0.2)(net)
41
+ net = tf.keras.layers.Dense(1, activation='sigmoid')(net)
42
+
43
+ self.model = tf.keras.Model(inputs=(input_ids, attention_mask), outputs=net)
44
+ self.model.layers[2].trainable = True # freeze for transform layers
45
+
46
+ self.model.compile(
47
+ optimizer=tf.keras.optimizers.Adam(learning_rate=2e-5),
48
+ loss=tf.keras.losses.BinaryCrossentropy(),
49
+ metrics=['accuracy']
50
+ )
51
+
52
+ # Loads the weights
53
+ self.model.load_weights(model_weights)
54
+
55
+ def predict(self, text_input="help there is an flood"):
56
+ """token['input_ids']),token['attention_mask'])"""
57
+
58
+ token= self.tokenizer(
59
+ text_input,
60
+ padding= "max_length",
61
+ add_special_tokens= True,
62
+ return_attention_mask= True,
63
+ return_token_type_ids= False
64
+ )
65
+
66
+ input_ids_tensor = tf.constant(token['input_ids'], dtype=tf.int32, shape=(1, 512))
67
+ attention_mask_tensor = tf.constant(token['attention_mask'], dtype=tf.int32, shape=(1, 512))
68
+ token_tensor={'input_ids': input_ids_tensor, 'attention_mask':attention_mask_tensor}
69
+ prediction = self.model.predict(token_tensor)
70
+ return prediction