diff --git a/09_SkimLit_nlp_milestone_project_2.ipynb b/09_SkimLit_nlp_milestone_project_2.ipynb index c6c45962..a29be75d 100644 --- a/09_SkimLit_nlp_milestone_project_2.ipynb +++ b/09_SkimLit_nlp_milestone_project_2.ipynb @@ -1,28 +1,10 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "accelerator": "GPU", - "colab": { - "name": "09_SkimLit_nlp_milestone_project_2.ipynb", - "provenance": [], - "collapsed_sections": [], - "toc_visible": true, - "mount_file_id": "1_yq3R-ThKP78_byQV9OovntEcXpQcBK2", - "authorship_tag": "ABX9TyM5wpCFGOHhp2o71grvS7VP", - "include_colab_link": true - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - } - }, "cells": [ { "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" @@ -141,26 +123,26 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "dsuQCg5Uaw1w", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "dsuQCg5Uaw1w", "outputId": "f1681b9e-a9e6-4049-9591-7300b376cf46" }, - "source": [ - "# Check for GPU\n", - "!nvidia-smi -L" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "GPU 0: Tesla T4 (UUID: GPU-90b6bfd2-2dbc-6214-b3b0-835ecd7fd102)\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Check for GPU\n", + "!nvidia-smi -L" ] }, { @@ -180,20 +162,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "c0qt0M55a98x", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "c0qt0M55a98x", "outputId": "4f4db3ae-e84b-432d-a807-7900ef3e1461" }, - "source": [ - "!git clone https://github.com/Franck-Dernoncourt/pubmed-rct.git\n", - "!ls pubmed-rct" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Cloning into 'pubmed-rct'...\n", @@ -207,9 +186,12 @@ "PubMed_20k_RCT\n", "PubMed_20k_RCT_numbers_replaced_with_at_sign\n", "README.md\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!git clone https://github.com/Franck-Dernoncourt/pubmed-rct.git\n", + "!ls pubmed-rct" ] }, { @@ -238,26 +220,26 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "crmxKEJ69bNW", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "crmxKEJ69bNW", "outputId": "87514fc4-594d-4572-d5ca-0125b51e073e" }, - "source": [ - "# Check what files are in the PubMed_20K dataset \n", - "!ls pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "dev.txt test.txt train.txt\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Check what files are in the PubMed_20K dataset \n", + "!ls pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign" ] }, { @@ -276,35 +258,28 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "C1Zp21fGbBUJ" }, + "outputs": [], "source": [ "# Start by using the 20k dataset\n", "data_dir = \"pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/\"" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "CWqMrjLCbFTr", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "CWqMrjLCbFTr", "outputId": "872976d8-e0c4-4cae-fd6a-db538926fa46" }, - "source": [ - "# Check all of the filenames in the target directory\n", - "import os\n", - "filenames = [data_dir + filename for filename in os.listdir(data_dir)]\n", - "filenames" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "['pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/train.txt',\n", @@ -312,9 +287,16 @@ " 'pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/dev.txt']" ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" } + ], + "source": [ + "# Check all of the filenames in the target directory\n", + "import os\n", + "filenames = [data_dir + filename for filename in os.listdir(data_dir)]\n", + "filenames" ] }, { @@ -352,9 +334,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "2yjdhJxbbIhX" }, + "outputs": [], "source": [ "# Create function to read the lines of a document\n", "def get_lines(filename):\n", @@ -373,9 +357,7 @@ " \"\"\"\n", " with open(filename, \"r\") as f:\n", " return f.readlines()" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -390,21 +372,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "IT7RMQsEbI0I", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "IT7RMQsEbI0I", "outputId": "5c6b3b6d-393c-42d2-bf0d-009f288d61cf" }, - "source": [ - "train_lines = get_lines(data_dir+\"train.txt\")\n", - "train_lines[:20] # the whole first example of an abstract + a little more of the next one" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "['###24293578\\n',\n", @@ -429,9 +406,14 @@ " 'METHODS\\tParticipants ( N = @ ) were randomly assigned to one of the two experimental mood induction conditions ( sad/neutral ) .\\n']" ] }, + "execution_count": 7, "metadata": {}, - "execution_count": 7 + "output_type": "execute_result" } + ], + "source": [ + "train_lines = get_lines(data_dir+\"train.txt\")\n", + "train_lines[:20] # the whole first example of an abstract + a little more of the next one" ] }, { @@ -478,9 +460,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "B65Ffn9abJKH" }, + "outputs": [], "source": [ "def preprocess_text_with_line_numbers(filename):\n", " \"\"\"Returns a list of dictionaries of abstract line data.\n", @@ -530,9 +514,7 @@ " abstract_lines += line\n", " \n", " return abstract_samples" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -545,31 +527,31 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "yDd28-PfgoUP", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "yDd28-PfgoUP", "outputId": "9a1f574a-f050-41a7-83e4-6deb7f37c225" }, - "source": [ - "# Get data from file and preprocess it\n", - "%%time\n", - "train_samples = preprocess_text_with_line_numbers(data_dir + \"train.txt\")\n", - "val_samples = preprocess_text_with_line_numbers(data_dir + \"dev.txt\") # dev is another name for validation set\n", - "test_samples = preprocess_text_with_line_numbers(data_dir + \"test.txt\")\n", - "len(train_samples), len(val_samples), len(test_samples)" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 450 ms, sys: 89.4 ms, total: 540 ms\n", "Wall time: 540 ms\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Get data from file and preprocess it\n", + "%%time\n", + "train_samples = preprocess_text_with_line_numbers(data_dir + \"train.txt\")\n", + "val_samples = preprocess_text_with_line_numbers(data_dir + \"dev.txt\") # dev is another name for validation set\n", + "test_samples = preprocess_text_with_line_numbers(data_dir + \"test.txt\")\n", + "len(train_samples), len(val_samples), len(test_samples)" ] }, { @@ -583,21 +565,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "FcYkHrnnh0lf", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "FcYkHrnnh0lf", "outputId": "b86a45de-d1f7-4172-8c63-e892c679e827" }, - "source": [ - "# Check the first abstract of our training data\n", - "train_samples[:14]" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "[{'line_number': 0,\n", @@ -658,9 +635,14 @@ " 'total_lines': 10}]" ] }, + "execution_count": 10, "metadata": {}, - "execution_count": 10 + "output_type": "execute_result" } + ], + "source": [ + "# Check the first abstract of our training data\n", + "train_samples[:14]" ] }, { @@ -676,25 +658,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "RRSTUXuth9jJ", "colab": { "base_uri": "https://localhost:8080/", "height": 480 }, + "id": "RRSTUXuth9jJ", "outputId": "f23dff4e-7eb8-43fb-b374-b32984eeae1a" }, - "source": [ - "import pandas as pd\n", - "train_df = pd.DataFrame(train_samples)\n", - "val_df = pd.DataFrame(val_samples)\n", - "test_df = pd.DataFrame(test_samples)\n", - "train_df.head(14)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/html": [ "
\n", @@ -844,9 +818,17 @@ "[14 rows x 4 columns]" ] }, + "execution_count": 11, "metadata": {}, - "execution_count": 11 + "output_type": "execute_result" } + ], + "source": [ + "import pandas as pd\n", + "train_df = pd.DataFrame(train_samples)\n", + "val_df = pd.DataFrame(val_samples)\n", + "test_df = pd.DataFrame(test_samples)\n", + "train_df.head(14)" ] }, { @@ -860,21 +842,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "rnQIDiJPg231", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "rnQIDiJPg231", "outputId": "c89c50e3-596e-4b87-a291-3d918959ab6e" }, - "source": [ - "# Distribution of labels in training data\n", - "train_df.target.value_counts()" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "METHODS 59353\n", @@ -885,9 +862,14 @@ "Name: target, dtype: int64" ] }, + "execution_count": 12, "metadata": {}, - "execution_count": 12 + "output_type": "execute_result" } + ], + "source": [ + "# Distribution of labels in training data\n", + "train_df.target.value_counts()" ] }, { @@ -903,31 +885,31 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "tkCRIBWbhUmD", "colab": { "base_uri": "https://localhost:8080/", "height": 267 }, + "id": "tkCRIBWbhUmD", "outputId": "df00a85f-94a7-453b-e1c7-678599b1449f" }, - "source": [ - "train_df.total_lines.plot.hist();" - ], - "execution_count": null, "outputs": [ { - "output_type": "display_data", "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } + ], + "source": [ + "train_df.total_lines.plot.hist();" ] }, { @@ -956,51 +938,46 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "ybvBrdPKwmDR", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "ybvBrdPKwmDR", "outputId": "cdc484a0-774a-49ae-9560-144205ecc3ec" }, - "source": [ - "# Convert abstract text lines into lists \n", - "train_sentences = train_df[\"text\"].tolist()\n", - "val_sentences = val_df[\"text\"].tolist()\n", - "test_sentences = test_df[\"text\"].tolist()\n", - "len(train_sentences), len(val_sentences), len(test_sentences)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "(180040, 30212, 30135)" ] }, + "execution_count": 14, "metadata": {}, - "execution_count": 14 + "output_type": "execute_result" } + ], + "source": [ + "# Convert abstract text lines into lists \n", + "train_sentences = train_df[\"text\"].tolist()\n", + "val_sentences = val_df[\"text\"].tolist()\n", + "test_sentences = test_df[\"text\"].tolist()\n", + "len(train_sentences), len(val_sentences), len(test_sentences)" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "M-OPWZPei46_", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "M-OPWZPei46_", "outputId": "8f8c167c-bb1b-4c96-8145-897a78fc6d89" }, - "source": [ - "# View first 10 lines of training sentences\n", - "train_sentences[:10]" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "['to investigate the efficacy of @ weeks of daily low-dose oral prednisolone in improving pain , mobility , and systemic low-grade inflammation in the short term and whether the effect would be sustained at @ weeks in older adults with moderate to severe knee osteoarthritis ( oa ) .',\n", @@ -1015,9 +992,14 @@ " 'these differences remained significant at @ weeks .']" ] }, + "execution_count": 15, "metadata": {}, - "execution_count": 15 + "output_type": "execute_result" } + ], + "source": [ + "# View first 10 lines of training sentences\n", + "train_sentences[:10]" ] }, { @@ -1046,6 +1028,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1053,21 +1036,8 @@ "id": "riWJb105awwn", "outputId": "33b1d264-4ef1-441b-f6f3-4a6013a751dd" }, - "source": [ - "# One hot encode labels\n", - "from sklearn.preprocessing import OneHotEncoder\n", - "one_hot_encoder = OneHotEncoder(sparse=False)\n", - "train_labels_one_hot = one_hot_encoder.fit_transform(train_df[\"target\"].to_numpy().reshape(-1, 1))\n", - "val_labels_one_hot = one_hot_encoder.transform(val_df[\"target\"].to_numpy().reshape(-1, 1))\n", - "test_labels_one_hot = one_hot_encoder.transform(test_df[\"target\"].to_numpy().reshape(-1, 1))\n", - "\n", - "# Check what training labels look like\n", - "train_labels_one_hot" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array([[0., 0., 0., 1., 0.],\n", @@ -1079,9 +1049,21 @@ " [0., 1., 0., 0., 0.]])" ] }, + "execution_count": 16, "metadata": {}, - "execution_count": 16 + "output_type": "execute_result" } + ], + "source": [ + "# One hot encode labels\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "one_hot_encoder = OneHotEncoder(sparse=False)\n", + "train_labels_one_hot = one_hot_encoder.fit_transform(train_df[\"target\"].to_numpy().reshape(-1, 1))\n", + "val_labels_one_hot = one_hot_encoder.transform(val_df[\"target\"].to_numpy().reshape(-1, 1))\n", + "test_labels_one_hot = one_hot_encoder.transform(test_df[\"target\"].to_numpy().reshape(-1, 1))\n", + "\n", + "# Check what training labels look like\n", + "train_labels_one_hot" ] }, { @@ -1095,13 +1077,26 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "IG8LmKhAozc_", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "IG8LmKhAozc_", "outputId": "f8e95d24-6e01-4ded-9048-1b6fe5012428" }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 2, 2, ..., 4, 1, 1])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Extract labels (\"target\" columns) and encode them into integers \n", "from sklearn.preprocessing import LabelEncoder\n", @@ -1112,19 +1107,6 @@ "\n", "# Check what training labels look like\n", "train_labels_encoded" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "array([3, 2, 2, ..., 4, 1, 1])" - ] - }, - "metadata": {}, - "execution_count": 17 - } ] }, { @@ -1138,32 +1120,32 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "KeQ1OQ9glVaz", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "KeQ1OQ9glVaz", "outputId": "1560a171-6d14-4630-a9f1-89263b0f0e73" }, - "source": [ - "# Get class names and number of classes from LabelEncoder instance \n", - "num_classes = len(label_encoder.classes_)\n", - "class_names = label_encoder.classes_\n", - "num_classes, class_names" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "(5, array(['BACKGROUND', 'CONCLUSIONS', 'METHODS', 'OBJECTIVE', 'RESULTS'],\n", " dtype=object))" ] }, + "execution_count": 18, "metadata": {}, - "execution_count": 18 + "output_type": "execute_result" } + ], + "source": [ + "# Get class names and number of classes from LabelEncoder instance \n", + "num_classes = len(label_encoder.classes_)\n", + "class_names = label_encoder.classes_\n", + "num_classes, class_names" ] }, { @@ -1197,9 +1179,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "Km5hWlVymnxv" }, + "outputs": [], "source": [ "from sklearn.feature_extraction.text import TfidfVectorizer\n", "from sklearn.naive_bayes import MultinomialNB\n", @@ -1214,9 +1198,7 @@ "# Fit the pipeline to the training data\n", "model_0.fit(X=train_sentences, \n", " y=train_labels_encoded);" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -1231,30 +1213,30 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "kq7BAPCmn1bM", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "kq7BAPCmn1bM", "outputId": "ea36bce3-e906-46f3-ca96-6cee22ae358a" }, - "source": [ - "# Evaluate baseline on validation dataset\n", - "model_0.score(X=val_sentences,\n", - " y=val_labels_encoded)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "0.7218323844829869" ] }, + "execution_count": 20, "metadata": {}, - "execution_count": 20 + "output_type": "execute_result" } + ], + "source": [ + "# Evaluate baseline on validation dataset\n", + "model_0.score(X=val_sentences,\n", + " y=val_labels_encoded)" ] }, { @@ -1270,30 +1252,30 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "vuGl9z2NjAl8", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "vuGl9z2NjAl8", "outputId": "cafb9c0a-5202-4b6c-bb17-5d86b4fc7c4a" }, - "source": [ - "# Make predictions\n", - "baseline_preds = model_0.predict(val_sentences)\n", - "baseline_preds" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array([4, 1, 3, ..., 4, 4, 1])" ] }, + "execution_count": 21, "metadata": {}, - "execution_count": 21 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions\n", + "baseline_preds = model_0.predict(val_sentences)\n", + "baseline_preds" ] }, { @@ -1324,6 +1306,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1331,13 +1314,9 @@ "id": "a6y-nK2tGwOL", "outputId": "c3dbccf5-0234-4f7f-8c64-20f509c70b1d" }, - "source": [ - "# Download helper functions script\n", - "!wget https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "--2021-08-24 23:56:53-- https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py\n", @@ -1351,9 +1330,12 @@ "\n", "2021-08-24 23:56:53 (89.8 MB/s) - ‘helper_functions.py’ saved [10246/10246]\n", "\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Download helper functions script\n", + "!wget https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py" ] }, { @@ -1367,35 +1349,28 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "P44NMOt1GzZL" }, + "outputs": [], "source": [ "# Import calculate_results helper function\n", "from helper_functions import calculate_results" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "9WN_TLx2jv7T", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "9WN_TLx2jv7T", "outputId": "fff443d3-c04f-47ba-a472-5752f47fac67" }, - "source": [ - "# Calculate baseline results\n", - "baseline_results = calculate_results(y_true=val_labels_encoded,\n", - " y_pred=baseline_preds)\n", - "baseline_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 72.1832384482987,\n", @@ -1404,9 +1379,16 @@ " 'recall': 0.7218323844829869}" ] }, + "execution_count": 24, "metadata": {}, - "execution_count": 24 + "output_type": "execute_result" } + ], + "source": [ + "# Calculate baseline results\n", + "baseline_results = calculate_results(y_true=val_labels_encoded,\n", + " y_pred=baseline_preds)\n", + "baseline_results" ] }, { @@ -1428,16 +1410,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "vCR0F7Rhptcp" }, + "outputs": [], "source": [ "import numpy as np\n", "import tensorflow as tf\n", "from tensorflow.keras import layers" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -1456,31 +1438,31 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "1Y-V_9-KrH7y", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "1Y-V_9-KrH7y", "outputId": "bbc21452-0f02-48d2-b3f2-944d342e938d" }, - "source": [ - "# How long is each sentence on average?\n", - "sent_lens = [len(sentence.split()) for sentence in train_sentences]\n", - "avg_sent_len = np.mean(sent_lens)\n", - "avg_sent_len # return average sentence length (in tokens)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "26.338269273494777" ] }, + "execution_count": 26, "metadata": {}, - "execution_count": 26 + "output_type": "execute_result" } + ], + "source": [ + "# How long is each sentence on average?\n", + "sent_lens = [len(sentence.split()) for sentence in train_sentences]\n", + "avg_sent_len = np.mean(sent_lens)\n", + "avg_sent_len # return average sentence length (in tokens)" ] }, { @@ -1494,33 +1476,33 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "Y9S27ACkroai", "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, + "id": "Y9S27ACkroai", "outputId": "dd67efe0-18eb-413f-fccf-ebf83d7701d5" }, - "source": [ - "# What's the distribution look like?\n", - "import matplotlib.pyplot as plt\n", - "plt.hist(sent_lens, bins=7);" - ], - "execution_count": null, "outputs": [ { - "output_type": "display_data", "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } + ], + "source": [ + "# What's the distribution look like?\n", + "import matplotlib.pyplot as plt\n", + "plt.hist(sent_lens, bins=7);" ] }, { @@ -1536,30 +1518,30 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "4e5nUagxr4r5", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "4e5nUagxr4r5", "outputId": "a989552c-41f7-4dcb-a130-0f684750ad0d" }, - "source": [ - "# How long of a sentence covers 95% of the lengths?\n", - "output_seq_len = int(np.percentile(sent_lens, 95))\n", - "output_seq_len" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "55" ] }, + "execution_count": 28, "metadata": {}, - "execution_count": 28 + "output_type": "execute_result" } + ], + "source": [ + "# How long of a sentence covers 95% of the lengths?\n", + "output_seq_len = int(np.percentile(sent_lens, 95))\n", + "output_seq_len" ] }, { @@ -1579,29 +1561,29 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "oEZbyvh1WCBw", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "oEZbyvh1WCBw", "outputId": "cf0a563b-3595-4e59-c35e-36a584841872" }, - "source": [ - "# Maximum sentence length in the training set\n", - "max(sent_lens)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "296" ] }, + "execution_count": 29, "metadata": {}, - "execution_count": 29 + "output_type": "execute_result" } + ], + "source": [ + "# Maximum sentence length in the training set\n", + "max(sent_lens)" ] }, { @@ -1634,15 +1616,15 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "xniPYW60uzby" }, + "outputs": [], "source": [ "# How many words are in our vocabulary? (taken from 3.2 in https://arxiv.org/pdf/1710.06071.pdf)\n", "max_tokens = 68000" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -1655,18 +1637,18 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "gtfQ27MNpy-v" }, + "outputs": [], "source": [ "# Create text vectorizer\n", "from tensorflow.keras.layers.experimental.preprocessing import TextVectorization\n", "\n", "text_vectorizer = TextVectorization(max_tokens=max_tokens, # number of words in vocabulary\n", " output_sequence_length=55) # desired output length of vectorized sequences" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -1679,36 +1661,29 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "AbJtmyd1sWW8" }, + "outputs": [], "source": [ "# Adapt text vectorizer to training sentences\n", "text_vectorizer.adapt(train_sentences)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "gVZDwaymsbLa", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "gVZDwaymsbLa", "outputId": "d7847633-85bf-41ef-90cb-b328428f66b3" }, - "source": [ - "# Test out text vectorizer\n", - "import random\n", - "target_sentence = random.choice(train_sentences)\n", - "print(f\"Text:\\n{target_sentence}\")\n", - "print(f\"\\nLength of text: {len(target_sentence.split())}\")\n", - "print(f\"\\nVectorized text:\\n{text_vectorizer([target_sentence])}\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Text:\n", @@ -1721,9 +1696,16 @@ " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Test out text vectorizer\n", + "import random\n", + "target_sentence = random.choice(train_sentences)\n", + "print(f\"Text:\\n{target_sentence}\")\n", + "print(f\"\\nLength of text: {len(target_sentence.split())}\")\n", + "print(f\"\\nVectorized text:\\n{text_vectorizer([target_sentence])}\")" ] }, { @@ -1741,31 +1723,31 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "IS80FGEhsgVe", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "IS80FGEhsgVe", "outputId": "5410d298-46f8-4e03-c652-ca2629169d3b" }, - "source": [ - "# How many words in our training vocabulary?\n", - "rct_20k_text_vocab = text_vectorizer.get_vocabulary()\n", - "print(f\"Number of words in vocabulary: {len(rct_20k_text_vocab)}\"), \n", - "print(f\"Most common words in the vocabulary: {rct_20k_text_vocab[:5]}\")\n", - "print(f\"Least common words in the vocabulary: {rct_20k_text_vocab[-5:]}\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Number of words in vocabulary: 64841\n", "Most common words in the vocabulary: ['', '[UNK]', 'the', 'and', 'of']\n", "Least common words in the vocabulary: ['aainduced', 'aaigroup', 'aachener', 'aachen', 'aaacp']\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# How many words in our training vocabulary?\n", + "rct_20k_text_vocab = text_vectorizer.get_vocabulary()\n", + "print(f\"Number of words in vocabulary: {len(rct_20k_text_vocab)}\"), \n", + "print(f\"Most common words in the vocabulary: {rct_20k_text_vocab[:5]}\")\n", + "print(f\"Least common words in the vocabulary: {rct_20k_text_vocab[-5:]}\")" ] }, { @@ -1779,21 +1761,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "Ly5BSLkGZnPO", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "Ly5BSLkGZnPO", "outputId": "70389114-b78f-48db-8983-4f7d501fd92e" }, - "source": [ - "# Get the config of our text vectorizer\n", - "text_vectorizer.get_config()" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'batch_input_shape': (None,),\n", @@ -1809,9 +1786,14 @@ " 'trainable': True}" ] }, + "execution_count": 35, "metadata": {}, - "execution_count": 35 + "output_type": "execute_result" } + ], + "source": [ + "# Get the config of our text vectorizer\n", + "text_vectorizer.get_config()" ] }, { @@ -1841,32 +1823,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "AIKPM2QOuLQv", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "AIKPM2QOuLQv", "outputId": "33119c36-8c56-46bf-b789-c1d0f90e84ea" }, - "source": [ - "# Create token embedding layer\n", - "token_embed = layers.Embedding(input_dim=len(rct_20k_text_vocab), # length of vocabulary\n", - " output_dim=128, # Note: different embedding sizes result in drastically different numbers of parameters to train\n", - " # Use masking to handle variable sequence lengths (save space)\n", - " mask_zero=True,\n", - " name=\"token_embedding\") \n", - "\n", - "# Show example embedding\n", - "print(f\"Sentence before vectorization:\\n{target_sentence}\\n\")\n", - "vectorized_sentence = text_vectorizer([target_sentence])\n", - "print(f\"Sentence after vectorization (before embedding):\\n{vectorized_sentence}\\n\")\n", - "embedded_sentence = token_embed(vectorized_sentence)\n", - "print(f\"Sentence after embedding:\\n{embedded_sentence}\\n\")\n", - "print(f\"Embedded sentence shape: {embedded_sentence.shape}\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Sentence before vectorization:\n", @@ -1894,9 +1861,24 @@ " -0.04724472]]]\n", "\n", "Embedded sentence shape: (1, 55, 128)\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Create token embedding layer\n", + "token_embed = layers.Embedding(input_dim=len(rct_20k_text_vocab), # length of vocabulary\n", + " output_dim=128, # Note: different embedding sizes result in drastically different numbers of parameters to train\n", + " # Use masking to handle variable sequence lengths (save space)\n", + " mask_zero=True,\n", + " name=\"token_embedding\") \n", + "\n", + "# Show example embedding\n", + "print(f\"Sentence before vectorization:\\n{target_sentence}\\n\")\n", + "vectorized_sentence = text_vectorizer([target_sentence])\n", + "print(f\"Sentence after vectorization (before embedding):\\n{vectorized_sentence}\\n\")\n", + "embedded_sentence = token_embed(vectorized_sentence)\n", + "print(f\"Sentence after embedding:\\n{embedded_sentence}\\n\")\n", + "print(f\"Embedded sentence shape: {embedded_sentence.shape}\")" ] }, { @@ -1924,6 +1906,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1931,30 +1914,30 @@ "id": "tan6Ekiwfza5", "outputId": "3f55adbf-9c1e-4670-8692-129732b23b06" }, - "source": [ - "# Turn our data into TensorFlow Datasets\n", - "train_dataset = tf.data.Dataset.from_tensor_slices((train_sentences, train_labels_one_hot))\n", - "valid_dataset = tf.data.Dataset.from_tensor_slices((val_sentences, val_labels_one_hot))\n", - "test_dataset = tf.data.Dataset.from_tensor_slices((test_sentences, test_labels_one_hot))\n", - "\n", - "train_dataset" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 37, "metadata": {}, - "execution_count": 37 + "output_type": "execute_result" } + ], + "source": [ + "# Turn our data into TensorFlow Datasets\n", + "train_dataset = tf.data.Dataset.from_tensor_slices((train_sentences, train_labels_one_hot))\n", + "valid_dataset = tf.data.Dataset.from_tensor_slices((val_sentences, val_labels_one_hot))\n", + "test_dataset = tf.data.Dataset.from_tensor_slices((test_sentences, test_labels_one_hot))\n", + "\n", + "train_dataset" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1962,26 +1945,25 @@ "id": "dnEJakTxgJWx", "outputId": "b585f44d-e736-471c-fa7d-bf572a05f498" }, - "source": [ - "# Take the TensorSliceDataset's and turn them into prefetched batches\n", - "train_dataset = train_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n", - "valid_dataset = valid_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n", - "test_dataset = test_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n", - "\n", - "train_dataset" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 38, "metadata": {}, - "execution_count": 38 + "output_type": "execute_result" } + ], + "source": [ + "# Take the TensorSliceDataset's and turn them into prefetched batches\n", + "train_dataset = train_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n", + "valid_dataset = valid_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n", + "test_dataset = test_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n", + "\n", + "train_dataset" ] }, { @@ -2012,9 +1994,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "oTW5buTKvRR6" }, + "outputs": [], "source": [ "# Create 1D convolutional model to process sequences\n", "inputs = layers.Input(shape=(1,), dtype=tf.string)\n", @@ -2029,26 +2013,21 @@ "model_1.compile(loss=\"categorical_crossentropy\", # if your labels are integer form (not one hot) use sparse_categorical_crossentropy\n", " optimizer=tf.keras.optimizers.Adam(),\n", " metrics=[\"accuracy\"])" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "aOaXSsZjnKmy", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "aOaXSsZjnKmy", "outputId": "7c62d30e-67b1-4da2-8de0-9acb4a3ef8c4" }, - "source": [ - "# Get summary of Conv1D model\n", - "model_1.summary()" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Model: \"model\"\n", @@ -2071,9 +2050,12 @@ "Trainable params: 8,340,997\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Get summary of Conv1D model\n", + "model_1.summary()" ] }, { @@ -2097,6 +2079,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2104,17 +2087,9 @@ "id": "IKpHoDysgvdC", "outputId": "153063a7-83e7-449b-f24e-772b6ea526bd" }, - "source": [ - "# Fit the model\n", - "model_1_history = model_1.fit(train_dataset,\n", - " steps_per_epoch=int(0.1 * len(train_dataset)), # only fit on 10% of batches for faster training time\n", - " epochs=3,\n", - " validation_data=valid_dataset,\n", - " validation_steps=int(0.1 * len(valid_dataset))) # only validate on 10% of batches" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/3\n", @@ -2123,9 +2098,16 @@ "562/562 [==============================] - 5s 8ms/step - loss: 0.6647 - accuracy: 0.7528 - val_loss: 0.6353 - val_accuracy: 0.7666\n", "Epoch 3/3\n", "562/562 [==============================] - 5s 8ms/step - loss: 0.6231 - accuracy: 0.7742 - val_loss: 0.6017 - val_accuracy: 0.7839\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Fit the model\n", + "model_1_history = model_1.fit(train_dataset,\n", + " steps_per_epoch=int(0.1 * len(train_dataset)), # only fit on 10% of batches for faster training time\n", + " epochs=3,\n", + " validation_data=valid_dataset,\n", + " validation_steps=int(0.1 * len(valid_dataset))) # only validate on 10% of batches" ] }, { @@ -2141,6 +2123,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2148,33 +2131,33 @@ "id": "WYvFOIBvhjpX", "outputId": "c026604f-d8cd-4e45-81ee-9aba8112368a" }, - "source": [ - "# Evaluate on whole validation dataset (we only validated on 10% of batches during training)\n", - "model_1.evaluate(valid_dataset)" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "945/945 [==============================] - 3s 3ms/step - loss: 0.6040 - accuracy: 0.7845\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "[0.6039669513702393, 0.784489631652832]" ] }, + "execution_count": 42, "metadata": {}, - "execution_count": 42 + "output_type": "execute_result" } + ], + "source": [ + "# Evaluate on whole validation dataset (we only validated on 10% of batches during training)\n", + "model_1.evaluate(valid_dataset)" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2182,15 +2165,8 @@ "id": "jAAtBWO2iRft", "outputId": "7b9f7b17-67c2-4b92-ec3e-a5686bfc1c6e" }, - "source": [ - "# Make predictions (our model outputs prediction probabilities for each class)\n", - "model_1_pred_probs = model_1.predict(valid_dataset)\n", - "model_1_pred_probs" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array([[4.65810180e-01, 1.68030873e-01, 9.11973268e-02, 2.48495579e-01,\n", @@ -2208,58 +2184,57 @@ " 1.24929301e-01]], dtype=float32)" ] }, + "execution_count": 43, "metadata": {}, - "execution_count": 43 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions (our model outputs prediction probabilities for each class)\n", + "model_1_pred_probs = model_1.predict(valid_dataset)\n", + "model_1_pred_probs" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "9ydUpF6cqMll", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "9ydUpF6cqMll", "outputId": "56f60716-4861-44bb-ee89-350f676243e3" }, - "source": [ - "# Convert pred probs to classes\n", - "model_1_preds = tf.argmax(model_1_pred_probs, axis=1)\n", - "model_1_preds" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 44, "metadata": {}, - "execution_count": 44 + "output_type": "execute_result" } + ], + "source": [ + "# Convert pred probs to classes\n", + "model_1_preds = tf.argmax(model_1_pred_probs, axis=1)\n", + "model_1_preds" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "KMfRLv0omdY4", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "KMfRLv0omdY4", "outputId": "044c15b8-3581-4603-b40d-c52c10ceec05" }, - "source": [ - "# Calculate model_1 results\n", - "model_1_results = calculate_results(y_true=val_labels_encoded,\n", - " y_pred=model_1_preds)\n", - "model_1_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 78.44896067787634,\n", @@ -2268,9 +2243,16 @@ " 'recall': 0.7844896067787634}" ] }, + "execution_count": 45, "metadata": {}, - "execution_count": 45 + "output_type": "execute_result" } + ], + "source": [ + "# Calculate model_1 results\n", + "model_1_results = calculate_results(y_true=val_labels_encoded,\n", + " y_pred=model_1_preds)\n", + "model_1_results" ] }, { @@ -2312,18 +2294,18 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "hk8mJUNy0xOO" }, + "outputs": [], "source": [ "# Download pretrained TensorFlow Hub USE\n", "import tensorflow_hub as hub\n", "tf_hub_embedding_layer = hub.KerasLayer(\"https://tfhub.dev/google/universal-sentence-encoder/4\",\n", " trainable=False,\n", " name=\"universal_sentence_encoder\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -2336,24 +2318,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "f5gCkZgYJYSi", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "f5gCkZgYJYSi", "outputId": "a78489bb-e747-4dab-f3ef-800c3df1a503" }, - "source": [ - "# Test out the embedding on a random sentence\n", - "random_training_sentence = random.choice(train_sentences)\n", - "print(f\"Random training sentence:\\n{random_training_sentence}\\n\")\n", - "use_embedded_sentence = tf_hub_embedding_layer([random_training_sentence])\n", - "print(f\"Sentence after embedding:\\n{use_embedded_sentence[0][:30]} (truncated output)...\\n\")\n", - "print(f\"Length of sentence embedding:\\n{len(use_embedded_sentence[0])}\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Random training sentence:\n", @@ -2368,9 +2343,16 @@ "\n", "Length of sentence embedding:\n", "512\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Test out the embedding on a random sentence\n", + "random_training_sentence = random.choice(train_sentences)\n", + "print(f\"Random training sentence:\\n{random_training_sentence}\\n\")\n", + "use_embedded_sentence = tf_hub_embedding_layer([random_training_sentence])\n", + "print(f\"Sentence after embedding:\\n{use_embedded_sentence[0][:30]} (truncated output)...\\n\")\n", + "print(f\"Length of sentence embedding:\\n{len(use_embedded_sentence[0])}\")" ] }, { @@ -2395,9 +2377,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "So4lSnW_2F1i" }, + "outputs": [], "source": [ "# Define feature extractor model using TF Hub layer\n", "inputs = layers.Input(shape=[], dtype=tf.string)\n", @@ -2412,26 +2396,21 @@ "model_2.compile(loss=\"categorical_crossentropy\",\n", " optimizer=tf.keras.optimizers.Adam(),\n", " metrics=[\"accuracy\"])" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "39r3jhefoKWG", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "39r3jhefoKWG", "outputId": "203a3d15-20e6-443b-868c-52f192f9e1c1" }, - "source": [ - "# Get a summary of the model\n", - "model_2.summary()" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_1\"\n", @@ -2450,9 +2429,12 @@ "Trainable params: 66,309\n", "Non-trainable params: 256,797,824\n", "_________________________________________________________________\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Get a summary of the model\n", + "model_2.summary()" ] }, { @@ -2468,6 +2450,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2475,17 +2458,9 @@ "id": "ttJKg6cDihGd", "outputId": "fa4dac4a-a201-4b87-901c-d179927cdec4" }, - "source": [ - "# Fit feature extractor model for 3 epochs\n", - "model_2.fit(train_dataset,\n", - " steps_per_epoch=int(0.1 * len(train_dataset)),\n", - " epochs=3,\n", - " validation_data=valid_dataset,\n", - " validation_steps=int(0.1 * len(valid_dataset)))" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/3\n", @@ -2494,23 +2469,31 @@ "562/562 [==============================] - 7s 12ms/step - loss: 0.7681 - accuracy: 0.7022 - val_loss: 0.7523 - val_accuracy: 0.7058\n", "Epoch 3/3\n", "562/562 [==============================] - 7s 12ms/step - loss: 0.7509 - accuracy: 0.7127 - val_loss: 0.7367 - val_accuracy: 0.7138\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 50, "metadata": {}, - "execution_count": 50 + "output_type": "execute_result" } + ], + "source": [ + "# Fit feature extractor model for 3 epochs\n", + "model_2.fit(train_dataset,\n", + " steps_per_epoch=int(0.1 * len(train_dataset)),\n", + " epochs=3,\n", + " validation_data=valid_dataset,\n", + " validation_steps=int(0.1 * len(valid_dataset)))" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2518,29 +2501,28 @@ "id": "tz8TMzLrjJYm", "outputId": "1983347a-fe5a-4a45-d5a9-7dbbb0b293f9" }, - "source": [ - "# Evaluate on whole validation dataset\n", - "model_2.evaluate(valid_dataset)" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "945/945 [==============================] - 10s 10ms/step - loss: 0.7403 - accuracy: 0.7143\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "[0.7403141856193542, 0.7142525911331177]" ] }, + "execution_count": 51, "metadata": {}, - "execution_count": 51 + "output_type": "execute_result" } + ], + "source": [ + "# Evaluate on whole validation dataset\n", + "model_2.evaluate(valid_dataset)" ] }, { @@ -2556,22 +2538,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "2oe5UxcgqvA2", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "2oe5UxcgqvA2", "outputId": "da030c86-f6b6-4f7a-fe8c-6d675871dade" }, - "source": [ - "# Make predictions with feature extraction model\n", - "model_2_pred_probs = model_2.predict(valid_dataset)\n", - "model_2_pred_probs" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array([[4.3034002e-01, 3.5648319e-01, 2.3842952e-03, 2.0301045e-01,\n", @@ -2589,58 +2565,57 @@ " 5.7450745e-02]], dtype=float32)" ] }, + "execution_count": 52, "metadata": {}, - "execution_count": 52 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions with feature extraction model\n", + "model_2_pred_probs = model_2.predict(valid_dataset)\n", + "model_2_pred_probs" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "u8RIEnvVq7Ri", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "u8RIEnvVq7Ri", "outputId": "761018f5-8901-49b2-cac7-0a163af4c0a4" }, - "source": [ - "# Convert the predictions with feature extraction model to classes\n", - "model_2_preds = tf.argmax(model_2_pred_probs, axis=1)\n", - "model_2_preds" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 53, "metadata": {}, - "execution_count": 53 + "output_type": "execute_result" } + ], + "source": [ + "# Convert the predictions with feature extraction model to classes\n", + "model_2_preds = tf.argmax(model_2_pred_probs, axis=1)\n", + "model_2_preds" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "hD5yvw9brOCp", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "hD5yvw9brOCp", "outputId": "da15f978-d7a7-4388-bcce-27443462d81a" }, - "source": [ - "# Calculate results from TF Hub pretrained embeddings results on validation set\n", - "model_2_results = calculate_results(y_true=val_labels_encoded,\n", - " y_pred=model_2_preds)\n", - "model_2_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 71.42526148550245,\n", @@ -2649,9 +2624,16 @@ " 'recall': 0.7142526148550244}" ] }, + "execution_count": 54, "metadata": {}, - "execution_count": 54 + "output_type": "execute_result" } + ], + "source": [ + "# Calculate results from TF Hub pretrained embeddings results on validation set\n", + "model_2_results = calculate_results(y_true=val_labels_encoded,\n", + " y_pred=model_2_preds)\n", + "model_2_results" ] }, { @@ -2689,26 +2671,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "nkoTYNvu36Bq", "colab": { "base_uri": "https://localhost:8080/", "height": 69 }, + "id": "nkoTYNvu36Bq", "outputId": "20031e5f-05ee-40a8-b2de-977591afe836" }, - "source": [ - "# Make function to split sentences into characters\n", - "def split_chars(text):\n", - " return \" \".join(list(text))\n", - "\n", - "# Test splitting non-character-level sequence into characters\n", - "split_chars(random_training_sentence)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" @@ -2717,9 +2690,18 @@ "'d a t a w e r e c o l l e c t e d f r o m @ , @ @ t h - a n d @ t h - g r a d e s t u d e n t s i n t h e s e c o m m u n i t i e s u s i n g a n o n y m o u s c r o s s - s e c t i o n a l s u r v e y s i n @ a n d @ a n d a n a l y z e d i n @ .'" ] }, + "execution_count": 55, "metadata": {}, - "execution_count": 55 + "output_type": "execute_result" } + ], + "source": [ + "# Make function to split sentences into characters\n", + "def split_chars(text):\n", + " return \" \".join(list(text))\n", + "\n", + "# Test splitting non-character-level sequence into characters\n", + "split_chars(random_training_sentence)" ] }, { @@ -2733,29 +2715,29 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "qLmU_GS64S2J", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "qLmU_GS64S2J", "outputId": "a0f7b0d9-e837-4748-d35e-191066b9486d" }, - "source": [ - "# Split sequence-level data splits into character-level data splits\n", - "train_chars = [split_chars(sentence) for sentence in train_sentences]\n", - "val_chars = [split_chars(sentence) for sentence in val_sentences]\n", - "test_chars = [split_chars(sentence) for sentence in test_sentences]\n", - "print(train_chars[0])" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "t o i n v e s t i g a t e t h e e f f i c a c y o f @ w e e k s o f d a i l y l o w - d o s e o r a l p r e d n i s o l o n e i n i m p r o v i n g p a i n , m o b i l i t y , a n d s y s t e m i c l o w - g r a d e i n f l a m m a t i o n i n t h e s h o r t t e r m a n d w h e t h e r t h e e f f e c t w o u l d b e s u s t a i n e d a t @ w e e k s i n o l d e r a d u l t s w i t h m o d e r a t e t o s e v e r e k n e e o s t e o a r t h r i t i s ( o a ) .\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Split sequence-level data splits into character-level data splits\n", + "train_chars = [split_chars(sentence) for sentence in train_sentences]\n", + "val_chars = [split_chars(sentence) for sentence in val_sentences]\n", + "test_chars = [split_chars(sentence) for sentence in test_sentences]\n", + "print(train_chars[0])" ] }, { @@ -2769,62 +2751,62 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "4CjyFW5g47Ps", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "4CjyFW5g47Ps", "outputId": "cc4abcee-bffe-4c98-9095-b04a9a0b2337" }, - "source": [ - "# What's the average character length?\n", - "char_lens = [len(sentence) for sentence in train_sentences]\n", - "mean_char_len = np.mean(char_lens)\n", - "mean_char_len" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "149.3662574983337" ] }, + "execution_count": 57, "metadata": {}, - "execution_count": 57 + "output_type": "execute_result" } + ], + "source": [ + "# What's the average character length?\n", + "char_lens = [len(sentence) for sentence in train_sentences]\n", + "mean_char_len = np.mean(char_lens)\n", + "mean_char_len" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "uPTgrtVJ2DSK", "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, + "id": "uPTgrtVJ2DSK", "outputId": "43355b07-51b9-41e9-c007-620b7dff7559" }, - "source": [ - "# Check the distribution of our sequences at character-level\n", - "import matplotlib.pyplot as plt\n", - "plt.hist(char_lens, bins=7);" - ], - "execution_count": null, "outputs": [ { - "output_type": "display_data", "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } + ], + "source": [ + "# Check the distribution of our sequences at character-level\n", + "import matplotlib.pyplot as plt\n", + "plt.hist(char_lens, bins=7);" ] }, { @@ -2840,30 +2822,30 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "P_k46x0Wy2n9", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "P_k46x0Wy2n9", "outputId": "fe425b19-12c7-4ab4-eada-dc0f0c1f4ece" }, - "source": [ - "# Find what character length covers 95% of sequences\n", - "output_seq_char_len = int(np.percentile(char_lens, 95))\n", - "output_seq_char_len" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "290" ] }, + "execution_count": 59, "metadata": {}, - "execution_count": 59 + "output_type": "execute_result" } + ], + "source": [ + "# Find what character length covers 95% of sequences\n", + "output_seq_char_len = int(np.percentile(char_lens, 95))\n", + "output_seq_char_len" ] }, { @@ -2881,6 +2863,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2889,16 +2872,8 @@ "id": "a7uKkbP_irFg", "outputId": "3858b78a-bc26-4d33-b55a-5fb3c3c6486e" }, - "source": [ - "# Get all keyboard characters for char-level embedding\n", - "import string\n", - "alphabet = string.ascii_lowercase + string.digits + string.punctuation\n", - "alphabet" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" @@ -2907,16 +2882,25 @@ "'abcdefghijklmnopqrstuvwxyz0123456789!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~'" ] }, + "execution_count": 60, "metadata": {}, - "execution_count": 60 + "output_type": "execute_result" } + ], + "source": [ + "# Get all keyboard characters for char-level embedding\n", + "import string\n", + "alphabet = string.ascii_lowercase + string.digits + string.punctuation\n", + "alphabet" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "PTMInkbv4Jxi" }, + "outputs": [], "source": [ "# Create char-level token vectorizer instance\n", "NUM_CHAR_TOKENS = len(alphabet) + 2 # num characters in alphabet + space + OOV token\n", @@ -2927,9 +2911,7 @@ "\n", "# Adapt character vectorizer to training characters\n", "char_vectorizer.adapt(train_chars)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -2942,31 +2924,31 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "uxdh7gxv5R4i", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "uxdh7gxv5R4i", "outputId": "d29d023f-3967-4514-ef61-f37ac4673b62" }, - "source": [ - "# Check character vocabulary characteristics\n", - "char_vocab = char_vectorizer.get_vocabulary()\n", - "print(f\"Number of different characters in character vocab: {len(char_vocab)}\")\n", - "print(f\"5 most common characters: {char_vocab[:5]}\")\n", - "print(f\"5 least common characters: {char_vocab[-5:]}\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Number of different characters in character vocab: 28\n", "5 most common characters: ['', '[UNK]', 'e', 't', 'i']\n", "5 least common characters: ['k', 'x', 'z', 'q', 'j']\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Check character vocabulary characteristics\n", + "char_vocab = char_vectorizer.get_vocabulary()\n", + "print(f\"Number of different characters in character vocab: {len(char_vocab)}\")\n", + "print(f\"5 most common characters: {char_vocab[:5]}\")\n", + "print(f\"5 least common characters: {char_vocab[-5:]}\")" ] }, { @@ -2980,25 +2962,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "AAcasGEh5d2O", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "AAcasGEh5d2O", "outputId": "860edae7-52e0-4d6c-f6db-f615ddda9fe7" }, - "source": [ - "# Test out character vectorizer\n", - "random_train_chars = random.choice(train_chars)\n", - "print(f\"Charified text:\\n{random_train_chars}\")\n", - "print(f\"\\nLength of chars: {len(random_train_chars.split())}\")\n", - "vectorized_chars = char_vectorizer([random_train_chars])\n", - "print(f\"\\nVectorized chars:\\n{vectorized_chars}\")\n", - "print(f\"\\nLength of vectorized chars: {len(vectorized_chars[0])}\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Charified text:\n", @@ -3022,9 +2996,17 @@ " 0 0]]\n", "\n", "Length of vectorized chars: 290\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Test out character vectorizer\n", + "random_train_chars = random.choice(train_chars)\n", + "print(f\"Charified text:\\n{random_train_chars}\")\n", + "print(f\"\\nLength of chars: {len(random_train_chars.split())}\")\n", + "vectorized_chars = char_vectorizer([random_train_chars])\n", + "print(f\"\\nVectorized chars:\\n{vectorized_chars}\")\n", + "print(f\"\\nLength of vectorized chars: {len(vectorized_chars[0])}\")" ] }, { @@ -3059,29 +3041,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "YQHt1hSy57cu", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "YQHt1hSy57cu", "outputId": "d1dcb96e-5f66-4e4e-ae33-8b3eee665962" }, - "source": [ - "# Create char embedding layer\n", - "char_embed = layers.Embedding(input_dim=NUM_CHAR_TOKENS, # number of different characters\n", - " output_dim=25, # embedding dimension of each character (same as Figure 1 in https://arxiv.org/pdf/1612.05251.pdf)\n", - " mask_zero=False, # don't use masks (this messes up model_5 if set to True)\n", - " name=\"char_embed\")\n", - "\n", - "# Test out character embedding layer\n", - "print(f\"Charified text (before vectorization and embedding):\\n{random_train_chars}\\n\")\n", - "char_embed_example = char_embed(char_vectorizer([random_train_chars]))\n", - "print(f\"Embedded chars (after vectorization and embedding):\\n{char_embed_example}\\n\")\n", - "print(f\"Character embedding shape: {char_embed_example.shape}\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Charified text (before vectorization and embedding):\n", @@ -3103,9 +3073,21 @@ " -0.00033282]]]\n", "\n", "Character embedding shape: (1, 290, 25)\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Create char embedding layer\n", + "char_embed = layers.Embedding(input_dim=NUM_CHAR_TOKENS, # number of different characters\n", + " output_dim=25, # embedding dimension of each character (same as Figure 1 in https://arxiv.org/pdf/1612.05251.pdf)\n", + " mask_zero=False, # don't use masks (this messes up model_5 if set to True)\n", + " name=\"char_embed\")\n", + "\n", + "# Test out character embedding layer\n", + "print(f\"Charified text (before vectorization and embedding):\\n{random_train_chars}\\n\")\n", + "char_embed_example = char_embed(char_vectorizer([random_train_chars]))\n", + "print(f\"Embedded chars (after vectorization and embedding):\\n{char_embed_example}\\n\")\n", + "print(f\"Character embedding shape: {char_embed_example.shape}\")" ] }, { @@ -3136,9 +3118,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "vVwC0xadtb5r" }, + "outputs": [], "source": [ "# Make Conv1D on chars only\n", "inputs = layers.Input(shape=(1,), dtype=\"string\")\n", @@ -3155,26 +3139,21 @@ "model_3.compile(loss=\"categorical_crossentropy\",\n", " optimizer=tf.keras.optimizers.Adam(),\n", " metrics=[\"accuracy\"])" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "jwdxy2gQu7Wm", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "jwdxy2gQu7Wm", "outputId": "a632e6a9-f72f-4355-d9f9-0f2b887dc272" }, - "source": [ - "# Check the summary of conv1d_char_model\n", - "model_3.summary()" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_3_conv1D_char_embedding\"\n", @@ -3197,9 +3176,12 @@ "Trainable params: 10,139\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Check the summary of conv1d_char_model\n", + "model_3.summary()" ] }, { @@ -3213,6 +3195,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -3220,25 +3203,24 @@ "id": "ixTsGYBbnXn9", "outputId": "f643ca7b-96b2-479d-a31b-f2a17cb3f658" }, - "source": [ - "# Create char datasets\n", - "train_char_dataset = tf.data.Dataset.from_tensor_slices((train_chars, train_labels_one_hot)).batch(32).prefetch(tf.data.AUTOTUNE)\n", - "val_char_dataset = tf.data.Dataset.from_tensor_slices((val_chars, val_labels_one_hot)).batch(32).prefetch(tf.data.AUTOTUNE)\n", - "\n", - "train_char_dataset" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 67, "metadata": {}, - "execution_count": 67 + "output_type": "execute_result" } + ], + "source": [ + "# Create char datasets\n", + "train_char_dataset = tf.data.Dataset.from_tensor_slices((train_chars, train_labels_one_hot)).batch(32).prefetch(tf.data.AUTOTUNE)\n", + "val_char_dataset = tf.data.Dataset.from_tensor_slices((val_chars, val_labels_one_hot)).batch(32).prefetch(tf.data.AUTOTUNE)\n", + "\n", + "train_char_dataset" ] }, { @@ -3252,6 +3234,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -3259,17 +3242,9 @@ "id": "UGokmMdGn91w", "outputId": "64ca51e6-bd05-4d73-f267-9f031025595b" }, - "source": [ - "# Fit the model on chars only\n", - "model_3_history = model_3.fit(train_char_dataset,\n", - " steps_per_epoch=int(0.1 * len(train_char_dataset)),\n", - " epochs=3,\n", - " validation_data=val_char_dataset,\n", - " validation_steps=int(0.1 * len(val_char_dataset)))" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/3\n", @@ -3278,13 +3253,21 @@ "562/562 [==============================] - 3s 5ms/step - loss: 1.0124 - accuracy: 0.5996 - val_loss: 0.9542 - val_accuracy: 0.6267\n", "Epoch 3/3\n", "562/562 [==============================] - 3s 5ms/step - loss: 0.9228 - accuracy: 0.6410 - val_loss: 0.8712 - val_accuracy: 0.6722\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Fit the model on chars only\n", + "model_3_history = model_3.fit(train_char_dataset,\n", + " steps_per_epoch=int(0.1 * len(train_char_dataset)),\n", + " epochs=3,\n", + " validation_data=val_char_dataset,\n", + " validation_steps=int(0.1 * len(val_char_dataset)))" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -3292,29 +3275,28 @@ "id": "9OHO-fl9oA5V", "outputId": "252ccc5f-a41a-411a-b92e-f815a0448dc9" }, - "source": [ - "# Evaluate model_3 on whole validation char dataset\n", - "model_3.evaluate(val_char_dataset)" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "945/945 [==============================] - 3s 4ms/step - loss: 0.8873 - accuracy: 0.6588\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "[0.8873457908630371, 0.6587779521942139]" ] }, + "execution_count": 69, "metadata": {}, - "execution_count": 69 + "output_type": "execute_result" } + ], + "source": [ + "# Evaluate model_3 on whole validation char dataset\n", + "model_3.evaluate(val_char_dataset)" ] }, { @@ -3328,22 +3310,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "o0u4QzT2xMgF", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "o0u4QzT2xMgF", "outputId": "4d417acb-0ff7-49bf-c408-b2f76b980722" }, - "source": [ - "# Make predictions with character model only\n", - "model_3_pred_probs = model_3.predict(val_char_dataset)\n", - "model_3_pred_probs" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array([[0.14757556, 0.40572175, 0.06463172, 0.33147973, 0.05059117],\n", @@ -3356,58 +3332,57 @@ " dtype=float32)" ] }, + "execution_count": 70, "metadata": {}, - "execution_count": 70 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions with character model only\n", + "model_3_pred_probs = model_3.predict(val_char_dataset)\n", + "model_3_pred_probs" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "qdPUXiZux68-", "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "a0fdbe69-980a-4bb3-a579-f499bc22b3b4" - }, - "source": [ - "# Convert predictions to classes\n", - "model_3_preds = tf.argmax(model_3_pred_probs, axis=1)\n", - "model_3_preds" - ], - "execution_count": null, + "base_uri": "https://localhost:8080/" + }, + "id": "qdPUXiZux68-", + "outputId": "a0fdbe69-980a-4bb3-a579-f499bc22b3b4" + }, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 71, "metadata": {}, - "execution_count": 71 + "output_type": "execute_result" } + ], + "source": [ + "# Convert predictions to classes\n", + "model_3_preds = tf.argmax(model_3_pred_probs, axis=1)\n", + "model_3_preds" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "4NCDZD7cyoj7", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "4NCDZD7cyoj7", "outputId": "972eccb5-fe98-4b96-e4b2-6df64da2d86f" }, - "source": [ - "# Calculate Conv1D char only model results\n", - "model_3_results = calculate_results(y_true=val_labels_encoded,\n", - " y_pred=model_3_preds)\n", - "model_3_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 65.87779690189329,\n", @@ -3416,9 +3391,16 @@ " 'recall': 0.6587779690189329}" ] }, + "execution_count": 72, "metadata": {}, - "execution_count": 72 + "output_type": "execute_result" } + ], + "source": [ + "# Calculate Conv1D char only model results\n", + "model_3_results = calculate_results(y_true=val_labels_encoded,\n", + " y_pred=model_3_preds)\n", + "model_3_results" ] }, { @@ -3449,9 +3431,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "5DI2KQf7z-yo" }, + "outputs": [], "source": [ "# 1. Setup token inputs/model\n", "token_inputs = layers.Input(shape=[], dtype=tf.string, name=\"token_input\")\n", @@ -3482,9 +3466,7 @@ "model_4 = tf.keras.Model(inputs=[token_model.input, char_model.input],\n", " outputs=output_layer,\n", " name=\"model_4_token_and_char_embeddings\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -3497,20 +3479,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "21PRnEmK2a0Y", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "21PRnEmK2a0Y", "outputId": "9f3e26bf-0443-4781-8c09-1b5571b51538" }, - "source": [ - "# Get summary of token and character model\n", - "model_4.summary()" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_4_token_and_char_embeddings\"\n", @@ -3546,39 +3525,42 @@ "Trainable params: 114,419\n", "Non-trainable params: 256,797,824\n", "__________________________________________________________________________________________________\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Get summary of token and character model\n", + "model_4.summary()" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "EF5-v5cRSmuk", "colab": { "base_uri": "https://localhost:8080/", "height": 856 }, + "id": "EF5-v5cRSmuk", "outputId": "9c781d3c-e8de-43ed-e3c1-aed99fac45d0" }, - "source": [ - "# Plot hybrid token and character model\n", - "from tensorflow.keras.utils import plot_model\n", - "plot_model(model_4)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { - "image/png": "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4Y2IiIhIQxjeiIiIiDSE4Y2IiIhIQxjeiIiIiDSE4Y2IiIhIQxjeiIiIiDTERe0CHC0mJkbtEojqlD179qBbt25ql0FERDaqt1fegoKCEB0drXYZ9D+bNm3CpUuX1C6DAHTr1g333nuv2mUQEZGNFBERtYug+k9RFMTHx2PQoEFql0JERKRp9fbKGxEREVF9xPBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQaooiIqF0E1S9PPfUUDh06ZDHt119/hZ+fHzw8PMzTdDodvvjiCzRt2rS2SyQiItIsF7ULoPrnzjvvxOrVq8tMv3r1qsW/w8LCGNyIiIiqiR+bkt09+eSTUBSl0mV0Oh2GDx9eOwURERHVI/zYlByic+fOOHToEEpLS8udrygKzpw5g5CQkNotjIiISON45Y0c4umnn4aTU/mHl6IouPvuuxnciIiIbMDwRg4xePDgCq+6OTk54emnn67lioiIiOoHhjdyiICAAPTs2RPOzs7lzo+KiqrlioiIiOoHhjdymKeeeqrMNCcnJ0RGRsLf31+FioiIiLSP4Y0cJiYmptz73soLdURERGQdhjdyGC8vLzz66KNwcfnjcYLOzs54/PHHVayKiIhI2xjeyKGGDRuGkpISAICLiwv69+8Po9GoclVERETaxfBGDtW/f3+4u7sDAEpKSjB06FCVKyIiItI2hjdyKL1ej4EDBwIADAYD+vTpo3JFRERE2lbt3za9ePEidu3a5YhaqJ4KCgoCAHTt2hWbNm1SuRrSkqCgINx7771ql1FjCQkJapdAVG8MGjRI7RJUV+2fx0pISMDgwYMdVQ8RkVl0dDQSExPVLqPGqvqtXyKyHn/V04Yrbzdw41F1zJo1CzNmzLD45ilRZWJiYtQuwa7i4+N5xYCoBnjx6A+8541q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b0AlDR48WHv27FGrVq3Ut29fLVq0yOmSgBqTn5+v+fPnKy4uTrGxsdq3bx/BDagh7HkDrlNBQYGeeeYZzZ07V8OGDdPSpUvVsGFDp8sCqs0//vEPjRs3Tjt27NDs2bM1Y8YM+fmxLwCoKYQ3oIq89957GjNmjIKCgrR69Wouv0edtHz5cj388MNq06aNVq5cqW7dujldElDv8F8loIoMGjRIe/bs0be+9S3dfvvtmj9/vvi/EeqKM2fOaNiwYXrooYf08MMPa8eOHQQ3wCHseQOqmJnpN7/5jWbMmKG7775bv//979WoUSOnywIq7Y033lBSUpLCwsK0fPlyDRgwwOmSgHqNPW9AFfN4PJo2bZreeecd7dixQz179tRHH33kdFlAhWVkZCgpKUnx8fEaMmSI9u7dS3ADagHCG1BNbr/9du3evVtdunTRd77zHc2ePVuFhYVOlwWUy5YtW9SrVy+tW7dO69at0/LlyxUWFuZ0WQBEeAOqVZMmTfTWW2/pueee0y9/+Uvde++9OnfunNNlAaXKy8vT7NmzNWDAAN10003avXu37r33XqfLAvA1nPMG1JCPP/5Yo0aNUl5enlatWqW4uDinSwKK2L9/v8aOHasjR47oueee049//GOnSwJQAva8ATXk1ltv1a5du9S3b18NGjSIw6ioNcxMixYt0i233KLg4GDt3LmT4AbUYux5A2rY1atRH3vsMQ0YMEArV65Us2bNnC4L9dSJEyf0gx/8QB9++KGefPJJ/cd//If8/f2dLgtAGdjzBtSwq1ejfvjhhzp27Ji6d++uv/zlL06XhXpozZo16tGjh9LS0rR161bNnj2b4Aa4AOENcEjv3r21c+dODRw4UEOGDNHs2bNVUFDgdFmoB9LT0zVmzBiNHDlSiYmJ2r59u3r16uV0WQDKicOmQC2wZMkSTZ06Vf369dPKlSt14403Ol0S6qg///nPeuihh+Tv76///u//1qBBg5wuCUAFsecNqAV+/OMf66OPPtIXX3yhHj16aNOmTU6XhDomOztb06ZN0/e+9z3169dPu3btIrgBLkV4A2qJXr16aefOnbrjjjt09913a9q0acrLy3O6LNQBH3/8sXr27Knly5dr+fLlSklJ4SfbABcjvAG1SHh4uP73f/9X//3f/63XXntNd9xxh7788kuny4JL5efna/78+YqLi1NsbKz27t2rBx980OmyAFwnwhtQC40bN07bt2/XuXPn1KNHD23YsMHpkuAyn3/+uQYOHKhf/OIXeuaZZ/T2228rJibG6bIAVAHCG1BL3Xzzzdq6davuuusuff/73+cwKsrFzLRkyRJ169ZNubm52rlzp2bOnCk/Pz7ugbqCq00BF1i+fLmmTJmizp07a/Xq1WrTpo3TJaEWOnPmjCZOnKhNmzZp+vTpmjNnjoKCgpwuC0AV479igAuMGzdOO3bsUHZ2tnr27Km1a9c6XRJqmddff12dO3fW/v379d577+lXv/oVwQ2oowhvgEt06tRJ27Zt0w9+8APdf//9mjZtmnJzc50uCw7LyMhQUlKSEhISdPfddys1NVVxcXFOlwWgGnHYFHChFStWaMqUKerUqZNWr16tdu3aOV0SHPDRRx9p3LhxyszM1Kuvvqphw4Y5XRKAGsCeN8CFxo4dqx07digvL0+9evVSSkqK0yWhBuXk5Ojxxx/XgAED1L17d+3fv5/gBtQjhDfApTp27KitW7dq/PjxGjlypJKSkpSTk+N0Wahm+/btU9++ffXb3/5Wv/3tb/X666+rSZMmTpcFoAYR3gAX83q9WrRokV5//XWlpKSoX79+OnLkiNNloRqYmRYtWqTevXsrJCREn3zyiX784x87XRYABxDegDrgvvvu065duxQYGKhevXpp1apVTpeEKnT8+HENGjRIM2bM0OOPP66//e1vat++vdNlAXAI4Q2oI1q3bq3NmzdrwoQJeuCBBzRu3DhlZWU5XRau05o1a9SzZ0999dVX2rZtm2bPni1/f3+nywLgIMIbUIcEBwdr0aJF+r//+z+99dZb6tOnj/bv3+90WaiEs2fP6r777tPIkSM1duxYffLJJ+rZs6fTZQGoBQhvQB00fPhw7d69W5GRkerbt6/+8Ic/OF0SKuDtt99Wjx499Mknn+jdd9/VokWLFBwc7HRZAGoJwhtQR7Vs2VIffPCBHn74YY0dO1bjxo3T5cuXnS4LZcjOzta0adM0ZMgQ9e/fX7t379agQYOcLgtALcNNeoF6YP369ZowYYKaNm2qlJQUde3a1emS8A0ff/yxxo4dq7S0NL300ksaM2aM0yUBqKXY8wbUA8OGDdPu3bvVuHFjffvb39aiRYtKbWtm+tOf/lSD1dVtp06dKvP5/Px8zZ8/X3FxcWrVqpX27dtHcANQJsIbUE/Exsbq/fff12OPPaZHH31U48aN06VLl4q1W7hwoYYPH65PPvnEgSrrlrNnz6pPnz76y1/+UuLzBw4c0G233aZf/OIXWrBggd5++221aNGihqsE4DYcNgXqoXfeeUcPPvigoqKilJycrO7du0uStm3bpv79+6uwsFA33XST9uzZw4nylWRmGjp0qDZu3KimTZvqs88+U6NGjXzPvfrqq3r00Ud18803a8WKFerYsaPDFQNwC/a8AfXQHXfcoR07dqhp06bq27evFi1apPT0dCUkJMjj8cjMdOTIEf3nf/6n06W61osvvqi3335bknThwgU99NBDkqTTp0/rnnvu0cMPP6yf/OQn+vDDDwluACqEPW9APZafn6///M//1K9+9Su1adNGx48fV35+vu95j8ejDz74QHFxcQ5W6T779u3TLbfcotzc3CLLp02bppUrVyoyMlLLly9X//79HaoQgJsR3gBoypQpeuWVV/TNjwN/f3/fSfQhISEOVecuV65cUc+ePXXkyJFiQdjf31/333+/fve73yksLMzBKgG4GYdNgXouNTVVr732WrHgJkkFBQU6ceKEnnzySQcqc6ef/vSnxYKb9K/z3Dwej44dO6bQ0FCHqgNQF7DnDajHLl26pO7du+vEiRPFwsbXeTwevffee/rOd75Tg9W5zxtvvKH4+Pgy2/j5+en555/XI488UkNVAahrCG9APZaYmKi1a9des52/v79atGihTz/9VA0aNKiBytznxIkT6tKliy5dulTiXsyvCwwM1K5du9S5c+caqg5AXcJhU6CeOn/+vBo3bqzo6GhJKvOWIAUFBTp16pQee+yxmirPVQoKCjRy5EhduXLlmsEtKChIeXl5mjx58jXbAkBJ2PMGQPv379eaNWv0v//7vzp8+LACAwOVn59fLFx4PB5t3LhRd911l0OV1k6zZ8/WM888o8LCwmLP+fv7y8xUWFioli1bavjw4brnnns0YMAA7qEHoFIIbwCK+Oyzz7Ru3TqtXbtWu3btkp+fny98+Pn5qVmzZvrss88UERHhdKm1wt///nd95zvf8QU3j8ejwMBA5ebmKjIyUnfccYe++93v6u6771ZMTIzD1QKoCwhvqJVOnjypjz76yOky6r3z589rx44d2rZtmz799FNfQBk0aJAmTZrkcHXOu3z5sqZPn64L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\n", + "image/png": "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4Y2IiIhIQxjeiIiIiDSE4Y2IiIhIQxjeiIiIiDSE4Y2IiIhIQxjeiIiIiDTERe0CHC0mJkbtEojqlD179qBbt25ql0FERDaqt1fegoKCEB0drXYZ9D+bNm3CpUuX1C6DAHTr1g333nuv2mUQEZGNFBERtYug+k9RFMTHx2PQoEFql0JERKRp9fbKGxEREVF9xPBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQaooiIqF0E1S9PPfUUDh06ZDHt119/hZ+fHzw8PMzTdDodvvjiCzRt2rS2SyQiItIsF7ULoPrnzjvvxOrVq8tMv3r1qsW/w8LCGNyIiIiqiR+bkt09+eSTUBSl0mV0Oh2GDx9eOwURERHVI/zYlByic+fOOHToEEpLS8udrygKzpw5g5CQkNotjIiISON45Y0c4umnn4aTU/mHl6IouPvuuxnciIiIbMDwRg4xePDgCq+6OTk54emnn67lioiIiOoHhjdyiICAAPTs2RPOzs7lzo+KiqrlioiIiOoHhjdymKeeeqrMNCcnJ0RGRsLf31+FioiIiLSP4Y0cJiYmptz73soLdURERGQdhjdyGC8vLzz66KNwcfnjcYLOzs54/PHHVayKiIhI2xjeyKGGDRuGkpISAICLiwv69+8Po9GoclVERETaxfBGDtW/f3+4u7sDAEpKSjB06FCVKyIiItI2hjdyKL1ej4EDBwIADAYD+vTpo3JFRERE2lbt3za9ePEidu3a5YhaqJ4KCgoCAHTt2hWbNm1SuRrSkqCgINx7771ql1FjCQkJapdAVG8MGjRI7RJUV+2fx0pISMDgwYMdVQ8RkVl0dDQSExPVLqPGqvqtXyKyHn/V04Yrbzdw41F1zJo1CzNmzLD45ilRZWJiYtQuwa7i4+N5xYCoBnjx6A+8541qBYMbERGRfTC8Ua1gcCMiIrIPhjciIiIiDWF4IyIiItIQhjciIiIiDWF4IyIiItIQhjciIiIiDWF4IyIiItIQhjciIiIiDWF4IyIiItIQhjciIiIiDWF4IyIiItIQhjciIiIiDWF4IyIiItIQ1cPbiBEjoNfroSgKCgsL1S5Hs7788ksYjUZ88cUXapcCAIiNjYWiKFa9Nm/e7LA6Ro8eDQ8PDyiKAp1Ohw4dOuDYsWMWy3z66acIDg6Goijw9/fH3//+d4fVY6va2r917Tii6pk7dy6MRiMURcGhQ4fULsdCfTi29uzZgzZt2sDJyck8XsyePVvtsiysX78eLVq0MI+vAQEBGDZsmNplkZ2pHt5WrlyJSZMmqV2G5omI2iWU8e233yIrKwsmkwkpKSkAgP79+6OoqAh5eXlIS0vD888/79AaPv74Y+zevRsA0LlzZ/z8889o06aNxTLPPvssduzYgSZNmuDixYsYPny4Q2uyRW3t37p4HJH1pk6dio8//ljtMspVH46tbt264dixY3j44YcBAMnJyZgxY4bKVVmKiorCmTNnEBoaCqPRiNTUVKxevVrtssjOVA9vt6OCggJ0797drm3269cP2dnZeOyxx+zarq0URcF9990Ho9EIFxcXi+k6nQ4GgwF+fn7o3LmzXddb3raNiIhAjx49sHfvXvz000/lvu+jjz7Cs88+C51O55AaasoR+7e8OuvacXS7csQxpLa6dGzVp+1bn/pC1qtT4U1RFLVLqBUrVqxAWlqa2mU41Jo1a2AwGKpcbvTo0fjzn/9st/VWtG1feuklAMDSpUvLzCsqKsJnn32G0aNHO7SGukYrdd6OuG8cqz5t3/rUF7JerYW3VatWoUuXLtDr9fDw8EBISAjeeeedPwpxcsKWLVvQp08fGI1GNG7cGJ9++qlFGzt27EDbtm1hNBqh1+sRHh6Ob775BgDw/vvvw2AwwNPTE2lpaZg4cSKaNm2K5ORkq+pr06YNFEWBk5MTOnfujPz8fADAa6+9Zl7fjXuhSkpKMHPmTAQHB8Pd3R0RERGIj4+3qr8TJkzAxIkTcfr0aSiKgpYtWwK4/pHCwoUL0aZNG7i5ucHHxwdPPPEEjh8/bm6zoj6uWLHCfM/WkiVLAACnTp2q8B6z7777rsp+VLY9v/76a3h5eWHOnDlWbVtrVFbL3//+dzRo0ACKosDHxwcbNmzA/v370axZMzg7O2PIkCEAUOG2Ba5/lNCkSROsXbsWWVlZFutet24d7rnnHgQGBtar/VvZ+VJenTt37iyzHmtrX7ZsGTw8PGAwGLBx40b06dMHXl5eCAwMxJo1a2pwZNx+anIMlefy5csICQmBi4sLHn30UfP0yo5ze+/P8o4ta9fxwQcfQK/Xo1GjRhgzZgwaN24MvV6P7t27Y+/eveblxo0bB1dXVwQEBJinvfjii+Z7Xn///fdKt29NxrW61pfqqmysGDlypHlsCQ0NxcGDBwFcv1/dYDDAaDRi06ZNAGz/m0I2kGqKj4+X6r4tLi5OAMjcuXMlPT1dMjIy5OOPP5ahQ4eKiMj06dMFgGzbtk2ysrIkIyND+vbtK25ubpKXl2duJzExUWbNmiUZGRmSnp4u3bp1kzvuuMM8/0Y748ePl8WLF8vAgQPl2LFjVtVYXFwsISEhEhwcLMXFxRbzXnnlFYmLizP/e9KkSeLm5ibr1q2TzMxMmTZtmjg5Ocm+ffus6m9UVJSEhoZarGPmzJni6uoqq1atkqysLElKSpJOnTpJw4YNJTU1tco+XrhwQQDI4sWLRUTk5MmT8vrrr5u3X0pKivj4+Ej37t2lpKTEqn5UtK7NmzeLp6envP3221Zt2xvrByCPP/54ufOrquWXX34Rg8EgzzzzjPk9U6dOleXLl1u0U962vWHWrFkCQBYuXGgxvUePHrJ161ara9HK/q3qfCmvzlvXY0vt27Ztk+zsbElLS5OePXuKh4eHFBUVlbtPKhMdHS3R0dHVfl9dBEDi4+OtXr4mx9CaNWsEgBw8eFBERIqKiiQqKko2btxo0Z6157+99md5x5a16xg9erR4eHjIL7/8IoWFhXL06FHp2rWreHp6yvnz583LDR06VPz9/S3WO3/+fAEgV65cqXT7Vmdce+SRRwSAZGZm1sm+iIiEhoaK0Wissi8i1o0Vzs7O8ttvv1m8b8iQIbJp0ybzv239m2ItW/JHfeXw8FZUVCTe3t4SGRlpMb24uFgWLVokIn/s0IKCAvP8zz77TADIkSNHKmz73XffFQCSlpZWYTvVceOPckJCgnlaXl6eBAcHS3Z2toiIFBQUiMFgkNjYWPMy+fn54ubmJi+88IJV/b31ZMvPz5cGDRpYtCki8uOPPwoAi8Gkoj6WNzDebMCAAaLX6+X48eNW9aOyddmisvBmTS0iIh9//LEAkNWrV8s///lPefXVV8u0VVl4S0lJEZ1OJ61bt5bS0lIREUlKSpKwsDCra9HK/i3PreeLNeGtprUvXbpUAMipU6cqrKsiDG+2HUM3hzeTySRPPvmkfPXVVxbvs/X8r8n+rCy8VbWO0aNHlwki+/btEwDy1ltvmafVNPBYq7LwVlf6Up3wdqtbx4qtW7cKAJk9e7Z5mezsbGnVqpX5Ykdt/E1hePuDwz82TUpKQlZWFh555BGL6c7Ozhg/fnyF77tx47jJZKpymZKSEjtUev3ysNFoxKJFi8zTVq9ejSeeeAJeXl4Arn+7KD8/H+3btzcv4+7ujoCAABw/ftym/h49ehRXr15Fly5dLKZ37doVrq6uFpfTbZGQkIB//etfeOutt3DnnXda1Y/aZG0to0aNQnR0NMaMGYOEhAS8//771VpPQEAAoqKicOLECWzduhUA8OGHH2Ls2LFW16KV/VseW86Xmtbu6uoKoPLzmKpmy34oKSnBkCFD0KhRI4uPSwHbz//a2J/WrqNLly4wGAy1Pl5Vh1b7cutY0atXL7Ru3Rqffvqp+VvDa9euRWxsLJydnQHUrb8ptwOHh7ecnBwAgLe3d43b2rJlCx588EH4+fnBzc0Nr732Wo3bvFmDBg0watQo7Nq1Cz/++COA63/cx40bZ14mLy8PADBjxgyL+4zOnTuH/Px8m/p74x6sBg0alJnn7e2N3Nxcm/uUnp6Ol19+GV27dsXEiROt7kdtqk4tc+bMwdWrV22+QffGFxeWLVuG3Nxc/Otf/8IzzzxjdS1a2b+Afc4XR9ZO1rNlP7z00ks4efIkPvroI/zyyy8W8+rS+V8Tbm5uuHLlitpl2IWafalqrFAUBWPGjMGZM2ewbds2AMBnn32G5557zrxMfTmmtMLh4a1JkyYAYL7B0lbnz5/HgAEDEBAQgL179yI7Oxvz5s2zR4kWxo0bB51Oh7i4OGzfvh1BQUEIDQ01z/fz8wMAxMXFQa5/7Gx+7d6926b+3ggC5Q3AWVlZ5hvpbTF+/HhkZWVh5cqV5v8hWdOP2mRtLSaTCePHj8fChQuxe/dumx6Oed9996Fjx4744osvMHfuXDz++OMwGo1W16KV/Wuv88WRtZP1bNkPgwYNwnfffQdvb288/fTTKC4uNs+rS+e/rUwmU705Bmu7L9u3b0dcXBwA68eK4cOHQ6/XY/ny5UhOToaXlxeaNWtmnl8fjiktcXh4CwkJga+vL7799tsatXP48GGYTCa88MILaNGihflXGewtMDAQgwYNwrp16/DGG29gwoQJFvODgoKg1+srfHq5Lf1t3749GjRogP3791tM37t3L4qKimx+FtqWLVvwj3/8A2+88QbatWtnnj558uQq+1GbrK3l5ZdfxvPPP49XXnkFr776Kt555x2bBoUXX3wRJSUleO+99/DCCy9Uqxat7F97nS+Oqp2qx5b9EBkZiYYNG+KTTz7BgQMHLP6zU5fOf1t9//33EBF069bNPM3FxUWTH9HXdl8OHDgADw8PANb/bfXx8cHgwYOxYcMGLFiwoMwD1uvDMaUlDg9vbm5umDZtGrZv345x48bht99+Q2lpKXJzc8tcyq9McHAwAGDr1q0oLCzEyZMna3yvUEUmTpyI4uJiZGZmolevXhbz9Ho9RowYgTVr1mDZsmXIyclBSUkJLl68iJSUFKv66+vri0uXLuHXX39Fbm4unJ2dMXHiRHz++edYvXo1cnJycPjwYYwdOxaNGze26fljOTk5GDNmDO666y68/vrrAIDCwkLs378fhw4dqrIflfnqq6/s+qgQa2pZunQpmjZtioEDBwIA3n33XbRt2xZDhw41f5QJlN225Q1+Q4YMga+vL+677z5ERERUqxat7F9rzhdrtpVer7d77VQ1ex5D/fv3x/DhwzFnzhwcOHAAgHXnXF1TWlqKzMxMFBcXIykpCRMmTEBwcLDFL6K0bNkSGRkZ2LBhA0wmE65cuYJz586Vaau8Y9/e45qafamIyWTC5cuX8f3335vDW3X+to4dOxbXrl3D5s2byzxsWYvHlKZV9xsOtn7bY8mSJRIeHi56vV70er107NhRli5dKvPmzRN3d3cBIK1atZLTp0/L6tWrxcfHRwBIYGCg+RunU6ZMEV9fX/H29paYmBhZsmSJAJDQ0FB56aWXzO0EBQXJqlWrql3jzSIjI8s8huKGa9euyZQpUyQ4OFhcXFzEz89PoqKi5OjRo1X2V0Tkp59+kmbNmom7u7v06NFDUlNTpbS0VObPny+tWrUSnU4nPj4+MmDAAElOTja3efO2urmPixcvloCAAAEgBoNB+vfvLwsWLBAA5b769u1bZT8qWpeIyJdffimenp4W3zyqSE5Ojtx///3i6+srAMTJyUlatmwpc+bMsXqbPvbYY6Ioivj6+squXbtE5PrjW5ycnASAGI1G2b9/f4XbtjyTJ0+Wf/7zn/V6/1Z2vpw/f75MnTNmzCizHhGxqvalS5eKwWCwOI8/+eQT8fLyEgDSrFkzOXHiRJXHy81u52+b2noMrV+/3jx2hoSESFpamuTk5EhQUJAAkAYNGshnn30mIpUf5/ben+Udw9VZx+jRo0Wn00nTpk3FxcVFvLy85IknnpDTp09brCc9PV0iIyNFr9dL8+bN5eWXX5bJkycLAGnZsqX5URzlbV9rxrU9e/ZIu3btzGNPQECAzJkzp0715cMPP5TQ0NAKx4cbr88//9y8rqrGipt17NhRpk6dWu72sfVvirX4bdM/KCLV+8G5hIQEDB48uF78Th0R1V0xMTEAgMTERJUrqTlFURAfH49BgwapXYomjRkzBomJiUhPT1e7lBrTel/69euHJUuWoHnz5rW+buaPP9Spn8ciIiIqj70eCVUXaKkvN38Mm5SUBL1er0pwI0v1OrwdP368wp8QuvkVGxurdqlERJrC8fX2MGXKFJw8eRInTpzAiBEjLH7WktTjonYBjhQWFsbLq0REDlBb4+u0adOwcuVKFBUVoXnz5pg/fz6io6Mdvl5H0GJfDAYDwsLC0LRpUyxduhRt27ZVuyQCwHveiKhO4j1vRHQz5o8/1OuPTYmIiIjqG4Y3IiIiIg1heCMiIiLSEIY3IiIiIg1heCMiIiLSEIY3IiIiIg1heCMiIiLSEIY3IiIiIg1heCMiIiLSEIY3IiIiIg1heCMiIiLSEIY3IiIiIg1heCMiIiLSEBdb35iQkGDPOoiILFy8eBGBgYFql2E3u3fvVrsEIk3jOfQHRUSkOm9ISEjA4MGDHVUPEZFZdHQ0EhMT1S6jxhRFUbsEonqjmrGlXqp2eCOyhaIoiI+Px6BBg9QuhYiojBtjEz9VIi3gPW9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGsLwRkRERKQhDG9EREREGuKidgFU/3zyySfIzMwsM33jxo04e/asxbThw4fD39+/tkojIsIPP/yAPXv2WEw7fvw4AGDevHkW07t164YHHnig1mojsiBvLR8AACAASURBVIYiIqJ2EVS/jB49Gp988gnc3NzM00QEiqKY/11cXAyj0YjU1FTodDo1yiSi29R3332Hhx9+GDqdDk5O5X8AVVpaCpPJhG+//RZ/+tOfarlCosoxvJHdff/994iMjKx0GZ1Oh1GjRmHJkiW1VBUR0XUlJSXw9/dHenp6pcv5+PggLS0NLi78kIrqFt7zRnZ3//33o1GjRpUuYzKZ8OSTT9ZSRUREf3B2dsbQoUPh6upa4TKurq546qmnGNyoTmJ4I7tzcnLCsGHDKh0YGzdujO7du9diVUREf3jyySdRVFRU4fyioiL+B5PqLIY3cojKBkadToenn37a4h44IqLa1K1bNwQHB1c4PzAwEPfcc08tVkRkPYY3coguXbqgefPm5c7jR6ZEVBcMGzas3C9Mubq64plnnuF/MKnOYngjh3n66afLHRhbtGiBDh06qFAREdEfhg0bBpPJVGZ6UVERYmNjVaiIyDoMb+Qw5Q2MOp0OI0aMUKkiIqI/tGnTBm3atCkzPSwsDO3bt1ehIiLrMLyRw7Rs2RLh4eEWHz2YTCYMHjxYxaqIiP5w6ycEOp0OzzzzjIoVEVWN4Y0c6umnn4azszMAQFEUdOzYEa1atVK5KiKi64YMGYLi4mLzv4uLi/mRKdV5DG/kUEOGDEFJSQmA689W4v9oiaguCQ4ORpcuXeDk5ARFUdC1a1eEhISoXRZRpRjeyKGaNGmC7t27Q1EUlJaWIiYmRu2SiIgsPP3003BycoKzszOeeuoptcshqhLDGzncU089BRHB/fffjyZNmqhdDhGRhcGDB0NEICL8DyZpg2hUfHy8AOCLL74c8IqOjnbYuRsdHa16//jiiy++tPIqbzzW/I+2xcfHq10CWeEvf/kLRo8ejQYNGqhdClUhLi7O4evo1q0bXnnlFYevh8haP/zwAxRFwf333692KURmFY3Hmg9vgwYNUrsEskL37t0RGBiodhlkhcTERIevIzAwkOcu1SmPPvooAMDLy0vlSoj+UNF4rPnwRtrA4EZEdRlDG2kJv7BAREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb/8zYsQI6PV6KIqCwsJCtctxiK5du8LZ2Rl33XWX3dseOXIkPD09oSgKDh06VK33rl+/Hi1atICiKBW+QkJC7FJnXdgGFS335Zdfwmg04osvvrB7bWRJS9t6wYIFaNSoERRFwUcffaR2OaSSmoyxtrp1bA4KCsKKFSvM83/44Qc0bdoUiqIgICAAn3zySa3UZU2tAQEBGDZsmGr1OBrD2/+sXLkSkyZNUrsMh9q3bx8iIyMd0vby5cvxt7/9zab3RkVF4cyZMwgNDYXRaISIQERQXFyM/Px8XL58GQaDwS511oVtUNFyIuKIsqgcWtrWkyZNwq5du9Qug1RWkzHWVreOzRcuXMBzzz1nnn///fejb9++GDVqFFJSUjBq1Khara+yWlNTU7F69WrV6nE0F7ULoNqnKIraJVjF2dkZ7u7ucHd3R+vWre3adl3cBv369UN2drbaZdwWuK3tq6CgAL1792bIvI2UlpZi5MiR0Ov1WLp0aZ0cU+szXnkrR30/CHU6nUPadeR227Bhg13bU3sb1MYxJiJITExU9aMMuj2sWLECaWlpapdR79WVv02lpaV49tlnYTAYsGzZsjpT1+3ktgtvq1atQpcuXaDX6+Hh4YGQkBC888475vlOTk7YsmUL+vTpA6PRiMaNG+PTTz+1aGPHjh1o27YtjEYj9Ho9wsPD8c033wAA3n//fRgMBnh6eiItLQ0TJ05E06ZNkZycbHWNJSUlmDlzJoKDg+Hu7o6IiAjEx8cDABYtWgQPDw84OTmhc+fO8Pf3h06ng4eHBzp16oSePXsiKCgIer0e3t7eeO2118q0f+rUKYSFhcHDwwPu7u7o2bMndu7caXUNwPVgMH/+fNx5551wc3OD0WjE5MmTy6zr66+/hpeXF+bMmWN1/6uitW1gzXI7d+5EcHAwFEXBkiVLAADLli2Dh4cHDAYDNm7ciD59+sDLywuBgYFYs2ZNmVrfffdd3HnnnXB3d0fDhg3RvHlzvPvuuxg0aJDN27ouGDduHFxdXREQEGCe9uKLL8LDwwOKouD3338HYP32Km9bt2nTBoqimI+p/Px8AMBrr71mPs///ve/A6j8uKjs/P/hhx9w9913w2AwwMvLC+Hh4cjJyQFQ+ZhSU5Wtt7K+WLs9J0yYgIkTJ+L06dNQFAUtW7a0W9s3VDZuV3WeWqu26hURLFy4EG3atIGbmxt8fHzwxBNP4Pjx4xZtWDu+2Ho82jo2l5aWYvjw4TAajebzp7rbs7K6qjoXKjueq6uydY0cOdJ8/1xoaCgOHjwI4Pr98QaDAUajEZs2bapRX2tENCo+Pl6qW35cXJwAkLlz50p6erpkZGTIxx9/LEOHDhURkenTpwsA2bZtm2RlZUlGRob07dtX3NzcJC8vz9xOYmKizJo1SzIyMiQ9PV26desmd9xxh3n+jXbGjx8vixcvloEDB8qxY8esrnPSpEni5uYm69atk8zMTJk2bZo4OTnJvn37RETkzTffFACyd+9eycvLk99//10effRRASBbtmyRK1euSF5enowbN04AyKFDh8xt9+7dW1q0aCFnz54Vk8kkR44ckXvuuUf0er2cOHHC6hqmT58uiqLIX/7yF8nMzJT8/HxZunSpAJCDBw+a29m8ebN4enrK22+/XWW/Q0NDxWg0WkwbP368HD58uMyyWtoG1i534cIFASCLFy+2eO+NYzI7O1vS0tKkZ8+e4uHhIUVFRebl5syZI87OzrJx40bJz8+XAwcOiL+/vzz44INVbvdbRUdHS3R0dLXf58j2hw4dKv7+/hbT5s+fLwDkypUr5mnWbq9bt3VxcbGEhIRIcHCwFBcXW6znlVdekbi4OPO/rTkubj3/9+/fL15eXjJv3jwpKCiQ1NRUGThwoLn2qsaUkydPCgD58MMPq7Xdrl69Wul6re1LVdszKipKQkNDLdZtr7arGrerWo+1aqvemTNniqurq6xatUqysrIkKSlJOnXqJA0bNpTU1FRzO9aOG7Ycj8eOHbNpbC4uLpahQ4eKTqeT5ORku2zPW+uq7Fyo6ni+uVZrVHXeRUVFibOzs/z2228W7xsyZIhs2rSpxn21RkXj5W0T3oqKisTb21siIyMtphcXF8uiRYtE5I8NXFBQYJ7/2WefCQA5cuRIhW2/++67AkDS0tIqbMdaBQUFYjAYJDY21jwtPz9f3Nzc5IUXXhCRP4JLbm6ueZn/+7//EwAWQefHH38UALJ27VrztN69e0uHDh0s1pmUlCQAZNKkSVbVkJ+fLwaDQf70pz9ZtLNmzZoyA0t1hIaGCoAyr8rCW13fBtXZVpWFt5uPpRsD+KlTp8zTunbtKnfffbfFOkaNGiVOTk5y7dq1MtuvMvUhvFW1vcrb1jf+6CYkJJin5eXlSXBwsGRnZ4uIdedneTUcOXJEAMjmzZut6u+tY4qt4a2y9dral/K2563hzV5tVzVuW7Mea9RWvfn5+dKgQQOL9Yj8MU7dCFLWjhu21l1doaGh4unpKU8++aR06tRJAEi7du3k6tWr5S5vz7puPhesOY+qE94qW5eIyNatWwWAzJ4927xMdna2tGrVyvyfPEfvg4rGy9vmY9OkpCRkZWXhkUcesZju7OyM8ePHV/i+G/dGmUymKpcpKSmpcZ3JycnIz89H+/btzdPc3d0REBBQ5rL6zVxdXQEAxcXFZeqqrHYACA8Ph9FoRFJSklU1nDp1Cvn5+ejdu3f1O1iFm79tKiKV7ptb1cVt4IhtdaOfN/epsLCwzDcoS0pKoNPp4OzsbLd1a1F526s8I0eOhNFoxKJFi8zTVq9ejSeeeAJeXl4AbD8/W7RogUaNGmHYsGGYNWsWfv3110prsdeYUtl6azrWVLY97dV2VeO2retRq96jR4/i6tWr6NKli8X8rl27wtXVFXv37gVg/bhhr/5bIz8/Hw888AAOHDiAAQMG4OjRoxg5cqTD67r5XKjueVRdt553vXr1QuvWrfHpp5+ax9e1a9ciNjbWPK7W5j642W0T3m58Ju7t7V3jtrZs2YIHH3wQfn5+cHNzK/eeKlvl5eUBAGbMmGHxnLNz586Z78NxBJ1OZx6Aqqrh4sWLAAA/Pz+H1XPDokWLLE4KR3LENqitbdW3b18cOHAAGzduREFBAfbv348NGzbgz3/+820f3qzVoEEDjBo1Crt27cKPP/4IAPjwww8xbtw48zK2np/u7u7497//jR49emDOnDlo0aIFYmNjUVBQAMBxY0pl63XkWGOvtqsat+21ntqqNysrC8D1Y+1W3t7eyM3NBWD9uFGbfy8aNGiA0aNHA7j+aK0WLVpg7dq1iIuLs2tdlZ0LVZ1H1VXVeacoCsaMGYMzZ85g27ZtAIDPPvvM4nEpav3Nvm3CW5MmTQDAfHOzrc6fP48BAwYgICAAe/fuRXZ2NubNm2ePEgH8cbLGxcVZXIESEezevdtu67lZcXExMjIyEBwcbFUNer0eAHDt2jWH1KMGR22D2tpWs2bNQq9evTB8+HB4eXlh4MCBGDRoUK0/F0rrxo0bB51Oh7i4OGzfvh1BQUEIDQ01z6/J+dmuXTt88cUXuHTpEqZMmYL4+HgsWLDA4WNKRet15Fhjr7arGrfttZ7aqvdGqLsR0m6WlZWFwMBAANaPG2r8vQCuf0KSmJhoDjzbt2+3S13WnAsVHc/W2L59uzlsWnveDR8+HHq9HsuXL0dycjK8vLzQrFmzGve1pm6b8BYSEgJfX198++23NWrn8OHDMJlMeOGFF9CiRQvzrzLYy41vSdbWE7QB4D//+Q9KS0vRqVMnq2po3749nJyc8MMPP9RajSkpKRgxYoTD2nfUNqitbXX06FGcPn0aV65cgclkwvnz57Fs2TL4+Pg4dL21xcXFpcqPPe0hMDAQgwYNwrp16/DGG29gwoQJFvNtPT8vXbqEX375BcD1wX7u3Lno1KkTfvnlF4eOKZWt15Fjjb3armrcttd6aqve9u3bo0GDBti/f7/F9L1796KoqAidO3c2L2fNuKHG34sbOnXqhLi4OBQXF2PQoEG4dOlSjeuq6lyo7Hi2xoEDB+Dh4WHVum7w8fHB4MGDsWHDBixYsADPP/+8xXy19sFtE97c3Nwwbdo0bN++HePGjcNvv/2G0tJS5ObmWr3jAZivzGzduhWFhYU4efKk+T4Fe9Dr9RgxYgTWrFmDZcuWIScnByUlJbh48SJSUlLsso6ioiJkZ2ejuLgYP/30E8aNG4dmzZph+PDhVtXg5+eHqKgorFu3DitWrEBOTg6SkpLKfZ7YV199VaNHhYgICgoKsH79evN9R/ZQW9ugOtuqJl566SUEBwfj6tWrdm23rmjZsiUyMjKwYcMGmEwmXLlyBefOnXPIuiZOnIji4mJkZmaiV69eFvNsPT8vXbqEMWPG4Pjx4ygqKsLBgwdx7tw5dOvWzaFjSmXrtedY4+vri0uXLuHXX39Fbm4unJ2d7dJ2VeO2vfpgr3asqXfixIn4/PPPsXr1auTk5ODw4cMYO3YsGjdubP5Y0tpxoyZ113RsBoCxY8fiySefxOXLlxETE2P+D5atdVV1LlR2PFfGZDLh8uXL+P77783hrTrn3dixY3Ht2jVs3rwZjz32mMW82vibXa5qf/WhjrDlUSEiIkuWLJHw8HDR6/Wi1+ulY8eOsnTpUpk3b564u7sLAGnVqpWcPn1aVq9eLT4+PgJAAgMDzd84nTJlivj6+oq3t7fExMTIkiVLBICEhobKSy+9ZG4nKChIVq1aVe0ar127JlOmTJHg4GBxcXERPz8/iYqKkqNHj8qiRYvEYDAIAAkJCZEdO3bIe++9J0ajUQCIv7+//OMf/5C1a9eKv7+/ABAfHx9Zs2aNiIisXLlSIiMjpVGjRuLi4iJ33HGHPPnkk3Lu3DmraxARyc3NlZEjR8odd9whDRo0kB49esjMmTPN2+rnn38WEZEvv/xSPD09Lb6tc6vPP/+8wm+a3vyaMWOGiIjmtoE1yy1evFgCAgIEgBgMBunfv78sXbrU3M8bx+Qnn3wiXl5eAkCaNWtmfrTJv//9b7njjjsstpdOp5M2bdrI+vXrq3X81cVvm6anp0tkZKTo9Xpp3ry5vPzyyzJ58mQBIC1btpTz589bvb3K29a3ioyMlOXLl5dbS2XHxc3jyM3n/6+//irdu3cXHx8fcXZ2liZNmsj06dPN31irbEyZMGGC+Tj28PCQgQMHWr3dqlpvZX2pzvH3008/SbNmzcTd3V169OghqampdmtbpOJxu6o+VEdt1VtaWirz58+XVq1aiU6nEx8fHxkwYECZR29YO77YcjyK2DY2BwYGyrRp08rUeeeddwoAadSokaxYsaJGdVV2LuzYsaPC49navyOff/65Ves6f/68RT87duwoU6dOrfaxU1lfrVHReKmIaOhH/m6SkJCAwYMHa+o3CokcZdmyZTh58qTFzcNFRUV4/fXXsWzZMmRmZsLd3d2qtmJiYgAAiYmJDqnV0e0TEdlbv379sGTJEjRv3rxW11vReMnfNiXSuNTUVIwbN67MPReurq4IDg6GyWSCyWSyOrwREd3uTCaT+dEhSUlJ0Ov1tR7cKnPb3POmpuPHj1t8hbiiV2xsrNqlkga5u7tDp9NhxYoVuHz5MkwmEy5duoTly5dj5syZiI2Ntev9gqQujifW4XaimpgyZQpOnjyJEydOYMSIERY/o1kX8MpbLQgLC+PHu+QwRqMR3377Ld5++220bt0aeXl5aNCgAdq1a4f33nsPo0aNUrtEsiOOJ9bhdqKaMBgMCAsLQ9OmTbF06VK0bdtW7ZIsMLwR1QM9e/bEd999p3YZRET1wuzZszF79my1y6gQPzYlIiIi0hCGNyIiIiINYXgjIiIi0hCGNyIiIiINYXgjIiIi0hCGNyIiIiINYXgjIiIi0hCGNyIiIiINYXgjIiIi0hCGNyIiIiINYXgjIiIi0hCGNyIiIiINYXgjIiIi0hAXtQuoKUVR1C6BqN6Jjo52aPvr1q3juUtEZIXyxmNFRESFWmrs4sWL2LVrl9plkI1WrFiBc+fO4e2331a7FCpHUFAQ7r33Xoe0vXv3bly4cMEhbRNVR0FBAYYPH46pU6firrvuUrsconKVNx5rNryRtn300UeYMmUKsrKyeAWGiFSRnJyMsLAwHDx4kOGNNIX3vJEqwsPDkZOTg3PnzqldChHdplJTUwEAjRs3VrkSoupheCNVREREQFEUHD58WO1SiOg2lZKSAmdnZzRs2FDtUoiqheGNVOHp6YlmzZohKSlJ7VKI6DaVmpqKRo0awdnZWe1SiKqF4Y1UExERwStvRKSa1NRUfmRKmsTwRqoJDw9neCMi1aSkpCAgIEDtMoiqjeGNVBMeHo4TJ06gsLBQ7VKI6DaUkpLCK2+kSQxvpJqIiAgUFxfj2LFjapdCRLeh1NRUXnkjTWJ4I9W0bt0a7u7u/NICEamCV95IqxjeSDXOzs4ICwvjfW9EVOtMJhMyMjJ45Y00ieGNVMVvnBKRGi5fvozS0lJeeSNNYngjVYWHh/NjUyKqdSkpKQDAK2+kSQxvpKqIiAikpqYiLS1N7VKI6DZy46exGN5IixjeSFXh4eEAgCNHjqhcCRHdTlJSUmA0GmEwGNQuhajaGN5IVQEBAWjUqBE/OiWiWsXHhJCWMbyR6vhLC0RU2/jTWKRlDG+kOn5pgYhqG38ai7SM4Y1UFx4ejqNHj6KkpETtUojoNsErb6RlDG+kuoiICBQUFOD06dNql0JEtwleeSMtY3gj1bVr1w7Ozs786JSIaoWI4PLlywxvpFkMb6Q6d3d3tGzZkl9aIKJakZmZicLCQn5sSprF8EZ1Ar9xSkS15cYDehneSKsY3qhO4DdOiai28KexSOsY3qhOiIiIwJkzZ5Cbm6t2KURUz6WmpkKn08HX11ftUohswvBGdUJERAREBEePHlW7FCKq525809TJiX8CSZt45FKd0Lx5c3h5efG+NyJyOP40FmkdwxvVCYqioG3btgxvRORwfEAvaR3DG9UZERER/NICETkcH9BLWsfwRnUGHxdCRLWBV95I6xjeqM4IDw9HRkYGLl68qHYpRFSP8cobaR3DG9UZERERAMCrb0TkMNeuXUNWVhbDG2kawxvVGT4+PggMDOR9b0TkMKmpqRARfmxKmsbwRnVKREQEr7wRkcPw1xWoPnBRuwCim4WHh+Orr77C2bNncfjwYRw+fBg///wzmjRpgkWLFqldHhFpyPnz5/G3v/0NjRo1QpMmTRAQEICkpCQoigJ/f3+1yyOymSIionYRdPvKysrCkSNHzCFt586dOHXqFK5duwYA0Ov1uHbtGiZNmoT3339f5WqJSEsKCwthNBpRXFyM0tJSi3nu7u4ICAiAv78/QkJC0LVrV7z66qsqVUpUPbzyRqrJyMhASEgIcnNz4eLiAkVRYDKZLJYpLCyEs7Mz2rRpo1KVRKRVer0eXbt2xa5du8rMKygowNmzZ3H27Fns2bMH3bt3V6FCItvwnjdSja+vL6ZNmwYnJycUFxeXCW43lJSUoG3btrVcHRHVB7169YJOp6t0GS8vLzz77LO1VBFRzTG8kapeffVVBAYGVvkD0WFhYbVUERHVJw888ACKiooqnK/T6fDKK6/Aw8OjFqsiqhne80aqW7t2LYYMGYKKDkU/Pz+kpaXVclVEVB/k5+eb73srj5ubGy5cuAA/P79arozIdrzyRqobPHgw7r77bri4lH8LZrt27Wq5IiKqLwwGAzp27FjuPJ1Oh+eff57BjTSH4Y1UpygK/vrXv6KkpKTMPFdXV/MvLxAR2eKhhx6Cq6trmeklJSWYMGGCChUR1QzDG9UJ99xzD2JiYsrcWCwi/KYpEdVIefe96XQ6xMTEIDQ0VKWqiGzHe96ozrhw4QJatWplfsbbDT/88APuv/9+laoiIq27evUqvL29y1zdP3DgADp16qRSVUS245U3qjOCgoLwyiuvlLn3jVfeiKgmGjRoYHH7hYuLCyIjIxncSLMY3qhOmTZtGoxGIxRFAXD9+Uu8mZiIaurm+96Ki4sxbdo0lSsish3DG9Upnp6emDNnjjm88eG8RGQPN+57c3JyQvv27fHQQw+pXRKRzRjeqM4ZOXIkWrduDQDo0KGDytUQUX3Qo0cPODk5obS0FNOnT1e7HKIaKfOFhd27d2PhwoVq1UMEALh8+TJ27NiBDh06oFWrVmqXQ1SlV199Fffee68q6+a4bZ3vvvsORUVF6Nu3r/nqPgH33nsvXn31VbXLoGooc+XtwoULWLdunRq1EJn5+/sjICAAXl5eapdCVKV169bhwoULqq2f47Z1GjVqhDvvvJPB7SZ79uzB7t271S6Dqqn8R9oDSExMrM06iMo4evQovL290bRpU7VLIapUXQkDHLcrt2PHDnTu3BkGg0HtUuqMmJgYtUsgG1QY3ojUxp/FIiJ76tmzp9olENkFv7BAREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCEMb0REREQawvBGREREpCE1Dm9du3aFs7Mz7rrrriqX/fLLL2E0GvHFF19UuMzIkSPh6ekJRVFw6NChar3XkdRe/4IFC9CoUSMoioKPPvqo3GW2bt2KqVOnWrWsI23atAnz5s1DSUmJTe9fv349WrRoAUVRLF4uLi5o2LAhHnroIXz++edl3sfjy3bVOb5u3T8BAQEYNmxYlev4+eefERsbi+bNm8PNzQ0NGzZEhw4dMHv2bPMysbGxZfZ7Ra/NmzeXqeWNN96otIaFCxdCURQ4OTkhLCwM27dvr/HxWl9UdG5oWWFhIcLCwjBjxoxqv7eiccjV1RWNGjXCgw8+iPnz5yMzM9MBlRNVrsbhbd++fYiMjLRqWRGpcpnly5fjb3/7m03vdSS11z9p0iTs2rWrwvlvvvkmPvjgA0ybNq3KZR2tf//+0Ov16N27N7Kysqr9/qioKJw5cwahoaEwGo0QEYgIrly5gvj4ePz222+IiopCfHy8xft4fNmuOsfXrfsnNTUVq1evrrT9w4cPo3v37ggICMB//vMfZGdnY9euXXj00Ufx/fffWyz77bffIisrCyaTCSkpKQCuH1NFRUXIy8tDWloann/+eQCWxwpwff+aTKZyaygpKcEHH3wAAOjVqxeOHz+O+++/v8bHa31R0bmhZdOnT0dycrJN7y1vHCotLUVaWhoSEhLQvHlzTJkyBe3atcP+/fvtXDlR5ez2samiKFUu069fP2RnZ+Oxxx6rdvs1eW91FRQUoHv37qqtv7ree+89rF27FgkJCfD09LSpjfL6XBPjx49Hhw4d0LdvXxQXF9ulTR8fH/Tu3Rt//etfAQAJCQkW83l8OYY9jq8FCxbA29sbixYtQkhICPR6PVq3bo133nkH7u7u5uUURcF9990Ho9EIFxcXi+k6nQ4GgwF+fn7o3LlzmXV07twZqamp2LBhQ7k1rF+/Hk2bNi13niOOV1LXrl27cOTIEbu2qSgKvL298eCDD2LlypVISEjA5cuXzecvUW2xW3jT6XT2asqqIOhIK1asQFpamqo1WOvUqVN444038NZbb0Gv19vcjiP6PGvWLBw6dAiLFi2ya7shISEAYPNVEh5f1rPX8ZWeno7s7GxkZGRYTHd1dbX4qHjNmjUwGAxVtjd69Gj8+c9/tpj2wgsvAAA+/PDDct+zP45pagAAIABJREFUcOFCTJw4scI2HXW8aona54a9FBQUYPLkyQ7fl9HR0Rg+fDjS0tJUuUWFbl92C2+nTp1CWFgYPDw84O7ujp49e2Lnzp3m+Tt37kRwcDAURcGSJUvM00UE8+fPx5133gk3NzcYjUZMnjzZou3y3vv+++/DYDDA09MTaWlpmDhxIpo2bYrk5GSUlJRg5syZCA4Ohru7OyIiIsp8xLZq1Sp06dIFer0eHh4eCAkJwTvvvIMJEyZg4sSJOH36NBRFQcuWLSutfeHChWjTpg3c3Nzg4+ODJ554AsePHzcvs2zZMnh4eMBgMGDjxo3o06cPvLy8EBgYiDVr1ljUtGPHDrRt2xZGoxF6vR7h4eH45ptvKt3uH3zwAUQE/fv3r3If/fDDD7j77rthMBjg5eWF8PBw5OTklNvnRYsWwcPDA05OTujcuTP8/f2h0+ng4eGBTp06oWfPnggKCoJer4e3tzdee+21Muvz8fHBAw88gEWLFpk/Fvz666/h5eWFOXPmVFlvRZKSkgAADzzwgHkajy/1j6/KdO3aFXl5eejVqxf++9//1qitivTq1Qtt2rTBf/7znzIflf33v/9Ffn4+Hn744QrfX97xWp9Zc24AqPR4r87xV9H4U9U6bDF9+nS8+OKL8PPzK3e+PcahG4YPHw4A+Oqrr8zTtLjNSGPkFvHx8VLO5Er17t1bWrRoIWfPnhWTySRHjhyRe+65R/R6vZw4ccK83IULFwSALF682Dxt+vTpoiiK/OUvf5HMzEzJz8+XpUuXCgA5ePBgle8FIOPHj5fFixfLwIED5dixYzJp0iRxc3OTdevWSWZmpkybNk2cnJxk3759IiISFxcnAGTu3LmSnp4uGRkZ8vHHH8vQoUNFRCQqKkpCQ0Mt+lje+mfOnCmurq6yatUqycrKkqSkJOnUqZM0bNhQUlNTy9S5bds2yc7OlrS0NOnZs6d4eHhIUVGRebnExESZNWuWZGRkSHp6unTr1k3uuOMO8/yTJ08KAPnwww/N01q0aCFt27Yts09uXfbq1avi5eUl8+bNk4KCAklNTZWBAwfKlStXKuzzm2++KQBk7969kpeXJ7///rs8+uijAkC2bNkiV65ckby8PBk3bpwAkEOHDpWpY+rUqRb7cvPmzeLp6Slvv/12mWVvFRoaKkaj0fzv/Px8+eqrr6RZs2by8MMPy9WrVy2W5/FVe8dXefunMvn5+dKlSxcBIACkbdu2Mm/ePElPT6/0fSkpKQJAHn/88UqXCw0NlbNnz8pf//pXASATJkywmD9gwABZuXKl5ObmCgDp3bt3ue3cerxaC4DEx8dX6z32ZMu4be25UdXxbs3xV9X4U9U6qmPnzp3Sv39/ERG5cuWKAJDp06dbLFOTcehWOTk5AkCCgoLM07S0zaKjoyU6Orpa7yH12S28dejQwWJaUlKSAJBJkyaZp936Byo/P18MBoP86U9/snjvmjVrqvXHtaCgwDytoKBADAaDxMbGmqfl5/8/e3ceH1V973/8PVknIRtLECRhR6jsCBYhWPihtUhFMImACAVLG8AWrBRxu1yKUEtRuVSxFqXcC/RCAnqRWsBWq9gqIMgSQFktIFIIAiGBhKyf3x99MDVmIQlJTk7yej4e8wdnvt/v+czJd2benG2yLDg42KZMmWK5ubkWFRVlgwYNKrLO/Px8+6//+i8zK9+Xa1ZWloWFhRVZj5nZxx9/bJKKfCiUVOfVD8kjR44U255X/fKXvzRJlpaWZmYlBzKPx2P33HNPsb7fbLtv3z6TZG+99VaJ6yorvGVmZvqW/c///I9Jsr179xZ7zatXry427u9//3uTZMuXLy/1dZamXbt2vi/7rz+6du1q//M//2M5OTlF2jO/am5+mVUsvJmZ5ebm2qJFi6xTp06+v2XTpk3t/fffL7VPRcNbenq6NWjQwBo2bGhZWVlmZnb06FGLiYmxnJyca4a3ys5Xt4W38r43rjXfzco3/8r6/CnPOiryunr37m0nT540s9LDW0WUZ557PB6LiooyM/dtM8KbO1Xbfd66du2qyMhI3yGukhw5ckRZWVkaPHhwla334MGDysrKUpcuXXzLQkJC1KxZMx04cECpqalKT0/XXXfdVaSfv7+/pk2bVu717N+/X5cuXVLv3r2LLO/Tp4+CgoK0bdu2MvsHBQVJUqlXxkn/Po+wtFsYpKWlyczKdY5Q27Zt1bRpUz344IOaPXu2jh07ds0+Jbla99dP6r5aZ0mv5WptZ86cqdT6vn61aV5enk6ePKmf/exnmjp1qrp166avvvqq1L7Mr5qbX+URGBioqVOn6rPPPtPWrVs1fPhwpaWlKTExscputxAZGakHHnhAFy5c0OrVqyVJCxcu1JQpU3zbpCzXO1/dorzvjWvN99J8c/6V9flT2XWU5Mknn9SPf/zjUi9MqQ6XL1+WmSkiIkKS+7YZ3Klab9IbGBhY5pfHyZMnJanU8xIq4/Lly5Kkp59+usi9eY4fP66srCzf+QJRUVHXtZ6rJ8uHhYUVey4qKkqZmZkVHvNPf/qTBg4cqOjoaAUHB5d4HtnXXblyRZIUHBx8zbFDQkL017/+VXFxcZo3b57atm2rUaNGKTs7u8J1VsTVKwmv1no9AgIC1KJFC02YMEHPPfecDh48qGeffbbU9syvoqpzflXUt7/9bf3f//2fJk+erLNnz+q9996rsrGvXrjwyiuvKD09XWvWrNGkSZPK1bcq52ttVt73xrXme3mV9flTVev4+9//rr1792rixInl7lMVDh06JEnq1KmTJHdtM7hXtYW3/Px8nT9/Xi1btiy1zdWr13JycqpsvVc/jBYuXOjbY3P1sWXLFt14442SVOYem/K4+uVc0pdoenq6YmJiKjTeiRMnNGLECDVr1kzbtm3TxYsXNX/+/DL7XP2iKe/NRTt37qw//vGPOnXqlGbOnKnk5GQ999xzFaqzonJzcyWpyO0gqkLXrl0lSZ9++mmpbZhf/1YT8+vrPvjgAy1cuND37/j4+BJvwTF27FhJqtIvnB49eqhv3776+OOPlZSUpMTERDVs2LBcfatrvtY25X1vXGu+V0Rpnz9VtY6lS5fq3XfflZ+fny/MXB173rx58ng81XI/tk2bNkmShgwZIsld2wzuVW3h7b333lNhYaF69epVapsuXbrIz89PmzdvrrL1Xr0CsrQ7hLdu3VqNGjXSn//85+taT5cuXRQWFlbsw2Dbtm3Kzc0t8T5UZdm7d6/y8vI0ZcoUtW3bVl6v95qX7V+9I3557i906tQpX9CJjo7Ws88+q169epUZfqrC1dpuuOGGKh33k08+kSR17Nix1DbMr3+r7vn1TZ988okaNGjg+3dOTk6Jc+3qVaHdunWr8DrKcnXv29q1a/Wzn/2s3P2qa77WNuV9b1xrvpdXWZ8/VbWOZcuWFQsyZ8+elfSvq0/NrNhpCNfr9OnTWrhwoWJiYvTQQw9Jctc2g3tVWXjLzc3VxYsXlZ+fr507d2rq1Klq1aqV7zLqkkRHRys+Pl5r167V0qVLlZGRodTUVC1ZsqTSdXi9Xk2YMEGrVq3Syy+/rIyMDBUUFOjkyZP65z//qeDgYD355JP64IMPNHXqVH355ZcqLCxUZmam743SqFEjnTp1SseOHVNmZmaJh369Xq+mT5+uN954QytXrlRGRob27t2ryZMnq3nz5kpKSqpQ3Vf3UL7zzju6cuWKDh8+fM3zmkJDQ9W2bVvfIZCynDp1SpMmTdKBAweUm5urXbt26fjx4+rbt2+5X3NlXK3t6p6yjRs3VvgS/ezsbBUWFsrMdOrUKS1btkxPP/20mjRpUuYXM/Pr36p7fl2Vl5enM2fO6P333y8S3iRpxIgRSklJUXp6ui5evKg333xTjz/+uO69994qD2/333+/mjRpohEjRqht27bl7vfN+VpXlfe9ca35Xl5lff5U1ToqoqKfQ2amS5cu+T6Hrv7aS//+/eXv769169b5znmrq9sMtcw3r2CozNWmy5Yts0GDBlnTpk0tICDAGjdubKNHj7bjx4/72rz44ovWrFkzk2ShoaG+S7kzMzNt4sSJ1rhxYwsLC7O4uDibNWuWSbKYmBjbs2dPiX3nz59vISEhvku0V6xY4VtXTk6OzZw501q2bGkBAQEWHR1t8fHxtn//fl+bl156ybp27Wper9e8Xq/17NnTFi9ebGZmO3futFatWllISIjFxcXZ008/XWLthYWFtmDBAuvQoYMFBgZaw4YNbcSIEXbw4EHfehYvXmyhoaEmyTp06GBHjx61JUuWWEREhEmyVq1a+W6nMnPmTGvUqJFFRUVZYmKivfTSSybJ2rVrZ4888ojdcMMNJskaNGhg9913n5mZTZ061QIDA31X1pmZPf/888XaHjt2zPr162cNGzY0f39/u/HGG+2pp56y/Pz8El/zE0884au7devW9re//c1+9atfWWRkpEmyG264wf7whz/Y6tWrfetq2LChrVq1qsjcGDp0qLVo0cIKCwvNzGzDhg0WHh5uc+fOLXU+vfHGG6VeaRocHGwdOnSwKVOm2IkTJ5hfDsyvsv4+X3+88cYbvj5//vOfbeTIkdauXTsLDg62oKAg69ixo82ePduuXLlSbA5kZGTY7bffbo0aNTJJ5ufnZ+3bt7d58+aVOleaNGliP/nJT3zPPfbYY/bRRx/5/v317ezn52c333yz/e1vfysy3jfna3nJZVebmpXvvWFW9nwv7/y71udPed5TlVHa1abl+Rxav369devWzUJDQy0oKMj8/PxMku/K0ltvvdXmzJlT4u1u3LTNuNrUnaokvME5hw8ftoCAgCLhorb46quvzOv12nPPPed0Kaik2jy/qtr1zFc3hjfAjPDmVtV6tSmqX/v27TVnzhzNmTNHly5dcrqcImbPnq0ePXpo6tSpTpeCSqrN86uqMV8BuAXhrQ544oknlJiYqFGjRtWaH0d+4YUXtHv3bm3YsKFKf/cWNa82zq+qxnytnQ4cOFDkVhilPUaNGuV0qUCNIrzVEfPmzdPUqVPLvO9ZTXnzzTeVk5Oj999/v9y3aEDtVpvmV1VjvtZenTp1KnYFaUmPqzdkBuqLAKcLQNX57ne/W+YPb9eUe++9V/fee6/TZaCK1Zb5VdWYrwDchj1vAAAALkJ4AwAAcBHCGwAAgIsQ3gAAAFyE8AYAAOAihDcAAAAXIbwBAAC4COENAADARQhvAAAALkJ4AwAAcBHCGwAAgIsQ3gAAAFyE8AYAAOAiAaU9kZiYWJN1AK6Qnp6usLAwBQSU+tYBHFObPrfPnj2r6Ohop8vANWzdulV9+/Z1ugxUULE9b7GxsUpISHCiFqBWMzNt27ZNf/3rX5WRkeF0OahFEhISFBsb69j6a9Pndm5urrZu3arNmzfrwoULTpeDa+jbt69uu+02p8tABXnMzJwuAnCLkydPavTo0dqxY4d+9atfadq0aU6XBNQaf/nLXzRhwgQVFBRo6dKluvvuu50uCaiTOOcNqICYmBi99957mjlzph599FElJCTo4sWLTpcFOCo7O1uPP/64vve976lfv37av38/wQ2oRux5Ayrp3Xff1YMPPqiIiAglJyerR48eTpcE1Ljt27dr7NixOn36tF588UWNHTvW6ZKAOo89b0AlDR48WHv27FGrVq3Ut29fLVq0yOmSgBqTn5+v+fPnKy4uTrGxsdq3bx/BDagh7HkDrlNBQYGeeeYZzZ07V8OGDdPSpUvVsGFDp8sCqs0//vEPjRs3Tjt27NDs2bM1Y8YM+fmxLwCoKYQ3oIq89957GjNmjIKCgrR69Wouv0edtHz5cj388MNq06aNVq5cqW7dujldElDv8F8loIoMGjRIe/bs0be+9S3dfvvtmj9/vvi/EeqKM2fOaNiwYXrooYf08MMPa8eOHQQ3wCHseQOqmJnpN7/5jWbMmKG7775bv//979WoUSOnywIq7Y033lBSUpLCwsK0fPlyDRgwwOmSgHqNPW9AFfN4PJo2bZreeecd7dixQz179tRHH33kdFlAhWVkZCgpKUnx8fEaMmSI9u7dS3ADagHCG1BNbr/9du3evVtdunTRd77zHc2ePVuFhYVOlwWUy5YtW9SrVy+tW7dO69at0/LlyxUWFuZ0WQBEeAOqVZMmTfTWW2/pueee0y9/+Uvde++9OnfunNNlAaXKy8vT7NmzNWDAAN10003avXu37r33XqfLAvA1nPMG1JCPP/5Yo0aNUl5enlatWqW4uDinSwKK2L9/v8aOHasjR47oueee049//GOnSwJQAva8ATXk1ltv1a5du9S3b18NGjSIw6ioNcxMixYt0i233KLg4GDt3LmT4AbUYux5A2rY1atRH3vsMQ0YMEArV65Us2bNnC4L9dSJEyf0gx/8QB9++KGefPJJ/cd//If8/f2dLgtAGdjzBtSwq1ejfvjhhzp27Ji6d++uv/zlL06XhXpozZo16tGjh9LS0rR161bNnj2b4Aa4AOENcEjv3r21c+dODRw4UEOGDNHs2bNVUFDgdFmoB9LT0zVmzBiNHDlSiYmJ2r59u3r16uV0WQDKicOmQC2wZMkSTZ06Vf369dPKlSt14403Ol0S6qg///nPeuihh+Tv76///u//1qBBg5wuCUAFsecNqAV+/OMf66OPPtIXX3yhHj16aNOmTU6XhDomOztb06ZN0/e+9z3169dPu3btIrgBLkV4A2qJXr16aefOnbrjjjt09913a9q0acrLy3O6LNQBH3/8sXr27Knly5dr+fLlSklJ4SfbABcjvAG1SHh4uP73f/9X//3f/63XXntNd9xxh7788kuny4JL5efna/78+YqLi1NsbKz27t2rBx980OmyAFwnwhtQC40bN07bt2/XuXPn1KNHD23YsMHpkuAyn3/+uQYOHKhf/OIXeuaZZ/T2228rJibG6bIAVAHCG1BL3Xzzzdq6davuuusuff/73+cwKsrFzLRkyRJ169ZNubm52rlzp2bOnCk/Pz7ugbqCq00BF1i+fLmmTJmizp07a/Xq1WrTpo3TJaEWOnPmjCZOnKhNmzZp+vTpmjNnjoKCgpwuC0AV479igAuMGzdOO3bsUHZ2tnr27Km1a9c6XRJqmddff12dO3fW/v379d577+lXv/oVwQ2oowhvgEt06tRJ27Zt0w9+8APdf//9mjZtmnJzc50uCw7LyMhQUlKSEhISdPfddys1NVVxcXFOlwWgGnHYFHChFStWaMqUKerUqZNWr16tdu3aOV0SHPDRRx9p3LhxyszM1Kuvvqphw4Y5XRKAGsCeN8CFxo4dqx07digvL0+9evVSSkqK0yWhBuXk5Ojxxx/XgAED1L17d+3fv5/gBtQjhDfApTp27KitW7dq/PjxGjlypJKSkpSTk+N0Wahm+/btU9++ffXb3/5Wv/3tb/X666+rSZMmTpcFoAYR3gAX83q9WrRokV5//XWlpKSoX79+OnLkiNNloRqYmRYtWqTevXsrJCREn3zyiX784x87XRYABxDegDrgvvvu065duxQYGKhevXpp1apVTpeEKnT8+HENGjRIM2bM0OOPP66//e1vat++vdNlAXAI4Q2oI1q3bq3NmzdrwoQJeuCBBzRu3DhlZWU5XRau05o1a9SzZ0999dVX2rZtm2bPni1/f3+nywLgIMIbUIcEBwdr0aJF+r//+z+99dZb6tOnj/bv3+90WaiEs2fP6r777tPIkSM1duxYffLJJ+rZs6fTZQGoBQhvQB00fPhw7d69W5GRkerbt6/+8Ic/OF0SKuDtt99Wjx499Mknn+jdd9/VokWLFBwc7HRZAGoJwhtQR7Vs2VIffPCBHn74YY0dO1bjxo3T5cuXnS4LZcjOzta0adM0ZMgQ9e/fX7t379agQYOcLgtALcNNeoF6YP369ZowYYKaNm2qlJQUde3a1emS8A0ff/yxxo4dq7S0NL300ksaM2aM0yUBqKXY8wbUA8OGDdPu3bvVuHFjffvb39aiRYtKbWtm+tOf/lSD1dVtp06dKvP5/Px8zZ8/X3FxcWrVqpX27dtHcANQJsIbUE/Exsbq/fff12OPPaZHH31U48aN06VLl4q1W7hwoYYPH65PPvnEgSrrlrNnz6pPnz76y1/+UuLzBw4c0G233aZf/OIXWrBggd5++221aNGihqsE4DYcNgXqoXfeeUcPPvigoqKilJycrO7du0uStm3bpv79+6uwsFA33XST9uzZw4nylWRmGjp0qDZu3KimTZvqs88+U6NGjXzPvfrqq3r00Ud18803a8WKFerYsaPDFQNwC/a8AfXQHXfcoR07dqhp06bq27evFi1apPT0dCUkJMjj8cjMdOTIEf3nf/6n06W61osvvqi3335bknThwgU99NBDkqTTp0/rnnvu0cMPP6yf/OQn+vDDDwluACqEPW9APZafn6///M//1K9+9Su1adNGx48fV35+vu95j8ejDz74QHFxcQ5W6T779u3TLbfcotzc3CLLp02bppUrVyoyMlLLly9X//79HaoQgJsR3gBoypQpeuWVV/TNjwN/f3/fSfQhISEOVecuV65cUc+ePXXkyJFiQdjf31/333+/fve73yksLMzBKgG4GYdNgXouNTVVr732WrHgJkkFBQU6ceKEnnzySQcqc6ef/vSnxYKb9K/z3Dwej44dO6bQ0FCHqgNQF7DnDajHLl26pO7du+vEiRPFwsbXeTwevffee/rOd75Tg9W5zxtvvKH4+Pgy2/j5+en555/XI488UkNVAahrCG9APZaYmKi1a9des52/v79atGihTz/9VA0aNKiBytznxIkT6tKliy5dulTiXsyvCwwM1K5du9S5c+caqg5AXcJhU6CeOn/+vBo3bqzo6GhJKvOWIAUFBTp16pQee+yxmirPVQoKCjRy5EhduXLlmsEtKChIeXl5mjx58jXbAkBJ2PMGQPv379eaNWv0v//7vzp8+LACAwOVn59fLFx4PB5t3LhRd911l0OV1k6zZ8/WM888o8LCwmLP+fv7y8xUWFioli1bavjw4brnnns0YMAA7qEHoFIIbwCK+Oyzz7Ru3TqtXbtWu3btkp+fny98+Pn5qVmzZvrss88UERHhdKm1wt///nd95zvf8QU3j8ejwMBA5ebmKjIyUnfccYe++93v6u6771ZMTIzD1QKoCwhvqJVOnjypjz76yOky6r3z589rx44d2rZtmz799FNfQBk0aJAmTZrkcHXOu3z5sqZPn64L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", "text/plain": [ "" ] }, + "execution_count": 75, "metadata": {}, - "execution_count": 75 + "output_type": "execute_result" } + ], + "source": [ + "# Plot hybrid token and character model\n", + "from tensorflow.keras.utils import plot_model\n", + "plot_model(model_4)" ] }, { @@ -3595,17 +3577,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "4Yx8PFSc2hqE" }, + "outputs": [], "source": [ "# Compile token char model\n", "model_4.compile(loss=\"categorical_crossentropy\",\n", " optimizer=tf.keras.optimizers.Adam(), # section 4.2 of https://arxiv.org/pdf/1612.05251.pdf mentions using SGD but we'll stick with Adam\n", " metrics=[\"accuracy\"])" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -3625,9 +3607,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "pYU0fX6rpbgI" }, + "outputs": [], "source": [ "# Combine chars and tokens into a dataset\n", "train_char_token_data = tf.data.Dataset.from_tensor_slices((train_sentences, train_chars)) # make data\n", @@ -3642,12 +3626,11 @@ "val_char_token_labels = tf.data.Dataset.from_tensor_slices(val_labels_one_hot)\n", "val_char_token_dataset = tf.data.Dataset.zip((val_char_token_data, val_char_token_labels))\n", "val_char_token_dataset = val_char_token_dataset.batch(32).prefetch(tf.data.AUTOTUNE)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -3655,23 +3638,22 @@ "id": "UlOs99Emp52r", "outputId": "79caaf4f-5f8b-4ec1-8d19-e98cae3542f9" }, - "source": [ - "# Check out training char and token embedding dataset\n", - "train_char_token_dataset, val_char_token_dataset" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "(,\n", " )" ] }, + "execution_count": 78, "metadata": {}, - "execution_count": 78 + "output_type": "execute_result" } + ], + "source": [ + "# Check out training char and token embedding dataset\n", + "train_char_token_dataset, val_char_token_dataset" ] }, { @@ -3685,6 +3667,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -3692,17 +3675,9 @@ "id": "yp0c25coprwp", "outputId": "ff296f4a-6480-40e9-c989-b0118d34402a" }, - "source": [ - "# Fit the model on tokens and chars\n", - "model_4_history = model_4.fit(train_char_token_dataset, # train on dataset of token and characters\n", - " steps_per_epoch=int(0.1 * len(train_char_token_dataset)),\n", - " epochs=3,\n", - " validation_data=val_char_token_dataset,\n", - " validation_steps=int(0.1 * len(val_char_token_dataset)))" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/3\n", @@ -3711,13 +3686,21 @@ "562/562 [==============================] - 19s 34ms/step - loss: 0.7914 - accuracy: 0.6958 - val_loss: 0.7139 - val_accuracy: 0.7301\n", "Epoch 3/3\n", "562/562 [==============================] - 19s 34ms/step - loss: 0.7649 - accuracy: 0.7057 - val_loss: 0.6826 - val_accuracy: 0.7410\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Fit the model on tokens and chars\n", + "model_4_history = model_4.fit(train_char_token_dataset, # train on dataset of token and characters\n", + " steps_per_epoch=int(0.1 * len(train_char_token_dataset)),\n", + " epochs=3,\n", + " validation_data=val_char_token_dataset,\n", + " validation_steps=int(0.1 * len(val_char_token_dataset)))" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -3725,29 +3708,28 @@ "id": "BfAMuoJett_t", "outputId": "6e9658da-2aa3-41f3-a41a-488d51df2885" }, - "source": [ - "# Evaluate on the whole validation dataset\n", - "model_4.evaluate(val_char_token_dataset)" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "945/945 [==============================] - 20s 21ms/step - loss: 0.6899 - accuracy: 0.7362\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "[0.6899493336677551, 0.7362306118011475]" ] }, + "execution_count": 80, "metadata": {}, - "execution_count": 80 + "output_type": "execute_result" } + ], + "source": [ + "# Evaluate on the whole validation dataset\n", + "model_4.evaluate(val_char_token_dataset)" ] }, { @@ -3765,22 +3747,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "1z_zbrXTYN7G", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "1z_zbrXTYN7G", "outputId": "2646ffbf-cc24-490a-b88f-4a139972a8b3" }, - "source": [ - "# Make predictions using the token-character model hybrid\n", - "model_4_pred_probs = model_4.predict(val_char_token_dataset)\n", - "model_4_pred_probs" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array([[4.5224771e-01, 3.3035564e-01, 2.7360097e-03, 2.0863818e-01,\n", @@ -3798,58 +3774,57 @@ " 6.2068779e-02]], dtype=float32)" ] }, + "execution_count": 81, "metadata": {}, - "execution_count": 81 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions using the token-character model hybrid\n", + "model_4_pred_probs = model_4.predict(val_char_token_dataset)\n", + "model_4_pred_probs" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "Ic5MCrFxYgsB", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "Ic5MCrFxYgsB", "outputId": "deef25ca-06bc-4352-c249-3694af01d247" }, - "source": [ - "# Turn prediction probabilities into prediction classes\n", - "model_4_preds = tf.argmax(model_4_pred_probs, axis=1)\n", - "model_4_preds" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 82, "metadata": {}, - "execution_count": 82 + "output_type": "execute_result" } + ], + "source": [ + "# Turn prediction probabilities into prediction classes\n", + "model_4_preds = tf.argmax(model_4_pred_probs, axis=1)\n", + "model_4_preds" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "CBNPIRIC7EsE", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "CBNPIRIC7EsE", "outputId": "a1427c17-a892-449a-f270-a273e336baf1" }, - "source": [ - "# Get results of token-char-hybrid model\n", - "model_4_results = calculate_results(y_true=val_labels_encoded,\n", - " y_pred=model_4_preds)\n", - "model_4_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 73.62306368330465,\n", @@ -3858,9 +3833,16 @@ " 'recall': 0.7362306368330465}" ] }, + "execution_count": 83, "metadata": {}, - "execution_count": 83 + "output_type": "execute_result" } + ], + "source": [ + "# Get results of token-char-hybrid model\n", + "model_4_results = calculate_results(y_true=val_labels_encoded,\n", + " y_pred=model_4_preds)\n", + "model_4_results" ] }, { @@ -3921,22 +3903,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "Htf-tnFcEcAn", "colab": { "base_uri": "https://localhost:8080/", "height": 203 }, + "id": "Htf-tnFcEcAn", "outputId": "41e2420b-a87d-438b-f4aa-4a8f84329b48" }, - "source": [ - "# Inspect training dataframe\n", - "train_df.head()" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/html": [ "
\n", @@ -4014,9 +3991,14 @@ "[5 rows x 4 columns]" ] }, + "execution_count": 84, "metadata": {}, - "execution_count": 84 + "output_type": "execute_result" } + ], + "source": [ + "# Inspect training dataframe\n", + "train_df.head()" ] }, { @@ -4062,21 +4044,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "LJVhuU7cMd0-", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "LJVhuU7cMd0-", "outputId": "bfde78db-7693-4789-ceb6-baa043426f27" }, - "source": [ - "# How many different line numbers are there?\n", - "train_df[\"line_number\"].value_counts()" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "0 15000\n", @@ -4113,49 +4090,54 @@ "Name: line_number, dtype: int64" ] }, + "execution_count": 85, "metadata": {}, - "execution_count": 85 + "output_type": "execute_result" } + ], + "source": [ + "# How many different line numbers are there?\n", + "train_df[\"line_number\"].value_counts()" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "rKoNMSBNImLG", "colab": { "base_uri": "https://localhost:8080/", "height": 282 }, + "id": "rKoNMSBNImLG", "outputId": "9f5a97b4-5fe1-49a9-cb31-a6e887a011c5" }, - "source": [ - "# Check the distribution of \"line_number\" column\n", - "train_df.line_number.plot.hist()" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 86, "metadata": {}, - "execution_count": 86 + "output_type": "execute_result" }, { - "output_type": "display_data", "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } + ], + "source": [ + "# Check the distribution of \"line_number\" column\n", + "train_df.line_number.plot.hist()" ] }, { @@ -4171,17 +4153,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "LsjdKcXUMkgE" }, + "outputs": [], "source": [ "# Use TensorFlow to create one-hot-encoded tensors of our \"line_number\" column \n", "train_line_numbers_one_hot = tf.one_hot(train_df[\"line_number\"].to_numpy(), depth=15)\n", "val_line_numbers_one_hot = tf.one_hot(val_df[\"line_number\"].to_numpy(), depth=15)\n", "test_line_numbers_one_hot = tf.one_hot(test_df[\"line_number\"].to_numpy(), depth=15)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -4196,21 +4178,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "R7BERNOQK723", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "R7BERNOQK723", "outputId": "b74387c2-1f01-4c5a-8cff-92a528410fc7" }, - "source": [ - "# Check one-hot encoded \"line_number\" feature samples\n", - "train_line_numbers_one_hot.shape, train_line_numbers_one_hot[:20]" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "(TensorShape([180040, 15]), )" ] }, + "execution_count": 88, "metadata": {}, - "execution_count": 88 + "output_type": "execute_result" } + ], + "source": [ + "# Check one-hot encoded \"line_number\" feature samples\n", + "train_line_numbers_one_hot.shape, train_line_numbers_one_hot[:20]" ] }, { @@ -4253,21 +4235,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "S3bLbdWzOBmY", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "S3bLbdWzOBmY", "outputId": "6d7da296-7f65-47dc-8649-b05fe12a56bd" }, - "source": [ - "# How many different numbers of lines are there?\n", - "train_df[\"total_lines\"].value_counts()" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "11 24468\n", @@ -4300,39 +4277,44 @@ "Name: total_lines, dtype: int64" ] }, + "execution_count": 89, "metadata": {}, - "execution_count": 89 + "output_type": "execute_result" } + ], + "source": [ + "# How many different numbers of lines are there?\n", + "train_df[\"total_lines\"].value_counts()" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "oxDN9ASLL9uY", "colab": { "base_uri": "https://localhost:8080/", "height": 267 }, + "id": "oxDN9ASLL9uY", "outputId": "c484eba7-4242-478c-df2d-76b887d94436" }, - "source": [ - "# Check the distribution of total lines\n", - "train_df.total_lines.plot.hist();" - ], - "execution_count": null, "outputs": [ { - "output_type": "display_data", "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAD6CAYAAABgZXp6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAXpUlEQVR4nO3df7BfdX3n8efLRCpSkVDSLJNgg21Gl7r+gCvg1HatjCHg1tBdl4WtS5ZhiDNgV8f9QXQ6i8Uyk+5spdJatqlkTVwV8SfZEppGxHb7Bz+CIAjo5IqwJAJJDRDRFhZ97x/fz5Wv4ebyzbn53i/35vmY+c49530+55zPZ74TXpxzPt/vN1WFJEldvGjUHZAkzV6GiCSpM0NEktSZISJJ6swQkSR1ZohIkjobWogkeVWSO/tee5O8L8nRSbYm2d7+Lmjtk+TKJONJ7kpyYt+xVrX225Os6quflOTuts+VSTKs8UiSnisz8TmRJPOAncApwMXAnqpam2QNsKCqLklyJvC7wJmt3Uer6pQkRwPbgDGggNuBk6rqsSS3Av8BuAXYDFxZVTdM1Zdjjjmmli5dOpRxStJcdPvtt/99VS2cbNv8GerDacB3qurBJCuBt7T6BuBrwCXASmBj9VLt5iRHJTm2td1aVXsAkmwFViT5GnBkVd3c6huBs4ApQ2Tp0qVs27bt4I5OkuawJA/ub9tMPRM5B/hMW15UVQ+35UeARW15MfBQ3z47Wm2q+o5J6pKkGTL0EElyGPAO4HP7bmtXHUO/n5ZkdZJtSbbt3r172KeTpEPGTFyJnAF8vaoebeuPtttUtL+7Wn0ncFzffktabar6kknqz1FV66pqrKrGFi6c9LaeJKmDmQiRc3n2VhbAJmBihtUq4Lq++nltltapwBPtttcWYHmSBW0m13JgS9u2N8mpbVbWeX3HkiTNgKE+WE9yBPA24N195bXAtUkuAB4Ezm71zfRmZo0DPwLOB6iqPUk+DNzW2l028ZAduAj4BHA4vQfqUz5UlyQdXDMyxfeFZGxsrJydJUmDS3J7VY1Nts1PrEuSOjNEJEmdGSKSpM5m6hPrmqWWrrl+JOd9YO3bR3JeSQfGKxFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSps6GGSJKjknw+ybeS3JfkTUmOTrI1yfb2d0FrmyRXJhlPcleSE/uOs6q1355kVV/9pCR3t32uTJJhjkeS9LOGfSXyUeCvqurVwOuA+4A1wI1VtQy4sa0DnAEsa6/VwFUASY4GLgVOAU4GLp0Intbmwr79Vgx5PJKkPkMLkSQvB34DuBqgqp6uqseBlcCG1mwDcFZbXglsrJ6bgaOSHAucDmytqj1V9RiwFVjRth1ZVTdXVQEb+44lSZoBw7wSOR7YDfzPJHck+XiSI4BFVfVwa/MIsKgtLwYe6tt/R6tNVd8xSV2SNEOGGSLzgROBq6rqDcAPefbWFQDtCqKG2AcAkqxOsi3Jtt27dw/7dJJ0yBhmiOwAdlTVLW398/RC5dF2K4r2d1fbvhM4rm//Ja02VX3JJPXnqKp1VTVWVWMLFy6c1qAkSc8aWohU1SPAQ0le1UqnAfcCm4CJGVargOva8ibgvDZL61TgiXbbawuwPMmC9kB9ObClbdub5NQ2K+u8vmNJkmbA/CEf/3eBTyU5DLgfOJ9ecF2b5ALgQeDs1nYzcCYwDvyotaWq9iT5MHBba3dZVe1pyxcBnwAOB25oL0nSDBlqiFTVncDYJJtOm6RtARfv5zjrgfWT1LcBr5lmNyVJHfmJdUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOjNEJEmdGSKSpM4MEUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOjNEJEmdGSKSpM4MEUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOhtqiCR5IMndSe5Msq3Vjk6yNcn29ndBqyfJlUnGk9yV5MS+46xq7bcnWdVXP6kdf7ztm2GOR5L0s2biSuQ3q+r1VTXW1tcAN1bVMuDGtg5wBrCsvVYDV0EvdIBLgVOAk4FLJ4Kntbmwb78Vwx+OJGnCKG5nrQQ2tOUNwFl99Y3VczNwVJJjgdOBrVW1p6oeA7YCK9q2I6vq5qoqYGPfsSRJM2DYIVLAXye5PcnqVltUVQ+35UeARW15MfBQ3747Wm2q+o5J6s+RZHWSbUm27d69ezrjkST1mT/k47+5qnYm+UVga5Jv9W+sqkpSQ+4DVbUOWAcwNjY29PNJ0qFiqFciVbWz/d0FfIneM41H260o2t9drflO4Li+3Ze02lT1JZPUJUkzZGghkuSIJC+bWAaWA98ENgETM6xWAde15U3AeW2W1qnAE+221xZgeZIF7YH6cmBL27Y3yaltVtZ5fceSJM2AYd7OWgR8qc26nQ98uqr+KsltwLVJLgAeBM5u7TcDZwLjwI+A8wGqak+SDwO3tXaXVdWetnwR8AngcOCG9pIkzZChhUhV3Q+8bpL694HTJqkXcPF+jrUeWD9JfRvwmml3VpLUiZ9YlyR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktTZQCGS5J8NuyOSpNln0CuRP0tya5KLkrx8qD2SJM0aA4VIVf068DvAccDtST6d5G1D7Zkk6QVv4GciVbUd+D3gEuCfA1cm+VaSfzmszkmSXtgGfSby2iRXAPcBbwV+q6r+aVu+Yoj9kyS9gM0fsN2fAB8HPlhV/zBRrKrvJfm9ofRMkvSCN+jtrLcDn54IkCQvSvJSgKr65FQ7JpmX5I4kf9nWj09yS5LxJJ9Nclir/1xbH2/bl/Yd4wOt/u0kp/fVV7TaeJI1BzJwSdL0DRoiXwEO71t/aasN4r30boNN+EPgiqr6FeAx4IJWvwB4rNWvaO1IcgJwDvCrwAp6M8XmJZkHfAw4AzgBOLe1lSTNkEFvZ72kqp6cWKmqJyeuRKaSZAm9q5jLgfcnCb3nKP+2NdkAfAi4CljZlgE+D/xpa78SuKaqngK+m2QcOLm1G6+q+9u5rmlt7x1wTHoBW7rm+pGd+4G1bx/ZuaXZZtArkR8mOXFiJclJwD9M0X7CHwP/BfhJW/8F4PGqeqat7wAWt+XFwEMAbfsTrf1P6/vss7+6JGmGDHol8j7gc0m+BwT4J8C/mWqHJP8C2FVVtyd5y7R6OU1JVgOrAV7xileMsiuSNKcMFCJVdVuSVwOvaqVvV9X/e57dfg14R5IzgZcARwIfBY5KMr9dbSwBdrb2O+l9mHFHkvnAy4Hv99Un9O+zv/q+/V8HrAMYGxur5+m3JGlAB/IFjG8EXgucSO8h9nlTNa6qD1TVkqpaSu/B+Fer6neAm4B3tmargOva8qa2Ttv+1aqqVj+nzd46HlgG3ArcBixrs70Oa+fYdADjkSRN00BXIkk+CfwycCfw41YuYGOHc14CXJPkD4A7gKtb/Wrgk+3B+R56oUBV3ZPkWnoPzJ8BLq6qH7d+vQfYAswD1lfVPR36I0nqaNBnImPACe3K4IBV1deAr7Xl+3l2dlV/m38E/vV+9r+c3gyvfeubgc1d+iRJmr5Bb2d9k97DdEmSfmrQK5FjgHuT3Ao8NVGsqncMpVeSpFlh0BD50DA7IUmanQad4vs3SX4JWFZVX2mfVp833K5Jkl7oBv0q+AvpfRXJn7fSYuDLw+qUJGl2GPTB+sX0Pjy4F376A1W/OKxOSZJmh0FD5KmqenpipX2i3E9+S9IhbtAQ+ZskHwQOb7+t/jngfw+vW5Kk2WDQEFkD7AbuBt5N7wN+/qKhJB3iBp2d9RPgL9pLkiRg8O/O+i6TPAOpqlce9B5JkmaNA/nurAkvofcdV0cf/O5IkmaTgZ6JVNX3+147q+qP6f3srSTpEDbo7awT+1ZfRO/KZNCrGEnSHDVoEPxR3/IzwAPA2Qe9N5KkWWXQ2Vm/OeyOSJJmn0FvZ71/qu1V9ZGD0x1J0mxyILOz3sizv2H+W/R+53z7MDoljdLSNdeP5LwPrHWuimafQUNkCXBiVf0AIMmHgOur6l3D6pgk6YVv0K89WQQ83bf+dKtJkg5hg16JbARuTfKltn4WsGE4XZIkzRaDzs66PMkNwK+30vlVdcfwuiVJmg0GvZ0F8FJgb1V9FNiR5PipGid5SZJbk3wjyT1Jfr/Vj09yS5LxJJ9Nclir/1xbH2/bl/Yd6wOt/u0kp/fVV7TaeJI1BzAWSdJBMOjP414KXAJ8oJVeDPyv59ntKeCtVfU64PXAiiSnAn8IXFFVvwI8BlzQ2l8APNbqV7R2JDkBOAf4VWAF8GdJ5iWZB3wMOAM4ATi3tZUkzZBBr0R+G3gH8EOAqvoe8LKpdqieJ9vqi9urgLfS+7126D1XOastr+TZ5yyfB05Lkla/pqqeqqrvAuPAye01XlX3t19dvKa1lSTNkEFD5OmqKtrXwSc5YpCd2hXDncAuYCvwHeDxqnqmNdkBLG7Li4GHANr2J4Bf6K/vs8/+6pKkGTJoiFyb5M+Bo5JcCHyFAX6gqqp+XFWvp/c5k5OBV3fu6TQkWZ1kW5Jtu3fvHkUXJGlOet7ZWe2W0mfpBcBe4FXAf62qrYOepKoeT3IT8CZ6QTS/XW0sAXa2ZjuB4+g9tJ8PvBz4fl99Qv8++6vve/51wDqAsbGx5/y4liSpm+e9Emm3sTZX1daq+s9V9Z8GCZAkC5Mc1ZYPB94G3AfcBLyzNVsFXNeWN7V12vavtnNvAs5ps7eOB5bR+8qV24BlbbbXYfQevk98LYskaQYM+mHDryd5Y1XddgDHPhbY0GZRvQi4tqr+Msm9wDVJ/gC4A7i6tb8a+GSScWAPvVCgqu5Jci1wL72vob+4qn4MkOQ9wBZgHrC+qu45gP5JkqZp0BA5BXhXkgfozdAKvYuU1+5vh6q6C3jDJPX76T0f2bf+j/R+dneyY10OXD5JfTOwebAhSJIOtilDJMkrqur/AqdP1U6SdGh6viuRL9P79t4Hk3yhqv7VTHRKkjQ7PN+D9fQtv3KYHZEkzT7PFyK1n2VJkp73dtbrkuyld0VyeFuGZx+sHznU3kmSXtCmDJGqmjdTHZEkzT4H8lXwkiT9DENEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktTZoD9KpRFauub6UXdBkibllYgkqTNDRJLUmSEiSerMEJEkdWaISJI6G1qIJDkuyU1J7k1yT5L3tvrRSbYm2d7+Lmj1JLkyyXiSu5Kc2HesVa399iSr+uonJbm77XNlkjy3J5KkYRnmlcgzwH+sqhOAU4GLk5wArAFurKplwI1tHeAMYFl7rQaugl7oAJcCpwAnA5dOBE9rc2HffiuGOB5J0j6GFiJV9XBVfb0t/wC4D1gMrAQ2tGYbgLPa8kpgY/XcDByV5FjgdGBrVe2pqseArcCKtu3Iqrq5qgrY2HcsSdIMmJFnIkmWAm8AbgEWVdXDbdMjwKK2vBh4qG+3Ha02VX3HJPXJzr86ybYk23bv3j2tsUiSnjX0EEny88AXgPdV1d7+be0Koobdh6paV1VjVTW2cOHCYZ9Okg4ZQw2RJC+mFyCfqqovtvKj7VYU7e+uVt8JHNe3+5JWm6q+ZJK6JGmGDHN2VoCrgfuq6iN9mzYBEzOsVgHX9dXPa7O0TgWeaLe9tgDLkyxoD9SXA1vatr1JTm3nOq/vWJKkGTDML2D8NeDfAXcnubPVPgisBa5NcgHwIHB227YZOBMYB34EnA9QVXuSfBi4rbW7rKr2tOWLgE8AhwM3tJckaYYMLUSq6u+A/X1u47RJ2hdw8X6OtR5YP0l9G/CaaXRTkjQNfmJdktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnQ0tRJKsT7IryTf7akcn2Zpke/u7oNWT5Mok40nuSnJi3z6rWvvtSVb11U9Kcnfb58okGdZYJEmTmz/EY38C+FNgY19tDXBjVa1NsqatXwKcASxrr1OAq4BTkhwNXAqMAQXcnmRTVT3W2lwI3AJsBlYANwxxPNJQLV1z/UjO+8Dat4/kvJobhnYlUlV/C+zZp7wS2NCWNwBn9dU3Vs/NwFFJjgVOB7ZW1Z4WHFuBFW3bkVV1c1UVvaA6C0nSjJrpZyKLqurhtvwIsKgtLwYe6mu3o9Wmqu+YpC5JmkEje7DeriBqJs6VZHWSbUm27d69eyZOKUmHhJkOkUfbrSja312tvhM4rq/dklabqr5kkvqkqmpdVY1V1djChQunPQhJUs9Mh8gmYGKG1Srgur76eW2W1qnAE+221xZgeZIFbSbXcmBL27Y3yaltVtZ5fceSJM2Qoc3OSvIZ4C3AMUl20JtltRa4NskFwIPA2a35ZuBMYBz4EXA+QFXtSfJh4LbW7rKqmnhYfxG9GWCH05uV5cwsSZphQwuRqjp3P5tOm6RtARfv5zjrgfWT1LcBr5lOHyVJ0+Mn1iVJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSps/mj7oCk0Vq65vqRnfuBtW8f2bl1cHglIknqbNZfiSRZAXwUmAd8vKrWDutco/w/NmkuGtW/Ka+ADp5ZfSWSZB7wMeAM4ATg3CQnjLZXknTomNUhApwMjFfV/VX1NHANsHLEfZKkQ8Zsv521GHiob30HcMqI+iJplnAywcEz20NkIElWA6vb6pNJvj3K/kziGODvR92JIZvrY3R8s9+MjDF/OOwz7Nd0xvdL+9sw20NkJ3Bc3/qSVvsZVbUOWDdTnTpQSbZV1dio+zFMc32Mjm/2m+tjHNb4ZvszkduAZUmOT3IYcA6wacR9kqRDxqy+EqmqZ5K8B9hCb4rv+qq6Z8TdkqRDxqwOEYCq2gxsHnU/pukFe6vtIJrrY3R8s99cH+NQxpeqGsZxJUmHgNn+TESSNEKGyIgleSDJ3UnuTLJt1P05GJKsT7IryTf7akcn2Zpke/u7YJR9nI79jO9DSXa29/HOJGeOso/TkeS4JDcluTfJPUne2+pz4j2cYnxz6T18SZJbk3yjjfH3W/34JLckGU/y2TYhaXrn8nbWaCV5ABirqjkzBz/JbwBPAhur6jWt9t+APVW1NskaYEFVXTLKfna1n/F9CHiyqv77KPt2MCQ5Fji2qr6e5GXA7cBZwL9nDryHU4zvbObOexjgiKp6MsmLgb8D3gu8H/hiVV2T5H8A36iqq6ZzLq9EdNBV1d8Ce/YprwQ2tOUN9P7Rzkr7Gd+cUVUPV9XX2/IPgPvofTvEnHgPpxjfnFE9T7bVF7dXAW8FPt/qB+U9NERGr4C/TnJ7+2T9XLWoqh5uy48Ai0bZmSF5T5K72u2uWXmrZ19JlgJvAG5hDr6H+4wP5tB7mGRekjuBXcBW4DvA41X1TGuyg4MQnobI6L25qk6k903EF7dbJXNa9e6hzrX7qFcBvwy8HngY+KPRdmf6kvw88AXgfVW1t3/bXHgPJxnfnHoPq+rHVfV6et/kcTLw6mGcxxAZsara2f7uAr5E782eix5t96In7knvGnF/DqqqerT9o/0J8BfM8vex3Uf/AvCpqvpiK8+Z93Cy8c2193BCVT0O3AS8CTgqycTnAyf9mqgDZYiMUJIj2oM9khwBLAe+OfVes9YmYFVbXgVcN8K+HHQT/3FtfptZ/D62h7JXA/dV1Uf6Ns2J93B/45tj7+HCJEe15cOBt9F79nMT8M7W7KC8h87OGqEkr6R39QG9bw/4dFVdPsIuHRRJPgO8hd63hj4KXAp8GbgWeAXwIHB2Vc3Kh9P7Gd9b6N0GKeAB4N19zw9mlSRvBv4PcDfwk1b+IL3nBrP+PZxifOcyd97D19J7cD6P3sXCtVV1WftvzjXA0cAdwLuq6qlpncsQkSR15e0sSVJnhogkqTNDRJLUmSEiSerMEJEkdWaISJI6M0QkSZ0ZIpKkzv4/2LyLCkd/AwYAAAAASUVORK5CYII=\n", + "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } + ], + "source": [ + "# Check the distribution of total lines\n", + "train_df.total_lines.plot.hist();" ] }, { @@ -4348,29 +4330,29 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "or736pZLNwWn", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "or736pZLNwWn", "outputId": "fdf309c3-190d-4861-e3e4-f80e30b3b73c" }, - "source": [ - "# Check the coverage of a \"total_lines\" value of 20\n", - "np.percentile(train_df.total_lines, 98) # a value of 20 covers 98% of samples" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "20.0" ] }, + "execution_count": 91, "metadata": {}, - "execution_count": 91 + "output_type": "execute_result" } + ], + "source": [ + "# Check the coverage of a \"total_lines\" value of 20\n", + "np.percentile(train_df.total_lines, 98) # a value of 20 covers 98% of samples" ] }, { @@ -4384,26 +4366,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "Egqq3LnnN0Z6", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "Egqq3LnnN0Z6", "outputId": "5a245b1f-0141-4548-bf43-3d2c754c3a80" }, - "source": [ - "# Use TensorFlow to create one-hot-encoded tensors of our \"total_lines\" column \n", - "train_total_lines_one_hot = tf.one_hot(train_df[\"total_lines\"].to_numpy(), depth=20)\n", - "val_total_lines_one_hot = tf.one_hot(val_df[\"total_lines\"].to_numpy(), depth=20)\n", - "test_total_lines_one_hot = tf.one_hot(test_df[\"total_lines\"].to_numpy(), depth=20)\n", - "\n", - "# Check shape and samples of total lines one-hot tensor\n", - "train_total_lines_one_hot.shape, train_total_lines_one_hot[:10]" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "(TensorShape([180040, 20]), )" ] }, + "execution_count": 92, "metadata": {}, - "execution_count": 92 + "output_type": "execute_result" } + ], + "source": [ + "# Use TensorFlow to create one-hot-encoded tensors of our \"total_lines\" column \n", + "train_total_lines_one_hot = tf.one_hot(train_df[\"total_lines\"].to_numpy(), depth=20)\n", + "val_total_lines_one_hot = tf.one_hot(val_df[\"total_lines\"].to_numpy(), depth=20)\n", + "test_total_lines_one_hot = tf.one_hot(test_df[\"total_lines\"].to_numpy(), depth=20)\n", + "\n", + "# Check shape and samples of total lines one-hot tensor\n", + "train_total_lines_one_hot.shape, train_total_lines_one_hot[:10]" ] }, { @@ -4465,9 +4447,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "aPiFnY8E0oPS" }, + "outputs": [], "source": [ "# 1. Token inputs\n", "token_inputs = layers.Input(shape=[], dtype=\"string\", name=\"token_inputs\")\n", @@ -4516,9 +4500,7 @@ " token_model.input, \n", " char_model.input],\n", " outputs=output_layer)" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -4531,20 +4513,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "n7eJOhlKfVQJ", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "n7eJOhlKfVQJ", "outputId": "672d44c0-7f90-470c-fe02-e161db7fb478" }, - "source": [ - "# Get a summary of our token, char and positional embedding model\n", - "model_5.summary()" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_8\"\n", @@ -4588,39 +4567,42 @@ "Trainable params: 167,099\n", "Non-trainable params: 256,797,824\n", "__________________________________________________________________________________________________\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Get a summary of our token, char and positional embedding model\n", + "model_5.summary()" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "uM0dohpZ_v5U", "colab": { "base_uri": "https://localhost:8080/", "height": 856 }, + "id": "uM0dohpZ_v5U", "outputId": "685bed33-43be-49d1-9770-5e2a9f8f5d51" }, - "source": [ - "# Plot the token, char, positional embedding model\n", - "from tensorflow.keras.utils import plot_model\n", - "plot_model(model_5)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { - "image/png": "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Vy/NmDFD7du3V1pamg4dOhSEKqsuWP2sjIr2C5fLpbFjx+q7777TW2+9JUl67rnndN111/mWycvLkyTdc889vmv8XS6Xtm3bpvz8/JrrDAAAAIAyEfZrkZYtW0qS76ZslbV9+3YNHDhQiYmJWrt2rXJycjRz5sxglFhtCgsLlZ2draSkpKC0d+qpp+rll1/Wzp07NXnyZKWnp+uxxx4LSttVEex+VmT16tWaPXu2pMD3i5EjR8rtduvpp5/W5s2bFRcXpzZt2vjmN23aVJI0e/ZsmZnfz5o1a2qkXwAAAADKR9ivRdq2batGjRrpjTfeqFI7X375pQoLC3XTTTepffv2crvdtf5Rfe+8847MTD169PBNi4iIqPC0+NLs3LlTX3/9taRfgulDDz2ks846yzctlILZz0B8+umnio2NlRT4fpGQkKChQ4dqxYoVeuyxx3T99df7zW/durXcbrfWrVtXLTUDAAAAqDrCfi0SHR2tKVOmaPXq1Ro3bpx+/PFHHT16VAcPHjyhoJqcnCxJevPNN3X48GFt2bLF73FvtcHRo0d14MABFRUVaf369ZowYYKSk5M1cuRI3zIdOnTQ/v37tWLFChUWFmrPnj3atm1bibYaNWqknTt36vvvv9fBgwe1bds2jR07Vps2bVJBQYE+//xzbdu2zRewX3311Uo/eq829bO8fxAUFhbqp59+0jvvvOML+yeyX9x44406cuSIVq5cqcsvv9xvntvt1qhRo7R06VItWLBAubm5Ki4u1o4dO7Rr164T3UQAAAAAqkMIHwVQL+gEH71nZjZv3jzr0qWLud1uc7vdduaZZ9r8+fNt5syZFhMTY5LspJNOsq1bt9qSJUssISHBJFlSUpJ99dVXZmY2efJka9SokcXHx9uVV15p8+bNM0mWkpJit9xyi6+d1q1b2+LFi0+ovrlz51piYqJJMo/HY/3797f58+ebx+Pxq+2pp56yuLg4k2Rt2rSxb775xsx+eSRdZGSktWrVyiIiIiwuLs4GDBhgW7du9VvPvn37rHfv3uZ2u61du3Z266232h133GGSrEOHDr7H13322WfWpk0bi4mJsV69etnatWutZ8+elpCQYOHh4dayZUu7++67raioyMzMXnnlFWvYsKFNnz69zD5++OGHduqpp1pYWJhJssTERJsxY0at6ucTTzxhKSkpJqncnxde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ebr99tuVn59f7rJ//vOf9fjjj2vKlClBWXdNqqif/fv3l9vt1kUXXaTs7OwTbj81NVXfffedUlJS5PV6ZWYyM+3Zs0fp6en68ccflZqaqvT0dL/Xsf9XXkX74K/31+Pfn927d2vJkiXltv/ll1+qZ8+eSkxM1Ntvv62cnBx98MEH6tOnj9555x2/Zd944w1lZ2ersLBQu3btkvTLPlVQUKC8vDxlZWXp+uuvl+S/r0i/vL+FhYWl1lBcXKzHH39cknThhRdq06ZNOu+886q8v9YXod5HT0RdG1NRPcoa76vT8ePjDz/8oOuuu843/7zzzlO/fv10ww03aNeuXbrhhhtqtL7yag1kLAcA+IsIVkMul6vCZS677DLl5ORUqv2qvPZEHTp0SBdddJHfwVhNrr86fPHFF3rggQd04403Ki8vr9wD44cffljPP/+8vvjiC7nd7kqtr7RtWBMC7ef48eP13XffqV+/flq9erUiIqr+UUhISNBFF12k//u//9Oll16qjIwMDR061Def/b96BGN/feyxxxQfH685c+b4pp188smaNm2aUlNTfdNcLpfOOecceTwev9e7XC5FRkYqMjJSHo9HXbt2LbGOrl276tNPP9WKFSt05ZVXlpi/fPlytWrVStu2bSsxrzr2V6epzftoXRSqMRyhc/ToUY0ePVput1vz588P6LgOAFC7Be2a/cjIyGA1FfI/MAsXLlRWVlZIawi2M844Q8uXL9fw4cMVHR1d5nLffvut7r33Xt1///2VDk5S6LZhoP2UpKlTp2rdunV+AS8Y2rZtK0mV/haW/T9wwdpf9+3bp5ycHO3fv99velRUlN9p4UuXLi0R9EszZswY/eEPf/CbdtNNN0mSnnjiiVJfM2vWLE2cOLHMNqtrfwVKU5fGgbos1OP9MUePHtUf//hHeTweLViwoNbUBQComqCF/W+//VYdO3ZUbGysYmJidO655+r999/3zX///feVnJwsl8ulefPm+aabmR599FGdcsopio6Oltfr1R133OHXdmmvfeSRR+TxeNSwYUNlZWVp4sSJatWqlTZv3qzi4mLdd999Sk5OVkxMjE4//fQSp1QvXrxY3bp1k9vtVmxsrNq2batp06ZpwoQJmjhxorZu3SqXy6UOHTqUW/usWbPUqVMnRUdHKyEhQQMGDNCmTZt8yyxYsECxsbHyeDx6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HQCVT4sWLSr1ErBFixbhwIEDWLx4MZYsWVJp5ZSlMuq5a9cu5OTk4Pvvv4elpaVJ903KqC79tTKwv5q/yh7PzQXbiSrCzs4OLVq0QIMGDbB69Wq0atVK6ZCIiCod79knIjJzvGefiKh64HhJRFWI9+wTERERERERmRsm+0RERERERERmhsk+ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaY7BMRERERERGZGSb7RERERERERGaGyT4RERERERGRmWGyT0RERERERGRmmOwTERERERERmRmrkl4ICgqqyjiIyAhpaWlQqVRwcnJSOhQiHb5vmJ/09HSICJydnZUOhcgs3L59W+kQiKgWKZLsN2zYEMOGDVMiFiIy0PXr13Hr1i00bNgQrVq1goODg9IhUTU2bNgwNGzYsNL2z/cN85ORkYHLly/jt99+Q6NGjdCpUyelQyIyC97e3hwviajKqERElA6CiIwjIti+fTveeust3LhxAyNGjMCCBQvg5+endGhEVIPFx8dj0aJF2LhxI5o0aYI5c+Zg5MiRsLS0VDo0IiIiMk4U79knqoFUKhWCgoJw6dIl/Pvf/0Z0dDRatmyJCRMmICEhQenwiKiGuX37NqZOnYpmzZrhm2++werVq3HhwgWMHj2aiT4REVENxWSfqAazsLDQJf0rV67Evn370LRpU0ydOhV3795VOjwiqubu3buH2bNno1mzZvjPf/6D8PBwxMbGYvz48bCyKnFaHyIiIqoBeBk/kRnJzc3Fp59+irfffhsPHjzAq6++itmzZ8PFxUXp0IioGklJScGKFSsQEREBGxsbzJgxA1OnToVGo1E6NCIiIjKNKCb7RGYoMzMTq1atQnh4OFQqFaZMmYLp06dz9n6iWu7BgwdYvXo1lixZAktLS8yaNQtTpkyBnZ2d0qERERGRaTHZJzJnGRkZWLNmDd5//31YW1tj5syZ/PWOqBZ69AvAvLw8TJ48GXPmzOEj9YiIiMwXk32i2uDevXtYtmwZVqxYAXd3d8yYMQMTJ06EjY2N0qERUSXirT1ERES1FpN9otokMTERH374IZYvXw4vLy/MnTsXL7/8MmfbJjIzhUn+O++8g9TUVIwbNw5z586Fp6en0qERERFR1eCj94hqk7p162LJ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ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaY7BMRERERERGZGSb7RERERERERGaGyT4RERERERGRmWGyT0RERERERGRmmOwTERERERERmRkm+0RERERERERmhsk+ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaY7BMRERERERGZGSb7RERERERERGaGyT4RERERERGRmWGyT0RERERERGRmmOwTERERERERmRkm+0RERERERERmhsk+ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaslA6AiIhM68iRIzhx4oTesitXrgAAwsPD9ZZ3794dTz31VJXFRkRERERVQyUionQQRERkOgcPHsQzzzwDtVoNC4viL+AqKCiAVqvFgQMHMGDAgCqOkIiIiIgqWRSTfSIiM5Ofnw9PT08kJyeXup6rqysSExNhZcWLvIiIiIjMTBTv2SciMjOWlpYYOXIkrK2tS1zH2toaf/vb35joExEREZkpJvtERGZoxIgRyM3NLfH13NxcjBgxogojIiIiIqKqxMv4iYjMlK+vL+Lj44t9zdvbG/Hx8VCpVFUcFRERERFVAV7GT0RkrkaNGgW1Wl1kubW1Nf7+978z0SciIiIyY0z2iYjM1KhRo6DVaossz83NRUhIiAIREREREVFVYbJPRGSmWrZsiZYtWxZZ3qJFC7Rp00aBiIiIiIioqjDZJyIyY6NHj9a7lF+tVuPvf/+7ghERERERUVXgBH1ERGYsPj4ejRo1QuFQr1KpcPPmTTRq1EjZwIiIiIioMnGCPiIic+bj44POnTvDwsICKpUKXbp0YaJPREREVAsw2SciMnOjR4+GhYUFLC0t8be//U3pcIiIiIioCvAyfiIiM5eUlIR69eoBAH7//Xd4enoqHBERERERVbIoK6UjICIqj6CgIGzfvl3pMGocLy8vpUOoMYYNG4aoqKhK2Tf7LxGVhuMPERmruN/wmewTUY3VvXt3vP7660qHUSMcOXIEKpUKTz75pNKh1AgRERGVXgb7LxEVh+MPERkjOjoay5cvL/Y1JvtE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\n", + "image/png": "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Vy/NmDFD7du3V1pamg4dOhSEKqsuWP2sjIr2C5fLpbFjx+q7777TW2+9JUl67rnndN111/mWycvLkyTdc889vmv8XS6Xtm3bpvz8/JrrDAAAAIAyEfZrkZYtW0qS76ZslbV9+3YNHDhQiYmJWrt2rXJycjRz5sxglFhtCgsLlZ2draSkpKC0d+qpp+rll1/Wzp07NXnyZKWnp+uxxx4LSttVEex+VmT16tWaPXu2pMD3i5EjR8rtduvpp5/W5s2bFRcXpzZt2vjmN23aVJI0e/ZsmZnfz5o1a2qkXwAAAADKR9ivRdq2batGjRrpjTfeqFI7X375pQoLC3XTTTepffv2crvdtf5Rfe+8847MTD169PBNi4iIqPC0+NLs3LlTX3/9taRfgulDDz2ks846yzctlILZz0B8+umnio2NlRT4fpGQkKChQ4dqxYoVeuyxx3T99df7zW/durXcbrfWrVtXLTUDAAAAqDrCfi0SHR2tKVOmaPXq1Ro3bpx+/PFHHT16VAcPHjyhoJqcnCxJevPNN3X48GFt2bLF73FvtcHRo0d14MABFRUVaf369ZowYYKSk5M1cuRI3zIdOnTQ/v37tWLFChUWFmrPnj3atm1bibYaNWqknTt36vvvv9fBgwe1bds2jR07Vps2bVJBQYE+//xzbdu2zRewX3311Uo/eq829bO8fxAUFhbqp59+0jvvvOML+yeyX9x44406cuSIVq5cqcsvv9xvntvt1qhRo7R06VItWLBAubm5Ki4u1o4dO7Rr164T3UQAAAAAqkMIHwVQL+gEH71nZjZv3jzr0qWLud1uc7vdduaZZ9r8+fNt5syZFhMTY5LspJNOsq1bt9qSJUssISHBJFlSUpJ99dVXZmY2efJka9SokcXHx9uVV15p8+bNM0mWkpJit9xyi6+d1q1b2+LFi0+ovrlz51piYqJJMo/HY/3797f58+ebx+Pxq+2pp56yuLg4k2Rt2rSxb775xsx+eSRdZGSktWrVyiIiIiwuLs4GDBhgW7du9VvPvn37rHfv3uZ2u61du3Z266232h133GGSrEOHDr7H13322WfWpk0bi4mJsV69etnatWutZ8+elpCQYOHh4dayZUu7++67raioyMzMXnnlFWvYsKFNnz69zD5++OGHduqpp1pYWJhJssTERJsxY0at6ucTTzxhKSkpJqncnxde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ebr99tuVn59f7rJ//vOf9fjjj2vKlClBWXdNqqif/fv3l9vt1kUXXaTs7OwTbj81NVXfffedUlJS5PV6ZWYyM+3Zs0fp6en68ccflZqaqvT0dL/Xsf9XXkX74K/31+Pfn927d2vJkiXltv/ll1+qZ8+eSkxM1Ntvv62cnBx98MEH6tOnj9555x2/Zd944w1lZ2ersLBQu3btkvTLPlVQUKC8vDxlZWXp+uuvl+S/r0i/vL+FhYWl1lBcXKzHH39cknThhRdq06ZNOu+886q8v9YXod5HT0RdG1NRPcoa76vT8ePjDz/8oOuuu843/7zzzlO/fv10ww03aNeuXbrhhhtqtL7yag1kLAcA+IsIVkMul6vCZS677DLl5ORUqv2qvPZEHTp0SBdddJHfwVhNrr86fPHFF3rggQd04403Ki8vr9wD44cffljPP/+8vvjiC7nd7kqtr7RtWBMC7ef48eP13XffqV+/flq9erUiIqr+UUhISNBFF12k//u//9Oll16qjIwMDR061Def/b96BGN/feyxxxQfH685c+b4pp188smaNm2aUlNTfdNcLpfOOecceTwev9e7XC5FRkYqMjJSHo9HXbt2LbGOrl276tNPP9WKFSt05ZVXlpi/fPlytWrVStu2bSsxrzr2V6epzftoXRSqMRyhc/ToUY0ePVput1vz588P6LgOAFC7Be2a/cjIyGA1FfI/MAsXLlRWVlZIawi2M844Q8uXL9fw4cMVHR1d5nLffvut7r33Xt1///2VDk5S6LZhoP2UpKlTp2rdunV+AS8Y2rZtK0mV/haW/T9wwdpf9+3bp5ycHO3fv99velRUlN9p4UuXLi0R9EszZswY/eEPf/CbdtNNN0mSnnjiiVJfM2vWLE2cOLHMNqtrfwVKU5fGgbos1OP9MUePHtUf//hHeTweLViwoNbUBQComqCF/W+//VYdO3ZUbGysYmJidO655+r999/3zX///feVnJwsl8ulefPm+aabmR599FGdcsopio6Oltfr1R133OHXdmmvfeSRR+TxeNSwYUNlZWVp4sSJatWqlTZv3qzi4mLdd999Sk5OVkxMjE4//fQSp1QvXrxY3bp1k9vtVmxsrNq2batp06ZpwoQJmjhxorZu3SqXy6UOHTqUW/usWbPUqVMnRUdHKyEhQQMGDNCmTZt8yyxYsECxsbHyeDx6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HQCVT4sWLSr1ErBFixbhwIEDWLx4MZYsWVJp5ZSlMuq5a9cu5OTk4Pvvv4elpaVJ903KqC79tTKwv5q/yh7PzQXbiSrCzs4OLVq0QIMGDbB69Wq0atVK6ZCIiCod79knIjJzvGefiKh64HhJRFWI9+wTERERERERmRsm+0RERERERERmhsk+ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaY7BMRERERERGZGSb7RERERERERGaGyT4RERERERGRmWGyT0RERERERGRmmOwTERERERERmRmrkl4ICgqqyjiIyAhpaWlQqVRwcnJSOhQiHb5vmJ/09HSICJydnZUOhcgs3L59W+kQiKgWKZLsN2zYEMOGDVMiFiIy0PXr13Hr1i00bNgQrVq1goODg9IhUTU2bNgwNGzYsNL2z/cN85ORkYHLly/jt99+Q6NGjdCpUyelQyIyC97e3hwviajKqERElA6CiIwjIti+fTveeust3LhxAyNGjMCCBQvg5+endGhEVIPFx8dj0aJF2LhxI5o0aYI5c+Zg5MiRsLS0VDo0IiIiMk4U79knqoFUKhWCgoJw6dIl/Pvf/0Z0dDRatmyJCRMmICEhQenwiKiGuX37NqZOnYpmzZrhm2++werVq3HhwgWMHj2aiT4REVENxWSfqAazsLDQJf0rV67Evn370LRpU0ydOhV3795VOjwiqubu3buH2bNno1mzZvjPf/6D8PBwxMbGYvz48bCyKnFaHyIiIqoBeBk/kRnJzc3Fp59+irfffhsPHjzAq6++itmzZ8PFxUXp0IioGklJScGKFSsQEREBGxsbzJgxA1OnToVGo1E6NCIiIjKNKCb7RGYoMzMTq1atQnh4OFQqFaZMmYLp06dz9n6iWu7BgwdYvXo1lixZAktLS8yaNQtTpkyBnZ2d0qERERGRaTHZJzJnGRkZWLNmDd5//31YW1tj5syZ/PWOqBZ69AvAvLw8TJ48GXPmzOEj9YiIiMwXk32i2uDevXtYtmwZVqxYAXd3d8yYMQMTJ06EjY2N0qERUSXirT1ERES1FpN9otokMTERH374IZYvXw4vLy/MnTsXL7/8MmfbJjIzhUn+O++8g9TUVIwbNw5z586Fp6en0qERERFR1eCj94hqk7p162LJ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ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaY7BMRERERERGZGSb7RERERERERGaGyT4RERERERGRmWGyT0RERERERGRmmOwTERERERERmRkm+0RERERERERmhsk+ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaY7BMRERERERGZGSb7RERERERERGaGyT4RERERERGRmWGyT0RERERERGRmmOwTERERERERmRkm+0RERERERERmhsk+ERERERERkZlhsk9ERERERERkZpjsExEREREREZkZJvtEREREREREZobJPhEREREREZGZYbJPREREREREZGaslA6AiIhM68iRIzhx4oTesitXrgAAwsPD9ZZ3794dTz31VJXFRkRERERVQyUionQQRERkOgcPHsQzzzwDtVoNC4viL+AqKCiAVqvFgQMHMGDAgCqOkIiIiIgqWRSTfSIiM5Ofnw9PT08kJyeXup6rqysSExNhZcWLvIiIiIjMTBTv2SciMjOWlpYYOXIkrK2tS1zH2toaf/vb35joExEREZkpJvtERGZoxIgRyM3NLfH13NxcjBgxogojIiIiIqKqxMv4iYjMlK+vL+Lj44t9zdvbG/Hx8VCpVFUcFRERERFVAV7GT0RkrkaNGgW1Wl1kubW1Nf7+978z0SciIiIyY0z2iYjM1KhRo6DVaossz83NRUhIiAIREREREVFVYbJPRGSmWrZsiZYtWxZZ3qJFC7Rp00aBiIiIiIioqjDZJyIyY6NHj9a7lF+tVuPvf/+7ghERERERUVXgBH1ERGYsPj4ejRo1QuFQr1KpcPPmTTRq1EjZwIiIiIioMnGCPiIic+bj44POnTvDwsICKpUKXbp0YaJPREREVAsw2SciMnOjR4+GhYUFLC0t8be//U3pcIiIiIioCvAyfiIiM5eUlIR69eoBAH7//Xd4enoqHBERERERVbIoK6UjICIqj6CgIGzfvl3pMGocLy8vpUOoMYYNG4aoqKhK2Tf7LxGVhuMPERmruN/wmewTUY3VvXt3vP7660qHUSMcOXIEKpUKTz75pNKh1AgRERGVXgb7LxEVh+MPERkjOjoay5cvL/Y1JvtE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", "text/plain": [ "" ] }, + "execution_count": 95, "metadata": {}, - "execution_count": 95 + "output_type": "execute_result" } + ], + "source": [ + "# Plot the token, char, positional embedding model\n", + "from tensorflow.keras.utils import plot_model\n", + "plot_model(model_5)" ] }, { @@ -4646,21 +4628,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "Ud8arQOTUtRl", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "Ud8arQOTUtRl", "outputId": "ba427037-8be1-4a34-e3bf-fe8746497384" }, - "source": [ - "# Check which layers of our model are trainable or not\n", - "for layer in model_5.layers:\n", - " print(layer, layer.trainable)" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ " True\n", @@ -4678,9 +4656,13 @@ " True\n", " True\n", " True\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Check which layers of our model are trainable or not\n", + "for layer in model_5.layers:\n", + " print(layer, layer.trainable)" ] }, { @@ -4704,17 +4686,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "nwYd_dWPS8EB" }, + "outputs": [], "source": [ "# Compile token, char, positional embedding model\n", "model_5.compile(loss=tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.2), # add label smoothing (examples which are really confident get smoothed a little)\n", " optimizer=tf.keras.optimizers.Adam(),\n", " metrics=[\"accuracy\"])" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -4739,6 +4721,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -4746,6 +4729,19 @@ "id": "8FDNHSIRyEE2", "outputId": "64f4b15b-c34b-43cf-8591-2ffe8dd9d9f5" }, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Create training and validation datasets (all four kinds of inputs)\n", "train_pos_char_token_data = tf.data.Dataset.from_tensor_slices((train_line_numbers_one_hot, # line numbers\n", @@ -4767,24 +4763,11 @@ "\n", "# Check input shapes\n", "train_pos_char_token_dataset, val_pos_char_token_dataset" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "(,\n", - " )" - ] - }, - "metadata": {}, - "execution_count": 98 - } ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -4792,17 +4775,9 @@ "id": "LiAjolB7yLxw", "outputId": "05a27fed-63b9-4451-d854-57608b674527" }, - "source": [ - "# Fit the token, char and positional embedding model\n", - "history_model_5 = model_5.fit(train_pos_char_token_dataset,\n", - " steps_per_epoch=int(0.1 * len(train_pos_char_token_dataset)),\n", - " epochs=3,\n", - " validation_data=val_pos_char_token_dataset,\n", - " validation_steps=int(0.1 * len(val_pos_char_token_dataset)))" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/3\n", @@ -4811,9 +4786,16 @@ "562/562 [==============================] - 19s 34ms/step - loss: 0.9771 - accuracy: 0.8114 - val_loss: 0.9606 - val_accuracy: 0.8268\n", "Epoch 3/3\n", "562/562 [==============================] - 19s 34ms/step - loss: 0.9627 - accuracy: 0.8180 - val_loss: 0.9493 - val_accuracy: 0.8271\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Fit the token, char and positional embedding model\n", + "history_model_5 = model_5.fit(train_pos_char_token_dataset,\n", + " steps_per_epoch=int(0.1 * len(train_pos_char_token_dataset)),\n", + " epochs=3,\n", + " validation_data=val_pos_char_token_dataset,\n", + " validation_steps=int(0.1 * len(val_pos_char_token_dataset)))" ] }, { @@ -4827,29 +4809,23 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "V6AtA9ffcC8Y", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "V6AtA9ffcC8Y", "outputId": "0862fd0f-11d6-4e49-871d-5af372c1c7b7" }, - "source": [ - "# Make predictions with token-char-positional hybrid model\n", - "model_5_pred_probs = model_5.predict(val_pos_char_token_dataset, verbose=1)\n", - "model_5_pred_probs" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "945/945 [==============================] - 20s 20ms/step\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "array([[0.51536554, 0.10340027, 0.01223736, 0.34324795, 0.02574881],\n", @@ -4862,58 +4838,57 @@ " dtype=float32)" ] }, + "execution_count": 100, "metadata": {}, - "execution_count": 100 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions with token-char-positional hybrid model\n", + "model_5_pred_probs = model_5.predict(val_pos_char_token_dataset, verbose=1)\n", + "model_5_pred_probs" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "l7x2LKrFc6CN", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "l7x2LKrFc6CN", "outputId": "dc3d192d-d2a0-4581-8e68-2239366deadd" }, - "source": [ - "# Turn prediction probabilities into prediction classes\n", - "model_5_preds = tf.argmax(model_5_pred_probs, axis=1)\n", - "model_5_preds" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 101, "metadata": {}, - "execution_count": 101 + "output_type": "execute_result" } + ], + "source": [ + "# Turn prediction probabilities into prediction classes\n", + "model_5_preds = tf.argmax(model_5_pred_probs, axis=1)\n", + "model_5_preds" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "dogdVk02dO62", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "dogdVk02dO62", "outputId": "23379661-1890-4a75-972c-0d27de68b439" }, - "source": [ - "# Calculate results of token-char-positional hybrid model\n", - "model_5_results = calculate_results(y_true=val_labels_encoded,\n", - " y_pred=model_5_preds)\n", - "model_5_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 82.6128690586522,\n", @@ -4922,9 +4897,16 @@ " 'recall': 0.8261286905865219}" ] }, + "execution_count": 102, "metadata": {}, - "execution_count": 102 + "output_type": "execute_result" } + ], + "source": [ + "# Calculate results of token-char-positional hybrid model\n", + "model_5_results = calculate_results(y_true=val_labels_encoded,\n", + " y_pred=model_5_preds)\n", + "model_5_results" ] }, { @@ -4947,29 +4929,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "uJtoRSYGb2VP", "colab": { "base_uri": "https://localhost:8080/", "height": 234 }, + "id": "uJtoRSYGb2VP", "outputId": "0f8db6d0-bc57-4db6-cb81-02233b550c76" }, - "source": [ - "# Combine model results into a DataFrame\n", - "all_model_results = pd.DataFrame({\"baseline\": baseline_results,\n", - " \"custom_token_embed_conv1d\": model_1_results,\n", - " \"pretrained_token_embed\": model_2_results,\n", - " \"custom_char_embed_conv1d\": model_3_results,\n", - " \"hybrid_char_token_embed\": model_4_results,\n", - " \"tribrid_pos_char_token_embed\": model_5_results})\n", - "all_model_results = all_model_results.transpose()\n", - "all_model_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/html": [ "
\n", @@ -5053,51 +5023,63 @@ "tribrid_pos_char_token_embed 82.612869 0.824449 0.826129 0.825037" ] }, + "execution_count": 103, "metadata": {}, - "execution_count": 103 + "output_type": "execute_result" } + ], + "source": [ + "# Combine model results into a DataFrame\n", + "all_model_results = pd.DataFrame({\"baseline\": baseline_results,\n", + " \"custom_token_embed_conv1d\": model_1_results,\n", + " \"pretrained_token_embed\": model_2_results,\n", + " \"custom_char_embed_conv1d\": model_3_results,\n", + " \"hybrid_char_token_embed\": model_4_results,\n", + " \"tribrid_pos_char_token_embed\": model_5_results})\n", + "all_model_results = all_model_results.transpose()\n", + "all_model_results" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "9G--0tQkb5tq" }, + "outputs": [], "source": [ "# Reduce the accuracy to same scale as other metrics\n", "all_model_results[\"accuracy\"] = all_model_results[\"accuracy\"]/100" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "JHtN7qJ3cAA3", "colab": { "base_uri": "https://localhost:8080/", "height": 571 }, + "id": "JHtN7qJ3cAA3", "outputId": "f59b1872-129e-4b6b-ef66-4678fd6f0cf3" }, - "source": [ - "# Plot and compare all of the model results\n", - "all_model_results.plot(kind=\"bar\", figsize=(10, 7)).legend(bbox_to_anchor=(1.0, 1.0));" - ], - "execution_count": null, "outputs": [ { - "output_type": "display_data", "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqkAAAIqCAYAAAAHAtOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde5xVdb3/8fd7BhARxNuACCKgDMMgIDhSeUnzUnoM7yXqT63TiZNJdeyidjpHza5a1vlZ9gvvntLIzAskRWmK56QlAwrITVEJNS+oCCghDHx+f+w1th1nYM+w96w1e7+ej8c8Zq+1vuz9mcV+rP3e37XW9+uIEAAAAJAlVWkXAAAAALRESAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmdEvrhffYY48YMmRIWi8PAABQsLlz574aETVp11FJUgupQ4YMUWNjY1ovDwAAUDDbf027hkrD6X4AAABkDiEVAAAAmUNIBQAAQOakdk0qAABAVzZ37tx+3bp1u17S/qLjr722SHqiqanpXw488MBXWmtASAUAAOiAbt26Xb/nnnuOrKmpWV1VVRVp19OVbNmyxatWrap/6aWXrpd0QmttSP0AAAAds39NTc1aAmr7VVVVRU1NzRrleqFbb9OJ9QAAAJSTKgJqxyX7rs0sSkgFAABA5nBNKgAAQBEMufjeA4v5fCu+e/zcYj7f9ti0aZO6d+/eqa9JTyoAAEAXdvTRR+87atSokfvtt9+o73//+3tI0h133LFzfX39yBEjRtR/4AMfqJWkNWvWVJ122mlDamtr62tra+tvvvnmXSSpV69e45qf66abbtr11FNPHSJJp5566pAzzzxz8JgxY+rOO++8QQ888ECvAw44oG7kyJH148aNq5s/f/4OktTU1KTJkycPGj58+Kja2tr6b33rW/2mT5/e5+ijj963+XnvuuuunY855ph91Q70pAIAAHRht95664r+/ftvfvPNNz1u3Lj6008//Y0pU6YMefDBB5fW1dVtfPnll6sl6eKLLx6w8847b37yyScXS9KqVauqt/XcL774Yo958+Yt7datm15//fWqOXPmLO3evbvuvvvuPhdeeOGgWbNmPX3VVVfVrFy5ssfixYsXde/eXS+//HJ1TU3N5i984QuD//a3v3Xba6+9mm688cbdP/nJT77anr+LkAoAANCFXXHFFf3vvffeXSTppZde6n711VfXTJgwYV1dXd1GSerfv/9mSXrooYd2njZt2jPN/66mpmbztp77lFNOWd2tWy4uvv7669Wnn3760BUrVvS0HZs2bbIk/fGPf9z5M5/5zKrmywGaX+/jH//4a9ddd91u559//mvz5s3rfeeddz7bnr+LkAoAANBF/eY3v+kze/bsPo2NjUv79OmzZcKECSPGjRu3ftmyZT0LfQ7b7zz++9//7vxtvXv33tL8+KKLLhp4+OGHr/vDH/7w9LJly3oceeSRI7b2vOedd95rxx9//H49e/aMiRMnrm7vNa1ckwoAANBFvfHGG9V9+/bd3KdPny2PPfZYz/nz5++0YcOGqkcffbTP0qVLe0hS8+n+ww8/fO0Pf/jDfs3/tvl0/+67775p3rx5PTdv3qx77rln17Zea+3atdWDBg3aKElTp07do3n9UUcdtXbq1Kl7bNq0SfmvN2TIkE39+/ffdNVVVw2YPHlyu071S4RUAACALuvUU09d09TU5GHDho36yle+MnDs2LFv9evXr+nqq69ecfLJJ+83YsSI+pNPPnmYJH3nO9958Y033qgePnz4qBEjRtTPnDmzjyR9/etff+HEE0/cb/z48XX9+/ff1NZrXXTRRS9ddtllg0aOHFnf1NT0zvoLLrhg1aBBgzbW1dWNGjFiRP0NN9ywW/O2SZMmvTZgwICN48eP39Dev80R6YxB29DQEI2Njam8NgAAQHvYnhsRDfnr5s+fv2Ls2LHt7iGsJOecc87gcePGrb/gggta3U/z58/fY+zYsUNa28Y1qQAA4B1DLr63Xe1XfPf4drUffcvogtsuPHdhu54b2TJq1KiRO+6445apU6c+15F/T0gFAAAdd1nf9rUfOrjgpkvqRrbrqUcuXdK+WlBSixYt2q7/EK5JBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAwDseeuihXp/4xCf2bmv7ihUruh977LHDSl0Hd/cDAAAUw2V9Dyzu862ZW4ynaWpqUrduhUe+D37wg+s/+MEPrm9r+5AhQzb97ne/e6YYtW1NQT2pto+1vcz2ctsXt7J9sO0HbD9me4Htfyp+qQAAAMi3bNmyHkOHDh11wgknDB02bNioY489dti6deuqBg4cOPq8884bWF9fP/LGG2/c9c4779z5gAMOqKuvrx953HHHDVuzZk2VJM2ePbvXuHHj6kaMGFE/evTokatXr676zW9+0+dDH/rQfpJ077339q6rq6uvq6urHzlyZP3q1aurli1b1mP48OGjJGn9+vU+7bTThtTW1taPHDmyfsaMGX0k6eqrr979wx/+8L6HHXbY8H322Wf/z3zmM4Pa+7dtM6TarpZ0jaTjJNVLOsN2fYtm/yHp9ogYJ2mSpJ+0txAAAAC034oVK3pOmTLllWeeeWZRnz59tnzve9+rkaTdd9+9afHixUsmTpy47tvf/vaAhx566MnFixcvGT9+/PpvfOMb/Tds2OCzzjpr3//6r/9auWzZssWzZ89e1rt37y35z33VVVftefXVV/916dKli//85z8vbbn9iiuu6GdbTz755OLbbrvtmcmTJw9Zv369JWnx4sW97r777meWLFmyaPr06bsuX768e3v+rkJ6UidIWh4Rz0TERknTJJ3Yok1I2jl53FfS39pTBAAAADpmzz333PjhD3/4LUk6++yzX3v44Yd7S9I555yzWpIefPDBnZ5++umeEyZMqKurq6ufNm3a7itXruyxYMGCnv369dt0+OGHr5ek3XbbbUv37u/Oke9///vf/PKXv7z3N7/5zX6vvvpqdcvtDz/8cO+zzz77NUkaN27chr322mvjwoULe0rSoYceunb33Xff3KtXr9hvv/02PP300zu05+8q5AKFgZLyp7N6XtL7WrS5TNLvbX9O0k6Sjm7tiWxPljRZkgYPLnzGCQAAALTOdqvLffr02SJJEaFDDz107YwZM57Nb/foo4/uuK3n/va3v/3SSSedtOaee+7pe9hhh9Xde++9T/Xq1WvLtv6dJPXo0SOaH1dXV8emTZu8tfYtFevu/jMk3RwRgyT9k6Sf2X7Pc0fEtRHREBENNTU1RXppAACAyvXiiy/2uO+++3aSpFtvvXW3gw8++M387UccccRbjY2NvZ944okdJGnt2rVVCxYs2GHMmDEbXnnlle6zZ8/uJUmrV6+u2rRp07uee9GiRTtMmDDh79/61rdeGjNmzFtPPPFEz/zthxxyyJs///nPd5OkBQsW7PDiiy/2GDNmzIZi/F2FhNQXJOUPQzAoWZfvU5Jul6SIeERST0l7FKNAAAAAtG3IkCEbfvSjH/UbNmzYqDfeeKPbl7/85VX52/faa6+mqVOnrpg0adKw2tra+oaGhrqFCxf27NmzZ9x6661Pf/7znx88YsSI+iOOOKJ2/fr178qGV155Zb/hw4ePqq2tre/evXucdtppa/K3X3jhha9s2bLFtbW19aeffvq+U6dOXbHjjjuGisARW38e290kPSnpKOXC6RxJZ0bEorw2v5X0y4i42fZISfdLGhhbefKGhoZobGwswp8AAACKZcjF97ar/YqeZ7ar/eihhV/ud/t3mtr13COXLmlX+/awPTciGvLXzZ8/f8XYsWNfLdmLFmDZsmU9PvrRjw5/6qmnFm27dfbMnz9/j7Fjxw5pbds2e1IjoknSFEmzJC1R7i7+RbYvt31C0uxLkj5te76kX0j6xNYCKgAAALA1BY3sGhEzJc1sse6SvMeLJR1S3NIAAACwNSNGjNjYVXtRt4VpUQEAAJA5TIuKomj3NUzfPb5d7UffMrrgtgvPXdiu5wYAANlDSEXZWVI3sl3tS3mhPQAA6BhCKtJxWd/2tW/H3aAAAKDr45pUAAAAvOPqq6/e/ZxzzhksSV/84hf3uuSSS/qnUQc9qQAAAEUw+pbRBxbz+Raeu3Bue9pv2bJFEaHq6upilpEaelIBAAC6qGXLlvUYMmTI/ieffPKQ2traURdeeOGA/ffff2RtbW39BRdcsFdzux//+Me719bW1o8YMaL+pJNOGipJt912W98xY8bUjRw5sv7ggw+ufe655zLVeZmpYgAAANA+K1eu3OGGG254ds2aNa//6le/2nXBggVLIkJHH330fr/97W9719TUNH3/+98f8MgjjywdMGBA08svv1wtScccc8ybkyZNWlpVVaUf/OAHe1x++eV7Xnfddc+n/fc0I6QCAAB0YQMGDNh41FFHvTV58uRBDz300M719fX1krR+/fqqpUuX9pw3b17VxIkTVw8YMKBJkvr3779Zkp599tkeJ5100qBVq1Z137hxY9Xee+/9dpp/R0uc7gcAAOjCevXqtUWSIkL/9m//9uLSpUsXL126dPHKlSufuOCCC15t699NmTJl8Gc/+9lXnnzyycU//vGP//r2229nKhdmqhgAAAB0zHHHHbf2Zz/72R5r1qypkqRnn322+wsvvNDtIx/5yNoZM2bs+tJLL1VLUvPp/nXr1lUPHjx4kyTdfPPNu6dXees43Q8AAFAGTjnllLWLFi3qedBBB9VJuR7WW2+99dmGhoYNX/rSl1487LDD6qqqqmL//fdf/+tf/3rF1772tb+dccYZ+/bt27fp0EMPXbdy5cod0v4b8jkiUnnhhoaGaGxsTOW1UXztnha155ntaj+6HYP53/6dpnY9NzNOAcA/cDxvne25EdGQv27+/Pkrxo4d2+bpdGzb/Pnz9xg7duyQ1rZxuh8AAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAuqhvfvOb/YYNGzbqIx/5yL4HHHBAXY8ePcZfcskl/dOuqxgYzB8AAKAIltSNPLCYzzdy6ZK522pzww031Nx3331P9uzZM5YvX97jjjvu2LWYNaSJnlQAAIAu6Mwzzxz8/PPP73DccccNv/7663c7/PDD13fv3j2dWZpKgJ5UAEBmZWn2o4XnLmzXcwOldtttt62cPXt239mzZz85YMCA9k3P1QXQkwoAAIDMoScVAIACLKkb2a72pZxHHqgE9KQCAAAgc+hJBQAA6OJWrlzZ7aCDDqp/6623qm3H1KlT+y9ZsuSJ3XbbbUvatXUUIRUAAKAIChkyqtheeOGFd+7oe/nllxd09uuXEqf7AQAAkDll2ZPa7iFLvnt8u9qPvmV0wW0ZsgQAAKD9yjKktttlfdvXvh3j6gEAAKD9ON0PAADQMVu2bNnitIvoqpJ91+aNXfSkAl0UM/EAQOqeWLVqVX1NTc2aqqqqspmOtDNs2bLFq1at6ivpibbaEFIBbDcGOQdQiZqamv7lpZdeuv6ll17aX5ydbq8tkp5oamr6l7YaEFIBAAA64MADD3xF0glp11GuCkr9to+1vcz2ctsXt7L9h7YfT36etP1G8UsFAABApdhmT6rtaknXSDpG0vOS5tieHhGLm9tExAV57T8naVwJagUAAECFKKQndYKk5RHxTERslDRN0olbaX+GpF8UozgAAABUpkJC6kBJz+UtP5+sew/b+0gaKumPbWyfbLvRduOqVavaWysAAAAqRLFvnJok6Y6I2Nzaxoi4VtK1ktTQ0FARQzVw1zMAAED7FdKT+oKkvfOWByXrWjNJnOoHAADAdiokpM6RNNz2UNs9lAui01s2sl0naVdJjxS3RAAAAFSabYbUiGiSNEXSLElLJN0eEYtsX247f2ywSZKmRURFnMYHAABA6RR0TWpEzJQ0s8W6S1osX1a8sgAAAFDJmMILAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkTre0CwCArmLIxfe2q/2K7x7frvajbxldcNuF5y5s13MDQFdDTyoAAAAyh55UACiVy/q2r/3QwaWpAwC6IHpSAQAAkDn0pAJAF7SkbmS72o9cuqRElQBAadCTCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCgqpto+1vcz2ctsXt9Hm47YX215k+7bilgkAAIBK0m1bDWxXS7pG0jGSnpc0x/b0iFic12a4pK9KOiQiVtvuV6qCAQAAUP4K6UmdIGl5RDwTERslTZN0Yos2n5Z0TUSslqSIeKW4ZQIAAKCSFBJSB0p6Lm/5+WRdvlpJtbb/ZPvPto9t7YlsT7bdaLtx1apVHasYAAAAZa9YN051kzRc0hGSzpB0ne1dWjaKiGsjoiEiGmpqaor00gAAACg3hYTUFyTtnbc8KFmX73lJ0yNiU0Q8K+lJ5UIrAAAA0G6FhNQ5kobbHmq7h6RJkqa3aHO3cr2osr2Hcqf/nylinQAAAKgg2wypEdEkaYqkWZKWSLo9IhbZvtz2CUmzWZJes71Y0gOSvhIRr5WqaAAAAJS3bQ5BJUkRMVPSzBbrLsl7HJK+mPwAAAAA24UZpwAAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5hFQAAABkTkEh1faxtpfZXm774la2f8L2KtuPJz//UvxSAQAAUCm6bauB7WpJ10g6RtLzkubYnh4Ri1s0/WVETClBjQAAAKgwhfSkTpC0PCKeiYiNkqZJOrG0ZQEAAKCSFRJSB0p6Lm/5+WRdS6faXmD7Dtt7F6U6AAAAVKRi3Tg1Q9KQiBgj6Q+Sbmmtke3JthttN65atapILw0AAIByU0hIfUFSfs/ooGTdOyLitYh4O1m8XtKBrT1RRFwbEQ0R0VBTU9ORegEAAFABCgmpcyQNtz3Udg9JkyRNz29ge0De4gmSlhSvRAAAAFSabd7dHxFNtqdImiWpWtKNEbHI9uWSGiNiuqTP2z5BUpOk1yV9ooQ1AwAAoMxtM6RKUkTMlDSzxbpL8h5/VdJXi1saAAAAKhUzTgEAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADIHEIqAAAAMqegkGr7WNvLbC+3ffFW2p1qO2w3FK9EAAAAVJpthlTb1ZKukXScpHpJZ9iub6VdH0lfkPSXYhcJAACAylJIT+oEScsj4pmI2ChpmqQTW2n3DUlXSNpQxPoAAABQgQoJqQMlPZe3/Hyy7h22x0vaOyLuLWJtAAAAqFDbfeOU7SpJP5D0pQLaTrbdaLtx1apV2/vSAAAAKFOFhNQXJO2dtzwoWdesj6T9JT1oe4Wk90ua3trNUxFxbUQ0RERDTU1Nx6sGAABAWSskpM6RNNz2UNs9JE2SNL15Y0SsiYg9ImJIRAyR9GdJJ0REY0kqBgAAQNnbZkiNiCZJUyTNkrRE0u0Rscj25bZPKHWBAAAAqDzdCmkUETMlzWyx7pI22h6x/WUBAACgkjHjFAAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAADKHkAoAAIDMIaQCAAAgcwoKqbaPtb3M9nLbF7ey/TO2F9p+3Pb/2q4vfqkAAACoFNsMqbarJV0j6ThJ9ZLOaCWE3hYRoyPiAElXSvpB0SsFAABAxSikJ3WCpOUR8UxEbJQ0TdKJ+Q0iYm3e4k6SonglAgAAoNJ0K6DNQEnP5S0/L+l9LRvZPl/SFyX1kHRkUaoDAABARSrajVMRcU1E7CvpIkn/0Vob25NtN9puXLVqVbFeGgAAAGWmkJD6gqS985YHJevaMk3SSa1tiIhrI6IhIhpqamoKrxIAAAAVpZCQOkfScNtDbfeQNEnS9PwGtofnLR4v6anilQgAAIBKs81rUiOiyfYUSbMkVUu6MSIW2b5cUmNETJc0xfbRkjZJWi3p3FIWDQAAgPJWyI1TioiZkma2WHdJ3uMvFLkuAAAAVDBmnAIAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmEFIBAACQOYRUAAAAZE5BIdX2sbaX2V5u++JWtn/R9mLbC2zfb3uf4pcKAACASrHNkGq7WtI1ko6TVC/pDNv1LZo9JqkhIsZIukPSlcUuFAAAAJWjkJ7UCZKWR8QzEbFR0jRJJ+Y3iIgHImJ9svhnSYOKWyYAAAAqSSEhdaCk5/KWn0/WteVTkn67PUUBAACgsnUr5pPZ/j+SGiQd3sb2yZImS9LgwYOL+dIAAAAoI4X0pL4gae+85UHJunexfbSkr0k6ISLebu2JIuLaiGiIiIaampqO1AsAAIAKUEhInSNpuO2htntImiRpen4D2+MkTVUuoL5S/DIBAABQSbYZUiOiSdIUSbMkLZF0e0Qssn257ROSZt+T1FvSr2w/bnt6G08HAAAAbFNB16RGxExJM1usuyTv8dFFrgsAAAAVjBmnAAAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZQ0gFAABA5hBSAQAAkDmEVAAAAGQOIRUAAACZU1BItX2s7WW2l9u+uJXtH7Q9z3aT7dOKXyYAAAAqyTZDqu1qSddIOk5SvaQzbNe3aLZS0ick3VbsAgEAAFB5uhXQZoKk5RHxjCTZnibpREmLmxtExIpk25YS1AgAAIAKU8jp/oGSnstbfj5ZBwAAAJREp944ZXuy7UbbjatWrerMlwYAAEAXUkhIfUHS3nnLg5J17RYR10ZEQ0Q01NTUdOQpAAAAUAEKCalzJA23PdR2D0mTJE0vbVkAAACoZNsMqRHRJGmKpFmSlki6PSIW2b7c9gmSZPsg289L+pikqbYXlbJoAAAAlLdC7u5XRMyUNLPFukvyHs9R7jIAAAAAYLsx4xQAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMIqQAAAMgcQioAAAAyh5AKAACAzCGkAgAAIHMKCqm2j7W9zPZy2xe3sn0H279Mtv/F9pBiFwoAAIDKsc2Qarta0jWSjpNUL+kM2/Utmn1K0uqI2E/SDyVdUexCAQAAUDkK6UmdIGl5RDwTERslTZN0Yos2J0q6JXl8h6SjbLt4ZQIAAKCSdCugzUBJz+UtPy/pfW21iYgm22sk7S7p1fxGtidLmpwsvml7WUeKLrb2p+kn9lCLv60tLbuct11MZWR79nnnY593PvZ552Ofd74K2uf7lPLJ8V6FhNSiiYhrJV3bma9ZCrYbI6Ih7ToqCfu887HPOx/7vPOxzzsf+xyFKuR0/wuS9s5bHpSsa7WN7W6S+kp6rRgFAgAAoPIUElLnSBpue6jtHpImSZreos10Secmj0+T9MeIiOKVCQAAgEqyzdP9yTWmUyTNklQt6caIWGT7ckmNETFd0g2SfmZ7uaTXlQuy5azLX7LQBYnJDl8AACAASURBVLHPOx/7vPOxzzsf+7zzsc9RENPhCQAAgKxhxikAAABkDiEVAAAAmUNIBQAAQOYQUgEAAJA5nTqYf1dm+1BJwyPiJts1knpHxLNp11WObH9xa9sj4gedVUulYJ93PtsLJbV552pEjOnEciqC7VO2tj0i7uysWioBxxVsL0JqAWxfKqlB0ghJN0nqLunnkg5Js64y1if5PULSQfrHuLwTJT2aSkXlj33e+T6a/D4/+f2z5PdZKdRSKSYmv/tJOljSH5PlD0l6WBIhtbg4rmC7MARVAWw/LmmcpHkRMS5Zt4CejtKy/ZCk4yNiXbLcR9K9EfHBdCsrX+zzzmf7sebjSt66eRExPq2ayp3t30s6NyJeTJYHSLo5Ij6SbmXlieMKOoprUguzMZlBKyTJ9k4p11Mp+kvamLe8MVmH0mGfdz7bPiRv4WBxbC61vZsDauJlSYPTKqYCcFxBh3C6vzC3254qaRfbn5b0z5KuS7mmSvDfkh61fVeyfJKkm9MrpyK0ts9vSbGeSvApSTfa7pssv6HcMQalc7/tWZJ+kSyfLum+FOspdxxX0CGc7i+Q7WMkfViSJc2KiD+kXFJFsD1e0mHJ4kMR8Via9VQC9nk6mkNqRKxJu5ZKYPtkSc2nmx+KiLu21h7bh+MKOoKQii7Fdu+IeDPtOsoZI1mkz/YnI+KmtOsoZ7b3Ue59fp/tXpKqm6+ZRPFxXEFHcN1TAWyfYvsp22tsr7W9zvbatOuqUIvTLqCcJSNZXCTpq8mq5pEs0Lm+nnYB5Sy5bOsOSVOTVQMl3Z1eReWN4wo6imtSC3OlpIkRsSTtQirBVsbWs6TenVlLBTpZyUgWkhQRf0vuxEWR2V7Q1iZxU0mpnS9pgqS/SFJEPGW7X7ollTWOK+gQQmphXiagdqpvS/qepKZWttH7X1obIyJsM5JF6fWX9BFJq1ust3JjdqJ03o6IjbYlSba7aSsTK2C7cVxBhxBSC9No+5fKnQ56u3kls5OUzDxJd0fE3JYbbP9LCvVUEkay6Dy/Ue66vMdbbrD9YOeXU1Fm2/53STsmN8V+VtKMlGsqZxxX0CHcOFUA263dwBARwTAxJWB7hKTXIuLVVrb1j4iXUyirYuSNZCFJv2ckC5Qb21XKDf31zogtkq4PPhBLhuMKOoKQisyyPT4i5qVdR6Wxvady1+uFpDkR8VLKJZU121dLmhYRnOLvRLZ7SKpT7n2+LCI2buOfYDtwXEFHEFK3wvaFEXGl7R+pleuVIuLzKZRVMWw/IGlP5e7C/WVEPJFySWUvuZziEuXmNLekwyVdHhE3plpYGbN9rnKDyY+QdJdygbUx3arKm+3jJf1U0tPKvc+HSvrXiPhtqoWVKY4r6ChC6lbYnhgRM5IPkfeICGbMKLHk2/fHlfsQ31m5sPrNdKsqX7aXSTo4Il5LlneX9HBEjEi3svJnezdJp0qaJGlwRAxPuaSyZXuppI9GxPJkeV/l5pKvS7ey8sRxBR3FjVNbEREzkt+E0ZQkp4SuTnpVL1Tu2zghtXRek5Q/oPm6ZB1Kbz/lTj/vI4nRREprXXNATTyjd7/vUVwcV9AhhNStsD1DWxmWJCJO6MRyKo7tkcr1oJ6q3AHtl5K+lGpRZSpvbNrlkv5i+x7l3vsnSmprPE8Uge0rlRtH8mnl3uPfiIg30q2qPNk+JXnYaHumpNuVe59/TNKc1AorUxxXsL0IqVv3/bQLqHA3Spom6SMR8be0iylzzQNrP538NLsnhVoqzdOSPtDaaBYouol5j19W7tpISVolacfOL6fscVzBduGa1ALZ3lG568SWpV0LgPJie6Byp/nf6TiIiIfSqwgA0kdPagFsT1SuV7WHpKG2D1DuzkRO95eQ7UMkXaZ/fHhbufFph6VZVzmz3SDpa3pvYBqTWlFlzvZ3lbtZarGkzcnqkERILRHbQyV9TtIQvft9zjG9BDiuoKPoSS2A7bmSjpT0YESMS9YtjIjR6VZW3pI7cC+QNFf/+PBW8x2iKL7kLtyvSFooaUvz+oj4a2pFlblkn4+JiLe32RhFYXu+pBv03vf57NSKKmMcV9BR9KQWZlNErGme5zlBui+9NYxb2OlWRcT0tIuoMM9I6q68KZdRchsi4uq0i6ggHFfQIYTUwiyyfaakatvDJX1eErPDlN4Dtr8n6U7lfYAzC1VJXWr7ekn36937/M70Sip76yU9brvlPmeykNL5v7YvlfR7cWzpDBxX0CGE1MJ8Trnrad6W9Avl5nn+RqoVVYb3Jb8b8taFcpdeoDQ+qdxYnd31j9NyodwXBZTG9OQHnWe0pLOVO5bkv885tpQGxxV0CNektpPtakk7RcTatGsBis32MmaB6XzJPPK1yeKyiNiUZj3lzvZySfURsTHtWioBxxV0VFXaBXQFtm+zvbPtnZS78Hux7a+kXVe5s93X9g9sNyY/V9num3ZdZe5h2/VpF1FJbB8h6SlJ10j6iaQnbX8w1aLK3xOSdkm7iArCcQUdQk9qAWw/HhEH2D5L0nhJF0uay/AZpWX718p9mDRPS3u2pLERcUrb/wrbw/YSSftKela5y1uah/3ivV4iyeghZzaPwWy7VtIvIuLAdCsrX7YflDRGuVmm8q+RZAiqEuC4go7imtTCdLfdXdJJkn4cEZtsk+5Lb9+IODVv+eu2H0+tmspwbNoFVKDu+ZOERMSTyfEGpXNp2gVUGI4r6BBO9xdmqqQVknaS9JDtfSRxTWrp/d32oc0LyeD+f0+xnrKXjFu4t6Qjk8frxXGi1BptX2/7iOTnOkmNaRdVzpLxUFco9wVhtnI9qtzZXyIcV9BRnO7vINvdIqIp7TrKWTKz1y2Smq9DXS3pExExP72qylsyLE+DpBERUWt7L0m/iohDUi6tbNneQdL5kpq/kP2PpJ8wuH/p2P60pMmSdouIfZOhBX8aEUelXFpZ4riCjiKkFsj28ZJGSerZvC4iLk+vosphe2dJYkSF0ksupxgnaV7e7GoLuHasdJIbMjdExOZkuVrSDhGxPt3KylfyPp8g6S/MIlh6HFfQUXS3F8D2TyWdrtx4qZb0MeXmIEYJ2f627V0iYm1ErLW9q+1vpl1XmdsYuW+uIb0ToFBa90vaMW95R0n3pVRLpXg7f/gp293ELIKlxHEFHUJILczBEXGOpNUR8XVJH9A/xjRE6RwXEW80L0TEakn/lGI9leB221Ml7ZKcEr1P0nUp11TuekbEm80LyeNeKdZTCWbb/ndJO9o+RtKvJM1IuaZyxnEFHcLd/YVpvllnfXItzWuSBqRYT6Wotr1D87V5tneUtEPKNZW1iPh+8qG9VtIISZdExB9SLqvcvWV7fPOUnLYPFDcIltrFkj6l3LjX/ypppqTrU62ojHFcQUdxTWoBbP+npB8pN2XeNcnq6yPiP9OrqvzZvkjSREk3Jas+KWl6RFyZXlWVzfYjEfGBtOsoJ7YPkjRN0t+Uu5xoT0mnR8TcVAurYLZ/3WL4O5QQxxW0hZBagKQH7zxJhyl3Tc3/SPp/EbEh1cIqgO1jJR2dLP4hImalWU+ls/1Y840PKJ5kXNTmaSPfNS2q7WPodepcvM87F/sbbSGkFsD27ZLWSfp5supMSX0j4uPpVQW+fXc+2/MiYnzadVQS9nnnY593LvY32sI1qYXZPyLy5x1+wPbi1KpBs57bbgJ0eU67AABIA3f3F2ae7fc3L9h+n5gRJgs4DdD5CEydj/d55+N93rnY32gVPalbYXuhch8Q3SU9bHtlsryPpKVp1gak5Oy0CwA6wUVpF1BhOK6gVYTUrfto2gVgq/j2XWS2T5F0haR+yu1fS4qIaJ7164kUy6tUK9IuoNzYPkTSZcp1OHTTP97nw5R78Pv0qis/HFfQUdw4hS7L9v4c3IrL9nJJEyNiSdq1lLvkg7tNEXFnZ9VSaWwvlXSBpLmSNjevj4jXUiuqjHFcQUfRk4rMsb1OW7kOj2/fJfUyHySdZmLyu5+kgyX9MVn+kKSHJRFSS2dNRPw27SIqCMcVdAghFZkTEX0kyfY3JL0o6WfKnR46S8z0VWqNtn8p6W5JbzevpFev+CLik5Jk+/eS6iPixWR5gKSbUyytEjxg+3vKfRHIf5/PS6+kssZxBR3C6X5klu35ETF2W+tQPLZvamV1RMQ/d3oxFcL2kogYmbdcJWlR/joUl+0HWlkdEXFkpxdTATiuoKPoSUWWvWX7LOWmjAxJZ0h6K92Syltz7x461f22Z0n6RbJ8uqT7Uqyn7EXEh9KuoZJwXEFHMU4qsuxMSR+X9HLy87FkHUrEdq3t+20/kSyPsf0faddVziJiiqSfShqb/FwbEZ9Lt6ryZru/7Rts/zZZrrf9qbTrKlccV9BRnO4H8A7bsyV9RdLU5rm0bT8REfunW1l5s72PpOERcZ/tXpKqI2Jd2nWVqySc3iTpaxEx1nY3SY9FxOiUSytLHFfQUfSkIrP49p2KXhHxaIt1TalUUiFsf1rSHZKmJqsGKneDCUpnj4i4XdIWSYqIJuUNRYWi47iCDiGkIsuuk/RVSZskKSIWSJqUakXl71Xb+yoZAsz2acqNsIDSOV/SIZLWSlJEPKXcsFQonbds765/vM/fL2lNuiWVNY4r6BBunEKW9YqIR+13TSzFt+/SOl/StZLqbL8g6Vnlhv5C6bwdERub3+fJqWeuwyqtL0qaLmlf23+SVCPptHRLKmscV9AhhFRkGd++O9+uEXG07Z0kVUXEOtsflfTXtAsrY7Nt/7ukHW0fI+mzkmakXFO5Wy3pcEkjlBuDeZmkA1KtqLxxXEGHcOMUMsv2MOW+fR+s3IfKs5LOiggObCVie56kc5pn87I9SdIFEfG+dCsrX8m4qJ+S9GHlAtMsSdcHB+eSsT1X0gkR8UKy/EFJ13DjVGlwXEFHEVKRefnfvtOupdwlXwzuUG6or8MknSPpoxHB9XolZLuHpDrlzhosi4iNKZdU1mwfJOknyk1NO17Sd5R7nz+XamFliuMKOoqQisxKbmy4VNKhyn14/6+kyyPitVQLK3O2a5W7u3ylpJMj4u8pl1TWbB+v3DipTyvXkzpU0r8yt3xp2f6AciMqbJB0fESsSrmkssZxBR1BSEVm2f6DpIck/TxZdZakIyLi6PSqKk+2F+rdN+v0U+5u57clKSLGpFFXJbC9VLlepeXJ8r6S7o2IunQrKz+2Z+jd7/N65a5zXy1JEXFCGnWVK44r2F6EVGRWa4M9217IdWPFlwwm3yauAy4d23Mi4qC8ZUt6NH8disP24VvbHhGzO6uWSsBxBduLu/uRZb9PLrC/PVk+TbmbSlBk+R8Wtscqd92YJP1PRMxPp6ryZvuU5GGj7ZnKvc9Duel/56RWWBnLD6G2+0tq/iLwaES8kk5V5YvjCrYXPanIHNvrlPuwtqSdlMwKo9zkE29GxM5p1VbubH9B0qcl3ZmsOlm5ueR/lF5V5cn2TVvbHhGf7KxaKo3tj0v6nqQHlTvOHCbpKxFxR5p1lSuOK+goQiqAd9heIOkDEfFWsryTpEe4dgzlxPZ8Scc0957arpF0X0SMTbey8sRxBR3F6X5kmu0xkoYo770aEXe2+Q+wvax3z2G+OVmHErE9VNLn9N73OTfxlE5Vi9P7r4lpwkuJ4wo6hJCKzLJ9o6QxkhbpH6f8Q/84ZYTiu0nSX2zflSyfJOnGFOupBHdLukG5Waa2bKMtiuN3tmdJ+kWyfLokhvwqHY4r6BBO9yOzbC+OiPq066g0tscrNzatlLvB4bE06yl3tv/CzDudL7lxLf99ftfW2mP7cFxBRxBSkVm2b5B0VUQsTruWSmH7ZxFx9rbWoXhsnylpuKTfKxk/UpIiYl5qRZU521dExEXbWofi4LiCjuJ0P7LsvyU9Yvsl5T68LSm42L6kRuUv2K6WdGBKtVSK0ZLOlnSk3n1Zy5GpVVT+jpHUMpAe18o6FAfHFXQIIRVZdoNyH94LxbV6JWX7q5L+XdKOttc2r5a0UdK1qRVWGT4maVhEbEy7kHJn+zxJn5U0LLnjvFkfSX9Kp6ryxXEF24vT/cgs249ExAfSrqOS2P5ORHx1K9tHRcSizqyp3Nm+W9JkBpMvPdt9Je0q6TuSLs7btC4iXs9rt2tErO7s+soVxxV0FCEVmWX7J5J2Ue6u5/xr9bi7PyW250XE+LTrKCe2H1RuFIs5evf7nCGoUsL7vHOxv9EWTvcjy3ZU7kP7w3nrGIIqXYxtWHyXpl0A3oP3eedif6NVhFRkFtNCZhKnXoosImbb3kfS8Ii4z3YvSdVp11XheJ93LvY3WsUMG8gs27W277f9RLI8xvZ/pF0XUEy2Py3pDklTk1UDlRvgHwAqGiEVWXadpK9K2iRJEbFA0qRUKwJ3oBff+ZIOkbRWkiLiKUn9Uq0InH4uEufsvY1mHFfQKk73I8t6RcSj9rs+L5rSKqacJbPBtKl5YPmIeH/nVFRR3o6Ijc3vc9vdxOnPkknG6FwUEXVbaXZUZ9VT7iIibM9UbjzgttpwXEGrCKnIsldt76vkA9v2aZJeTLeksnVV8runpAZJ85XrTRojqVESQ4GVzmzbzWNJHqPcOJ4zUq6pbEXEZtvLbA+OiJVttHm9tfXosHm2D4qIOWkXgq6FIaiQWbaHKTfg88GSVkt6VtJZEfHXVAsrY7bvlHRpRCxMlveXdFlEnJZuZeXLdpWkTyk3ioUlzZJ0fXBwLhnbD0kaJ+lRSW81r2fYr9KwvVTSfpL+qtz+ZvZAFISQisyzvZOkqohY12L9uRFxS0pllSXbiyKi5RSG71mHzmP71xFxatp1lBPbh7e2PiJmd3YtlSAZveI96HDAthBS0WUxAHTx2f6Fcj0dP09WnSWpd0SckV5Vlc32YxExLu06gO1lu59ylxRJktq63AJoxt396Mq4A7f4PilpkaQvJD+Lk3VIDz0JRWb7/bbn2H7T9kbbm/PmlkeR2T7B9lPKXbI1W9IKSb9NtSh0Cdw4ha6MD+8ii4gNtn8qaWZELEu7HqBEfqzccHa/Uu5GwXMk1aZaUXn7hqT3S7ovIsbZ/pCk/5NyTegC6ElFV0ZPapHZPkHS45J+lywfYHt6ulVVPN7nJRARyyVVR8TmiLhJ0rFp11TGNkXEa5KqbFdFxAPKfTkAtoqeVHRlf0q7gDJ0qaQJkh6UpIh43PbQVCsqY8mYnf8dEWdtpdlFnVVPBVlvu4ekx21fqdzQdnTalM4btntLekjSrbZfUd6oCkBbuHEKmWV7B0mnShqivC9UEXF5WjWVO9t/joj359+sY3sBQ8WUju3/lXRkRDDrTidJ7jZ/WVIPSRdI6ivpJ0nvKoosGaFlg3JnBc5Sbn/fmvSuAm2iJxVZdo+kNZLmSno75VoqxSLbZ0qqtj1c0uclPZxyTeXuGUl/Si6ryB+z8wfplVTe8oY+2iDp62nWUgkiIr/XlGEDUTBCKrJsUERwnVjn+pykryn3peAXyg0s/41UKyp/Tyc/VZL6pFxLRbB9iKTLJO2jd5+lGZZWTeXM9imSrpDUT7ne1ObB/HdOtTBkHqf7kVm2r5X0o+bZjwCgGJIZkC5Q7izN5ub1nH4uDdvLJU2MiCVp14KuhZ5UZNmhkj5h+1nlevaYSq/EbNdK+rLeex3wkWnVVO5s10i6UNIovXugc/Z56ayJCMbp7DwvE1DREfSkIrOYSq/z2Z4v6ad6bw/T3NSKKnO2fy/pl8p9OfiMpHMlrYoI7uovMtvNM9R9XFK1pDuVd717RMxLo65ylZzml6TDJe0p6W69e3/fmUZd6DoIqcg024dKGh4RNyU9Tr0j4tm06ypXtudGxIFp11FJmvd5/igKtudExEFp11ZubD+wlc1B73Vx2b5pK5sjIv6504pBl8TpfmSW7UuVG/B5hKSbJHVXbk75Q9Ksq8zNsP1ZSXfp3T0er6dXUtnblPx+0fbxkv4mabcU6ylbEfGhtGuoJBHBlMrYLgxejCw7WdIJSobliYi/ibufS+1cSV9RbtipuclPY6oVlb9v2u4r6UvKnfK/XrmbelAitr9te5e85V1tfzPNmsqZ7Vta2d83plkTugZO9yOzbD8aERNsz4uI8cmA0I9w4xSA7ZE/WUXeunkRMb6tf4OOa2N/v2cd0BKn+5Flt9ueKmkX25+W9M/K9TKhyGwfGRF/zLvR4V24waF0kmutP633jqjA9XqlU217h4h4W5Js7yhph5RrKmdVtneNiNWSZHs3kT9QAN4kyLKrJB0taa1y16Veotzczyi+wyX9UdLEVraFcndBozTukfQ/ku5T3ogKKKlbJd2fd2PPJ8VMSKV0laRHbP8qWf6YpG+lWA+6CE73I7Ns35jfm2S7t6R7IuKoFMsCisr24xFxQNp1VBrbxyr3JViS/hARs9Ksp9zZrpfUPHrCHyNicd62d3pZgXyEVGSW7W9I2j0iPmt7V0n3SrouIrY2rAm2U3KHecuB5S9Pr6Lyltyw83BEzEy7FuTYfiQiPpB2HZWC64HRFkIqMs32lZJ2lnSgpO9GxK9TLqms2f6ppF6SPqTc9b+nSXo0Ij6VamFlyPY65S6lsKSdlBvya5OY1zx13NTTudjfaAshFZnT4uYdS/pPSY9K+p3ETTyl1DygfN7v3pJ+GxGHpV0b0Fno2etc7G+0hRunkEUtb955TLmB/CeKm3hKbUPye73tvSS9JmlAivWUPdsnK3eN3ppkeRdJR0TE3elWBgDpIqQic5ilJFUzkpD0PUnzlPtScF26JZW9SyPiruaFiHgjmW2NkJoep11AhWF/o1XMOIXMsj3I9l22X0l+fm17UNp1lSvbVZLuj4g3kmt/95FUFxGXpFxauWvtOEwHQrrOTruAcmJ7X9s7JI+PsP35/BmoJDFiC1pFSEWW3SRpuqS9kp8ZyTqUQERskXRN3vLbzaegUVKNtn+QfJDva/sHyk1HiyKzvc722rZ+mttFxBNp1lmGfi1ps+39JF0raW9JtzVvjIjX0yoM2UZIRZbVRMRNEdGU/NwsqSbtosrc/bZPtc3pt87zOUkbJf1S0jTlrgs+P9WKylRE9ElGTfi/ki6WNFDSIEkXSfqvNGsrc1sioknSyZL+f3v3HitXVUdx/LtubQOW1tRoYqIWARVEbeVh2loExPiKDxQDyEOgJaJCEF+IRSPGRAtiNbUohgAVEQFJfBs0EY1CQbAWoQrUgAUSo1EEQi0IFpZ/nDN0KLctxJnZ55xZn4TQs29JVobJ3N/Zs3+/s8L2qeSsezwF6e6PxpJ0FdXO6aX10hHAogzzH556LNJ0YBNVsZRxSIVJWmH75NI5ukTSTbbnbm8tBkPS9VQ3AZ8C3m57vaQ/2n5F4WjRcNlJjSZbDBwG/B34G9XMzuNKBuq6eqdpwvY02zP7dp6inIWlA3TQRklHSZoiaULSUcDG0qE6bBGwAPh8XaDuAlxcOFO0QHZSo7EkLbS9antrMTiSrtpyp3qytRidzJAcPEkvovrKfyHVBItVwIdt31kuVbdJmga8tL5cZ/u/JfNEO6SDNJpsBbDlL+fJ1uL/JGkHqidNPad+BG3vTOpMqnN7EZ1RF6MHl84xLiQdCFwE3En12fJCScfa/k3JXNF8KVKjcSQtAF4DPFfSR/t+NBOYUiZV570f+DDVFIU1fesPAOcUSRQ9aWIbEEmfsP1FSSuodlCfwPaHCsQaB8uAN9peByDppVS9BvsUTRWNlyI1mmgasBPV+3NG3/oDVOdSY8BsLweWSzrZ9orSeeIJlpcO0CG31v9eXTTF+JnaK1ABbP9Z0tSSgaIdciY1GkvSzrbv2sbP0/U8YJKmAx8BZts+QdJLgN1t/6RwtM6StC9V1/POVDdmvYkKc4oG6yhJU4CzbH+8dJZxIelC4DHg2/XSUcAU24vLpYo2SJEarZWGksGTdDnVIPljbL9C0jOBa22/qnC0zpK0DjgVWEv1ixyAbd2gxf9H0nW2F5TOMS7qp02dBOxXL10NfN32w+VSRRvk6/6I6Leb7cMlHQFg+8EM9h+6f9r+UekQY+YPkn4EXEHf6Cnb3ysXqbtsPyzpHOAqqhuxdbYfKRwrWiBFakT0e0TSjtRNJZJ2A7LbMVxnSDqf6hf44691Cqah2gH4F3BQ35qBvOZDIOmtwDeAO6iOs+wi6f22ryybLJouRWq0WXb4Bu8M4GdUI2IuoZojeVzRRN23CNgDmMrmr/tTMA2R7UWlM4yZZcDrbN8Oj9/8/hRIkRrblCI12ixdzwMkaQKYBRwCzKe6CTjF9j1Fg3Xfq23vXjrEOJG0K9Xnx3yqG4LrqIb5ry8arLs29ArU2l+ADaXCRHukcSoaK13Poydpte19S+cYJ5JWAmfbvqV0lnEh6bfA16hmdQK8BzjZ9rxyqbpL0rlUn+PfpbopOBS4G/gF5GhLbF2K1GisdD2PnqQzgXuAy3liQ8m9xUJ1nKRbgd2A9VRnUnMzNmSSbt7y9ZV0k+25pTJ1WX0jtjXOKKrYmhSp0ViSrrG93/b/ZgyKpPVM/iSeXQvEGQuSdp5sPTdjgyfp2fUfTwPuAy6jer8fDsyyvaRUtnEmaYntpaVzRPOkSI3GkvR64AjS9TwydWf/iVTzDE01z/Abth8qGqzjJM0FXltfXm37ppJ5uqrvJmyypkvnZqyMzLyOrUnjVDRZup5H7yKqx89+tb4+sl47rFiijpN0CvA+Nr+vvy3pvDyedvBs71I6Q0wqk1piUtlJjcaStC5dz6Ml6Rbbe25vLQZH0s3AAtsb6+vpwHU5kzo8kn4PXAB8x/b9pfOMu+ykxtZMlA4QsQ3XSkpxNFprJM3vXUiaB6wumGccCHi07/pRsrM0bIcDzwdWS7pM0pvyZLWi8trHpLKTGo2VrufRq1/z3anGwwDMBtYBm8hrPxSSPgocC3y/XnoncJHtr5RLNR7q2cBvA86lujlYCSzPNIvR4rywJwAABPZJREFUknS67S+UzhHNkyI1Gitdz6O3tde8J6/9cEjam6pZDarGqRtL5hkHkuYAi4G3AD8HLqH6f/Be268qma0rJK1gkmkhPbY/NMI40UJpnIrGsn1Xup5HK0Xo6Em62PZ7gTWTrMUQ1GdS7wfOB06z3Zsecr2kheWSdU7vqNBCYE+q+ctQDfPPwytiu7KTGo01Sdfzu4B0PUenbNk0ImkKsDbNasNTn3Xfi81PswPA9ueKheqw+glf+9neVF9Ppdp0mL/t/zLGXXZSo8mOB+b1dT2fRfWM7RSp0XqSlgCnAztKeqC3DDwCnFcs2Hj4MtVO6hr6ZjDH0MwCZgK9s7471WsR25QiNZosXc/RWfUTdpZKWponHY3cC2y/uXSIMXImcKOkX1F9hu8PfLZoomiFFKnRZCupzoj1dz1fWDBPxDD8RNJ02xslHQ3sTdVhnvPBw3OtpFfaXls6yDiwvVLSlcC8euk0238vmSnaIWdSo9HS9RxdVw/znwvMAb5J1cxzmO0DSubqIklrqbrNnwG8BPgLGW83NJL2sH1b/Tn+JLbXTLYe0ZMiNRprsg7ndD1H1/QapyR9Bvir7QvyBJ7hyIi10aof73tC/TX/lmz7oJGHilbJ1/3RZC/vv6i7nvcplCViWDbUTVRHA/vXA+anFs7USSlCR6suUCeAT9teVTpPtE8eixqNI2mJpA3AHEkP1P9sAP4B/LBwvIhBO5zqK+fj63N6LwDOLhspYjBsPwacUzpHtFO+7o/GStdzRET7SfoS1fjA7zlFRzwNKVKjseonv/whXc/RZfW3BL0P4mlUX/X/2/azyqWKGJz6PT6daozgQ2xuVJtZNFg0Xr7ujyY7F3iwfjTqx4A7gG+VjRQxWLZn2J5Z/8LeEXg31Xs/ohPq9/iE7an1e31GCtR4KrKTGo2VrucYV5JutL1X6RwRgyLpEKpxgqYaJ/iDwpGiBdLdH02WrufovPqXd88EsC/wn0JxIgZO0teBFwOX1ksfkPQG2ycVjBUtkJ3UaCxJzwOOBH5n+2pJs4EDbecr/+gMSSv7LjcBdwLn2f5nmUQRgyXpNuBlvaapesPhT7ZfVjZZNF12UqOx6nE8X+67vpucSY3umQBOsX0/gKRZwDJgcdFUEYNzOzAb6DW9vrBei9imFKnRWOl6jjExp1egAti+T1LOo0brSfox1Wf4DOBWSTfU1/OAG0pmi3ZIkRqNZXtG78+SBBwMzC+XKGIoJiTNsn0fgKRnk8/m6IYvlQ4Q7ZYzqdEq6XqOrpF0DHA6cEW9dCjwedsXl0sVEVFeitRorK10PR9ge0GhSBFDIWlP4KD68pe2bymZJ2IQJF1je78tjm5BhvnHU5QiNRorXc8RERHjK+eeosnS9RwR0WKSplCNm9qjdJZonzwWNZrsSV3PQM6jRkS0hO1HgXX1nOuIpyU7qdFk6XqOiGi/WcCf6hFUG3uLtt9RLlK0QX7hR5MtA66T9ISu54J5IiLi6dsBeFvftYCzCmWJFkmRGo1l+1uSVrO56/mQdD1HRLTOM2z/un9B0o6lwkR7pLs/IiIiBk7SB4ETgV2BO/p+NANYZfvoIsGiNVKkRkRExMBJehbVedSlwCf7frTB9r1lUkWbpEiNiIiIiMbJCKqIiIiIaJwUqRERERHROClSIyIiIqJxUqRGREREROOkSI2IiIiIxvkfGCJZP0xgK7MAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqkAAAIqCAYAAAAHAtOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde5xVdb3/8fd7BhARxNuACCKgDMMgIDhSeUnzUnoM7yXqT63TiZNJdeyidjpHza5a1vlZ9gvvntLIzAskRWmK56QlAwrITVEJNS+oCCghDHx+f+w1th1nYM+w96w1e7+ej8c8Zq+1vuz9mcV+rP3e37XW9+uIEAAAAJAlVWkXAAAAALRESAUAAEDmEFIBAACQOYRUAAAAZA4hFQAAAJlDSAUAAEDmdEvrhffYY48YMmRIWi8PAABQsLlz574aETVp11FJUgupQ4YMUWNjY1ovDwAAUDDbf027hkrD6X4AAABkDiEVAAAAmUNIBQAAQOakdk0qAABAVzZ37tx+3bp1u17S/qLjr722SHqiqanpXw488MBXWmtASAUAAOiAbt26Xb/nnnuOrKmpWV1VVRVp19OVbNmyxatWrap/6aWXrpd0QmttSP0AAAAds39NTc1aAmr7VVVVRU1NzRrleqFbb9OJ9QAAAJSTKgJqxyX7rs0sSkgFAABA5nBNKgAAQBEMufjeA4v5fCu+e/zcYj7f9ti0aZO6d+/eqa9JTyoAAEAXdvTRR+87atSokfvtt9+o73//+3tI0h133LFzfX39yBEjRtR/4AMfqJWkNWvWVJ122mlDamtr62tra+tvvvnmXSSpV69e45qf66abbtr11FNPHSJJp5566pAzzzxz8JgxY+rOO++8QQ888ECvAw44oG7kyJH148aNq5s/f/4OktTU1KTJkycPGj58+Kja2tr6b33rW/2mT5/e5+ijj963+XnvuuuunY855ph91Q70pAIAAHRht95664r+/ftvfvPNNz1u3Lj6008//Y0pU6YMefDBB5fW1dVtfPnll6sl6eKLLx6w8847b37yyScXS9KqVauqt/XcL774Yo958+Yt7datm15//fWqOXPmLO3evbvuvvvuPhdeeOGgWbNmPX3VVVfVrFy5ssfixYsXde/eXS+//HJ1TU3N5i984QuD//a3v3Xba6+9mm688cbdP/nJT77anr+LkAoAANCFXXHFFf3vvffeXSTppZde6n711VfXTJgwYV1dXd1GSerfv/9mSXrooYd2njZt2jPN/66mpmbztp77lFNOWd2tWy4uvv7669Wnn3760BUrVvS0HZs2bbIk/fGPf9z5M5/5zKrmywGaX+/jH//4a9ddd91u559//mvz5s3rfeeddz7bnr+LkAoAANBF/eY3v+kze/bsPo2NjUv79OmzZcKECSPGjRu3ftmyZT0LfQ7b7zz++9//7vxtvXv33tL8+KKLLhp4+OGHr/vDH/7w9LJly3oceeSRI7b2vOedd95rxx9//H49e/aMiRMnrm7vNa1ckwoAANBFvfHGG9V9+/bd3KdPny2PPfZYz/nz5++0YcOGqkcffbTP0qVLe0hS8+n+ww8/fO0Pf/jDfs3/tvl0/+67775p3rx5PTdv3qx77rln17Zea+3atdWDBg3aKElTp07do3n9UUcdtXbq1Kl7bNq0SfmvN2TIkE39+/ffdNVVVw2YPHlyu071S4RUAACALuvUU09d09TU5GHDho36yle+MnDs2LFv9evXr+nqq69ecfLJJ+83YsSI+pNPPnmYJH3nO9958Y033qgePnz4qBEjRtTPnDmzjyR9/etff+HEE0/cb/z48XX9+/ff1NZrXXTRRS9ddtllg0aOHFnf1NT0zvoLLrhg1aBBgzbW1dWNGjFiRP0NN9ywW/O2SZMmvTZgwICN48eP39Dev80R6YxB29DQEI2Njam8NgAAQHvYnhsRDfnr5s+fv2Ls2LHt7iGsJOecc87gcePGrb/gggta3U/z58/fY+zYsUNa28Y1qQAA4B1DLr63Xe1XfPf4drUffcvogtsuPHdhu54b2TJq1KiRO+6445apU6c+15F/T0gFAAAdd1nf9rUfOrjgpkvqRrbrqUcuXdK+WlBSixYt2q7/EK5JBQAAQOYQUgEAAJA5hFQAAABkDiEVAAAAmUNIBQAAwDseeuihXp/4xCf2bmv7ihUruh977LHDSl0Hd/cDAAAUw2V9Dyzu862ZW4ynaWpqUrduhUe+D37wg+s/+MEPrm9r+5AhQzb97ne/e6YYtW1NQT2pto+1vcz2ctsXt7J9sO0HbD9me4Htfyp+qQAAAMi3bNmyHkOHDh11wgknDB02bNioY489dti6deuqBg4cOPq8884bWF9fP/LGG2/c9c4779z5gAMOqKuvrx953HHHDVuzZk2VJM2ePbvXuHHj6kaMGFE/evTokatXr676zW9+0+dDH/rQfpJ077339q6rq6uvq6urHzlyZP3q1aurli1b1mP48OGjJGn9+vU+7bTThtTW1taPHDmyfsaMGX0k6eqrr979wx/+8L6HHXbY8H322Wf/z3zmM4Pa+7dtM6TarpZ0jaTjJNVLOsN2fYtm/yHp9ogYJ2mSpJ+0txAAAAC034oVK3pOmTLllWeeeWZRnz59tnzve9+rkaTdd9+9afHixUsmTpy47tvf/vaAhx566MnFixcvGT9+/PpvfOMb/Tds2OCzzjpr3//6r/9auWzZssWzZ89e1rt37y35z33VVVftefXVV/916dKli//85z8vbbn9iiuu6GdbTz755OLbbrvtmcmTJw9Zv369JWnx4sW97r777meWLFmyaPr06bsuX768e3v+rkJ6UidIWh4Rz0TERknTJJ3Yok1I2jl53FfS39pTBAAAADpmzz333PjhD3/4LUk6++yzX3v44Yd7S9I555yzWpIefPDBnZ5++umeEyZMqKurq6ufNm3a7itXruyxYMGCnv369dt0+OGHr5ek3XbbbUv37u/Oke9///vf/PKXv7z3N7/5zX6vvvpqdcvtDz/8cO+zzz77NUkaN27chr322mvjwoULe0rSoYceunb33Xff3KtXr9hvv/02PP300zu05+8q5AKFgZLyp7N6XtL7WrS5TNLvbX9O0k6Sjm7tiWxPljRZkgYPLnzGCQAAALTOdqvLffr02SJJEaFDDz107YwZM57Nb/foo4/uuK3n/va3v/3SSSedtOaee+7pe9hhh9Xde++9T/Xq1WvLtv6dJPXo0SOaH1dXV8emTZu8tfYtFevu/jMk3RwRgyT9k6Sf2X7Pc0fEtRHREBENNTU1RXppAACAyvXiiy/2uO+++3aSpFtvvXW3gw8++M387UccccRbjY2NvZ944okdJGnt2rVVCxYs2GHMmDEbXnnlle6zZ8/uJUmrV6+u2rRp07uee9GiRTtMmDDh79/61rdeGjNmzFtPPPFEz/zthxxyyJs///nPd5OkBQsW7PDiiy/2GDNmzIZi/F2FhNQXJOUPQzAoWZfvU5Jul6SIeERST0l7FKNAAAAAtG3IkCEbfvSjH/UbNmzYqDfeeKPbl7/85VX52/faa6+mqVOnrpg0adKw2tra+oaGhrqFCxf27NmzZ9x6661Pf/7znx88YsSI+iOOOKJ2/fr178qGV155Zb/hw4ePqq2tre/evXucdtppa/K3X3jhha9s2bLFtbW19aeffvq+U6dOXbHjjjuGisARW38e290kPSnpKOXC6RxJZ0bEorw2v5X0y4i42fZISfdLGhhbefKGhoZobGwswp8AAACKZcjF97ar/YqeZ7ar/eihhV/ud/t3mtr13COXLmlX+/awPTciGvLXzZ8/f8XYsWNfLdmLFmDZsmU9PvrRjw5/6qmnFm27dfbMnz9/j7Fjxw5pbds2e1IjoknSFEmzJC1R7i7+RbYvt31C0uxLkj5te76kX0j6xNYCKgAAALA1BY3sGhEzJc1sse6SvMeLJR1S3NIAAACwNSNGjNjYVXtRt4VpUQEAAJA5TIuKomj3NUzfPb5d7UffMrrgtgvPXdiu5wYAANlDSEXZWVI3sl3tS3mhPQAA6BhCKtJxWd/2tW/H3aAAAKDr45pUAAAAvOPqq6/e/ZxzzhksSV/84hf3uuSSS/qnUQc9qQAAAEUw+pbRBxbz+Raeu3Bue9pv2bJFEaHq6upilpEaelIBAAC6qGXLlvUYMmTI/ieffPKQ2traURdeeOGA/ffff2RtbW39BRdcsFdzux//+Me719bW1o8YMaL+pJNOGipJt912W98xY8bUjRw5sv7ggw+ufe655zLVeZmpYgAAANA+K1eu3OGGG254ds2aNa//6le/2nXBggVLIkJHH330fr/97W9719TUNH3/+98f8MgjjywdMGBA08svv1wtScccc8ybkyZNWlpVVaUf/OAHe1x++eV7Xnfddc+n/fc0I6QCAAB0YQMGDNh41FFHvTV58uRBDz300M719fX1krR+/fqqpUuX9pw3b17VxIkTVw8YMKBJkvr3779Zkp599tkeJ5100qBVq1Z137hxY9Xee+/9dpp/R0uc7gcAAOjCevXqtUWSIkL/9m//9uLSpUsXL126dPHKlSufuOCCC15t699NmTJl8Gc/+9lXnnzyycU//vGP//r2229nKhdmqhgAAAB0zHHHHbf2Zz/72R5r1qypkqRnn322+wsvvNDtIx/5yNoZM2bs+tJLL1VLUvPp/nXr1lUPHjx4kyTdfPPNu6dXees43Q8AAFAGTjnllLWLFi3qedBBB9VJuR7W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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } + ], + "source": [ + "# Plot and compare all of the model results\n", + "all_model_results.plot(kind=\"bar\", figsize=(10, 7)).legend(bbox_to_anchor=(1.0, 1.0));" ] }, { @@ -5114,32 +5096,32 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "PtDMFKsCcD1j", "colab": { "base_uri": "https://localhost:8080/", "height": 571 }, + "id": "PtDMFKsCcD1j", "outputId": "be94dea6-0dfd-405c-a986-4d8478c46bc6" }, - "source": [ - "# Sort model results by f1-score\n", - "all_model_results.sort_values(\"f1\", ascending=False)[\"f1\"].plot(kind=\"bar\", figsize=(10, 7));" - ], - "execution_count": null, "outputs": [ { - "output_type": "display_data", "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } + ], + "source": [ + "# Sort model results by f1-score\n", + "all_model_results.sort_values(\"f1\", ascending=False)[\"f1\"].plot(kind=\"bar\", figsize=(10, 7));" ] }, { @@ -5174,40 +5156,40 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "HRalPoXEi0Es", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "HRalPoXEi0Es", "outputId": "5733b2a9-8ce6-4144-b35b-c88183ad05b8" }, - "source": [ - "# Save best performing model to SavedModel format (default)\n", - "model_5.save(\"skimlit_tribrid_model\") # model will be saved to path specified by string" - ], - "execution_count": null, "outputs": [ { + "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:Found untraced functions such as lstm_cell_4_layer_call_and_return_conditional_losses, lstm_cell_4_layer_call_fn, lstm_cell_5_layer_call_and_return_conditional_losses, lstm_cell_5_layer_call_fn, lstm_cell_4_layer_call_fn while saving (showing 5 of 10). These functions will not be directly callable after loading.\n" - ], - "name": "stderr" + ] }, { + "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: skimlit_tribrid_model/assets\n" - ], - "name": "stdout" + ] }, { + "name": "stderr", "output_type": "stream", "text": [ "INFO:tensorflow:Assets written to: skimlit_tribrid_model/assets\n" - ], - "name": "stderr" + ] } + ], + "source": [ + "# Save best performing model to SavedModel format (default)\n", + "model_5.save(\"skimlit_tribrid_model\") # model will be saved to path specified by string" ] }, { @@ -5221,15 +5203,15 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "Mgsma17oUtAE" }, + "outputs": [], "source": [ "# Example of copying saved model from Google Colab to Drive (requires Google Drive to be mounted)\n", "# !cp skim_lit_best_model -r /content/drive/MyDrive/tensorflow_course/skim_lit" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -5248,6 +5230,7 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -5255,15 +5238,9 @@ "id": "7dQESoCSuUnK", "outputId": "e3b33414-871c-4167-b7b6-c1b7d7f0aeb0" }, - "source": [ - "# Download pretrained model from Google Storage\n", - "!wget https://storage.googleapis.com/ztm_tf_course/skimlit/skimlit_tribrid_model.zip\n", - "!mkdir skimlit_gs_model\n", - "!unzip skimlit_tribrid_model.zip -d skimlit_gs_model" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "--2021-08-25 00:03:10-- https://storage.googleapis.com/ztm_tf_course/skimlit/skimlit_tribrid_model.zip\n", @@ -5285,16 +5262,23 @@ " inflating: skimlit_gs_model/skimlit_tribrid_model/keras_metadata.pb \n", " inflating: skimlit_gs_model/skimlit_tribrid_model/saved_model.pb \n", " creating: skimlit_gs_model/skimlit_tribrid_model/assets/\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Download pretrained model from Google Storage\n", + "!wget https://storage.googleapis.com/ztm_tf_course/skimlit/skimlit_tribrid_model.zip\n", + "!mkdir skimlit_gs_model\n", + "!unzip skimlit_tribrid_model.zip -d skimlit_gs_model" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "mDRneseeZSRY" }, + "outputs": [], "source": [ "# Import TensorFlow model dependencies (if needed) - https://github.com/tensorflow/tensorflow/issues/38250 \n", "import tensorflow_hub as hub\n", @@ -5310,9 +5294,7 @@ " # parameter. I'm leaving the code below here in case you do.\n", " # custom_objects={\"TextVectorization\": TextVectorization, # required for char vectorization\n", " # \"KerasLayer\": hub.KerasLayer}) # required for token embedding" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -5327,59 +5309,52 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "WmLdyobSv95I", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "WmLdyobSv95I", "outputId": "05aed0cb-be52-40c9-f46d-915ee0cf6b41" }, - "source": [ - "# Make predictions with the loaded model on the validation set\n", - "loaded_pred_probs = loaded_model.predict(val_pos_char_token_dataset, verbose=1)\n", - "loaded_preds = tf.argmax(loaded_pred_probs, axis=1)\n", - "loaded_preds[:10]" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "945/945 [==============================] - 132s 139ms/step\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 111, "metadata": {}, - "execution_count": 111 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions with the loaded model on the validation set\n", + "loaded_pred_probs = loaded_model.predict(val_pos_char_token_dataset, verbose=1)\n", + "loaded_preds = tf.argmax(loaded_pred_probs, axis=1)\n", + "loaded_preds[:10]" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "jS4XMK6yxEn0", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "jS4XMK6yxEn0", "outputId": "bc87355f-fc85-42ab-b3cf-f7acc220edfa" }, - "source": [ - "# Evaluate loaded model's predictions\n", - "loaded_model_results = calculate_results(val_labels_encoded,\n", - " loaded_preds)\n", - "loaded_model_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 82.74526678141136,\n", @@ -5388,9 +5363,16 @@ " 'recall': 0.8274526678141136}" ] }, + "execution_count": 112, "metadata": {}, - "execution_count": 112 + "output_type": "execute_result" } + ], + "source": [ + "# Evaluate loaded model's predictions\n", + "loaded_model_results = calculate_results(val_labels_encoded,\n", + " loaded_preds)\n", + "loaded_model_results" ] }, { @@ -5404,29 +5386,29 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "TNDhkLYzznXn", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "TNDhkLYzznXn", "outputId": "01f3e235-aa57-41b8-9e9c-ecde2fcb322f" }, - "source": [ - "# Compare loaded model results with original trained model results (should be quite close)\n", - "np.isclose(list(model_5_results.values()), list(loaded_model_results.values()), rtol=1e-02)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "array([ True, True, True, True])" ] }, + "execution_count": 124, "metadata": {}, - "execution_count": 124 + "output_type": "execute_result" } + ], + "source": [ + "# Compare loaded model results with original trained model results (should be quite close)\n", + "np.isclose(list(model_5_results.values()), list(loaded_model_results.values()), rtol=1e-02)" ] }, { @@ -5440,20 +5422,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "FZEk80xiqNLT", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "FZEk80xiqNLT", "outputId": "4e2376da-a9b4-4630-fe81-cde115d3e702" }, - "source": [ - "# Check loaded model summary (note the number of trainable parameters)\n", - "loaded_model.summary()" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_8\"\n", @@ -5497,9 +5476,12 @@ "Trainable params: 167,099\n", "Non-trainable params: 256,797,824\n", "__________________________________________________________________________________________________\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Check loaded model summary (note the number of trainable parameters)\n", + "loaded_model.summary()" ] }, { @@ -5516,13 +5498,26 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "mkFb3giT2FYW", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "mkFb3giT2FYW", "outputId": "4dd95f9b-5761-45e3-c639-f24e7dc95b20" }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Create test dataset batch and prefetched\n", "test_pos_char_token_data = tf.data.Dataset.from_tensor_slices((test_line_numbers_one_hot,\n", @@ -5535,77 +5530,57 @@ "\n", "# Check shapes\n", "test_pos_char_token_dataset" - ], - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": {}, - "execution_count": 115 - } ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "BpoQj-PexFf9", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "BpoQj-PexFf9", "outputId": "7f96e565-b6ae-4221-f36b-0b7b6c1faf89" }, - "source": [ - "# Make predictions on the test dataset\n", - "test_pred_probs = loaded_model.predict(test_pos_char_token_dataset,\n", - " verbose=1)\n", - "test_preds = tf.argmax(test_pred_probs, axis=1)\n", - "test_preds[:10]" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "942/942 [==============================] - 132s 140ms/step\n" - ], - "name": "stdout" + ] }, { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 116, "metadata": {}, - "execution_count": 116 + "output_type": "execute_result" } + ], + "source": [ + "# Make predictions on the test dataset\n", + "test_pred_probs = loaded_model.predict(test_pos_char_token_dataset,\n", + " verbose=1)\n", + "test_preds = tf.argmax(test_pred_probs, axis=1)\n", + "test_preds[:10]" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "avvjksEqxe_0", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "avvjksEqxe_0", "outputId": "83aebc05-9f09-4c1c-9fd0-5bbd61dd4b35" }, - "source": [ - "# Evaluate loaded model test predictions\n", - "loaded_model_test_results = calculate_results(y_true=test_labels_encoded,\n", - " y_pred=test_preds)\n", - "loaded_model_test_results" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'accuracy': 82.39588518334163,\n", @@ -5614,9 +5589,16 @@ " 'recall': 0.8239588518334163}" ] }, + "execution_count": 117, "metadata": {}, - "execution_count": 117 + "output_type": "execute_result" } + ], + "source": [ + "# Evaluate loaded model test predictions\n", + "loaded_model_test_results = calculate_results(y_true=test_labels_encoded,\n", + " y_pred=test_preds)\n", + "loaded_model_test_results" ] }, { @@ -5651,29 +5633,29 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "7yI34yymyycT", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "7yI34yymyycT", "outputId": "3aa93020-e2bb-49c5-c566-b54f0621021e" }, - "source": [ - "%%time\n", - "# Get list of class names of test predictions\n", - "test_pred_classes = [label_encoder.classes_[pred] for pred in test_preds]\n", - "test_pred_classes" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 10.2 s, sys: 856 ms, total: 11.1 s\n", "Wall time: 9.42 s\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "%%time\n", + "# Get list of class names of test predictions\n", + "test_pred_classes = [label_encoder.classes_[pred] for pred in test_preds]\n", + "test_pred_classes" ] }, { @@ -5690,25 +5672,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "au11pLUEPCaj", "colab": { "base_uri": "https://localhost:8080/", "height": 665 }, + "id": "au11pLUEPCaj", "outputId": "14f659d4-5a42-44a5-8234-b0ff00554a2c" }, - "source": [ - "# Create prediction-enriched test dataframe\n", - "test_df[\"prediction\"] = test_pred_classes # create column with test prediction class names\n", - "test_df[\"pred_prob\"] = tf.reduce_max(test_pred_probs, axis=1).numpy() # get the maximum prediction probability\n", - "test_df[\"correct\"] = test_df[\"prediction\"] == test_df[\"target\"] # create binary column for whether the prediction is right or not\n", - "test_df.head(20)" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/html": [ "
\n", @@ -5969,9 +5943,17 @@ "[20 rows x 7 columns]" ] }, + "execution_count": 119, "metadata": {}, - "execution_count": 119 + "output_type": "execute_result" } + ], + "source": [ + "# Create prediction-enriched test dataframe\n", + "test_df[\"prediction\"] = test_pred_classes # create column with test prediction class names\n", + "test_df[\"pred_prob\"] = tf.reduce_max(test_pred_probs, axis=1).numpy() # get the maximum prediction probability\n", + "test_df[\"correct\"] = test_df[\"prediction\"] == test_df[\"target\"] # create binary column for whether the prediction is right or not\n", + "test_df.head(20)" ] }, { @@ -5987,23 +5969,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "tDUOsuKJ6IQH", "colab": { "base_uri": "https://localhost:8080/", "height": 417 }, + "id": "tDUOsuKJ6IQH", "outputId": "8117b505-1d7b-49dc-9291-a76f92e00e6e" }, - "source": [ - "# Find top 100 most wrong samples (note: 100 is an abitrary number, you could go through all of them if you wanted)\n", - "top_100_wrong = test_df[test_df[\"correct\"] == False].sort_values(\"pred_prob\", ascending=False)[:100]\n", - "top_100_wrong" - ], - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/html": [ "
\n", @@ -6166,9 +6142,15 @@ "[100 rows x 7 columns]" ] }, + "execution_count": 120, "metadata": {}, - "execution_count": 120 + "output_type": "execute_result" } + ], + "source": [ + "# Find top 100 most wrong samples (note: 100 is an abitrary number, you could go through all of them if you wanted)\n", + "top_100_wrong = test_df[test_df[\"correct\"] == False].sort_values(\"pred_prob\", ascending=False)[:100]\n", + "top_100_wrong" ] }, { @@ -6182,24 +6164,17 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "ysddyYy717HJ", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "ysddyYy717HJ", "outputId": "2a3ad761-8f27-4c5b-b20d-d8169328e3dc" }, - "source": [ - "# Investigate top wrong preds\n", - "for row in top_100_wrong[0:10].itertuples(): # adjust indexes to view different samples\n", - " _, target, text, line_number, total_lines, prediction, pred_prob, _ = row\n", - " print(f\"Target: {target}, Pred: {prediction}, Prob: {pred_prob}, Line number: {line_number}, Total lines: {total_lines}\\n\")\n", - " print(f\"Text:\\n{text}\\n\")\n", - " print(\"-----\\n\")" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Target: BACKGROUND, Pred: OBJECTIVE, Prob: 0.9448384046554565, Line number: 0, Total lines: 12\n", @@ -6272,9 +6247,16 @@ "\n", "-----\n", "\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "# Investigate top wrong preds\n", + "for row in top_100_wrong[0:10].itertuples(): # adjust indexes to view different samples\n", + " _, target, text, line_number, total_lines, prediction, pred_prob, _ = row\n", + " print(f\"Target: {target}, Pred: {prediction}, Prob: {pred_prob}, Line number: {line_number}, Total lines: {total_lines}\\n\")\n", + " print(f\"Text:\\n{text}\\n\")\n", + " print(\"-----\\n\")" ] }, { @@ -6336,26 +6318,18 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "-qKFXysU9Y1j", "colab": { "base_uri": "https://localhost:8080/", "height": 414 }, + "id": "-qKFXysU9Y1j", "outputId": "7d70562c-90ac-4e71-a020-14ab673bd077" }, - "source": [ - "# Download and open example abstracts (copy and pasted from PubMed)\n", - "!wget https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/skimlit_example_abstracts.json\n", - "\n", - "with open(\"skimlit_example_abstracts.json\", \"r\") as f:\n", - " example_abstracts = json.load(f)\n", - "\n", - "example_abstracts" - ], - "execution_count": null, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "--2021-08-25 00:08:37-- https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/skimlit_example_abstracts.json\n", @@ -6369,13 +6343,12 @@ "\n", "2021-08-25 00:08:37 (82.5 MB/s) - ‘skimlit_example_abstracts.json’ saved [6737/6737]\n", "\n" - ], - "name": "stdout" + ] }, { - "output_type": "error", "ename": "NameError", "evalue": "ignored", + "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", @@ -6383,20 +6356,29 @@ "\u001b[0;31mNameError\u001b[0m: name 'json' is not defined" ] } + ], + "source": [ + "# Download and open example abstracts (copy and pasted from PubMed)\n", + "!wget https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/skimlit_example_abstracts.json\n", + "\n", + "with open(\"skimlit_example_abstracts.json\", \"r\") as f:\n", + " example_abstracts = json.load(f)\n", + "\n", + "example_abstracts" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "-1cIAS1Z6r_l" }, + "outputs": [], "source": [ "# See what our example abstracts look like\n", "abstracts = pd.DataFrame(example_abstracts)\n", "abstracts" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -6411,21 +6393,36 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "_gwVNdLQHpQX" }, + "outputs": [], + "source": [ + "# # Create sentencizer - Source: https://spacy.io/usage/linguistic-features#sbd \n", + "# from spacy.lang.en import English\n", + "# nlp = English() # setup English sentence parser\n", + "# sentencizer = nlp.create_pipe(\"sentencizer\") # create sentence splitting pipeline object\n", + "# nlp.add_pipe(sentencizer) # add sentence splitting pipeline object to sentence parser\n", + "# doc = nlp(example_abstracts[0][\"abstract\"]) # create \"doc\" of parsed sequences, change index for a different abstract\n", + "# abstract_lines = [str(sent) for sent in list(doc.sents)] # return detected sentences from doc in string type (not spaCy token type)\n", + "# abstract_lines" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# Create sentencizer - Source: https://spacy.io/usage/linguistic-features#sbd \n", "from spacy.lang.en import English\n", - "nlp = English() # setup English sentence parser\n", - "sentencizer = nlp.create_pipe(\"sentencizer\") # create sentence splitting pipeline object\n", - "nlp.add_pipe(sentencizer) # add sentence splitting pipeline object to sentence parser\n", - "doc = nlp(example_abstracts[0][\"abstract\"]) # create \"doc\" of parsed sequences, change index for a different abstract\n", - "abstract_lines = [str(sent) for sent in list(doc.sents)] # return detected sentences from doc in string type (not spaCy token type)\n", + "nlp= English()\n", + "nlp.add_pipe(\"sentencizer\")\n", + "doc= nlp(example_abstracts[0][\"abstract\"])\n", + "abstract_lines= [str(sent) for sent in list(doc.sents)]\n", "abstract_lines" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -6442,9 +6439,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "A_Hi0alJI4Xu" }, + "outputs": [], "source": [ "# Get total number of lines\n", "total_lines_in_sample = len(abstract_lines)\n", @@ -6458,9 +6457,7 @@ " sample_dict[\"total_lines\"] = total_lines_in_sample - 1\n", " sample_lines.append(sample_dict)\n", "sample_lines" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -6473,33 +6470,33 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "rm0MYaAnBkbp" }, + "outputs": [], "source": [ "# Get all line_number values from sample abstract\n", "test_abstract_line_numbers = [line[\"line_number\"] for line in sample_lines]\n", "# One-hot encode to same depth as training data, so model accepts right input shape\n", "test_abstract_line_numbers_one_hot = tf.one_hot(test_abstract_line_numbers, depth=15) \n", "test_abstract_line_numbers_one_hot" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "8Wzbv3w6B3OU" }, + "outputs": [], "source": [ "# Get all total_lines values from sample abstract\n", "test_abstract_total_lines = [line[\"total_lines\"] for line in sample_lines]\n", "# One-hot encode to same depth as training data, so model accepts right input shape\n", "test_abstract_total_lines_one_hot = tf.one_hot(test_abstract_total_lines, depth=20)\n", "test_abstract_total_lines_one_hot" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -6512,16 +6509,16 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "HOOPoG3cCA0F" }, + "outputs": [], "source": [ "# Split abstract lines into characters\n", "abstract_chars = [split_chars(sentence) for sentence in abstract_lines]\n", "abstract_chars" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -6534,9 +6531,11 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "0b7siZa1CQG7" }, + "outputs": [], "source": [ "# Make predictions on sample abstract features\n", "%%time\n", @@ -6545,22 +6544,20 @@ " tf.constant(abstract_lines),\n", " tf.constant(abstract_chars)))\n", "test_abstract_pred_probs" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "8nxqfCBfCqWe" }, + "outputs": [], "source": [ "# Turn prediction probabilities into prediction classes\n", "test_abstract_preds = tf.argmax(test_abstract_pred_probs, axis=1)\n", "test_abstract_preds" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -6573,29 +6570,29 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "LduhApa3C1mD" }, + "outputs": [], "source": [ "# Turn prediction class integers into string class names\n", "test_abstract_pred_classes = [label_encoder.classes_[i] for i in test_abstract_preds]\n", "test_abstract_pred_classes" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { "id": "BhhDPZSHDCJD" }, + "outputs": [], "source": [ "# Visualize abstract lines and predicted sequence labels\n", "for i, line in enumerate(abstract_lines):\n", " print(f\"{test_abstract_pred_classes[i]}: {line}\")" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -6656,5 +6653,33 @@ "* Since our dataset has imbalanced classes (as with many real-world datasets), so it might be worth looking into the [TensorFlow guide for different methods to training a model with imbalanced classes](https://www.tensorflow.org/tutorials/structured_data/imbalanced_data).\n" ] } - ] -} \ No newline at end of file + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "authorship_tag": "ABX9TyM5wpCFGOHhp2o71grvS7VP", + "collapsed_sections": [], + "include_colab_link": true, + "mount_file_id": "1_yq3R-ThKP78_byQV9OovntEcXpQcBK2", + "name": "09_SkimLit_nlp_milestone_project_2.ipynb", + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.10.0" + }, + "vscode": { + "interpreter": { + "hash": "1c513e6c7cb82cbcc6920a5ad5b02bc5f0812c20ddf18b6fe3fefee2aa23c21d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}