Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jayant-yadav/af5d4f3106499868a76f7fd0aa169844 to your computer and use it in GitHub Desktop.
Save jayant-yadav/af5d4f3106499868a76f7fd0aa169844 to your computer and use it in GitHub Desktop.
Fine-Tune-BERT-for-Text-Classification-with-TensorFlow.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"gpuType": "T4",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/jayant-yadav/af5d4f3106499868a76f7fd0aa169844/fine-tune-bert-for-text-classification-with-tensorflow.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zGCJYkQj_Uu2"
},
"source": [
"<h2 align=center> Fine-Tune BERT for Text Classification with TensorFlow</h2>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4y2m1S6e12il"
},
"source": [
"<div align=\"center\">\n",
" <img width=\"512px\" src='https://drive.google.com/uc?id=1fnJTeJs5HUpz7nix-F9E6EZdgUflqyEu' />\n",
" <p style=\"text-align: center;color:gray\">Figure 1: BERT Classification Model</p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eYYYWqWr_WCC"
},
"source": [
"In this [project](https://www.coursera.org/projects/fine-tune-bert-tensorflow/), you will learn how to fine-tune a BERT model for text classification using TensorFlow and TF-Hub."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5yQG5PCO_WFx"
},
"source": [
"The pretrained BERT model used in this project is [available](https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/2) on [TensorFlow Hub](https://tfhub.dev/)."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7pKNS21u_WJo"
},
"source": [
"### Learning Objectives"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_3NHSMXv_WMv"
},
"source": [
"By the time you complete this project, you will be able to:\n",
"\n",
"- Build TensorFlow Input Pipelines for Text Data with the [`tf.data`](https://www.tensorflow.org/api_docs/python/tf/data) API\n",
"- Tokenize and Preprocess Text for BERT\n",
"- Fine-tune BERT for text classification with TensorFlow 2 and [TF Hub](https://tfhub.dev)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "o6BEe-3-AVRQ"
},
"source": [
"### Prerequisites"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Sc9f-8rLAVUS"
},
"source": [
"In order to be successful with this project, it is assumed you are:\n",
"\n",
"- Competent in the Python programming language\n",
"- Familiar with deep learning for Natural Language Processing (NLP)\n",
"- Familiar with TensorFlow, and its Keras API"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MYXXV5n3Ab-4"
},
"source": [
"### Contents"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XhK-SYGyAjxe"
},
"source": [
"This project/notebook consists of several Tasks.\n",
"\n",
"- **[Task 1]()**: Introduction to the Project.\n",
"- **[Task 2]()**: Setup your TensorFlow and Colab Runtime\n",
"- **[Task 3]()**: Download and Import the Quora Insincere Questions Dataset\n",
"- **[Task 4]()**: Create tf.data.Datasets for Training and Evaluation\n",
"- **[Task 5]()**: Download a Pre-trained BERT Model from TensorFlow Hub\n",
"- **[Task 6]()**: Tokenize and Preprocess Text for BERT\n",
"- **[Task 7]()**: Wrap a Python Function into a TensorFlow op for Eager Execution\n",
"- **[Task 8]()**: Create a TensorFlow Input Pipeline with `tf.data`\n",
"- **[Task 9]()**: Add a Classification Head to the BERT `hub.KerasLayer`\n",
"- **[Task 10]()**: Fine-Tune BERT for Text Classification\n",
"- **[Task 11]()**: Evaluate the BERT Text Classification Model"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IaArqXjRAcBa"
},
"source": [
"## Task 2: Setup your TensorFlow and Colab Runtime."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GDDhjzZ5A4Q_"
},
"source": [
"You will only be able to use the Colab Notebook after you save it to your Google Drive folder. Click on the File menu and select “Save a copy in Drive…\n",
"\n",
"![Copy to Drive](https://drive.google.com/uc?id=1CH3eDmuJL8WR0AP1r3UE6sOPuqq8_Wl7)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mpe6GhLuBJWB"
},
"source": [
"### Check GPU Availability\n",
"\n",
"Check if your Colab notebook is configured to use Graphical Processing Units (GPUs). If zero GPUs are available, check if the Colab notebook is configured to use GPUs (Menu > Runtime > Change Runtime Type).\n",
"\n",
"![Hardware Accelerator Settings](https://drive.google.com/uc?id=1qrihuuMtvzXJHiRV8M7RngbxFYipXKQx)\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "8V9c8vzSL3aj",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e6559f4d-b833-46f5-f65c-56112e639f1e"
},
"source": [
"!nvidia-smi"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Thu Aug 31 05:58:11 2023 \n",
"+-----------------------------------------------------------------------------+\n",
"| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |\n",
"|-------------------------------+----------------------+----------------------+\n",
"| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
"| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n",
"| | | MIG M. |\n",
"|===============================+======================+======================|\n",
"| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
"| N/A 35C P8 9W / 70W | 0MiB / 15360MiB | 0% Default |\n",
"| | | N/A |\n",
"+-------------------------------+----------------------+----------------------+\n",
" \n",
"+-----------------------------------------------------------------------------+\n",
"| Processes: |\n",
"| GPU GI CI PID Type Process name GPU Memory |\n",
"| ID ID Usage |\n",
"|=============================================================================|\n",
"| No running processes found |\n",
"+-----------------------------------------------------------------------------+\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Obch3rAuBVf0"
},
"source": [
"### Install TensorFlow and TensorFlow Model Garden"
]
},
{
"cell_type": "code",
"metadata": {
"id": "bUQEY3dFB0jX",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "bcf5f40c-1741-493c-fa69-c01fbe5abaca"
},
"source": [
"import tensorflow as tf\n",
"print(tf.version.VERSION)"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"2.12.0\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "aU3YLZ1TYKUt",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "4097c040-2b92-4f76-ff86-9227a10df653"
},
"source": [
"!pip install -q tensorflow==2.3.0"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[31mERROR: Could not find a version that satisfies the requirement tensorflow==2.3.0 (from versions: 2.8.0rc0, 2.8.0rc1, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.9.0rc0, 2.9.0rc1, 2.9.0rc2, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0, 2.11.1, 2.12.0rc0, 2.12.0rc1, 2.12.0, 2.12.1, 2.13.0rc0, 2.13.0rc1, 2.13.0rc2, 2.13.0, 2.14.0rc0)\u001b[0m\u001b[31m\n",
"\u001b[0m\u001b[31mERROR: No matching distribution found for tensorflow==2.3.0\u001b[0m\u001b[31m\n",
"\u001b[0m"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "AFRTC-zwUy6D",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "dff990a1-35c6-4e21-dd77-1ded9f9366de"
},
"source": [
"!git clone --depth 1 -b v2.3.0 https://github.com/tensorflow/models.git"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"fatal: destination path 'models' already exists and is not an empty directory.\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3H2G0571zLLs",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "416bd7c1-d0ac-4059-e9df-ebd8b63eca07"
},
"source": [
"# install requirements to use tensorflow/models repository\n",
"!pip install -Uqr models/official/requirements.txt\n",
"# you may have to restart the runtime afterwards"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
" Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GVjksk4yCXur"
},
"source": [
"## Restart the Runtime\n",
"\n",
"**Note**\n",
"After installing the required Python packages, you'll need to restart the Colab Runtime Engine (Menu > Runtime > Restart runtime...)\n",
"\n",
"![Restart of the Colab Runtime Engine](https://drive.google.com/uc?id=1xnjAy2sxIymKhydkqb0RKzgVK9rh3teH)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IMsEoT3Fg4Wg"
},
"source": [
"## Task 3: Download and Import the Quora Insincere Questions Dataset"
]
},
{
"cell_type": "code",
"metadata": {
"id": "GmqEylyFYTdP",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "7059df3f-a28b-40b2-cef7-c50852c201ca"
},
"source": [
"import numpy as np\n",
"import tensorflow as tf\n",
"import tensorflow_hub as hub\n",
"import sys\n",
"sys.path.append('models')\n",
"from official.nlp.data import classifier_data_lib\n",
"from official.nlp.bert import tokenization\n",
"from official.nlp import optimization"
],
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/tensorflow_addons/utils/tfa_eol_msg.py:23: UserWarning: \n",
"\n",
"TensorFlow Addons (TFA) has ended development and introduction of new features.\n",
"TFA has entered a minimal maintenance and release mode until a planned end of life in May 2024.\n",
"Please modify downstream libraries to take dependencies from other repositories in our TensorFlow community (e.g. Keras, Keras-CV, and Keras-NLP). \n",
"\n",
"For more information see: https://github.com/tensorflow/addons/issues/2807 \n",
"\n",
" warnings.warn(\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ZuX1lB8pPJ-W",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b81869b8-3bcb-4fcb-d571-89c1d488ec53"
},
"source": [
"print(\"TF Version: \", tf.__version__)\n",
"print(\"Eager mode: \", tf.executing_eagerly())\n",
"print(\"Hub version: \", hub.__version__)\n",
"print(\"GPU is\", \"available\" if tf.config.experimental.list_physical_devices(\"GPU\") else \"NOT AVAILABLE\")"
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"TF Version: 2.12.0\n",
"Eager mode: True\n",
"Hub version: 0.14.0\n",
"GPU is available\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QtbwpWgyEZg7"
},
"source": [
"A downloadable copy of the [Quora Insincere Questions Classification data](https://www.kaggle.com/c/quora-insincere-questions-classification/data) can be found [https://archive.org/download/fine-tune-bert-tensorflow-train.csv/train.csv.zip](https://archive.org/download/fine-tune-bert-tensorflow-train.csv/train.csv.zip). Decompress and read the data into a pandas DataFrame."
]
},
{
"cell_type": "code",
"metadata": {
"id": "0nI-9itVwCCQ",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "4c87512e-50f8-4948-c6f2-5c582d2f79dd"
},
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"df = pd.read_csv('https://archive.org/download/fine-tune-bert-tensorflow-train.csv/train.csv.zip',compression='zip', low_memory=False)\n",
"df.shape"
],
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(1306122, 3)"
]
},
"metadata": {},
"execution_count": 8
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "yeHE98KiMvDd",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 363
},
"outputId": "0884be22-9281-4728-93ac-723f3b541374"
},
"source": [
"df.tail(10)"
],
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" qid \\\n",
"1306112 ffffa5b0fa76431c063f \n",
"1306113 ffffae5dbda3dc9e9771 \n",
"1306114 ffffba7c4888798571c1 \n",
"1306115 ffffc0c7158658a06fd9 \n",
"1306116 ffffc404da586ac5a08f \n",
"1306117 ffffcc4e2331aaf1e41e \n",
"1306118 ffffd431801e5a2f4861 \n",
"1306119 ffffd48fb36b63db010c \n",
"1306120 ffffec519fa37cf60c78 \n",
"1306121 ffffed09fedb5088744a \n",
"\n",
" question_text target \n",
"1306112 Are you ashamed of being an Indian? 1 \n",
"1306113 What are the methods to determine fossil ages ... 0 \n",
"1306114 What is your story today? 0 \n",
"1306115 How do I consume 150 gms protein daily both ve... 0 \n",
"1306116 What are the good career options for a msc che... 0 \n",
"1306117 What other technical skills do you need as a c... 0 \n",
"1306118 Does MS in ECE have good job prospects in USA ... 0 \n",
"1306119 Is foam insulation toxic? 0 \n",
"1306120 How can one start a research project based on ... 0 \n",
"1306121 Who wins in a battle between a Wolverine and a... 0 "
],
"text/html": [
"\n",
" <div id=\"df-86e00451-900d-46e8-8d76-7e4bf7293772\" class=\"colab-df-container\">\n",
" <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>qid</th>\n",
" <th>question_text</th>\n",
" <th>target</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1306112</th>\n",
" <td>ffffa5b0fa76431c063f</td>\n",
" <td>Are you ashamed of being an Indian?</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306113</th>\n",
" <td>ffffae5dbda3dc9e9771</td>\n",
" <td>What are the methods to determine fossil ages ...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306114</th>\n",
" <td>ffffba7c4888798571c1</td>\n",
" <td>What is your story today?</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306115</th>\n",
" <td>ffffc0c7158658a06fd9</td>\n",
" <td>How do I consume 150 gms protein daily both ve...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306116</th>\n",
" <td>ffffc404da586ac5a08f</td>\n",
" <td>What are the good career options for a msc che...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306117</th>\n",
" <td>ffffcc4e2331aaf1e41e</td>\n",
" <td>What other technical skills do you need as a c...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306118</th>\n",
" <td>ffffd431801e5a2f4861</td>\n",
" <td>Does MS in ECE have good job prospects in USA ...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306119</th>\n",
" <td>ffffd48fb36b63db010c</td>\n",
" <td>Is foam insulation toxic?</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306120</th>\n",
" <td>ffffec519fa37cf60c78</td>\n",
" <td>How can one start a research project based on ...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1306121</th>\n",
" <td>ffffed09fedb5088744a</td>\n",
" <td>Who wins in a battle between a Wolverine and a...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-86e00451-900d-46e8-8d76-7e4bf7293772')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-86e00451-900d-46e8-8d76-7e4bf7293772 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-86e00451-900d-46e8-8d76-7e4bf7293772');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
"\n",
"\n",
"<div id=\"df-dc05f8da-6a68-4281-bdfe-accb9daeed14\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-dc05f8da-6a68-4281-bdfe-accb9daeed14')\"\n",
" title=\"Suggest charts.\"\n",
" style=\"display:none;\">\n",
"\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <g>\n",
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
" </g>\n",
"</svg>\n",
" </button>\n",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-dc05f8da-6a68-4281-bdfe-accb9daeed14 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
" </div>\n",
" </div>\n"
]
},
"metadata": {},
"execution_count": 9
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "leRFRWJMocVa",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 470
},
"outputId": "148ad642-2c90-4ff8-930a-5ec10e485b94"
},
"source": [
"df.target.plot(kind='hist', title='target distribution')\n",
"#since this is highly skewed, we will make stratified splits."
],
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<Axes: title={'center': 'target distribution'}, ylabel='Frequency'>"
]
},
"metadata": {},
"execution_count": 10
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGzCAYAAADT4Tb9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAy6ElEQVR4nO3de1zUZf7//yegDHgANeSgkShqZh4gXPlSuaZhpHwo87ObqSWRmabbx6STZklliZYafTaVssS8ddDc1K00rFDXDu7HTaWjhxQVU0FdCxQVlLl+f/RztglQZgQG3j7ut9v7dtu55npf85prtXl6va/3jJcxxggAAMAivD1dAAAAQE0i3AAAAEsh3AAAAEsh3AAAAEsh3AAAAEsh3AAAAEsh3AAAAEsh3AAAAEsh3AAAAEsh3ACo12644QbdcMMNjsd79+6Vl5eXFi1aVOuvvWjRInl5eWnv3r2OtoiICP3Xf/1Xrb+2JK1fv15eXl5av359nbweYBWEG6CB+PLLL/XUU0/pl19+8XQp1VLf6p03b16dBCJ31OfagIbIi9+WAhqGWbNm6ZFHHtGePXsUERHh6XIuqKbqPbdqc271whij0tJSNW7cWD4+PtUep1u3bgoKCnJpFaS8vFxnzpyRzWaTl5eXpF9Xbrp166YPP/yw2uO4W5vdbldZWZl8fX3l7c2/RYHq4m8LcAkzxujUqVOeLsMlXl5e8vPzcynYuKqkpESS5OPjIz8/P0ewqWve3t7y8/Mj2AAu4m8M0AA89dRTeuSRRyRJ7du3l5eXl9NekKysLPXv31/BwcGy2Wzq2rWr5s+fX2Gcc/tF1qxZo169esnf31+vvPKKJGnfvn265ZZb1LRpUwUHB2vixIlas2ZNpXs+/u///k8333yzAgMD1aRJE/Xt21dffPFFteutyquvvqrIyEj5+/urd+/e+uyzzyr0qWzPTUFBgVJSUnT55ZfLZrMpLCxMt956q+P1IiIi9P333+sf//iHo5ZzK0Ln9tX84x//0Lhx4xQcHKzLL7/c6bnK6v74448VFRUlPz8/de3aVcuXL3d6/qmnnqo0FP1+zPPVVtWem2XLlikmJkb+/v4KCgrSnXfeqQMHDjj1ufvuu9WsWTMdOHBAgwcPVrNmzdS6dWs9/PDDKi8vr+L/AcAaGnm6AAAXNmTIEO3cuVPvvPOOXnzxRQUFBUmSWrduLUmaP3++rr76at1yyy1q1KiRPvjgA40bN052u13jx493GmvHjh0aNmyYxowZo9GjR+vKK69USUmJ+vfvr0OHDmnChAkKDQ3V22+/rXXr1lWoZe3atRo4cKBiYmKUlpYmb29vR7j67LPP1Lt37wvWW5nXX39dY8aM0bXXXqsHH3xQeXl5uuWWW9SqVSuFh4efd37++7//W99//70eeOABRURE6PDhw/rkk0+Un5+viIgIZWRk6IEHHlCzZs00ZcoUSVJISIjTGOPGjVPr1q01depUx8pNVX788UcNHTpUY8eOVXJysrKysvTnP/9Z2dnZGjBgwHnP/b3q1PZbixYtUkpKiv7whz8oPT1dhYWFeumll/TFF19o69atatGihaNveXm5EhISFBsbq1mzZunTTz/V7NmzFRkZqfvvv9+lOoEGxQBoEF544QUjyezZs6fCcydPnqzQlpCQYDp06ODU1q5dOyPJZGdnO7XPnj3bSDIrV650tJ06dcp06dLFSDLr1q0zxhhjt9tNp06dTEJCgrHb7U6v3759ezNgwIBq1ft7ZWVlJjg42ERFRZnS0lJH+6uvvmokmb59+zra9uzZYySZrKwsY4wxP//8s5FkXnjhhfO+xtVXX+00zjlZWVlGkrn++uvN2bNnK33ut+/h3By+9957jraioiITFhZmoqOjHW1paWmmsv/EVjZmVbWtW7fOaf7PzVO3bt3MqVOnHP0+/PBDI8lMnTrV0ZacnGwkmWeeecZpzOjoaBMTE1PhtQAr4bIUYAH+/v6O/11UVKSjR4+qb9++ysvLU1FRkVPf9u3bKyEhwaktOztbbdu21S233OJo8/Pz0+jRo5365ebm6scff9Tw4cP173//W0ePHtXRo0dVUlKiG2+8URs2bJDdbne5/q+++kqHDx/W2LFj5evr62i/++67FRgYeMH37uvrq/Xr1+vnn392+bXPGT16dLX38bRp00a33Xab43FAQIBGjhyprVu3qqCgwO0aLuTcPI0bN05+fn6O9sTERHXp0kWrVq2qcM7YsWOdHvfp00d5eXm1ViNQH1zS4WbDhg1KSkpSmzZt5OXlpZUrV7o8hjFGs2bNUufOnWWz2dS2bVs999xzNV8scB5ffPGF4uPj1bRpU7Vo0UKtW7fW448/LkmVhpvf27dvnyIjIyvsEenYsaPT4x9//FGS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yTg/P1/e3v/JX+Hh4VqzZo0mTpyoHj16qG3btpowYYIee+wxd94GAACwIC9jjHH35F27dmn37t364x//KH9/fxljznv7d31QXFyswMBAFRUVKSAgoMbHj5i0qsbHrG17ZyR6ugQAAM7Llc9vty5L/fvf/9aNN96ozp07a9CgQTp06JAkadSoUdW6DRwAAKC2uBVuJk6cqMaNGys/P19NmjRxtA8dOlTZ2dk1VhwAAICr3Npz8/HHH2vNmjW6/PLLndo7deqkffv21UhhAAAA7nBr5aakpMRpxeacY8eO8Z0yAADAo9wKN3369NHixYsdj728vGS32/X888+rX79+NVYcAACAq9y6LPX888/rxhtv1FdffaWysjI9+uij+v7773Xs2DF98cUXNV0jAABAtbm1ctOtWzft3LlT119/vW699VaVlJRoyJAh2rp1qyIjI2u6RgAAgGpzeeXmzJkzuvnmm5WZmakpU6bURk0AAABuc3nlpnHjxvrmm29qoxYAAICL5tZlqTvvvFOvv/56TdcCAABw0dzaUHz27FktXLhQn376qWJiYir8ptScOXNqpDgAAABXuRRu8vLyFBERoe+++07XXHONJGnnzp1Ofer7b0sBAABrcyncdOrUSYcOHdK6desk/fpzC//7v//r+BVvAAAAT3Npz83vf0D8o48+UklJSY0WBAAAcDHc2lB8zu/DDgAAgKe5FG68vLwq7Klhjw0AAKhPXNpzY4zR3Xff7fhxzNOnT2vs2LEV7pZavnx5zVUIAADgApfCTXJystPjO++8s0aLAQAAuFguhZusrKzaqgMAAKBGXNSGYgAAgPqGcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACylXoSbuXPnKiIiQn5+foqNjdWmTZuqdd6SJUvk5eWlwYMH126BAACgwfB4uFm6dKlSU1OVlpamLVu2qGfPnkpISNDhw4fPe97evXv18MMPq0+fPnVUKQAAaAg8Hm7mzJmj0aNHKyUlRV27dlVmZqaaNGmihQsXVnlOeXm5RowYoaefflodOnQ47/ilpaUqLi52OgAAgHV5NNyUlZVp8+bNio+Pd7R5e3srPj5eGzdurPK8Z555RsHBwRo1atQFXyM9PV2BgYGOIzw8vEZqBwAA9ZNHw83Ro0dVXl6ukJAQp/aQkBAVFBRUes7nn3+u119/XQsWLKjWa0yePFlFRUWOY//+/RddNwAAqL8aeboAVxw/flx33XWXFixYoKCgoGqdY7PZZLPZarkyAABQX3g03AQFBcnHx0eFhYVO7YWFhQoNDa3Qf/fu3dq7d6+SkpIcbXa7XZLUqFEj7dixQ5GRkbVbNAAAqNc8elnK19dXMTExysnJcbTZ7Xbl5OQoLi6uQv8uXbro22+/VW5uruO45ZZb1K9fP+Xm5rKfBgAAeP6yVGpqqpKTk9WrVy/17t1bGRkZKikpUUpKiiRp5MiRatu2rdLT0+Xn56du3bo5nd+iRQtJqtAOAAAuTR4PN0OHDtWRI0c0depUFRQUKCoqStnZ2Y5Nxvn5+fL29vgd6wAAoIHwMsYYTxdRl4qLixUYGKiioiIFBATU+PgRk1bV+Ji1be+MRE+XAADAebny+c2SCAAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsJR6EW7mzp2riIgI+fn5KTY2Vps2baqy74IFC9SnTx+1bNlSLVu2VHx8/Hn7AwCAS4vHw83SpUuVmpqqtLQ0bdmyRT179lRCQoIOHz5caf/169dr2LBhWrdunTZu3Kjw8HDddNNNOnDgQB1XDgAA6iMvY4zxZAGxsbH6wx/+oJdfflmSZLfbFR4ergceeECTJk264Pnl5eVq2bKlXn75ZY0cOfKC/YuLixUYGKiioiIFBARcdP2/FzFpVY2PWdv2zkj0dAkAAJyXK5/fHl25KSsr0+bNmxUfH+9o8/b2Vnx8vDZu3FitMU6ePKkzZ86oVatWlT5fWlqq4uJipwMAAFiXR8PN0aNHVV5erpCQEKf2kJAQFRQUVGuMxx57TG3atHEKSL+Vnp6uwMBAxxEeHn7RdQMAgPrL43tuLsaMGTO0ZMkSrVixQn5+fpX2mTx5soqKihzH/v3767hKAABQlxp58sWDgoLk4+OjwsJCp/bCwkKFhoae99xZs2ZpxowZ+vTTT9WjR48q+9lsNtlsthqpFwAA1H8eXbnx9fVVTEyMcnJyHG12u105OTmKi4ur8rznn39e06ZNU3Z2tnr16lUXpQIAgAbCoys3kpSamqrk5GT16tVLvXv3VkZGhkpKSpSSkiJJGjlypNq2bav09HRJ0syZMzV16lS9/fbbioiIcOzNadasmZo1a+ax9wEAAOoHj4eboUOH6siRI5o6daoKCgoUFRWl7Oxsxybj/Px8eXv/Z4Fp/vz5Kisr05/+9CencdLS0vTUU0/VZekAAKAe8vj33NQ1vuemIr7nBgBQ3zWY77kBAACoaYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbAABgKY08XQAAAKhaxKRVni7BZXtnJHr09Vm5AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAllIvws3cuXMVEREhPz8/xcbGatOmTeftv2zZMnXp0kV+fn7q3r27Vq9eXUeVAgCA+s7j4Wbp0qVKTU1VWlqatmzZop49eyohIUGHDx+utP+XX36pYcOGadSoUdq6dasGDx6swYMH67vvvqvjygEAQH3k8XAzZ84cjR49WikpKeratasyMzPVpEkTLVy4sNL+L730km6++WY98sgjuuqqqzRt2jRdc801evnll+u4cgAAUB818uSLl5WVafPmzZo8ebKjzdvbW/Hx8dq4cWOl52zcuFGpqalObQkJCVq5cmWl/UtLS1VaWup4XFRUJEkqLi6+yOorZy89WSvj1qbamgsAwMXjc8V5TGPMBft6NNwcPXpU5eXlCgkJcWoPCQnR9u3bKz2noKCg0v4FBQWV9k9PT9fTTz9doT08PNzNqq0nMMPTFQAArKQ2P1eOHz+uwMDA8/bxaLipC5MnT3Za6bHb7Tp27Jguu+wyeXl51ehrFRcXKzw8XPv371dAQECNjo3/YJ7rBvNcN5jnusNc143ammdjjI4fP642bdpcsK9Hw01QUJB8fHxUWFjo1F5YWKjQ0NBKzwkNDXWpv81mk81mc2pr0aKF+0VXQ0BAAH9x6gDzXDeY57rBPNcd5rpu1MY8X2jF5hyPbij29fVVTEyMcnJyHG12u105OTmKi4ur9Jy4uDin/pL0ySefVNkfAABcWjx+WSo1NVXJycnq1auXevfurYyMDJWUlCglJUWSNHLkSLVt21bp6emSpAkTJqhv376aPXu2EhMTtWTJEn311Vd69dVXPfk2AABAPeHxcDN06FAdOXJEU6dOVUFBgaKiopSdne3YNJyfny9v7/8sMF177bV6++239cQTT+jxxx9Xp06dtHLlSnXr1s1Tb8HBZrMpLS2twmUw1CzmuW4wz3WDea47zHXdqA/z7GWqc08VAABAA+HxL/EDAACoSYQbAABgKYQbAABgKYQbAABgKYQbAABgKYQbF82dO1cRERHy8/NTbGysNm3adN7+y5YtU5cuXeTn56fu3btr9erVdVRpw+bKPC9YsEB9+vRRy5Yt1bJlS8XHx1/w/xf8ytU/z+csWbJEXl5eGjx4cO0WaBGuzvMvv/yi8ePHKywsTDabTZ07d+a/HdXg6jxnZGToyiuvlL+/v8LDwzVx4kSdPn26jqptmDZs2KCkpCS1adNGXl5eVf5o9W+tX79e11xzjWw2mzp27KhFixbVep0yqLYlS5YYX19fs3DhQvP999+b0aNHmxYtWpjCwsJK+3/xxRfGx8fHPP/88+aHH34wTzzxhGncuLH59ttv67jyhsXVeR4+fLiZO3eu2bp1q9m2bZu5++67TWBgoPnpp5/quPKGxdV5PmfPnj2mbdu2pk+fPubWW2+tm2IbMFfnubS01PTq1csMGjTIfP7552bPnj1m/fr1Jjc3t44rb1hcnee33nrL2Gw289Zbb5k9e/aYNWvWmLCwMDNx4sQ6rrxhWb16tZkyZYpZvny5kWRWrFhx3v55eXmmSZMmJjU11fzwww/mr3/9q/Hx8THZ2dm1WifhxgW9e/c248ePdzwuLy83bdq0Menp6ZX2v/32201iYqJTW2xsrBkzZkyt1tnQuTrPv3f27FnTvHlz88Ybb9RWiZbgzjyfPXvWXHvttea1114zycnJhJtqcHWe58+fbzp06GDKysrqqkRLcHWex48fb/r37+/Ulpqaaq677rpardNKqhNuHn30UXP11Vc7tQ0dOtQkJCTUYmXGcFmqmsrKyrR582bFx8c72ry9vRUfH6+NGzdWes7GjRud+ktSQkJClf3h3jz/3smTJ3XmzBm1atWqtsps8Nyd52eeeUbBwcEaNWpUXZTZ4Lkzz++//77i4uI0fvx4hYSEqFu3bpo+fbrKy8vrquwGx515vvbaa7V582bHpau8vDytXr1agwYNqpOaLxWe+hz0+M8vNBRHjx5VeXm542chzgkJCdH27dsrPaegoKDS/gUFBbVWZ0Pnzjz/3mOPPaY2bdpU+AuF/3Bnnj///HO9/vrrys3NrYMKrcGdec7Ly9PatWs1YsQIrV69Wrt27dK4ceN05swZpaWl1UXZDY478zx8+HAdPXpU119/vYwxOnv2rMaOHavHH3+8Lkq+ZFT1OVhcXKxTp07J39+/Vl6XlRtYyowZM7RkyRKtWLFCfn5+ni7HMo4fP6677rpLCxYsUFBQkKfLsTS73a7g4GC9+uqriomJ0dChQzVlyhRlZmZ6ujRLWb9+vaZPn6558+Zpy5YtWr58uVatWqVp06Z5ujTUAFZuqikoKEg+Pj4qLCx0ai8sLFRoaGil54SGhrrUH+7N8zmzZs3SjBkz9Omnn6pHjx61WWaD5+o87969W3v37lVSUpKjzW63S5IaNWqkHTt2KDIysnaLboDc+fMcFhamxo0by8fHx9F21VVXqaCgQGVlZfL19a3Vmhsid+b5ySef1F133aV7771XktS9e3eVlJTovvvu05QpU5x+sBnuq+pzMCAgoNZWbSRWbqrN19dXMTExysnJcbTZ7Xbl5OQoLi6u0nPi4uKc+kvSJ598UmV/uDfPkvT8889r2rRpys7OVq9eveqi1AbN1Xnu0qWLvv32W+Xm5jqOW265Rf369VNubq7Cw8PrsvwGw50/z9ddd5127drlCI+StHPnToWFhRFsquDOPJ88ebJCgDkXKA2/J11jPPY5WKvblS1myZIlxmazmUWLFpkffvjB3HfffaZFixamoKDAGGPMXXfdZSZNmuTo/8UXX5hGjRqZWbNmmW3btpm0tDRuBa8GV+d5xowZxtfX1/ztb38zhw4dchzHjx/31FtoEFyd59/jbqnqcXWe8/PzTfPmzc1f/vIXs2PHDvPhhx+a4OBg8+yzz3rqLTQIrs5zWlqaad68uXnnnXdMXl6e+fjjj01kZKS5/fbbPfUWGoTjx4+brVu3mq1btxpJZs6cOWbr1q1m3759xhhjJk2aZO666y5H/3O3gj/yyCNm27ZtZu7cudwKXh/99a9/NVdccYXx9fU1vXv3Nv/85z8dz/Xt29ckJyc79X/33XdN586dja+vr7n66qvNqlWr6rjihsmVeW7Xrp2RVOFIS0ur+8IbGFf/PP8W4ab6XJ3nL7/80sTGxhqbzWY6dOhgnnvuOXP27Nk6rrrhcWWez5w5Y5566ikTGRlp/Pz8THh4uBk3bpz5+eef677wBmTdunWV/vf23NwmJyebvn37VjgnKirK+Pr6mg4dOpisrKxar9PLGNbfAACAdbDnBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWMr/B4R3PmPNxzowAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ELjswHcFHfp3"
},
"source": [
"## Task 4: Create tf.data.Datasets for Training and Evaluation"
]
},
{
"cell_type": "code",
"metadata": {
"id": "fScULIGPwuWk",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "eeca6444-6e19-4105-9643-4aab252bd2be"
},
"source": [
"train_df, remaining_df = train_test_split(df, random_state=42,train_size = 0.0075, stratify=df['target'].values)\n",
"valid_df, _ = train_test_split(remaining_df, random_state=42, train_size = 0.00075, stratify=remaining_df['target'].values)\n",
"train_df.shape, valid_df.shape\n",
"# BERT takes time to train and perform inference, because of the following reasons:\n",
"# 1. 340M params.\n",
"# 2. I/O bottleneck\n",
"# using tf.data to prepare input pipelines is beneficial to reduce I/O bottlenecks."
],
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"((9795, 3), (972, 3))"
]
},
"metadata": {},
"execution_count": 11
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "qQYMGT5_qLPX",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "ef3840fb-dc30-4051-b3f1-383ba56fb1ef"
},
"source": [
"# we transfer data to cpu using tf.data.Dataset, which gives a py iter.\n",
"with tf.device('/cpu:0'): # was it in GPU by default?\n",
" train_data = tf.data.Dataset.from_tensor_slices((train_df['question_text'].values, train_df['target'].values))\n",
" valid_data = tf.data.Dataset.from_tensor_slices((valid_df['question_text'].values, valid_df['target'].values))\n",
"\n",
" for text, label in train_data.take(1):\n",
" print(text, label)"
],
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tf.Tensor(b'Why are unhealthy relationships so desirable?', shape=(), dtype=string) tf.Tensor(0, shape=(), dtype=int64)\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "e2-ReN88Hvy_"
},
"source": [
"## Task 5: Download a Pre-trained BERT Model from TensorFlow Hub"
]
},
{
"cell_type": "code",
"metadata": {
"id": "EMb5M86b4-BU"
},
"source": [
"\"\"\"\n",
"Each line of the dataset is composed of the review text and its label\n",
"- Data preprocessing consists of transforming text to BERT input features:\n",
"input_word_ids, input_mask, segment_ids\n",
"- In the process, tokenizing the text is done with the provided BERT model tokenizer\n",
"\"\"\"\n",
"\n",
"label_list = [0,1] # Label categories\n",
"max_seq_length = 128 # maximum length of (token) input sequences\n",
"batch_size = 32\n",
"\n",
"\n",
"# Get BERT layer and tokenizer:\n",
"# More details here: https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/2\n",
"encoder = hub.KerasLayer(\n",
" \"https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/4\",\n",
" trainable=True) # bert_layer in v2\n",
"\n",
"vocab_file = encoder.resolved_object.vocab_file.asset_path.numpy()\n",
"do_lower_case = encoder.resolved_object.do_lower_case.numpy() # since model is uncased\n",
"tokenizer = tokenization.FullTokenizer(vocab_file, do_lower_case)"
],
"execution_count": 13,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "wEUezMK-zkkI",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "a8df2bc5-a78c-486f-8607-92baecca157d"
},
"source": [
"tokenizer.wordpiece_tokenizer.tokenize('hi, how are you doing?')"
],
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['hi', '##,', 'how', 'are', 'you', 'doing', '##?']"
]
},
"metadata": {},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "5AFsmTO5JSmc",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "d92d1e7b-a63e-4480-a184-04209a7d2736"
},
"source": [
"tokenizer.convert_tokens_to_ids(tokenizer.wordpiece_tokenizer.tokenize('hi, how are you doing?'))"
],
"execution_count": 15,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[7632, 29623, 2129, 2024, 2017, 2725, 29632]"
]
},
"metadata": {},
"execution_count": 15
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9QinzNq6OsP1"
},
"source": [
"## Task 6: Tokenize and Preprocess Text for BERT"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3FTqJ698zZ1e"
},
"source": [
"<div align=\"center\">\n",
"\n",
"---\n",
"\n",
"\n",
" <img width=\"512px\" src='https://drive.google.com/uc?id=1-SpKFELnEvBMBqO7h3iypo8q9uUUo96P' />\n",
" <p style=\"text-align: center;color:gray\">Figure 2: BERT Tokenizer</p>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"source": [
"**Token ids:** If token exists in vocab, token id is returned from it. else new token id is generated. We also append padding tokens if text is smaller than 128 and also add SEP and CLS and their corresponding tokenids. \n",
"**Input Mask:** To attend the main text and mask out the padding tokens. \n",
"**Input type ids:** In Next Sentence Prediction (NSP) task, BERT will give 0 to first sentence and 1 to second sentence and perform NSP. But since we are only dealing with 1 sentence at a time and do not have 2nd sentence, we will be providing all the values as 0s."
],
"metadata": {
"id": "xv07eXTe6I8o"
}
},
{
"cell_type": "markdown",
"metadata": {
"id": "cWYkggYe6HZc"
},
"source": [
"We'll need to transform our data into a format BERT understands. This involves two steps. First, we create InputExamples using `classifier_data_lib`'s constructor `InputExample` provided in the BERT library."
]
},
{
"cell_type": "code",
"metadata": {
"id": "m-21A5aNJM0W"
},
"source": [
"# This provides a function to convert row to input features and label\n",
"\n",
"def to_feature(text, label, label_list=label_list, max_seq_length=max_seq_length, tokenizer=tokenizer):\n",
" example = classifier_data_lib.InputExample(guid = None, # since we do not have 2 sentences in NSP\n",
" text_a = text.numpy(),\n",
" text_b = None, # since we do not have 2nd sentence in NSP\n",
" label = label.numpy()\n",
" )\n",
" feature = classifier_data_lib.convert_single_example(0,example,label_list, max_seq_length, tokenizer)\n",
"\n",
" return (feature.input_ids, feature.input_mask, feature.segment_ids, feature.label_id)\n"
],
"execution_count": 16,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "A_HQSsHwWCsK"
},
"source": [
"You want to use [`Dataset.map`](https://www.tensorflow.org/api_docs/python/tf/data/Dataset#map) to apply this function to each element of the dataset. [`Dataset.map`](https://www.tensorflow.org/api_docs/python/tf/data/Dataset#map) runs in graph mode.\n",
"\n",
"- Graph tensors do not have a value.\n",
"- In graph mode you can only use TensorFlow Ops and functions.\n",
"\n",
"So you can't `.map` this function directly: You need to wrap it in a [`tf.py_function`](https://www.tensorflow.org/api_docs/python/tf/py_function). The [`tf.py_function`](https://www.tensorflow.org/api_docs/python/tf/py_function) will pass regular tensors (with a value and a `.numpy()` method to access it), to the wrapped python function."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zaNlkKVfWX0Q"
},
"source": [
"## Task 7: Wrap a Python Function into a TensorFlow op for Eager Execution"
]
},
{
"cell_type": "code",
"metadata": {
"id": "AGACBcfCWC2O"
},
"source": [
"def to_feature_map(text, label):\n",
" input_ids, input_mask, segment_ids, label_id = tf.py_function(to_feature, inp = [text, label],\n",
" Tout = [tf.int32, tf.int32, tf.int32, tf.int32])\n",
" # py_function does not shape it, so we do it explicitly\n",
" input_ids.set_shape([max_seq_length])\n",
" input_mask.set_shape([max_seq_length])\n",
" segment_ids.set_shape([max_seq_length])\n",
" label_id.set_shape([]) # no need to shape it\n",
"\n",
" x = {\n",
" 'input_word_ids': input_ids,\n",
" 'input_mask': input_mask,\n",
" 'input_type_ids': segment_ids\n",
" }\n",
"\n",
" return (x,label_id)\n"
],
"execution_count": 17,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "dhdO6MjTbtn1"
},
"source": [
"## Task 8: Create a TensorFlow Input Pipeline with `tf.data`"
]
},
{
"cell_type": "code",
"metadata": {
"id": "LHRdiO3dnPNr"
},
"source": [
"with tf.device('/cpu:0'):\n",
" # train\n",
" train_data = (train_data.map(to_feature_map,\n",
" num_parallel_calls = tf.data.experimental.AUTOTUNE) # to run parallely and letting tf decide\n",
" .shuffle(1000)\n",
" .batch(32, drop_remainder = True)\n",
" .prefetch(tf.data.experimental.AUTOTUNE)) # for fetching next training data while it is training prev. Data\n",
"\n",
"\n",
"\n",
" # valid\n",
"valid_data = (valid_data.map(to_feature_map,\n",
" num_parallel_calls = tf.data.experimental.AUTOTUNE)\n",
" .batch(32, drop_remainder = True)\n",
" .prefetch(tf.data.experimental.AUTOTUNE))\n"
],
"execution_count": 18,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "KLUWnfx-YDi2"
},
"source": [
"The resulting `tf.data.Datasets` return `(features, labels)` pairs, as expected by [`keras.Model.fit`](https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit):"
]
},
{
"cell_type": "code",
"metadata": {
"id": "B0Z2cy9GHQ8x",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "a00d2f22-4933-46ee-afe6-0d83eb7d46db"
},
"source": [
"# train data spec\n",
"train_data.element_spec"
],
"execution_count": 19,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"({'input_word_ids': TensorSpec(shape=(32, 128), dtype=tf.int32, name=None),\n",
" 'input_mask': TensorSpec(shape=(32, 128), dtype=tf.int32, name=None),\n",
" 'input_type_ids': TensorSpec(shape=(32, 128), dtype=tf.int32, name=None)},\n",
" TensorSpec(shape=(32,), dtype=tf.int32, name=None))"
]
},
"metadata": {},
"execution_count": 19
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "DGAH-ycYOmao",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "c2d79741-9620-4626-c4af-44b39926c514"
},
"source": [
"# valid data spec\n",
"valid_data.element_spec"
],
"execution_count": 20,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"({'input_word_ids': TensorSpec(shape=(32, 128), dtype=tf.int32, name=None),\n",
" 'input_mask': TensorSpec(shape=(32, 128), dtype=tf.int32, name=None),\n",
" 'input_type_ids': TensorSpec(shape=(32, 128), dtype=tf.int32, name=None)},\n",
" TensorSpec(shape=(32,), dtype=tf.int32, name=None))"
]
},
"metadata": {},
"execution_count": 20
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GZxe-7yhPyQe"
},
"source": [
"## Task 9: Add a Classification Head to the BERT Layer"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9THH5V0Dw2HO"
},
"source": [
"<div align=\"center\">\n",
" <img width=\"512px\" src='https://drive.google.com/uc?id=1fnJTeJs5HUpz7nix-F9E6EZdgUflqyEu' />\n",
" <p style=\"text-align: center;color:gray\">Figure 3: BERT Layer</p>\n",
"</div>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "G9il4gtlADcp"
},
"source": [
"# Building the model\n",
"def create_model():\n",
"\n",
" input_word_ids=tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32, name='input_word_ids')\n",
" input_mask=tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32,name='input_mask')\n",
" input_type_ids=tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32,name='input_type_ids')\n",
"\n",
" encoder_outputs = encoder(inputs = {\n",
" 'input_word_ids':input_word_ids,\n",
" 'input_mask': input_mask,\n",
" 'input_type_ids': input_type_ids\n",
" })\n",
" pooled_output = encoder_outputs[\"pooled_output\"] # [batch_size, 768].\n",
" sequence_output = encoder_outputs[\"sequence_output\"] # [batch_size, seq_length, 768].\n",
" drop = tf.keras.layers.Dropout(0.4)(pooled_output) # dropout regularization to avoid overfitting\n",
" output = tf.keras.layers.Dense(1, activation='sigmoid', name = 'output')(drop) # value range [0,1]\n",
"\n",
" model = tf.keras.Model(\n",
" inputs = {\n",
" 'input_word_ids':input_word_ids,\n",
" 'input_mask': input_mask,\n",
" 'input_type_ids': input_type_ids\n",
" },\n",
" outputs = output)\n",
" return model"
],
"execution_count": 31,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "S6maM-vr7YaJ"
},
"source": [
"## Task 10: Fine-Tune BERT for Text Classification"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ptCtiiONsBgo",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "4f49b2f3-298e-4aa5-9538-c21417d74666"
},
"source": [
"model = create_model()\n",
"model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=2e-5),\n",
" loss=tf.losses.BinaryCrossentropy(), # since its just two classes\n",
" metrics=[tf.keras.metrics.BinaryAccuracy()])\n",
"model.summary()"
],
"execution_count": 32,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Model: \"model_1\"\n",
"__________________________________________________________________________________________________\n",
" Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
" input_mask (InputLayer) [(None, 128)] 0 [] \n",
" \n",
" input_type_ids (InputLayer) [(None, 128)] 0 [] \n",
" \n",
" input_word_ids (InputLayer) [(None, 128)] 0 [] \n",
" \n",
" keras_layer (KerasLayer) {'default': (None, 109482241 ['input_mask[0][0]', \n",
" 768), 'input_type_ids[0][0]', \n",
" 'pooled_output': ( 'input_word_ids[0][0]'] \n",
" None, 768), \n",
" 'sequence_output': \n",
" (None, 128, 768), \n",
" 'encoder_outputs': \n",
" [(None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768), \n",
" (None, 128, 768)]} \n",
" \n",
" dropout_1 (Dropout) (None, 768) 0 ['keras_layer[1][13]'] \n",
" \n",
" output (Dense) (None, 1) 769 ['dropout_1[0][0]'] \n",
" \n",
"==================================================================================================\n",
"Total params: 109,483,010\n",
"Trainable params: 109,483,009\n",
"Non-trainable params: 1\n",
"__________________________________________________________________________________________________\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "6GJaFnkbMtPL",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 177
},
"outputId": "64eedd36-a301-4386-a9ff-bd82259eff77"
},
"source": [
"tf.keras.utils.plot_model(model=model, show_shapes=True, dpi=76)"
],
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"data": {
"image/png": "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R1FWVobY2Fg4OTlh9uzZOHXqFG7evKmX86qrq8Nrr72GxMREODk5oaysDKNHj8Z7772H0tJSnD59GocOHcJnn32me87dObg7J52Z1FlwLwsLCyxYsACbNm3SfZ/6l19+iejo6GZr0scayczMRGlpKd5//324uLjAzs4OVlZWAFrOGmMwxnUydq4YOlOAxueNmWJYUmWKnZ0dZs6ciQ0bNgAA8vLy8P3332Pjxo0AgK+//hoTJkxo9drp1asXevbsibFjxzaZDW1lyjnD1y36ed1i6HwBmDFEREREZBhsViAiIiIik+Tp6YmioiKDH+fuLybvV1lZifnz58PHxwe2trbYvHmz7rERI0Zg9erVWLVqFby9vfHWW2/pHtu7dy/eeecd7Nq1C5WVlQavv72MNb/6cPd2+y3doeKzzz7DiRMnkJGRodtWWFgIV1fXBr/g8fHxQUFBQYvHvXbtGmpqamBhYQGZTIb+/fsDQIOviWgvrVaLyMhIREZGYsqUKQB+Xzu3b9/GSy+9BEdHRzz22GOIiopCQkKC7nn29vYA/jsnXYGx1mpUVBTy8/Px7bfforKyErW1tfDx8Wm2Jn2skV9//RVeXl66a3uv5rLG1DBTmCmdhSHWalRUFLKysvDLL79gw4YNWLlyJdLS0nDjxg3s2LEDzz33XJvXTnPZ0FbmkDPMmOYzxpD5AjBjiIiIiMhw2KxARERERCbp8uXL8PX1lez427dvx969e3HgwAGUlpZi9uzZDR6PiYnBzz//jB07duAf//gHTp48CQB48skncfjwYVhaWuLll1+WovRWkXp+28LBwQEAdN/r3RRXV1ckJycjLi4O1dXVAH7/gP/27duora3V7VdQUICHHnqoxeO6u7vD0dERWq0WQgjdf3369OnA2fz+l4lRUVGIiIjA3Llzddtramogk8ke2P/uudzdB4BefnnVWRhrrXp6emLatGlITExEWloaZs6c2WJN+lgj3bt3x82bN1FfX9/o401ljalhpjBTOgtDrNX+/fvjqaeeQkJCAq5evYq4uDh4eXnho48+glwuh5ubW5vXTkvZ0BbmkDPMmOYzxlD5AjBjiIiIiMiw2KxARERERCajvLwcdXV1OH78OFJSUvDcc88BAJydnXHkyBHU1taisLAQVVVVuudYWVkhNzcXlZWVev1O4oqKCtjb28Pb2xtFRUW4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3nBycpKsFkOSco5bIzY2Fn5+flizZg1mz56N/v37Y/369VKXhTt37mDFihUYN26cUY/70Ucf4emnn8aLL74IAFizZg38/PwQGxtr1DpMEfPCNDBT2oeZYpqkXs/MlgdJfU2ac2++AGDGgBlDRERERK3DZgUiIiIiMinz58/Hr7/+iqioKCQlJUlSw65du+Du7o6vv/4aS5YskaQGQzKFOW5Jfn4+xO93gsOrr74KAFi7di2srKyQmpoqaW2pqano378/li1bZrRjpqWlwd3dHatXr9Zte/XVV3VzdOnSJaPVYkpMYS2be160hilch5YwUxpipjTNVNYzs+W/TOWaNKWxfAGYMcwYIiIiImoNS6kLICIiIiK6V2JiIhITEyWtYfPmzdi8ebOkNRiSKcxxe0VHR0tdAubOnWv0Y06ZMsXox+wMTGEtm3tetIYpXIf2YqbQ/UxlPTNb/stUrkl7MGOIiIiIiJrHOysQERERERERERERERERERGRUbFZgYiIiIiIiIiIiIiIiIiIiIyKzQpERERERERERERERERERERkVJZSF0BEREREnVNOTg6KioqkLsMsXLlyBUVFRcjOzpa6FIP65ZdfcP36dbM4z4qKCtjb20tdRpudO3dO72Pm5eXB2dlZ7+NS+124cAE3btwwi5+15vz000+4ffu22Z+nKTt9+rRex6usrDTL66nValFTUwNbW1upS9GLoqIi2Nvbm+W1uldBQQHu3Llj9udpyi5fvix1CURERERkYDIhhJC6CCIiIiLqXIYNG4abN29KXYbZqKmpgRACNjY2UpdiULW1taivrzeLX9ZcvXoV1dXVcHZ2hpOTE+zs7KQuqdUGDhyIL774Qi9jzZw5E6dOndLLWKQ/tbW1qKurM8q6LCoqgoeHB2QymcGPdb+6ujrU1tZ2qp8/c/Twww8jPT29w+P85z//wfPPP6+HikyDVqtFWVkZSktLUVZWBg8PD3Tr1k3qsvSiqqoKcrkc1tbWUpdiUNXV1ZDJZGZ/nqZu2rRpeOutt6Qug4iIiIgMhM0KREREREREbVRfX4/s7GyoVCrs2rULMpkMEyZMQHh4OMaPHw8rKyupSyQyCplMhpKSEt5dgwjA9evXkZGRAY1Gg3379qFv374IDw+HQqFASEiI1OURERERERGZHDYrEBERERERdVBubi5UKhW2b9+OoqIi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iXOVGbk6F7mqGnd5MiNXoZIrT3kyq/wc70kw5ypY82TGvZUZuXKHe6uqC7ZccW/lXqjkytd7q+LiYtuzZ4+99NJL1rx583Lb++yzz0ySffbZZ17PU9++fW3p0qXlltVYs8KxY8esX79+9umnn3odUHXRrGB244031lizQnXG8qVZ4dixYybJvv76a9ey/fv3W+fOnd0+p2fPnpX+seCNN96wVq1aeRWDJ+f/MfvceakszvMtWLDArr/+etfvq1evtilTplj37t2tZcuWlp+f73os0C+k57v77rtt165ddvbsWUtKSrJFixZdsM6BAwdMkm3evNm1rHfv3jZy5EjX7507d7aFCxd6tU1f57cqqtqs4E0NVldNHc9Vrdnz69WMmq1MTdZsfn6+HTlypEbGCmbUedXcddddF7yBdr74+Hh78cUXvapzX4T6sVUd/njt90VtHD/u+JKDlJQUW79+fblloXgNFMjjzCwwx5oZufJVWZ7MzK+54vzlO2+OKTNyVSbYc+XtNsnVT4I9V9U9V5mRq8qQK+95kyczchUquSrLk5n35w5vBUuugj1PZtxblSFXnnFv5ZtgyBX3Vt4J9lxV9d5q/fr1FzQrmJnFxsb69H5lRc0KVfoaiPPt379f9957r5599lmlpaWVe+zDDz9Up06dFBcXp27duiknJ0djx46V0+nUkiVL9OSTT+r666+X9NNHtDdu3Fj16tVTx44d9X//938qKSnRsGHD1KBBA9WvX1/33XefT7FVNOadd94ph8OhpKQkvffeezp06JCuvvpqRUZG6q233vIp5pqybds23XDDDYqPj1fz5s31xBNPqLCwUIMGDZLD4dC6deskSf369ZPT6dSiRYs0aNAgffTRR/rlL3+pNm3aaPz48XI4HLrlllvUpEkTJSYmKjMzU2fOnPE4jqQLxpKkrKws3XzzzTW6n9JPH01yviZNmqhVq1au37ds2aLu3bsrLi5ODRo00GeffeZ6rKL8LFu2TMOGDdP3338vh8Ph+pj/ivJf2Vyc6/x5OT/OyuZoxowZysrKKrfM6XRq6dKlOnz4sMevL3FXE5MmTZLT6VRmZqZ69uypmJgYde3aVceOHXM7P77atWuXSktL1bp1a33xxRc6fPiwbrrppgvWa9Sokbp06aI1a9YoPz9fX3/9tbZv364+ffq41snMzNSMGTO82u658+upnj3NT2WPnc/dfHmqQU88bdsfx7Onmq1KvUre1Wwg61UKfM16Ole528etW7e6aiwhIUHJycmaN29epa9R7sarbK5zcnLUp08fJSQkKC4uTq1bt1ZhYWGVckCdB6bOPSktLdXp06fVuHFjr+rcW4E+tqSar3lP9evr9YekKl0jBvK67/xx3L1++XJcVSRUr4E8qa3jTArcsSaRK1+cmydJfs1VbZy/pMpfSy+GXHnKkxQauaosT9LFnytvtxnsueK68Cc1ca6SyJU75IpceeNizNW5eZK8P3d4I9hyxfW6e+QqNHLFvVVo5op7q5oR6FzVxr1VwL8G4v3337cWLVrYjTfeaIWFheXWOX78uCUmJtrMmTPt5MmT9thjj9k111xjZmbt2rWzJ5980v75z3/auHHjzMxs1KhR9sMPP9iJEycsNTXVHn/8cVu7dq116NDBTpw4YQcOHCjX2eHNJytUNGZxcbFddtll9swzz7jW27hxoz311FM+x1wZbz5ZIS8vzxo3bmyTJ0+2EydO2JYtW+zSSy+1adOmmZnZJZdcUu7jTK6++mpXN8v5HSspKSk2a9YsKygosO3bt9ull15q//Vf/1XpOBWNNWTIEOvZs6dX++ntJyucPXvWZsyYYfXr17fjx49XuE5eXp5dcskl9rvf/c6OHz9uZ86csW7dutnUqVM95mfp0qUXfLJCRfmvbC7O/5/3nrqCPM3R119/bZJs+/btrmWrV692/Q/NJUuWWHR0tP3zn/80s/JdX5XVRLt27Wz27NlWVFRkP/74oyUmJtrChQs9zo8vBg8ebJs2bTIzsxUrVpgku/HGGy0pKcmio6PtF7/4heXk5JiZ2XfffWcJCQkmySRZVlZWubE+//xzk2TffPONz3G4q2dP81PZ3J2bX3fz5akGPals22b+OZ7d1ayv9WrmXc0Gul7NAl+z7s5V7vbx5MmTlpSUVK7G0tLSXHPtLr+VzZm7uT516pRdfvnlNmLECDt69KgdOXLEfvOb31hubq7POaDOA1PnlXXkfvDBB9awYUM7efKkmVVe594K9LFV0zV/6NAhj+ePqlx/lMXh7TViMFz3nTuOp2vtMpVdE57/yQqheg0UqOPMLHDHGrnyzbl5MvNfrmrz/GV28eeqsjx5s91gyJW7PJlVfr70RijkypttBnOuuC78j+qeq8zIlSfkqmZf/8zIlVlo5Or8PJldnLniet0zchUaueLeKjRzxb2Vd0IhV1W5t3L3yQqdOnWyjIwMy8vL8yrOWvlkhSlTpmjYsGH66KOPNHz48HKPffLJJzp16pRGjx6t+vXrKyMjQzt27NDRo0clSVdccYVatGih559/XpL03//937riiisUHx+vn//85zpx4oTi4uL03Xff6Y033lBsbKzmzJnjU3wVjRkWFqbhw4drwYIFMjNJ0p///GcNGzbM55hrwocffqgTJ07oiSeeUHx8vK677jo9+OCDWrlyZZXGS05OVmRkpFJTUzV48GCtXbu2SuMsWLBA77//fpWe686DDz6oCRMmaOHChWrQoEGF67z77rvKy8vT1KlT1aBBA0VHRysiIkJS5TV1voryX5M8zdH3338v6acupYrcf//96tevnx599NELHvOmJiIjIxUeHq7mzZvrqquu0vHjx32en4rs3r1be/bsUdeuXSX91OUlSU8//bS+//577du3T/Hx8crKytKpU6fUq1cvPfvss8rLy9POnTv10Ucf6ZVXXnGNV7b/ZfPhq4rq2dP8+HI8uZuvN954w20NelLTx7K7/a+q6tSr5L5mA1mvUnDUrLtzlacaO3nyZLkaq1evXqXb8WbOKprrjz/+WHv37tULL7yghg0bKjExUX/605+0detWn3NAnQemzj0pLi7W73//e2VnZ6t+/fpe1bk3guHYquma/+yzz9zmsbrXH95eIwbbdZ8319q+XhOG6jWQJ7V1nEmBPdbIlffOz5Pkv1zV9vlLurhz5SlPkkIqVxXlSfL9PtlXwZArb7cZzLniurB2zlUSuToXuSJXdTVX5+dJ8u4c741gzhXX6+WRq9DIFfdWoZsr7q2qLxhyVdP3VgsXLtT//M//6LrrrvMp5nNVu1lh0aJFmjBhgh5//HEtXLhQU6dOdT124MABFRYWKiwsTA6HQx07dpSkch+nUSY/P19Dhw5VcnKyoqKitHjxYklSjx499MILL2j69Olq2rSpnn76aa9jczem9NPH2e7du1d///vflZ+fr6KiIiUnJ/sUc03Jzc1VQkJCuT+GJicna//+/dUeu3Hjxjp48GC1x6kp8+fP17hx45SVlaX8/PwK19m3b5+aNGmimJiYCx6riZryl7KvK4iMjHS7ziuvvKJt27Zp/fr15ZZXtSZqon6nT59e7sW9SZMmkqT27dsrPj5eDRs2VEZGhrZs2aK1a9fq+PHjeuihhxQXF6d27dopKytLs2fPdj2/LI9l81EdZfXsaX58mTt387Vz5063NehJbR7LUu0ez97Uq1RxzQayXqXgqFl35yp3+5iTk6PGjRv7XGNVnbO9e/fqkksuUWxsrGtZfHy8Dh486PN41Hlg6tyd0tJSZWZmKjMzU3feeack6S9/+Uulde6NYDi2arrmDxw44DaPNXX9UZlgu+6rzrW2O6F6DeRObR5nUmCPNXLlvfPzJPkvV4E4f0kXT6485amkpMSr7ZKrwOfKm2NKCu5ccV1Ye+cqiVyVIVfkqi7mqqI8SXUnV1yv/we5Co1ccW8Vurni3qp6giVXNX1vNWLECHXr1k2ffvqpTzGfq9rNCmWmTp2q3r176/e//71WrFghSUpKSlJcXJxKS0tlZq6fsu+/Pdcbb7yhv/zlL/rggw+Ul5enjIwM12MjR47Ut99+qzfffFPPPPOMtm/f7jGWFStW6KOPPvI4ZuPGjfXrX/9a2dnZWr16tX7729/6HHNNSU5O1vHjx1VUVORatn//fl166aXVHnv37t1KSUmp9jg1JTo6WqNGjdKxY8e0Z8+eCte55JJLdPTo0Qq/46Smasofyv5AUvadRRVJSEjQkiVLNGbMGJ09e9a1vKo1Ud36PXDggDZv3qzbb7/dtaxTp06KjIzU559/7lpWVFSk6OholZSUyOFwXDDOuftStv++/lG2ImX17Gl+fJk7d/N1/fXXu61BT2rzWJZq93j2pl6lims2UPUqBVfNVnSucrePXbp00dGjR1VcXOzTNqo6Z8nJyTp27JhOnTpV7fGoc//XuTvFxcXKyspS//79NWTIENfywsLCSuu8MsFybNV0zXvKY01df1QmGK/7fL3WrkwoXgO5U5vHmRT4Y41ceaeiPEn+y1Ugzl/SxZMrT3kKCwvzarvkKvC58uaYKotNCs5ccV1Ye+cqiVxJ5Ipc1c1cucuTVHdyxfX6T8hVaOSKe6vQzhX3VlUXTLmq6XurL7/8UpmZmUpMTPQ65vPVWLOC0+nUa6+9ppYtWyojI0ObN29W9+7d5XA4NGXKFB05ckSFhYVu/0B95swZxcTEqGnTpjp48KB2794tSVq8eLFWrFihgoICdejQQQkJCW5jMDOdOnVK69evV2xsrNsxy4waNUorV67UBx98oB49ekiSTzHXlPT0dDVo0EBTp07VyZMntXXrVmVnZ2vgwIGSfvqfgB9//LGKioqUm5urgoIC13MjIiKUk5Oj/Px818d6nD59WsXFxdqyZYuWLVume++9t9JxKhorMzNTvXr1qvH9jY6OlvSfjyE5X48ePVRSUqLJkycrLy9PW7du1XfffSfJt/x4yn9lc3Guiua4jKc5atmypSTp0KFDbseWpJ49e6pv375aunSpa1llNeFOdet35syZGjVqVLkXqvr162vIkCGaOHGifvjhBx06dEjZ2dm644471LVrV50+fVrz58/XmTNntGvXLmVnZys9Pd31/NzcXEmq8ot5RfXsaX58mTt38+WpBj3xZtv+OJ7d1WxN1Kt0Yc0Gql6l4KlZd+cqd/vYs2dPlZaW6g9/+INOnz6tY8eOKS8vzzWeu/xWdc569OihpKQkPfTQQ9q/f79KS0u1f/9+paam+jwede7/Oq9Ifn6+MjIyNHjwYPXv37/cY97UeWWC5diq6Zq/7rrr3Oaxpq4/KhMM133njrNw4cJKr7V9vSYMxWugitT2cSYF/lgjV96pKE+S/3IViPOXdPHkylOevN0uuQp8rrzdZjDniuvC2j1XSeSKXJErqW7lylOepLqVq7p+vS6Rq1DJFfdWoZ0r7q2qJthyVdP3Vmbm+rtvldk51qxZY+np6VaZuXPnWkJCgkmy5ORkW7x4seuxnTt3WlxcnNWrV88mTpxoGzZssNTUVIuJibHmzZvbjBkzbOzYseZwOCw+Pt5efvllMzPLzc211NRUi4qKsvT0dPv1r39t0dHRlpWVZZdffrmFh4dbkyZNbNKkSRfEUNHPV1995XbMN9980xVvamqqzZ49u9z+eRuzN1q1amXbtm2rdL0tW7ZYt27dLDY21po3b24TJkywwsJCMzObM2eOxcXFWXJysj300EPWsmVLS0pKsi+//NJGjhxp9erVs7Zt21peXp6lpKRYw4YNLTw83C677DJ78sknraioqNJxzOyCsYYOHWo33XSTV/uZmppqH3zwgVfrHj9+3CTZzp073a6zatUqa926tcXGxlrPnj3t2muvtQYNGtimTZsqzM+HH35ojRo1Mkn285//3D777DOP+Xc3F3379rWoqCgLCwuzu+66q8J5OVdlc9S+fXtbsGCBmf2nZqOjo23EiBHl1jt79qxdc801tnHj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KSkpeu211yRJmzZtUlpamuLi4pSSkqIxY8aopKREa9as0euvv+73fQEAAAAAoLpoVgAAAAAAhJz169frhhtuCHQYF3j11Ve1YcMGr9Zdu3atZsyYoS+++ELFxcW1HJlkZjKzWt2GL/tfkx599FEVFRVpwIABevjhh7Vo0SJdfvnlWrdundatW+dab8WKFXrkkUf09ttv67e//a3f45SkESNGuHJhZtq+fbsyMjIUHR2tl156Sc8//7yWL1+uvLw8zZs3T/v27VNpaan69++vbt26KTc3V+vWrdOSJUs0b948/epXv9LRo0c1duzYgOwPAAAAAABVRbMCAAAAACAkOZ3Bd0u7dOlSr9ft27evpk+frssuu6wWI/qPRYsW6eWXX67Vbfiy/zVl4cKF2rRp0wWfGjF8+HB1795do0ePVkFBgd/jqkh4ePgFOZg2bZrGjh2rwsJCPfPMM3rmmWeUlpamyMhI3X777Ro3bpwOHz6sgwcP6p577lFcXJxSU1PVuXNn7dy5U5I0cuRIbdy4UYsWLQrAXgEAAAAAUDXB984OAAAAAAAV2LJli7p37664uDg1aNBAn332mSRp7NixcjqdWrJkiZ588kldf/31kqRt27bphhtuUHx8vJo3b64nnnhChYWFGj9+vBwOh2655RY1adJEiYmJyszM1JkzZzw+b9CgQXI4HK7/qd+vXz85nU7XH4gHDRqkjz76SL/85S/Vpk0b/0+QB3/+858VGxurO+64Q5I0adIkOZ1OZWZmqmfPnoqJiVHXrl117Ngxj/PjaQ4q2v+srCzdfPPNtbpvM2bMUFZW1gXLnU6nli5dqsOHD2v69OkVPtddrj3NjyR9+OGH6tSpk+Li4tStWzfl5ORUKfZdu3aptLRUrVu31hdffKHDhw/rpptuumC9Ro0aqUuXLlqzZo3y8/P19ddfa/v27erTp49rnczMTM2YMaNKcQAAAAAAEAg0KwAAAAAAgt6pU6d066236tprr9W+ffuUm5ur1NRUST/9sbpt27batWuXhg0bpvT0dJ06dUq33XabbrnlFu3du1crV67U0qVL9eKLL+q5555TSkqK+vbtq3/961967733tH79ek2fPt3j85YtW6ZLLrnEFdM777yj1q1bu35ftmyZYmNj9e677+qbb77x+xx5ct9992nMmDGu3//whz+obdu2Sk1N1bvvvquvv/5a3377rdasWeNxfjzNQUX7X1JSotLS0lrbr2+++UY5OTm69tprK3y8RYsWmj17tqZNm6Yff/yx3GOecu1pfk6cOKEBAwbo/vvv1/79+5WWlqZBgwZVKf6yT1WQpD179kj6qemlUaNGiomJUffu3fXVV1/J4XBo+fLlmjt3rmJiYtS2bVv1799fffv2dY2VmpqqnTt3ateuXVWKBQAAAAAAf6NZAQAAAAAQ9N59913l5eVp6tSpatCggaKjoxUREVFunSuuuEItWrTQ888/rw8//FAnTpzQE088ofj4eF133XV68MEHtXLlStf6ycnJioyMVGpqqgYPHqy1a9d69byLSWRkpMLDw9W8eXNdddVVOn78uOuxiubHVwsWLND7779fkyGX8/3330v66ZMH3Ln//vvVr18/Pfroo+WWe5Priubnk08+0alTpzR69GjVr19fGRkZ2rFjh44ePepT7Lt379aePXvUtWtXSXI1dTz99NP6/vvvtW/fPsXHxysrK0unTp1Sr1699OyzzyovL087d+7URx99pFdeecU1XtkclM0JAAAAAADBjmYFAAAAAEDQ27dvn5o0aaKYmBiv1s/NzVVCQkK5hobk5GTt37+/wvUbN26sgwcP+vy8uqJsfoJN2Vd3REZGelzvlVde0bZt27R+/XrXsqrm+sCBAyosLFRYWJgcDoc6duwoSa6viPDW9OnTyzVQNGnSRJLUvn17xcfHq2HDhsrIyNCWLVu0du1aHT9+XA899JDi4uLUrl07ZWVlafbs2a7nlx0bZXMCAAAAAECwo1kBAAAAABD0LrnkEh09elQlJSVerZ+cnKzjx4+rqKjItWz//v269NJLK1x/9+7dSklJ8fl5dUXZ/ASb2NhYSVJhYaHH9RISErRkyRKNGTNGZ8+eleR7jZRJSkpSXFycSktLZWaun1atWnkd94EDB7R582bdfvvtrmWdOnVSZGSkPv/8c9eyoqIiRUdHq6SkRA6H44JxyvZF+s8ceNvQAwAAAABAoNGsAAAAAAAIej169FBJSYkmT56svLw8bd26Vd99953b9dPT09WgQQNNnTpVJ0+e1NatW5Wdna2BAwe61jl9+rSKi4u1ZcsWLVu2TPfee2+lz4uPj9fHH3+soqIi5ebmqqCgoNx2IyIilJOTo/z8fNfH+oeqiuZH8jwH5+9/ZmamevXqVWsxtmzZUpJ06NChStft2bOn+vbtq6VLl0ryrkYq0r17dzkcDk2ZMkVHjhxRYWGh9uzZ41PcM2fO1KhRo8o1INSvX19DhgzRxIkT9cMPP+jQoUPKzs7WHXfcoa5du+r06dOaP3++zpw5o127dik7O1vp6emu5+fm5kqST00TAAAAAAAElAEAAAAAEEBt27a1Tz/9tNL1Vq1aZa1bt7bY2Fjr2bOnXXvttdagQQP7xS9+YQ6Hw+Lj4+3ll192rb9lyxbr1q2bxcbGWvPmzW3ChAlWWFhoZmYpKSnWsGFDCw8Pt8suu8yefPJJKyoqqvR5c+bMsbi4OEtOTraHHnrIWrZsaUlJSfbll1+amdnIkSOtXr161rZtW8vLy/O4P5MnT7Yrr7zSnE6nhYWF2dVXX22zZ8+usfk616RJkyw6OtrCwsJswIABNnHiRHM4HJaYmGibNm2y8ePHm9PptIYNG9qOHTs8zo+nOTh//4cOHWo33XSTT7GW6dq1q/31r3+tdL327dvbggULXL/PnTvXEhISLDo62kaMGFFu3bNnz9o111xjGzduNDP3ua5sfjZs2GCpqakWExNjzZs3txkzZpiZWUFBgXXp0sXGjx/vNt5jx45ZmzZtXDV1rjNnztjw4cMtISHBEhMT7Z577rHDhw+bmdmKFSusQ4cOFh0dbU2bNrXBgwfbkSNHXM+dN2+etW/fvtL5MjPbuXOnNWvWzKt1AQAAAACoLQ4zs0A3TAAAAAAA6q527drp1VdfVVpamt+22axZM82aNUsDBgzw2zZrij/mKxjmJy0tTU899ZR69+7tcb3Fixdr8eLFev/99/0UmWebN2/WuHHjtHHjRr9uNz09XUOHDtUDDzxQ6bo5OTnq06ePz58IAQAAAABATeJrIAAAAAAAdVJtfU3Djz/+KIfD4fZn8ODBtbLdmhYqX2ORkZGhjh07as6cOYEORSdPntSkSZMqbbCoabNmzVLnzp29alQAAAAAACBY0KwAAAAAAKhThg4dqn379ikrK0uLFi2q8fFbtGghM3P7UxvbrEm1PT+14cUXX1RERIRWrlwZ0DhWrlypjh07asKECX7b5urVq5WUlKQXXnjBb9sEAAAAAKAmhAc6AAAAAAAA/Ck7O1vZ2dmBDiNoher8DBs2LNAhaMiQIX7f5p133un3bQIAAAAAUBP4ZAUAAAAAAAAAAAAAAOBXNCsAAAAAAAAAAAAAAAC/olkBAAAAAAAAAAAAAAD4VXigAwAAAAAA1G0lJSXavHmzTp48GehQQsLp06frxHydOHFC27ZtC3QYF6Xdu3erpKQk0GEAAAAAAOo4h5lZoIMAAAAAANRdV1xxhWJjY1W/fv1AhxISvv76azVr1uyin69vv/1WjRo1UkJCQqBDuejk5+dr3759OnToUKBDAQAAAADUYXyyAgAAAAAgoGJiYjR//nylpaUFOpSQ0K5duzoxX2lpaXrqqafUu3fvQIdy0cnJyVGfPn0CHQYAAAAAoI5zBjoAAAAAAAAAAAAAAABQt9CsAAAAAAAAAAAAAAAA/IpmBQAAAAAAAAAAAAAA4Fc0KwAAAAAAAAAAAAAAAL+iWQEAAAAAEJLmzJmjhIQEORwO109MTIzatGmjhx9+WD/++GOgQ4QfzZ8/X6tWrSpXF3379i23zsCBAxUZGamkpCQtX77c7zEWFxeXq9eyn6ioKOXn50uSZs2apZYtW6pevXpKSUnRa6+9JknatGmT0tLSFBcXp5SUFI0ZM0YlJSVas2aNXn/9db/vCwAAAAAA1UWzAgAAAAAgJD388MNatGiRJGnPnj0qLCzUP/7xDz366KNas2aNrrnmGu3YsSOwQZ7n1Vdf1YYNGwIdhkc1GaO/9vfRRx9VUVGRBgwY4KqLyy+/XOvWrdO6detc661YsUKPPPKI3n77bf32t7+t9bgqMmLECJmZ62f79u3KyMhQdHS0XnrpJT3//PNavny58vLyNG/ePO3bt0+lpaXq37+/unXrptzcXK1bt05LlizRvHnz9Ktf/UpHjx7V2LFjA7I/AAAAAABUFc0KAAAAAICLQkREhK666iqNGDFC27ZtU1RUlB5++OFAh1XO0qVLAx1CpWoyRn/s78KFC7Vp0yaNHDmy3PLhw4ere/fuGj16tAoKCmo9Dm+Eh4fr5ZdfLrds2rRpGjt2rAoLC/XMM8/omWeeUVpamiIjI3X77bdr3LhxOnz4sA4ePKh77rlHcXFxSk1NVefOnbVz505J0siRI7Vx40ZX8w4AAAAAAKGAZgUAAAAAwEWnSZMmGj58uD799FMdPHhQY8eOldPp1JIlS/Tkk0/q+uuv17Zt23TDDTcoPj5ezZs31xNPPKHCwkJJ0vjx4+VwOHTLLbeoSZMmSkxMVGZmps6cOSNJbp87aNAgORwO1//m79evn5xOpxYtWqRBgwbpo48+0i9/+Uu1adOm1uegJmL0NA+expFU4f5mZWXp5ptvrtH9nDFjhrKysi5Y7nQ6tXTpUh0+fFjTp0/3aY4mTZokp9OpzMxM9ezZUzExMeratauOHTsmSfrwww/VqVMnxcXFqVu3bsrJyalS7Lt27VJpaalat26tL774QocPH9ZNN910wXqNGjVSly5dtGbNGuXn5+vrr7/W9u3b1adPH9c6mZmZmjFjRpXiAAAAAAAgEGhWAAAAAABclDp06CDpp6+ImDFjhtq2batdu3Zp2LBhuvbaa3Xbbbfplltu0d69e7Vy5UotXbpUL774oiTpueeeU0pKivr27at//etfeu+997R+/XpNnz5dp06dcvvcZcuW6ZJLLnHF8M4776h169aSpGXLlik2Nlbvvvuuvvnmm1rd95qK0dM8eBrH3f6WlJSotLS0xvbzm2++UU5Ojq699toKH2/RooVmz56tadOm6ccffyz3mKc5+sMf/qC2bdsqNTVV7777rr7++mt9++23WrNmjU6cOKEBAwbo/vvv1/79+5WWlqZBgwZVKf6yT1WQfqpT6acmj0aNGikmJkbdu3fXV199JYfDoeXLl2vu3LmKiYlR27Zt1b9/f/Xt29c1Vmpqqnbu3Kldu3ZVKRYAAAAAAPyNZgUAAAAAwEUpPz9f0k//w77MFVdcoRYtWuiOO+7QiRMn9MQTTyg+Pl7XXXedHnzwQa1cubLcGMnJyYqMjFRqaqoGDx6stWvX6sMPP/TquYFU0zFWNA9VsWDBAr3//vtVem5Fvv/+e0k/ffKAO/fff7/69eunRx99tNxyb+YoMjJS4eHhat68ua666iodP35cn3zyiU6dOqXRo0erfv36ysjI0I4dO3T06FGfYt+9e7f27Nmjrl27SpKriePpp5/W999/r3379ik+Pl5ZWVk6deqUevXqpWeffVZ5eXnauXOnPvroI73yyiuu8crmoGxOAAAAAAAIdjQrAAAAAAAuSv/85z/lcDh0xRVXXPBYbm6uEhISFBER4VqWnJys/fv3ux2vcePGOnjwYJWe62+1GWPZPASDsq/liIyM9LjeK6+8om3btmn9+vWuZVWdowMHDqiwsFBhYWFyOBzq2LGjJLm+IsJb06dPL9dA0aRJE0lS+/btFR8fr4YNGyojI0NbtmzR2rVrdfz4cT300EOKi4tTu3btlJWVpdmzZ7ueHxMTI+k/cwIAAAAAQLCjWQEAAAAAcNEpLi7WwoUL1aNHDyUkJFzweHJyso4fP66ioiLXsv379+vSSy91O+bu3buVkpJSpef6W23GWDYPwSA2NlaSVFhY6HG9hIQELVmyRGPGjNHZs2clVX2OkpKSFBcXp9LSUpmZ66dVq1Zex33gwAFt3rxZt99+u2tZp06dFBkZqc8//9y1rKioSNHR0SopKZHD4bhgnLJ9kf4zB2VNCwAAAAAABDuaFQAAAAAAIa+goEBmpqKiIu3YsUO33HKLjh07ppdeeqnC9dPT09WgQQNNnTpVJ0+e1NatW5Wdna2BAweWW+/06dMqLi7Wli1btGzZMt17772VPjc+Pl4ff/yxioqKlJubq4KCAtd4ERERysnJUX5+vutj/2tDTcdY0TxUNk5FY2VmZqpXr141tp8tW7aUJB06dKjSdXv27Km+fftq6dKlkryvgfN1795dDodDU6ZM0ZEjR1RYWKg9e/b4FPfMmTM1atSocg0I9evX15AhQzRx4kT98MMPOnTokLKzs3XHHXeoa9euOn36tObPn68zZ85o165dys7OVnp6uuv5ubm5kuRT0wQAAAAAAAFlAAAAAAAEUNu2be3TTz/1+Xnz58+3lJQUi4yMtLCwMJNkERERdvnll9vQoUPt+++/d607duxYczgcFh8fby+//LKZmW3ZssW6detmsbGx1rx5c5swYYIVFha6npOSkmINGza08PBwu+yyy+zJJ5+0oqKiSp87Z84ci4uLs+TkZHvooYesZcuWlpSUZF9++aWNHDnS6tWrZ23btrW8vLxana+aitHTPHgax8wuGGvo0KF20003ebWfXbt2tb/+9a+Vrte+fXtbsGCB6/e5c+daQkKCRUdH24gRI8qte/bsWbvmmmts48aNHudo4sSJ5nA4LDEx0TZt2mTjx483p9NpDRs2tB07dtiGDRssNTXVYmJirHnz5jZjxgwzMysoKLAuXbrY+PHj3cZ77Ngxa9OmTblaK3PmzBkbPny4JSQkWGJiot1zzz12+PBhMzNbsWKFdejQwaKjo61p06Y2ePBgO3LkiOu58+bNs/bt21c6X2ZmO3futGbNmnm1LgAAAAAAtcVhZhbohgkAAAAAQN3Vrl07vfrqq0pLSwt0KOU0a9ZMs2bN0oABAwIdSjn+nq9AzUNaWpqeeuop9e7d2+N6ixcv1uLFi/X+++/7KTLPNm/erHHjxmnjxo1+3W56erqGDh2qBx54oNJ1c3Jy1KdPH58/EQIAAAAAgJrE10AAAAAAAOBGbX5VQygJ5nnIyMhQx44dNWfOnECHopMnT2rSpEmVNljUtFmzZqlz585eNSoAAAAAABAsaFYAAAAAAOA8Q4cO1b59+5SVlaVFixYFOpyACZV5ePHFFxUREaGVK1cGNI6VK1eqY8eOmjBhgt+2uXr1aiUlJemFF17w2zYBAAAAAKgJ4YEOAAAAAACAYJOdna3s7OxAhxFwoTQPw4YNC3QIGjJkiN+3eeedd/p9mwAAAAAA1AQ+WQEAAAAAAAAAAAAAAPgVzQoAAAAAAAAAAAAAAMCvaFYAAAAAAAAAAAAAAAB+RbMCAAAAAAAAAAAAAADwK4eZWaCDAAAAAADUXe3atdNXX30V6DCAOqVZs2bas2dPoMMAAAAAANRhNCsAAAAAAALq9OnTKikpCXQYqIIGDRpo7969ql+/fqBDgY+cTqfi4uICHQYAAAAAoA6jWQEAAAAAAFSJw+HQiRMnFB8fH+hQAAAAAABAiHEGOgR4MnIAABiFSURBVAAAAAAAAAAAAAAAAFC30KwAAAAAAAAAAAAAAAD8imYFAAAAAAAAAAAAAADgVzQrAAAAAAAAAAAAAAAAv6JZAQAAAAAAAAAAAAAA+BXNCgAAAAAAAAAAAAAAwK9oVgAAAAAAAAAAAAAAAH5FswIAAAAAAAAAAAAAAPArmhUAAAAAAAAAAAAAAIBf0awAAAAAAAAAAAAAAAD8imYFAAAAAAAAAAAAAADgVzQrAAAAAAAAAAAAAAAAv6JZAQAAAAAAAAAAAAAA+BXNCgAAAAAAAAAAAAAAwK9oVgAAAAAAAAAAAAAAAH5FswIAAAAAAAAAAAAAAPArmhUAAAAAAAAAAAAAAIBf0awAAPj/7d17TJbn/cfxz4MgCoioUIo4qXhiTqKgTjQ04Kx2qQVbrVmqWEDBA9ggSJUmY9k8zMo8RCfTVKko2HUaVDyEGQ9RaSfOKpqASpytSg0gVtGKIijP74/+fBanIsfnFny/Ev7guq/7e3+u+/pPv1w3AAAAAAAAAAAAYFU0KwAAAAAAAAAAAAAAAKuiWQEAAAAAAAAAAAAAAFgVzQoAAAAAAAAAAAAAAMCqaFYAAAAAAAAAAAAAAABWRbMCAAAAAAAAAAAAAACwKpoVAAAAAAAAAAAAAACAVdGsAAAAAAAAAAAAAAAArMrW6AAAAAAAAKB1WLRokS5dumT5vVu3boqJiZGt7c//vNCjRw8tXrzYqHgAAAAAAKAVoVkBAAAAAADUS2VlpTIzM/Xo0SPL2NatWyVJNjY2ioqKMioaAAAAAABoZfgMBAAAAAAAqJfw8HDLKQr/y97eXhEREdYNBAAAAAAAWi2T2Ww2Gx0CAAAAAAC0Dt7e3vr++++fGndzc1NZWZlMJpMBqQAAAAAAQGvDyQoAAAAAAKDeoqKi5ODg8MRY+/btFRERQaMCAAAAAACoN05WAAAAAAAA9XblyhX17dtXNTU1ljF7e3udPHlSvr6+BiYDAAAAAACtCScrAAAAAACAevPy8tIvf/nLJ8Zef/11GhUAAAAAAECD0KwAAAAAAAAaJDo6Wo6OjpKkDh06KDo62uBEAAAAAACgteEzEAAAAAAAoEHKy8vl6empmpoatW/fXhcuXFCvXr2MjgUAAAAAAFoRTlYAAAAAAAAN4ubmpuHDh0uS+vfvT6MCAAAAAABoMJoVAAAAAABAg0VFRUkSn4AAAAAAAACNwmcgAAAAAACtxrhx45Sbm2t0jGZXU1MjW1tbmUwmo6PUm9lsVmVlpRwdHeuduzWuszUZPHiwjh07ZnQMAAAAAADqxdboAAAAAAAA1FdlZaVWr16tMWPGGB2lWQ0aNEi7d++Wl5eX0VEaZOvWrZoyZUq95wcGBmrdunXy9fVtwVSvpuPHj2vp0qVGxwAAAAAAoN5oVgAAAAAAtCrdunVTjx49jI7RrGxsbPT666+3unXNnz+/Qack2Nrayt3dvdWtszVwc3MzOgIAAAAAAA1iY3QAAAAAAADQOvE5BwAAAAAA0Fg0KwAAAAAAAAAAAAAAAKuiWQEAAAAAAAAAAAAAAFgVzQoAAAAAAAAAAAAAAMCqaFYAAAAAAKCVioyMVExMjNExWsyGDRu0Y8cOpaamysXFRSaTSSEhIU/MmTRpkuzt7eXq6qqtW7daPePDhw9lMpme+unQoYPu378vSVqzZo28vb3Vvn17eXp66u9//7sk6fjx4xoxYoScnJzk6emp+Ph4PXr0SNnZ2frqq6+svhYAAAAAAKyJZgUAAAAAAP7fxo0bdfDgwZeu1vOYzWaZzeYWfYY11vEsc+fOVU1NjSZMmKDY2Filp6erZ8+e2rt3r/bu3WuZt337dn388cfatWuXpkyZYvWckjRr1izLXpjNZp0+fVrh4eHq2LGjVq9erb/85S/aunWrfvrpJ33++ee6du2aamtr9d5772nkyJEqLS3V3r17tWXLFn3++ecaP368bt68qXnz5hmyHgAAAAAArIFmBQAAAAAA/l9GRsZLWet50tPTtW7duhZ9hjXW8b82bdqk48ePP3VqxMyZMxUYGKi4uDhVVVVZPdez2NraPrUHn332mebNm6fq6motXrxYixcv1ogRI2Rvb69x48YpMTFRN27c0PXr1/W73/1OTk5O8vPz07Bhw1RQUCBJiomJUW5urtLT0w1YFQAAAAAALY9mBQAAAABAm3Pq1Cm9+eabcnZ2lpeXl5KSklRdXa2wsDCZTCbLX+aHhobKxsZG6enpCgsL07FjxzRmzBj5+PhowYIFMplMGjt2rNzd3dW1a1dFRUXp3r17ktSgWi3hyy+/lKOjo959911JUnJysmxsbBQVFaVRo0bJwcFBAQEBunXrVp1raeg6oqOj9dZbb7XImh5bsWKFoqOjnxq3sbFRRkaGbty4oZSUlGfe+7y9r+v9SNLRo0fl7+8vJycnjRw5UoWFhY3KXlRUpNraWvXr10/5+fm6ceOGfvOb3zw1z83NTcOHD1d2drbu37+v8+fP6/Tp0/rtb39rmRMVFaUVK1Y0KgcAAAAAAC87mhUAAAAAAG3K3bt39c4772js2LH64YcflJWVpYyMDK1atUqZmZnq1q2bZe7u3bvVr18/SVJmZqYcHR114MABXbhwQcuWLZOnp6dCQkJ09epVHTp0SDk5OZb/JG9IrZYwefJkxcfHW35ftGiRBgwYID8/Px04cEDnz5/XxYsXlZ2dXedaGrqOR48eqba2tkXWJEkXLlxQYWGhhgwZ8szrb7zxhtauXavPPvtMly9ffuJaXXtf1/u5ffu2JkyYoKlTp6qkpEQjRoxQWFhYo/I/PlVBkoqLiyX93Nji5uYmBwcHBQYG6ty5czKZTNq6dav+9re/ycHBQQMGDNB7772nkJAQSy0/Pz8VFBSoqKioUVkAAAAAAHiZ0awAAAAAAGhTjh49qtu3byspKUnOzs4aOnSopk2bpqysrEbV8/DwkL29vfz8/BQREaE9e/Y0c+LmZW9vL1tbW3l5ealv376qqKiwXGuOtXzxxRc6fPhwc0Z+wqVLlyT9fPLA80ydOlWhoaGaO3fuE+P12ftnvZ9vvvlGd+/eVVxcnDp16qTw8HCdOXNGN2/ebFD2K1euqLi4WAEBAZJkaer405/+pEuXLunatWtydnZWdHS07t69q9GjR+vPf/6zfvrpJxUUFOjYsWNav369pd7jd/D4nQAAAAAA0JbQrAAAAAAAaFNKS0vl4uIiOzs7y5iHh4dKSkqaXPu1117T9evXm1znZfCyruXxZzbs7e3rnLd+/XqdOnVKOTk5lrHG7n1ZWZmqq6vVrl07mUwmDRo0SJIsn4ior5SUlCcaKNzd3SVJAwcOlLOzs7p06aLw8HCdPHlSe/bsUUVFhWbPni0nJyf96le/UnR0tNauXWu538HBQdJ/3wkAAAAAAG0JzQoAAAAAgDbFw8NDFRUVqqmpsYyVlJSoe/fuTa595coVeXp6NrnOy+BlXYujo6Mkqbq6us55Li4u2rJli+Lj4/XgwQNJjd97V1dXOTk5qba2Vmaz2fLTu3fveucuKyvTiRMnNG7cOMuYv7+/7O3t9e9//9syVlNTo44dO+rRo0cymUxP1Xm8Fum/7+Bx0wIAAAAAAG0JzQoAAAAAgDYlKChInTt31tKlS3Xnzh19++23SktL06RJkyRJzs7O+vrrr1VTU6PS0lJVVVVZ7rWzs1NhYaHu379vOcK/srJSDx8+1MmTJ5WZmakPP/zQMr+htYz2vLU0ZB1RUVEaPXp0i2X09vaWJJWXl79w7qhRoxQSEqKMjAxJL9775wkMDJTJZNKSJUv0448/qrq6WsXFxQ3KvXLlSs2ZM+eJBoROnTopMjJSv//97/Xdd9+pvLxcaWlpevfddxUQEKDKykpt2LBB9+7dU1FRkdLS0hQUFGS5v7S0VJIa1DQBAAAAAEBrQbMCAAAAAKBNcXR01L59+7R//351795dH3zwgSIiIhQXFydJSkxMVGpqqry8vLRw4UK1a9dOn3zyiQoKCjR58mTNnz9fQ4cOtRy9Hx8fr44dO2rixImKjo5WbGys5VkNrdWc/vCHP2jlypX65z//qYkTJyo5OVnnzp3TggULlJeXp6SkJJ08eVILFy7U2bNn61yLkev4Xz4+Pho4cKDy8/MtY+vWrVNkZKQWLlyo2bNnPzF/yZIl6tWrl6S6976u93P16lXt3LlTO3bsUM+ePdWvXz9t375d0s8nHQQEBCgpKem5mSsqKrR7925NmTLlqWsrV67Ur3/9aw0ZMkQ+Pj5yd3fXmjVr1KdPH3355Zf661//KldXVwUHB2v48OFKSUmx3Jufn6+BAweqf//+TXqnAAAAAAC8jExms9lsdAgAAAAAAOojODhYCQkJCg0NtcrzevTooTVr1mjChAkt+hw3Nzfl5eW16F/QW2stdenTp4+2bdsmf3//Oudt3rxZmzdv1uHDh62UrG4nTpxQYmKicnNzrfrcoKAgTZ8+XR999NEL5x45ckQJCQk6ffq0FZIBAAAAANB0nKwAAAAAAEAdXpZPODSH1rKW8PBwDRo0SKmpqUZH0Z07d5ScnKy3337bqs9ds2aNhg0bVq9GBQAAAAAAWiOaFQAAAAAAeIbp06fr2rVrio6OVnp6utFxmqQ1rmXVqlWys7NTVlaWoTmysrI0aNAgffrpp1Z75s6dO+Xq6qrly5db7ZkAAAAAAFibrdEBAAAAAAB4GaWlpSktLc3oGM2ita5lxowZRkdQZGSk1Z/5/vvvW/2ZAAAAAABYGycrAAAAAAAAAAAAAAAAq6JZAQAAAAAAAAAAAAAAWBXNCgAAAAAAAAAAAAAAwKpMZrPZbHQIAAAAAADqY/jw4bK1tVX37t2NjtKs9u3bp6CgIDk5ORkdpUUdOHBAw4YNk4uLi9FR2pzy8nKVlZXp/PnzRkcBAAAAAKBebI0OAAAAAABAfdna2srf31+DBw82Okqz2r9/v4KCguTm5mZ0lBaVm5urESNGyMvLy+gobU5RUZFycnKMjgEAAAAAQL1xsgIAAAAAoNUIDg5WQkKCQkNDjY7SrNzc3JSXl6fevXsbHaVF9enTR9u2bZO/v7/RUdqcI0eOKCEhQadPnzY6CgAAAAAA9WJjdAAAAAAAAAAAAAAAAPBqoVkBAAAAAAAAAAAAAABYFc0KAAAAAAAAAAAAAADAqmhWAAAAAAAAAAAAAAAAVkWzAgAAAACgzUlNTZWLi4tMJpPlx8HBQT4+PoqNjdXly5eNjohmsGHDBo0ePdqy1yEhIU9cnzRpkuzt7eXq6qqtW7calFIqKyvTrFmzNGfOHMtYdna2vvrqK8MyAQAAAABgNJoVAAAAAABtTmxsrNLT0yVJxcXFqq6u1tmzZzV37lxlZ2dr8ODBOnPmjLEhrWjjxo06ePDgS1erKebOnauamhodOnRI6enp6tmzp/bu3au9e/da5mzfvl0ff/yxdu3apSlTphiSc8+ePVqxYoXy8/P18OFDy/j48eN18+ZNzZs3z5BcAAAAAAAYjWYFAAAAAECbZ2dnp759+2rWrFk6deqUOnTooNjYWKNjWU1GRsZLWauxNm3apOPHjysmJsYyNnPmTAUGBiouLk5VVVUGpntSSEiIUlJS9Itf/OKpazExMcrNzbU01gAAAAAA8CqhWQEAAAAA8Epxd3fXzJkz9a9//UvXr1/X0aNH5e/vLycnJ40cOVKFhYVKTk6WjY2NoqKiNGrUKDk4OCggIEC3bt2SJD169EgzZsxQ586d1alTJ02ePFmSnlmrOZ06dUpvvvmmnJ2d5eXlpaSkJFVXVyssLEwmk8lyqkBoaKhsbGyUnp6usLAwHTt2TGPGjJGPj48WLFggk8mksWPHyt3dXV27dlVUVJTu3btXZx1JT9WKjo7WW2+91axrrI8VK1YoOjr6iTEbGxtlZGToxo0bSklJee69z3uHL9rzltrbqKgorVixollqAQAAAADQmtCsAAAAAAB45fj6+kqSCgoKNGHCBE2dOlUlJSUaMWKEwsLCtGjRIg0YMEB+fn46cOCAzp8/r4sXLyo7O1uSlJOTo7y8PBUXF+vSpUvq0qWLbt++/cxazeXu3bt65513NHbsWP3www/KyspSRkaGVq1apczMTHXr1s0yd/fu3erXr58kKTMzU46Ojjpw4IAuXLigZcuWydPTUyEhIbp69aoOHTqknJwcpaSk1FnnWbUePXqk2traZltjfVy4cEGFhYUaMmTIU9feeOMNrV27Vp999pkuX7781PW63mFde96Se+vn56eCggIVFRU1Sz0AAAAAAFoLmhUAAAAAAK+c+/fvS5KOHz+uu3fvKi4uTp06dVJ4eLjOnDmjmzdvSpLs7e1la2srLy8v9e3bVxUVFZIkJycn/ec//9E//vEPOTo6KjU1Vd98802dtZrq6NGjun37tpKSkuTs7KyhQ4dq2rRpysrKalQ9Dw8P2dvby8/PTxEREdqzZ0+Da3zxxRc6fPhwo57fWJcuXZIkubm5PfP61KlTFRoaqrlz5z51rT7v8Fl73pJ7+3gdj9cFAAAAAMCrwtboAAAAAAAAWNv3338vk8kkBwcHVVdXq127dk9cf3z0//MEBwdr+fLlSklJUUJCghITE9WzZ8/n1uratWuTM5eWlsrFxUV2dnaWMQ8PD5WUlDS59muvvabr1683uY413Lt3T9LPTQXPs379evn6+ionJ+eJ8ca+w7KyshbbWwcHB0n/XRcAAAAAAK8KTlYAAAAAALxSHj58qE2bNik4OFh9+vSRk5OTamtrZTabLT+9e/d+YZ2YmBhdvHhR27Zt0+LFi3X16tVG16oPDw8PVVRUqKamxjJWUlKi7t27N7n2lStX5Onp2eQ61uDo6ChJqq6ufu4cFxcXbdmyRfHx8Xrw4IFlvLHv0NXVtcX29vE6HjctAAAAAADwqqBZAQAAAADQplVVVclsNqumpkZnzpzR2LFjdevWLa1evVqBgYEymUxasmSJfvzxR1VXV6u4uPiFNTdv3qzt27erqqpKvr6+cnFxaXSt+goKClLnzp21dOlS3blzR99++63S0tI0adIkSZKzs7O+/vpr1dTUqLS0VFVVVZZ77ezsVFhYqPv376u2tlaSVFlZqYcPH+rkyZPKzMzUhx9++MI6/1tr2rRpGj16dLOtsT68vb0lSeXl5XXOGzVqlEJCQpSRkWEZe9E7fJ6W3NvS0lJJaramFgAAAAAAWguaFQAAAAAAbc7GjRs1Z84c2dvby8fHRzY2NnJ0dNT48ePl7e2t06dPy9fXV126dNHOnTu1Y8cO9ezZU/369dP27duVnJysc+fOacGCBcrLy1NSUpJOnjyphQsX6uzZs+revbsSExPVqVMnDR06VLNnz9bo0aOfWau5ODo6at++fdq/f7+6d++uDz74QBEREYqLi5MkJSYmKjU1VV5eXlq4cKHatWunTz75RAUFBZo8ebLmz5+voUOHWj43EB8fr44dO2rixImKjo5WbGzsC+tIemYta/Lx8dHAgQOVn58vSVq3bp0iIyO1cOFCzZ49+4m5S5YsUa9evSy/1/UO69rzq1evPnNvHzx4oICAACUlJT0376JFi9S3b1/t3LlTGzdulI+Pj1JTUy3X8/PzNXDgQPXv37+Z3xQAAAAAAC83k9lsNhsdAgAAAACA+ggODlZCQoJCQ0ONjtKs3NzclJeXZ7W/ru/Ro4fWrFmjCRMmWOV5j/Xp00fbtm2Tv79/k+ps3rxZmzdv1uHDh5spWeOdOHFCiYmJys3NbdT9QUFBmj59uj766KMm5Thy5IgSEhJ0+vTpJtUBAAAAAMBaOFkBAAAAAIBX0OPPQbRG4eHhGjRo0BMnFBjhzp07Sk5O1ttvv92o+9esWaNhw4Y1uVEBAAAAAIDWiGYFAAAAAABeIdOnT9e1a9cUHR2t9PR0o+M02qpVq2RnZ6esrCzDMmRlZWnQoEH69NNPG3zvzp075erqquXLl7dAMgAAAAAAXn62RgcAAAAAAADWk5aWprS0NKNjNIsZM2YY+vzIyMhG3/v+++83YxIAAAAAAFofTlYAAAAAAAAAAAAAAABWRbMCAAAAAAAAAAAAAACwKpoVAAAAAAAAAAAAAACAVdkaHQAAAAAAgIY4ePCgysvLjY7RrKqqqrR9+3a5ubkZHaVF3blzR7t27VJ+fr7RUdqcoqIioyMAAAAAANAgJrPZbDY6BAAAAAAA9fHHP/5RhYWFRsdodpWVlXJwcJDJZDI6Sou6d++eOnToIBsbDnpsCd7e3lq2bJnRMQAAAAAAqBeaFQAAAAAAAAAAAAAAgFXxpwwAAAAAAAAAAAAAAMCqaFYAAAAAAAAAAAAAAABWZSvpO6NDAAAAAAAAAAAAAACAV8f/Aesdt/qtMz/xAAAAAElFTkSuQmCC\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"execution_count": 33
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "OcREcgPUHr9O",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "3a5cb213-eb63-403e-87b8-edde454bcf08"
},
"source": [
"# Train model\n",
"epochs = 4\n",
"history = model.fit(train_data,\n",
" validation_data = valid_data,\n",
" epochs = epochs,\n",
" verbose=1) # to limit the amount of output"
],
"execution_count": 34,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/4\n",
"306/306 [==============================] - 312s 826ms/step - loss: 0.1701 - binary_accuracy: 0.9409 - val_loss: 0.1255 - val_binary_accuracy: 0.9469\n",
"Epoch 2/4\n",
"306/306 [==============================] - 253s 824ms/step - loss: 0.1014 - binary_accuracy: 0.9597 - val_loss: 0.1516 - val_binary_accuracy: 0.9615\n",
"Epoch 3/4\n",
"306/306 [==============================] - 257s 834ms/step - loss: 0.0557 - binary_accuracy: 0.9793 - val_loss: 0.1824 - val_binary_accuracy: 0.9500\n",
"Epoch 4/4\n",
"306/306 [==============================] - 259s 843ms/step - loss: 0.0248 - binary_accuracy: 0.9918 - val_loss: 0.2473 - val_binary_accuracy: 0.9594\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "kNZl1lx_cA5Y"
},
"source": [
"## Task 11: Evaluate the BERT Text Classification Model"
]
},
{
"cell_type": "code",
"metadata": {
"id": "dCjgrUYH_IsE"
},
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"def plot_graphs(history, metric):\n",
" plt.plot(history.history[metric])\n",
" plt.plot(history.history['val_'+metric], '')\n",
" plt.xlabel(\"Epochs\")\n",
" plt.ylabel(metric)\n",
" plt.legend([metric, 'val_'+metric])\n",
" plt.show()"
],
"execution_count": 35,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "v6lrFRra_KmA",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 449
},
"outputId": "27ebb7d4-d1e5-4c40-8124-d183bed4d3b8"
},
"source": [
"plot_graphs(history,'loss')"
],
"execution_count": 36,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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dog2btzIZZddhp+fH2FhYUyYMIH8/Pzy7SkpKfTs2ZOAgAAaNWpEnz592LNnDwAbNmzg0ksvJSgoiODgYLp168aPP/5YbbWJiDR4pSfNu7teH2SGH/8wGPNfuOEDtww/oDNA1aO0EP4RU/uv++eD4B1QpV2vueYa7rnnHpYsWcKgQYMAOHbsGPPnz2fu3Lnk5+czYsQI/v73v+Pj48Pbb7/NFVdcQXp6Os2bN3epzIKCAoYOHUqvXr344YcfyM7O5tZbb2XixIm8+eablJWVMXr0aG677Tbef/99SkpKWL16NbZTp2LHjh1L165dmTFjBh4eHqxfvx4vr4Z3S6aISI3Y87151ufYTnP5ojEw/FkICLe2LospALmJ0NBQhg8fznvvvVcegD7++GPCw8O59NJLsdvtdO7cuXz/J598ks8++4wvv/ySiRMnuvTa7733HkVFRbz99tsEBJiB7eWXX+aKK67gmWeewcvLi5ycHC6//HJatWoFQPv27csfv3fvXv70pz/Rrp15O2abNm1cqkdExC0U58Gix+GH183loGjzcle7EZaWVVcoAFUHL3/zbIwVr3sexo4dy2233cZ//vMffHx8ePfdd7n++uux2+3k5+fz+OOPM2fOHA4dOkRZWRknT55k7969LpeZlpZG586dy8MPQJ8+fXA6naSnp9O/f39uuukmhg4dyuDBg0lOTubaa68lOjoagMmTJ3Prrbfyv//9j+TkZK655pryoCQiImewYxF8NQly9pnLF4+DwU+CXyMrq6pTNAaoOths5qWo2v45z9H6V1xxBYZhMGfOHPbt28fy5csZO3YsAA888ACfffYZ//jHP1i+fDnr16+nY8eOlJSU1MQR+5VZs2aRmppK7969mT17Nm3btmXlypUAPP7442zevJmRI0fy7bffkpiYyGeffVYrdYmI1CuFx+CzO+GdMWb4adQCxn0BV/5b4ecXFIDciK+vL1dddRXvvvsu77//PgkJCVx88cUArFixgptuuonf/e53dOzYkaioKHbv3l0tr9u+fXs2bNhAQUFB+boVK1Zgt9tJSEgoX9e1a1emTJnC999/z0UXXcR7771Xvq1t27bcf//9LFiwgKuuuopZs2ZVS20iIg3Gli9gehJseA+wwSV3wV2pED/Q6srqJAUgNzN27FjmzJnDG2+8UX72B8xxNZ9++inr169n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ggJ69ep1xn2s+lwpAFWjI0eO4HA4iIyMrLQ+MjLyrOMJMjMzz2v/huJCjlVCQgJvvPEGX3zxBe+88w5Op5PevXuzf//+2ii53jjbZyo3N5eTJ09aVFXdFR0dzSuvvMInn3zCJ598QmxsLAMHDmTt2rVWl1ZrnE4nkyZNok+fPlx00UVn3c9df1/9XFWPlbv/vtq4cSOBgYH4+Phwxx138Nlnn5GYmHjGfa36XKkbvNQbvXr1qvR/EL1796Z9+/a8+uqrPPnkkxZWJvVZQkICCQkJ5cu9e/dm586dvPjii/zvf/+zsLLac/fdd7Np0ya+++47q0up86p6rNz991VCQgLr168nJyeHjz/+mPHjx7N06dKzhiAr6AxQNQoPD8fDw4OsrKxK67OysoiKijrjY6Kios5r/4biQo7VL3l5edG1a1d27NhREyXWW2f7TAUHB+Pn52dRVfVLz5493eZzNXHiRL7++muWLFlCs2bNzrmvu/6+Ou18jtUvudvvK29vb1q3bk23bt2YOnUqnTt35l//+tcZ97Xqc6UAVI28vb3p1q0bixcvLl/ndDpZvHjxWa999urVq9L+AAsXLjzr/g3FhRyrX3I4HGzcuJHo6OiaKrNectfPVHVav359g/9cGYbBxIkT+eyzz/j2229p2bLlbz7GXT9bF3Ksfsndf185nU6Ki4vPuM2yz1WNDrF2Qx988IHh4+NjvPnmm8aWLVuMCRMmGI0aNTIyMzMNwzCMG2+80Xj44YfL91+xYoXh6elpPP/880ZaWprx2GOPGV5eXsbGjRutegu15nyP1RNPPGF88803xs6dO401a9YY119/veHr62ts3rzZqrdQK/Ly8ox169YZ69atMwDjhRdeMNatW2fs2bPHMAzDePjhh40bb7yxfP+MjAzD39/f+NOf/mSkpaUZ06dPNzw8PIz58+db9RZq1fkerxdffNH4/PPPje3btxsbN2407rvvPsNutxuLFi2y6i3UijvvvNMICQkxUlJSjEOHDpX/FBYWlu+j31emCzlW7vr7yjDMf2NLly41du3aZfz000/Gww8/bNhsNmPBggWGYdSdz5UCUA3497//bTRv3tzw9vY2evbsaaxcubJ824ABA4zx48dX2v/DDz802rZta3h7exsdOnQw5syZU8sVW+d8jtWkSZPK942MjDRGjBhhrF271oKqa9fp27R/+XP62IwfP94YMGDArx7TpUsXw9vb24iPjzdmzZpV63Vb5XyP1zPPPGO0atXK8PX1NRo3bmwMHDjQ+Pbbb60pvhad6RgBlT4r+n1lupBj5a6/rwzDMP7whz8YLVq0MLy9vY0mTZoYgwYNKg8/hlF3Plc2wzCMmj3HJCIiIlK3aAyQiIiIuB0FIBEREXE7CkAiIiLidhSARERExO0oAImIiIjbUQASERERt6MAJCIiIm5HAUhERETcjgKQiMhZ2Gw2Pv/8c6vLEJEaoAAkInXSTTfdhM1m+9XPsGHDrC5NRBoAT6sLEBE5m2HDhjFr1qxK63x8fCyqRkQaEp0BEpE6y8fHh6ioqEo/oaGhgHl5asaMGQwfPhw/Pz/i4+P5+OOPKz1+48aNXHbZZfj5+REWFsaECRPIz8+vtM8bb7xBhw4d8PHxITo6mokTJ1bafuTIEX73u9/h7+9PmzZt+PLLL8u3HT9+nLFjx9KkSRP8/Pxo06bNrwKbiNRNCkAiUm/99a9/ZcyYMWzYsIGxY8dy/fXXk5aWBkBBQQFDhw4lNDSUH374gY8++ohFixZVCjgzZszg7rvvZsKECWzcuJEvv/yS1q1bV3qNJ554gmuvvZaffvqJESNGMHbsWI4dO1b++lu2bGHevHmkpaUxY8YMwsPDa+8AiMiFq/F+8yIiF2D8+PGGh4eHERAQUOnn73//u2EYhgEYd9xxR6XHJCUlGXfeeadhGIYxc+ZMIzQ01MjPzy/fPmfOHMNutxuZmZmGYRhGTEyM8Ze//OWsNQDGI488Ur6cn59vAMa8efMMwzCMK664wrj55pur5w2LSK3SGCARqbMuvfRSZsyYUWld48aNy//cq1evStt69erF+vXrAUhLS6Nz584EBASUb+/Tpw9Op5P09HRsNhsHDx5k0KBB56yhU6dO5X8OCAggODiY7OxsAO68807GjBnD2rVrGTJkCKNHj6Z3794X9F5FpHYpAIlInRUQEPCrS1LVxc/Pr0r7eXl5VVq22Ww4nU4Ahg8fzp49e5g7dy4LFy5k0KBB3H333Tz//PPVXq+IVC+NARKRemvlypW/Wm7fvj0A7du3Z8OGDRQUFJRvX7FiBXa7nYSEBIKCgoiLi2Px4sUu1dCkSRPGjx/PO++8w7Rp05g5c6ZLzycitUNngESkziouLiYzM7PSOk9Pz/KBxh999BHdu3enb9++vPvuu6xevZr//ve/AIwdO5bHHnuM8ePH8/jjj3P48GHuuecebrzxRiIjIwF4/PHHueOOO4iIiGD48OHk5eWxYsUK7rnnnirV9+ijj9KtWzc6dOhAcXExX3/9dXkAE5G6TQFIROqs+fPnEx0dXWldQkICW7duBcw7tD744APuuusuoqOjef/990lMTATA39+fb775hvvuu48ePXrg7+/PmDFjeOGFF8qfa/z48RQVFfHiiy/ywAMPEB4eztVXX13l+ry9vZkyZQq7d+/Gz8+Pfv368cEHH1TDOxeRmmYzDMOwuggRkfNls9n47LPPGD16tNWliEg9pDFAIiIi4nYUgERERMTtaAyQiNRLunovIq7QGSARERFxOwpAIiIi4nYUgERERMTtKACJiIiI21EAEhEREbejACQiIiJuRwFIRERE3I4CkIiIiLid/wdIc/5AJGHnBQAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "opu9neBA_98R",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 449
},
"outputId": "d97af933-dd92-4406-ce11-56fd9a8fe374"
},
"source": [
"plot_graphs(history,'binary_accuracy')"
],
"execution_count": 37,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "hkhtCCgnUbY6",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "7def0ffd-c786-43a5-ff9a-1e5137697e61"
},
"source": [
"sample_example = [\"May I have your email id?\", \"Elon Mush is not a human.\",\"I want icecream\"]\n",
"test_data = tf.data.Dataset.from_tensor_slices((sample_example, [0]*len(sample_example)))\n",
"test_data = (test_data.map(to_feature_map).batch(1))\n",
"preds = model.predict(test_data)\n",
"threshold = 0.5 # between 0 and 1\n",
"['Insincere' if pred > threshold else 'Sincere' for pred in preds]"
],
"execution_count": 41,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"3/3 [==============================] - 0s 22ms/step\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['Sincere', 'Sincere', 'Sincere']"
]
},
"metadata": {},
"execution_count": 41
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "K4B8NQBLd9rN"
},
"source": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "FeVNOGfFJT9O"
},
"source": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "I_YWudFRJT__"
},
"source": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "hENB__IlJUCk"
},
"source": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "wkYpiGrhJUFK"
},
"source": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "iYqbQZJnJUHw"
},
"source": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "aiKuBGgfJUKv"
},
"source": [],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment