diff --git a/transformer.ipynb b/transformer.ipynb new file mode 100644 index 0000000..cdbeff2 --- /dev/null +++ b/transformer.ipynb @@ -0,0 +1,740 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KuFFT6LrB6Fe" + }, + "outputs": [], + "source": [ + "import time\n", + "import json\n", + "import math\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "from nltk.tokenize import word_tokenize\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import DataLoader\n", + "from torch.optim.lr_scheduler import ReduceLROnPlateau\n", + "\n", + "from sklearn.metrics import accuracy_score, precision_recall_curve, f1_score, confusion_matrix\n", + "from sklearn.model_selection import KFold\n", + "# local imports\n", + "import ml_evaluation as ml_eval\n", + "import ml_helper\n", + "import ml_history\n", + "import dataset_generator as data_gen\n", + "# class imports\n", + "import HumorDataset as humor_ds\n", + "import EarlyStopping\n", + "import BalancedCELoss\n", + "\n", + "\n", + "# architecture inspired:\n", + "# https://n8henrie.com/2021/08/writing-a-transformer-classifier-in-pytorch/\n", + "\n", + "# TODO: maybe KFold for cross validation?\n", + "\n", + "\n", + "#TODO: softmax for output layer or loss wih logits\n", + "#TODO: model.train() in training loop\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generalisation ideas:\n", + "- **data augmentation** with Pseudo-labelling (if acc is it better)\n", + "- **Adversarial Training** adding small perturbations to the input data during training\n", + "- **Multi Sample Dropout** During training, multiple forward passes are performed with different dropout masks, and the resulting predictions are averaged.\n", + "\n", + "### Learnings from papers:\n", + "- all used pretrained models berta like architectures\n", + "- voting from multiple models looks like a good approach (cross validation)\n", + "\n", + "### TO DOS:\n", + "- improve Generalisation with avg cross validation\n", + "(https://aclanthology.org/2021.semeval-1.35.pdf)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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5Raam5t7lP2U448/nksuuYRzzjmHc845h87Ozt98Fy4uLq7HU4SOjg4WLFhAfHx8OM/r9bJixQomT57M7t27e2xPVquVzz77jBUrVvzozm17ezvTp09n7dq1PfJ/SUlJCVOnTmX06NGRRYdNJpORlJTE1q1bAfD7/SxYsIALL7ywR71JkyZxyimnMGbMGGbPnh1erubmZh544AGGDRvG66+/3uNJVllZGddffz0nnngi48eP/9V964CRI0cyduxYxo4dS0xMTGTxYVMqlezYsQO6jw9bt24N71sHVFdXM3XqVJYsWdLjDrHf72ft2rV89tlnP3ra43K5WLRoEZ9//jmtra09yn7KunXrWLZsGc8//zzPP/88jz/+OLm5uZHVDktMTAx9+vThu+++g+59vaioiKioqHAdp9PJ008/zahRo7j00kt7PN1sbW3lhhtu4JRTTmHq1KnhfLqfgF1++eWMGjWK6dOn/+r6MplMnHTSSYwdO5b8/HxsNhsffPABSqUysuovUqlU9O3blylTpoTzZs2aRX5+fjgdCASYP38+p59+OqNHj2bixInhfairq4vHH3+c448/nueee67H0zWLxcLdd9/NiSeeyPPPP/+rywRQWFhITk4OZ555JhdddBEej+c3HzMkEsnRQwruj0Jnnnkm69evx+fzUV1djdlsxmQyQfeB/6677qKmpoZvv/2WBx54gLvuuovCwkICgQD33nsvY8aMYdmyZSgUivBj6NraWt577z1effVVJkyYwMcff0xjY2PElHuSyWRERUUhl8sji47Y5ZdfTnl5Obt370YURT755BPGjh2LIIQ2wbVr1/Liiy/y3nvvMXfuXJYvX84rr7wCwAcffMDMmTP56quvuO6661i3bl14vP/9739xOp189913iKLIW2+99asnpwMn5EAgQGFhIf3794+sctjOOOMMmpqa2LBhQ3j6l1xyCQqFArrv7o8bN45nnnmGZcuWUVVVxTPPPAPdJ/X33nuPmTNncv/99/e4m/fuu++yfft2li5dSmpqKo888kiPplo/xefzUVlZycKFC5kzZw5XX331EQcfBxx33HHs2bOHoqIiAGbOnMl5551HdHQ0dAdVjz76KJMmTcJisfCvf/0rfJe4srKS8847j+3bt7Nw4UIWLFgQHm9JSQlnnnkmpaWlPP/88zz33HO/ur48Hg9Tp07lmmuuISEhIbL4sMlkMk466SRWrFgB3e8vKBQKBg8eHK4za9YsZsyYwfTp0/nss8+YNGlSOLh8++230Wg0bNu2jSFDhoTbZnd2dvLkk09y8803M3fuXBYuXBj+3X6J2WxmypQpzJ49+7Au3n7JmDFjWL9+PYFAgObmZoLBYPiGgCiKfPnll1xwwQXU1tYyffp0Lr30Utrb2xFFkddee42XXnqJ+vp6HnjggfBFpsPh4P/+7/9YsWIFe/fu5Z577qGlpSViygcFg0E2b97M0KFDcbvdVFRU0NXV9Zu3Qblczo033sh3332H2+3GYrHQ1tZGTk4OdO+/jz76KEVFRXzzzTfcf//9nH/++RQWFuL1ejn33HMpKChg0aJF4WHpvih98cUXefDBB1myZAkzZ8781Xd4DjV//nxGjBhBcnJyZNGvkslknHbaaSxZsoSWlhZ8Ph8ff/wx1157bbjO1q1beeedd5gwYQJffvkl3377LV9++SV+v5/XXnuNhoYGVq5cyaBBg8JBv8/n4/rrr6egoIDFixezatUqPv/880Om/NP+/ve/M336dF5//XWefvppbrzxxvC5RiKR9F5ScH8UOuWUU9izZw8Oh4MNGzbQr18/NBoNdD+GX7JkCffddx9ms5mxY8cyYMAANm7cSHFxcTiwMhgMXHPNNeET0L59+yguLmb27Nl88cUXlJeX/2r70/+ljIwMxowZw6pVqygqKqK8vDzcxjoYDPLDDz8wduxYCgoKSEhI4JZbbmH8+PF0dnYyf/58HnjgAVJSUjj55JM588wzoTvoe/vtt2lububdd9/F5XKxd+/ew3o3wG63884776BSqTj//PMjiw9bUlISl112GfPmzaOyspIdO3Zw1llnhct3795NdnY2w4cPx2Qycc011zBlyhS6urpYsWIFt912G5mZmQwfPpzzzjsPuoOP999/H5/PxwcffEBHRwd79uz51ZcB7XY7ixYtYunSpZhMJrq6un71guDn5ObmMnLkSKZOnYrD4WD+/PncdNNN4fKqqir27dvHG2+8wb///W8ef/zxcBv0xYsXk5+fz9tvv83bb7/N2WefDd1B5osvvsjQoUM544wzuOKKK/jwww9/tQ39jBkzADj33HMji47YwIEDaWtro7a2lsLCQgYMGNCj/MUXX+Tyyy8nIyODrKwszjnnHL7//ntEUWT9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VDz66KN88MEH7Nq1i7CwMCZMmMBtt93GwoULeeCBB7j//vv55ptviIuL45133uGjjz7il19+4f777+fVV19Fp9Mxe/ZsXn31VWw2G88//zw333wzaWlpmEwmFAoFgwcPZuHChXz22We89dZbqNVqXn75ZUaNGsWGDRu4/fbbefTRR/nss8+YPHky11577Wn/d1OlSRj377zzDl999RU7duxAoVBw/PhxRo0axYwZM4iIiODKK6/k888/p3379owbNw6JRMLbb7/N+vXreeKJJ9i+fTsikYg1a9Zw1VVXceDAAZKTkxk4cCBdu3Ztesb9Jahzv3hjMVa785yCWDU1thys5IquEfTrEHLJ6tyPfmcXN/a/NHw3F20oYtoznTDt3Uvxl18SeQlEmrYXF1O9di3xL79MpUt2SercRwTLWbyxiOIKK7GXwKDAqTr3XyzJRiYVEX4JGPc7j1ZzTa+oJm/cB3zuvYwfP54ZM2YwYcIEEhMTsdlsfPrppxw9epQNGzZw5ZVXMmHCBG6++Wa++eYbnnvuOZYsWcL999+PRqNh1qxZ7Nq1iwceeID3338fg8HA2LFjWbZsGZmZmTzwwAN8//33FBcXM2bMGO644w7eeecdNJrTv5FLlizhzjvv5JVXXuE///kPzz//PGvWrGH37t0UFBSg0WjweDwMHjyY22+/naeffpqHH36YZcuW8e2339K3b1/y8/Opq6sjOjqa+++/n5UrV5Kfn8+SJUu44447uPXWW3njjTe47LLLiI6O5o033kCtVnPXXXexcOFCpFIp9957L19++SUikYgbbriB2bNnk5KSQrdu3Zg/fz4DBw5k0aJFvPrqq6xcuZJNmzbx5JNPsmHDBo4dO8bIkSMZOXIkkydPblYuPE3iS3HjjTdit9t57733mDlzJh9++CFOp9dvViQSIZfLWblyJXPmzCE7O5v9+/eTl5dHVFQUIpGIDz74gN27d2MwGJBKpSxevJhPP/0UtVrNoUOHKC4u9j9kgAABAgQIECDAJYfT6aS8vJyioiKKi4uxWLwumGFhYQwYMIC5c+disVhYt24dV111FVFR3tmAu+66i8TERPr06UN4eDg//vgjmzdvpra2lg8//JDZs2djsVhYtWqV71hPPPHEnwz7P4iJieGaa65Bq9UyYMAA8vLyyM3NJS4ujoqKCtatW4dCoaC2tta3TZ8+fejbty8AsbGxBAcHs23bNtxuNzabDavVu15RLBZz11130aJFC/R6PdHR0fTr14/k5GRMJhNms5nPPvuMiooKJk2axOeff05lZSXZ2dm+Y/3B6tWrqaioYNy4ccyePZvKykq2bt0K9f/lxIkTm5VhT1Mx7lNSUlizZg06nQ6RSMTLL7/MfffdR0hICDqdjs8//xxBEEhKSuLDDz/kiiuuwGQy0aJFC2bPno3ZbCYvL4/09HQ2btyIw+GgW7duzJkzh0GDBvkehgABAgQIECBAgEsZjUbDddddx+jRo7n77rtJSUkBQKFQMHDgQDZs2MC+ffvYvn07Y8aM8W0nFnuVxkQir2nocDiw2WwkJCTw4YcfMmvWLPLz8xk3bpxvG5Xq7LP1IpHIJzQiCAKCIGCxWBg/fjyDBw9m7dq1pxn21J/jHyxYsIDU1FQ+/PBDioqKTqsnCAI63clo5AqFArncO1Pm8XjweDzU1tbSsmVL/u///s+3j7vuuuuUvXgxmUy0b9+eDz74gDlz5pCfn8+IESN85Wp1015vciaahHEPEB0dzeOPP86oUaOIjIzkgQceICwsDEEQaNu2Lc8//zwDBw4kPj6eJ554glatWiEIAm3atOGVV15hxIgRCIJAu3bteO655+jWrRsGg4GnnnqKxMRE/8MFCBAgQIAAAQL8T9GvXz+io6N59dVXMRgMp9lHubm5WCwWDh48SE1NDcOHDyc9PZ0TJ06QmZmJWq1GJBL5ZgL+DrPZTHFxMXa7nQMHDhAeHk5UVBTffvstb7zxBhMmTCA2Nha32+2/KVarlalTpxIdHc38+fPp0sUrx9oYT/IbbriBkpIS8vLy0Ol0CIKAw+FAJpPhcrmw2byKVj179iQjI4Pq6mqfIf9HWXOlSfjcN2f+aZ/7ghNZfD93in82AJHR8Yy4+X4UyrP3nE+lrKSAJd9O47bRT6PSnL8G8/n43H/01tP+WQBIJFIGDbuJtHYN01X2eNxsXrsChVJF5x4D/IvPifPxud+x6TdcLpd/NgDxSWlExTa8o1lSlIfVYiI+KRVBOP9++Ln63BecyGL5ojmYTWdWDbpv7KuotSdHUP6ORd98QXJqO9p36e1fdE5cSJ/7zLw8Ppg925fWqtV0a9uWEZdfjlQiOa3uP8n5+NxXlpfw3VcfY7X++QOsDwrlxjseQqML8i86I3ablYVzPqZn/2Ekp7bzL2405+Nz73DY+XbWJCrLS/yLkMnkXH3jvcQmtvQvOivLf5yDITSCHn2v9C86J87H5/5s7aFKpWHIiNuJT0rzLzojDoed1Su+I7FFa1LbdPIvPicuNZ97o9nCrkOZGM0WxCIR0eEGOqQm+VdrFA6nkzk/rSYtMYY+ndqQX1LO8bwiBnRN9696zjTG5/5sC2r/UMt54YUX+PDDD3n11Vd57rnnKCsr4+qrryY4OJjY2FiKioqIj4/n/fffx+Fw8N5777Fz507i4uLQaDQMHz4co9HImDFjOHjwIDExMf6nwZIlSxg9ejSXX345CoWCoqIi7r//fq655hoeeOABcnJy6N+/Pzk5ORw5coRPPvmE6dOnY7fbmTNnDi6Xiw8++ID333+fm2++GY1Gw+TJk3nnnXfQ6XTcf//9rF69mt69e5OSkkJ6ejrz5s2juLiYDh068N1339G/f38mTJjAgQMHiIyMRKlUcvvtt9OtWzdGjBiBw+Fg6NCh3HHHHbz11lscP36cyMhI1Go1o0aNorq6muuuu47i4uK/nKFoigSM+/PknzbuXS4nVosZgKMHd/HVF28z/s3pqDQ6xGIxckXD9PWp/+j/+vM3jLh5DEpVw4zVv+J8jHtT3cmpuLuGd+A/T/8ffS6/BkEQkMkVSCTS0+qfDY/Hze6ta5ErlLTteJl/8TlxPsb9glmTcTodAPz4zRe07diD1NYdAejUYwCt0xsuu7V80VcU5mUz6qEXGvx//BXnaty7XC5sVgsej5sjB3by4RuP8/anPxAcEg6ASq1t8DMIsPKnecQnptKqEf/FX3EhjfvNe/fy7Hvv8cWECcRFRrJl714mTp1KZEgI8957zzdt/U9zPsa92+3GajHh8XgoOJHJlHee55nXpmAIjUAkEqFQqht8v+x2G8t/mE2nHgOIT0r1L24052PcezwerBYzbrcLh93Ga8/czW33PUXbDj0QBAG5QolY3PAO2JpffiDIEEbHbl7/3vPlfIz7U9vDB27uxaPj3ie9c69GX5fTYWfzuhXEJqSQlNLGv/icuNSM+8PZ+dz78iT6dm6Lw+lixcZd9O/aji9efti/aoOx2uw88Pon9O+azn3XX8E3y9by368Ws+ObD/yrnjMNNe6tVisOh8M3yu7xeLBYLLhcLrRa76De7NmzGTdunE/hpri4mKuvvpoHH3yQm2++2fvcyeXIZF6VOIfDgdVqxe12e+2OevcXi8WCVnvm9n/JkiWMGzeOb775hsTERCQSCUqlEpFIhM1mw2azIRaLEYvF2O12lEqlb63lH/7tTqcTs9nsOx+r1YpUKkUsFmOxWFCr1UgkEoxGIyKRCJVKhcfjoa6uDpVKhUQiwel0YrFYfOeuUCiQSCRYrVZsNhsSiQS1Wv2na1QqlXg8Hsxm81mvsSnz91+KABcVsViCWqNDrdGhUKgQicQo1Vpvuv4jfWD3FkqL8zm0dxtVFaXUGWs4dmgPe7at49Debb4Ph1Klpk2HHkik3hf2+JF95OceJy/7GHu2ryM74yCu+pfrn+aPa1JrdCCAXK5ArdGhUmuRSKRkHNlLcUEuJ7KPUXAiE7fbTV5OBvt2bmTP9vUUFeTUT+UJRMYkEhbhHTmoriwn69gBKstLOLB7C4f2bcNu+/fWXNx8z+PcPuYZbh/zDAAdu/b1pVund6WmugJjTRVWq5namio8Hg82m4Xy0kKKC3OxmE2+ffW/4jpuunssYrEEh8NOZXkJLpeTyvISKsqKzziV+U8gFotRqTX1z5wKkSCgUnmfQbVGh9vl4viRfdTWVJJxeC+F+dk4HHaOH9nH3h0b2L9rE+Wlhb79JbdsR0i49wNVU11B5rEDFOXnsG/nRo4c2IntDCPO/yZikQitWo1Oo2FI795MeuEF1mzfzvzly6HeyDxw/Dhrtm1j9+HDOF0uSioq2LBr12lTxoezsiipqDhlz/8OIpEIVX0boVRpvG2Gynv/lCoNgiBwZP8OSopOcPTgLkoKT2Axm8g8uo8929dzYPdmaqq85y0Wi0lt0wl9kAGAvJwMsjMOUpSfzd4dG8g4vAe7/d+ZvhYEAaVK7WsnRCIxSuXJtFgs4fiRfRScyCQn8zA5xw/jsNs4kX2UvTs2sG/nBkqK8nz7S0huRUR0HADlpYUc2ruNyvJiDuzezIE9W846U/VPcGp7KAgi5Arladd1YM8WigtPkJ1xkOKCXBwOOzmZR9i7Yz37dm6krKQQj8eDSCQmPjGVoGBvVPbS4nxyjh+itDif/bs2cWT/Dhz/0v36J/F4PBiN53Z/PB4PdoeTR28bzqTnxvDSAzcz56ffyS0qo7SyhqraOurMViprvPt3ezyUVdWSXVCCyXLyW+LxQE2dieyCEqqNJk4dJr16QHd+nDT+ZAZQWWMkp7CU8qpa7A4nP/y+mchBd5OVX0xFtbFR7iZ/hUKhQKvV+vzmBUFApVL5DHuj0cjUqVPp2LGjz9XlDyQSCTqdDq1W6zPsAaRSKVqtFr1ej0ajQSqVIpVKfa4uZ0MQBJRKJXq93tfZAJDL5eh0OtRqNQqFAp1Oh1QqRalUnrZw1f98dDodSqUSmUyGXq9HUj+bqtVqUau99pBIJEKn0/nKJBLJaef+R75CofCdF2e4RrFY7Dv+X11jUyVg3F8CTBw3mmmTXuH7uZ+Sl5NBeUkhWccOUFSYy0/ffcnib6cBUJSfw7sv/Ye6mmoAZn86kSnvPM+G338iLyeDz94fT8aRvX57vzjM/PgNZn36f8z+dCJ7tq/D7XZx/MheigpyOHpwF19+/DplJQV4PG5+/fkbNqz+GYBDe7cyaeKTLJg9mZzMQyyY9RErFn/tv/uLxopFX7Hyp3nM+Og1fvh6Ck6HnRWLvmblknn8tPBLZk55g4oyr7rTrq1rWLX0W9wuF8UFuXw99V3mf/khPy/8kjmfvcn2jb/57/6iYLGYmP3ZRGZ/+ibffPlfDu/bjrnOyOH9OyjKz2btrz/yydvPYjHXATDr04lsXf8LAEcP7OTdl/7D8h9mk3/iOD/M/ZTtG3/1O8LFpWNaGt3S01m1ZQsej4cFK1YwZd48jmRn8/pnn7F41Sryioq45emnyT1l0ddLkydz9AzKDE2ByW8+xRcfvMTCOR9z9NBuqitLyTx6gOKCXH5btoCvp70LgM1i4eO3n+Xw/h0A/LTwSz78vydYtWwB+bkZTJs8gT3b1/nt/eIx69OJfPreC8yb/j7bNv6K2Vznu66dm1cz9cOXfXW/nTWJ1cu/A2D7xt9484X7WLJgBrlZR5k77T1WLGo67cb7Ex5h5iev8/W09zi0bxtWi5nMo/soKcxj55bVfD31HcwmI3a7le/nTmH/bm/MmE2rlzJp4lP8tGA6uZlH+PKTN1i/aon/7psdLpeLeV9/zddz5lBS8mc3rcZg0GsRALfLzZT5S/nqp9U89+FMPpr3Ey63m9+27OHdmd8z48dfmThtIaWV3u/nsdwCXvrka2YtWcWUb5dyKOtkx3H9zoM8898vob5zMG/ZWp58bzrTf1jJ5Hk/sftIFjsOHsdssTFv2Vp2HjqO+wIZ93+Hy+Vi7NixTJw40Wfo6vV6XnzxRXr16uVf/Zzp0KEDr732GhERl0Y8leZGwLi/BLBaTaS27cwzE6bQruNlxCenMWTEbQy77i46dOnDrs2r/TfxodJouO62/3D1yNHo9MEcP9w0jHuA/BNZPDLuXa689k4kEin9rrieIdfczoib76O2uoqqilL/TQBwOGzcOvpJht9wD+mde7FyyTz/KheNsuICvp09mRap7bjp7keRyuRcee0d3HjXI9z9n3HkZh4h8+h+qB/VLi8t8o7uWy1sXf8LYRHR3Hzv47Rs3ZHvvz7zWoyLhUgk4rnXP2fAkBvQBRm46oa7ufLaOxl2/d0cO7T7tNH7U1FptFx53Z0Mu+4u2nbowc4tZ39eLwaCIJAYHU1FdTV5JSU88fbb3HbVVfzn5pt54KabmLNkCa2Sk4mLimLp2rUAbNu/H5PFQqfWrf131ySwW61ERifwxEuT6D1wOJHRCQy++haGXncnl/W9kt3bvNdxJkQiMSNuuZ+rbriHuMSWHNrrlYxrCng8bkQiEfc//jo33P4gOr2B/ldcx5XX3s7AoTdSmJd11hF5i8XEldfewVU33E2/wSPYu2P9RZ9FOhWr1cJjL/yX/ldcj0arZ+CVNzJkxO1ccfWtFOXnYD1l1u9U7HYrN416jOEj7yG1TSc2rPrJv0qzw+PxcPToUaZNncrYhx7i+++8nbTGYrM7WLlpFykJ0SREh5NTWMrE6QvpkZ7Kk3ddi9Pp4v1ZP3Lj4F68OOYmaupM/L5tHwAfzFlEy/honr/3Ru6/4UrCDSfdlipr6jiclQ/Apr2Heer9GQzv240Xx9zEuNE30rl1Mr06tEIqEfPMqOsZ2L094vpR7X+aoKAgbrvtNjp37uzLUyqVXH/99aSmnr/r3R8kJCQwcuRI9Pqm7c51qfLvPE0B/lF0egPtOvRAqVIjEoupra5g0+plLJzzEds3/UpN9dldA5JbtvNN1Uvlctyef8fVoyH0H3wthpAIJBIpLpeTw/u3s2TBNBbO+ZiK8iKfb7s/MbHJBAWHIYhEyGRyXK5/x9WoofTocyVDr7sLtdbb6NltNnIzj3LkwA7MJiMmY43/JgAkpbSh18DhKBQqdMEh1J2l3sVi0PBbUChViCUSrBYze7av58d5n/HL4nm43V5/6TMRFhFDkCEMQRAhlclxn2VB8sXEaDKh02goLCnBarOxfP163po2jV83bUKrVmNzOHjktttYsX49tXV1vD9rFsP790d7HhJq+ZWV/Prrr6xZtZLKwiPgcbN/+2rfz2qp40TmQfZvX82BHWupLCuktDDHV37i+AFEIgGFTETG/i0c3bsZc10tR/dtISTEQHh4OCJBoLK0gC1rljDro1f4+M3H2bT6ZwS3g/3bV5N5ZBdOh53iE8fYv301DksNSS1aYaqp4MCONeCyolKqqK4s9R038/AunE4Hx/ZvY//21RzatR6TsZqsI7s5uHMNuYc2UF5aSElJCYd2rCZz/3oyDmzDbKrl6L7N7N++mmP7t2K1mMg44N3H/u2rqa4ooaKkgP3bV3Nw1zokIg8mY42v/Oi+LQiCiJjYeIrzjnFk7yZKC3NZ9fM8Pnz1Ib769HVMtZVUlhWzf/tqPE4rdTVl2K0WLMZKEuITqC4twGSsQYwHkdvBoV3rKCvMxVjtvd7921eTdWQ35roaDu5c6z2Xnetwu1zUlR9n09pfWbF8OQV52ZQV5fq2yc8+jNNh953r/u2rsVpM5Bzb59tHdUUJxXmZBOm0FGYfpiDnKBaTkUO71qPTqGnfoStSmZSMg9vYuXEF3854h29nfsiS+Z/jsNRwdN9mCnKOIpcrKM07zv7tqykryiEpuRX5mQc5sGMtLmsdeNzk5xxl//bVHNixhrKiE1SUFrB/xxr271hD9tE9OOw2ju7bwv4dayjL3o7bbmTTpk2sWLGCFStW+BRI/khv3ryZyspKVq9ezYoVK9iwYQNms5l1a9awYvlyVixfTmlpKcePH/elD+zfT2lpqS+9ft06XC4XmzdtYsXy5axcsYLSkhL27N7tq5OVmUlVVRUrf/mFivJyXC4XpaWlzJ83j69/XoO7EYPfH3+zlKfen0FFTR1LP3kFUf2auesG9mDUiEHoNWrW7jxARY2R4vIqNu87CsCx3ELcbjfbD2bQIS0JlUJOuEFPWPCZRQU27z2KXqPmxit6oVTIUSsVSCUSJGIxIKCQy5BK/p21PAH+dwgY95cAQr1+LIDNauGHuZ+xZ8d60tp2ISmlrc/PrbkhEp1s8I7s38n8Lz8k2BBO156Xo1Q2bIFrUyQk9OQ0pbGmiqkfvsSGVUsozMvGYbefVvdURPUfg6bKqc/Z8h/nsGDWZOISU2nbsftp9ZobtXV1bNqzhy5t26JWqUAQ6JaezrC+fblrxAheeegh9Go11w0ahMliYfHvv7PzwAFuGDzYf1eNItZg4IorrmDAoCEYoluBICK920DfT6HUEN+iLendBtKua38MYdGERyf6yuNT2nk7VXY3LdMvI61DT1QaHWntL8NidRAVn4pKo8MQFkNRUSFl5eX0GXwDyWntqak1kt5tIC1adUYilREZn0p6t4FIlXqcLhdR8S2956AOps5kIsgQ7jtui9adkUikpKZ3J73bQNp07otaG0Ryq0607TKAhDZ9CA2PJiIigjZdB9IivS8t23VHpdaR1r4n6d0GkpreA4VSTct23n2kdxtIUEgEIRExpHcbSNvO/XC6BdRava88rb13QX1IRHz9fzKA3OwMNq5dQe8rbqD/VbciVaiRK1SkdxuIIFGg0YchUyhRag0YTVZad+qNRheMTKXFJUho06kvYdEJaINCaNd1AOndBpLcqhMqjZ62Xfp7z6VLP0RiMZrQFHr1v4Khw4YRE5dEWFSCb5vYpNZIpDLfuaZ3G4hCqSYxtb1vH0EhEUTGtaC61kh0UmtiEtNQqrW06dyX2joT2uBwVGodrTr0wmp3cvz4MRJT2tKxx+XYXQIt2/UgJjENm81KeFwK6d0GEhaViAdo07kv6d0GogoKxe3xEJuY5vuPwqLiCQmPIb3rANK7DiAprSNSmZy09peR3nUAYUndEMm09OrVi6FDhzJ06FAiIiKIi4vzpXv27InBYGDgwIEMHTqUPn36oFKp6DdgAEOHDWPosGGEh4eTkpLiS7dLTyc8PNyX7tuvH2KxmJ69ejF02DCGDB1KeEQEHTt18tVJbtGC4OBghlx5JSGhoRhCQrjt9tuZ8Prr3DasLw3QtPAxsFs6j952NV+8/DBxEd41CgAx4d71JQB1Zgt2p5O8knKy8ovp1CqZq/p0RRAEaurM9Qb6X2OzOwgL1v9rI/PNiYceeoglS5q/m1hTJPC0XWKYzUaOH93HlSNup32X3gSHRjRpg7ChHNy7leCQcHoNuIrk1HYIjWnFmzCb1i6jpDCP2+57mmHX340uOMS/SrNk19Y1tOt0Gd16DyYyOsG/uNngcrn4dP58xCIR9153HWmJiaQmJrLv6FE6tGpFp9atSa1XgtCqVLRNSeGdGTO4olcvYpqJr6ndbiPz2AF6DbiKTt37Ex4Zi3AJGCIej4cTWUeIT25F9z5DiE1oiaSBqjNNncP7d5Dcsg3deg8iLim1WS74Ox8EQeC6669n9ldfcf9//kPbdu0arWTVLiWeVkmxqBRnVzTq1jYVqVjCoO7tGXPDEMbcMISubVMQBIGwYB0Wm3cwxuV243Cdeda7RWwkh7JPUFLh9dX/X6Guro5bb72VWbNmAVBeXs5NN93E+PEnFxoHBQWdFrQqwIWj+bfg/0NI5XIMoZF/GokPi4hBKvM2UFpdMD36DGHu9PeZO+09KkqLUKrV/PrzN0ikMsIiY+pHgCE4JBxNvWsIQFBwKCr1+evfN5aIqDgUytPdF4JDw71KOvX0ufwaaqrKmf3ZW3w19V2SUtqw4bclgIBWF4S6/rzlShVBhjDfdiqNltB6ZZamSEJyK5xOB5vXLmfdrz8iCALZmYdwOs7scnSxkcnkhEXG+p4h6kfsg0PCkUpPfiSvvPYO9mxfz+xP32TXljW0bt+VnZtXY7WYCQ4JR6X2zrzIFUqCgkN9z7RKrUF/ETs4CpkMD/DFggW8OXUqj735Jln5+fw+cyZ6rRaZVMqPH31EVl4eT73zDq9/+in/nTWLmnrljusGDUIqkTD29tv9d31RkEikhIRF/MnwCQmPRK7wqlIolEq69hzEL0vmMm/6+2RnHCQhKY1vZ0/G4/EQGh7lq6vTB592f7S6YLQN1My/kAiCQEhYBLL6du8PvG2at90QBIF2nXqSffwQc6e9x6Y1S4lJaME3Mz/AYjYRFBzqa/+UKg2hESfbCYVSTbAhDC5CJyc8Iga5/HRp0LDwmNPki3sPGM6xQ3uYO+09Vi6ZR3RcEst+nI0giNAHhfjaU7VG51POAdBog05rH5srEomEfv37Exwc/Kdn+0ISFxnK9YMuY8q3y1i+YSdL1+9g1+FMPB4P1w/qyfzl61i1dS/TfljJ3qNnXjw/YkB3ru7XjSffm86yDTv4ed12Dhw/QWpCNAlRYbw/+0dyCkoumFrOP0lhYSGTJk3i1VdfZcqUKZSXl+N2uzl06BDvvvsur7zyCjNnzqS6uprFixezceNGFi5cyFtvvcWiRYvYuHEjq1ev9m1bXFzsUz165plneOedd5g2bRrPPvssX331FSaTV9J33bp1vPzyy7z77rt8/vnnPP744wAUFRUxadIkJkyYwOeff37ei6svJQI69+fJP61zfypWi4mykkJi4pJPM66yjx8iKibB16A7HHYK87KQyuSER8ZSXHgCsViMISSCwrws4pJSkUikFJzIQqFUERIWCUBxQS4KpZogw8mPwV9xPjr3p5J5dB/hkXFo9cG+vIITmajUWp+WusfjobK8hLraaqJiE7FZLVRWlJCQnEZFWTEisYRgQxh1xhqMNVW+YFHVVeXUVJWTkPzX2sencj4696ey8qdvaNm6w2l60wd2b/ZOebf1LmbyuN3s2bGe8tIi4hJS0OiCyDi8hz6XX0Nhfg7mulrS2nXBWFvFsYO76di9H1KpjKL8HI4f2UffwSdDZP8d56pzfyoWs4nighzfMwTgdrkoKsglJCzytIBqhfnZuJxOomISMdZWYTGbiIiOo7ggF7VWT1BwKKa6WmqrK4mIjkMkElNTVY7VYiYiOv6Uo/41F1Ln3mQ2c7Q+0AuATq0mLjIS+SmycAB1ZjO5hd4FwrGRkejqZdhMZjPZhYW0Tk4+r2n489G5PxW73UZJYS5RsUmnxUo4kX2UkNAoX/Axl8tFUX42Ho+byJhEKstLsNutRMckUXAik5CwSNRaPWXF+bjdbt/9KSspQBBEhIZH+fb9V5yPzv2peDxu8nMzCQ2POs3o/XO74aaspJA6Yw3RsUlYLWYqy4uJT06jvKQQWf2ASU1VBVWVpSS28C6ANtZWUVvtbUf8B1POxvno3J9KdsZBIqLjTxtoyTl+CENoJLp6SVK32015SQEWi4no2CTqjDXU1lQRl9iSsuJ8VBodWl0Q1ZVlWC1mImO8s2cVZcXYrGai45J9+/47LjWd+6raOlZt3cvQ3p3RqE5/7lZv349OraRLmxRfXp3ZypZ9R8kpLEGrVtK1TUuS4yKpMZpYt/MgZVU1pCXGUGe2khgdTqukWI7lFrL3aDY3DfEG6qszW/h9+37Kq2oJCdLSq30rQoN1bD+YwYHjJ+iYlkSnVsl/OQPTUJ37fwq3281HH33Em2++yeLFi6mqqqJHjx6IxWJuvfVWBg8eTIcOHZgwYQKjR4+mW7du3HnnnQwbNoxbb70Vu93OqFGj6NSpEy+++CIpKSloNBpeeOEF3njjDVq0aIFUKmXcuHGo1WqeeOIJFi1aRGhoKFdffTW33XYb/fv3Z/r06fz6668UFBQwZcoUJk+ezNy5c6mpqSE9PZ3ISK89879OwLg/T/5N476pcaGM+6bGhTLumxoXwrhvilxI476pcKGM+6bGhTLumyIXyrhvalxqxn1z5WIb9wDTpk3j8ccfZ/z48TzyyCMEBwezfft2hgwZwr333ktISAjff/89LVu2ZOrUqQwdOpS77rqLhx9+mKKiIoYPH06/fv2YNGkS1M/AnGrc9+3bl+nTp2MymYiPj+enn35i06ZNfPXVVyxcuJA2bdowa9Ysxo8fT2FhIbNmzWLs2LG8+OKLjB071qflHyDglhMgQIAAAQIECBDgb7jjjjt47733WLRoEf3792f9+vWUl5fj8XgICQkhNjaWxx9/nAceeMB/0wYhk8mQSCSnzWBkZWURFBTkM9xPLbvxxht5++23+eGHH+jTpw/r16/3lf2vEzDuAwQIECBAgAABAvwlKpWKRx55hB9++AGDwcB3331Hq1at0Gq1pKWlMWrUKEaNGsWgQYOgfj2W1eqN6isSiRAEwZduKJ07d6a2thaTyYTb7ebEiRO+Mq1Wy9ixY1m6dClKpZLl9VHEAwSM+wABAgQIECBAgAB/gcvl4osvvuDBBx9kypQpZGVlcfnllxMXF8fDDz/Ms88+y4QJE3jyySd55plnkMvltG3bljlz5vDxxx8jFotJTExkyZIlTJs2jYqKs8ffOZXbb78diUTCxIkTeeihh5g/fz4ymQy3283UqVN56KGHmDx5MgUFBXTt2tV/8/9ZAj7350ljfe7Lqm3MWnECu8PNX6ydaRa43B60Sin3Dovnl+2l7M2sQa3455QL/i3Ka+zcPjiOrmlBzP+9gAPZNcRdAj7Bx/NNDOocztAe4YyfdgiNsvnfK4DCciufPNEBy9GjnHjzTcS6MweTaU64LRYkQUEkvPYaNW4ps5afwGx1XQzxlguK2wNKmZh7hsUTopOxalcZq3eXoZI3/2fR7Ya7r4wjPkLFrBUnyCo0oZA18xsGmKxu7rwiltYJTduf2bJ2Os6Cg4gNDV+M35xwntiD5ua3EQU1bPH6P0FlZSVbt26loqKCLl26kJaWhkgkwuVysXfvXvbv309oaCg9evQgNDSUyspK1qxZg81m4+qrr0YQBJYtW4ZMJmPgwIEsXryY9PR0OnXqxPfff09UVBS9evXC4XCwcOFCBg0aREREBIWFhWzYsAGDwcC2bdtYvnw569ev951PWVkZ3bt3JzU1tcEL4C91Asb9edJY497p8lBUYcVsa3pROM8FrVJCpEFBrdlBSZXNv7jZEh+uRCkXk1tsZk9m04oEez50TQsmJlRBQZmFOuul8QxKxAItotV47HYsx4/jMpn8qzRLpKGhyBMScCNQXGmjztK0Ii2fK2qFmKgQBWKRgNHspLjS2qjIok0VhVREdKgCqUREeY2ditqzB6RrTkjEArFhSuRNfDG3szgDZ+4u/+xLBkEiQ5Z+JYKs+YtWNAaHw8HMmTMJCwujrq6Ozz//nJEjR/Lkk0/6Vw1wCgHj/jxprHFvs7vZerjqkjGEY0IVdGsVjNPl5redZVjtZw7k0dxIjdPQoYWOgjIrmw5W+hc3W/q1DyHCIGfj/goKKy6NZ1ClEDP8sgjMVhebDlZSZWyaMQIaS1KUik4t9Qh2G1XLl2PJzPSv0ixRJCdjGDYMp1TOp4uy2bi/YdPzTZ24cCVP35xCTJiSe97ehekS6YylxmmZOMYrEdqUcZfnYj+61j/70kGqRN5x+P+cce92u1m1ahU7duwAoFevXvTo0SMQ/OpvCBj350ljjfvCCitTl+SgkIto5kqYOFwe3G54+Lok7E43L884TGrs6cGomitWh4eX707j65V57M6oJtLQ/CXtTpRauLJ7hE8Ks3V885f3BNiVUcM3r3Qjq9DEtJ9zMWibfxRSi92NQiZm7A3JiEsLyRk/HnlsLIK8eT+HHrsd64kTJE2ciCcqluk/5xKil6JTn9Tgb66cKoU55t3dXN/v4rlPXEgWrC5g9gtd/LObHJbfP8eRuwuR/tL43/1xFR5Ce+fkiyqFGaD5EDDuz5NzMe4vRZ17u9PN5O8y6dP+4kUXvZDsOlbjM+4DOvdNmz907rMKTSxYU0B6cvP3uTeanZRV27lveALi0kIKJk0i9NprEaubd+fZbTZTtmgRMY89FjDumwnNxrgP6NwHCOCjaTvRBQgQIECAAAECBAgQoMEEjPsAAQIECBAgQIAAAS4RAsZ9gAABAgQIECBAgACXCAGf+/Pkn/a5r6ooZcPvP+F0/FlWTaMNot+Q65DLG6bB7rDb+H35Qjp060tkdIJ/caM5H5/7bRt/oyA3wz8bgKSW7ejYra9/9lkpOJFFXs4xLus31L/onDlXn/slC6bjcp5ZraVdp160bN3BP/usZGUcpK62mnadel4Q7d5z9bmvra5k05plWMxG/yIABgwdSbAhzD/7rGz4/SeiY5NITm3nX3ROnKvPfXFBLts2/nrG+6ULCuHyYTedFur8r7DbrKxY9DU9BwwjLCLGv7jRXGif+9LKSuYvW+ZL6zQa+nTuTIu4uAZf44XgfHzurRYzz4wZTm1NlX8RekMoj7/4ASlp7f2LzoixtppP3n6WG+98mNQ2nfyLz4lz9bnfvvFXPn7rWf9sAGITWvDs658RHBLuX3RGykuLmDbpZe5/4nVCwxv2fv8dl5rPfUW1kWXrd1BRU4tELCYtKZbBPTqeV9wZm93BMx98Sc8Orbh9WH8OZeWx/WAGo6653L/qORPwuQ/QGM7fYgjwjyISi9Fo9Wi0QZjqjPz8/SzEEikabRAqjRZBaPgtdDmd7Nq6lqqKUv+ifx2FQoVGG4RGG8T6339ix6bffWmFomGdlT+oLC/m6IGd/tkXBY1G57uOr754h2OH9/jSUlnjlE6KC3LJyTyMx3Nx5UVFYhFqjRaNNgib1crCOZ9gMtX5rkssblwAokP7tlNcmOuf/a8jkUh971Z5aRHLfpyDWuNNq9QN68z9gdPpYOuGX6ipapqyjgWlpbz35ZeYLRaCdDqy8vIY/dJLTPziC6y25iGJqlCq+GTuaub8vIdp320myBDKi+98yZyf9/DxnN8abNgDKBRKrrjmVsIjY/2L/nW69b6COT/vYc7Pe/jP0/+HLtjApFkrmPPzHt6c8n2DDXsAjVbHFdfcjlqr9y8KUE9JZTUffr0Yt9uD0+3mtc++4eqxr2N3nLt0qcfjocZowmL1DsLlFZWxaute/2qnUVtnZvvBMw9wBQhwvognTJgwwT8zQMOpNjs4XlxHl2QDogZ0/Y0WJ/uzagnRyRA1YKRfoVCRlNKGFmnpqNQa9u/axD2PvEib9t2JT0pFLJZweP92pFIZhXnZuFxOFAoVRQXZZB47QE11BUGGUEQiMYIgwhAaQWxCCgqFitzMw9RUVyAARw/uxOlwoNUHN3gkz+nyUGNy0jFFj8vtYeuhKuIjGqbBGxEdR4u0dFqkpbNvxwbCImO45Z4naJGWTmhENCWFJ8jLyUCpUpOXk4EhNAJznZHs44fIzTqKIAiotToEQUAmkxMWGeutY6rj2KFdhEXEcCL7GPm5xwkKDkUsaZw8YlGFjf4dQtmXWYvZ5iJEL/OvckaSWrb1Xdd3X09h4JU3MvzGe2iRlk6QIZTcrKOYjDW43W7KSwvR6oIw1laReWw/+bnHkcuVKFVew1KhVBEWEYM+OASLuY6czCNodUFkZRygorSQIENYo0b0iyttRBoUpMZpWLyxiDaJDYs4KZMrSEhuRYu0dLT6YDauXspto5+kW+/BtEhLRyKVkZt5GJFIRG1NJdWV5eh0QVSUF5N5dD+lRXno9MFIpd7/UKcPJiYuGbVGR01VOQV5WchkMo4d2o2prhatPhiRqOEdhiMn6hjRK4oqo4ODOUYighvWiVJptL775fF4OH54Hw8+8yYt0tKJS2yJIAhkHN7jfbfys3HYbSiVaooKcsjKOEB1ZTnBhnBEIhGCSERoeDTxiS2RK5ScyD5GVWUpgiBw5OBOHHY7Ol3D3y27w43Z6qJzahAikxHjli2oWrVCJGvYc+hPcXk5S37/nZcfeogrevZkQPfutGvZktc++4wwg4H2qakAFJWVsevQIQCCdDrKKis5mJFBTESEb1+ZeXlU1tRg0DfegPQ4HJiPHEHXowdodew6VoNKIUYua/j9pn6g4tefvqF7nysIDT85Qr5g1mSsFjP7dm2kvLQQfXAoG1f9xOpfvmf/rs3IFUpCw6Nx2O3s37WJ8Kg4NFo9u7etZffWtVgtFn5ZPJdjh/YQG98ChbJh7RlAaZWNNok6DDoZSzYWn1NE17ycYxzYvZmBQ2/0tQPlJYV89/UnhIRFsfKneUREx2Mx17FyyVw2rP6ZjCN7MYREoNUHY7WaObh7C3FJqUglUjavW0FFWRGZR/ezevl3FBXkkNyybaPajYM5Rq7v2/RGi4uKitBqT/7HzpwdeOwWRNrQ0+r5U1ZVyw+rNvP6I7dzZa/OGIK0/Hf2j9x59QDyS8oxmi3YnS6Kyisx6LS43C4OZ+ezPyMHjUqBWunVV/d4POQWlbH9QAZuj5t1Ow+RFBNB59YtUCnltIiLIj7y5IxmRm4h+45lY7HZUcrlfLN8HaNfnUzHVsk4XS4Meu1ftg+usixkrfohKBr/XAX436Phb3iAJsvMT95g+uRXefWpO1j36yL27drI93M/Y9/Ojcz6dCJfffEOADarhc/eH0/m0X0ALP1hNtM/eo3P//sSOzb/zjsvP8ihvdv89n5x2LL+F6Z9+DKfv/8C7094BKfTwcqf57F6xffs3raOd195iMyjBwA4emAXP8z9FIDSojymfvgyC2Z/xLczP2ThnI945+UH/fZ+8Vix6CtWLPqKV5+8g3nT38fhsDN32ntsWbuCjauXMnHcaPJzjwOwa+saVi1bgMvlorggl9mfvcnEcaP5ZfFcZk6ZyNLvZ/rv/qLgsNtYvGA6y36Yw9NjhrP0+5lUlJUw5d3n2bllNT/M/YyXH78Nq8UMwPyZk9i5dQ0AGUf28cV/X+S9Vx5m64aVfPr+C+zdscHvCBeP+TMnMfOTN3jx0ZtY88sP7N+9mW++/JA929cza8r/MeW95wGwmk188NpYcrOOAPDrT/P47L0XmPrhy+zbsZ7JE5/i0L6m8W4BCIJA13bt6J6ezswffwRg465d3PTkkyxdu5abn3qKLfv2UVJRwSMTJ1JeXe3b9s0vvvB1AJoavy39lq+mvsvOzatxOV24nE4iYxK4ZuR9RETFMefztwCw261sXL2UyvJiAI4d2s23syaz4fcl9Bt8Lds3/sryRV/57f3iUF1VxvIfv2LapFfJzTqCy+XE7XbRsnVHrrvlAYw1Vfy0cDp2uxWzqY6Nq5diMRlxu93s37WJT95+lsK8LC7rP5RF8z5n55bV/odolnzx2Wc8+9RTZJ5ncDcBAQ8gEYuZMn8ZMxf9xrWPvcFbM77D7XYze/EqXv9iPis37WbMqx+TXVACwJb9xxj9ymTW7jzAW9O/Y8Oug759rt95kGf++yUALreb8R99xc3PvcvSDTt5f/aPbNxziJyiUuwOJ9v2HyO3sIyAh3SAC0nAuL8EqCgrxuV2MWnmL9xwx8N07NaPR8e9z90PvsBV149i8xqvr63H48FqMeFyugCw22xUlBVx5wPPct+jr5KQlNZkDBCnw05BfjZtO/bgo9m/IpFIue7W//Cfp/6PUQ++QFxiS7IzvI2py+XEZrMC4Ha7sFrMCMAzr33KbaOfYufm3ykrzvc7wsXBYbex9tdF3P2f53l6whRkcgUPPfMWox99hbHPv4tUKuNE9jGod/Vw2G3g8Ubpy889ztUj72XsuPe4fNhIVq/43n/3FwkPdpuVHZtW8X+Tv+WBJ98gJDySV96bwz0Pv8jY598lPzeDnEyvQWizWnA6vH7ubpeTirIibh/zDKPHvsxl/Yaydd0vfvu/eFSUFWMy1TLl6zXcPOoxOnTtw9Ovfsyoh8Zz9U33eTtfTicejwez2YTLVf9u2W2YzUZuu+9p7n5wPIktWpFxeG+T+oCLBIGU+HgqqqvJKy7mqXffZcIjj/DuM88w+oYbeP3TT0mJjyciJISZP/wAQHZ+Ptv27+eyDg1fO+KPzeGgtLycstIyrOYa8HiorS73/dwuF1aLyZe2WUzYbVZf2lxXA4BIJMJiqqW2uhyn04G5rgaxSCA+MYUnXvyA7n0GIRJBdGwCLpcdQ2g4NVVl1FaXU1dbhdvlxGI2ere321AolNw+5mkMoWG0Tu9M7vGDOB1233FNxmrAg8lY7ctzOuxYzHXUVpdjqavEZjXjcDhwWKqorS7HWFOJ2+3ybWOsqfSd6x/7sNssvuPYLCakEikupxNjTUX99dbi8bjp0qM/9z8+AYVCgV5vICmlNU6HjfiEFMpLCrFZLZhqqxAED3W1VXjwIBKgVdtODL32DpJbtiE8MobDe7ZQW12O1WLC7XL5zqOutgqX00ldbf25V1fgcjlx2c2UlpRQWlKC0WjEarVSVlZGaUkJ1VVVuFwuX3lpSQkul4va2lpvurQUk8mE2XxyHzU13pnLP/ZRVlaG3W6nqqrKV8dms522TXVVFXa7nfLyckpLSqisrKS2tpbNmzfzyIMP8uEHH5BXXEFj3q6i8ioOZp7gu982MmJAd+KjwrDY7Mxbvo43H7ubaa+MpbLWyNdL1zLhwdt458l7SEuK4/dt+/B4YPLXSxg1YhBvPHIHk5+/n06tkn37djhdmCxed7cVG3cx7ftf+HjcA7z/1L18+dpjXNmrM/06t0UqkfDSA7cwpFcnxI2YTQkQ4O8IPE2XAEqVhgFDbiAkLBLqF/dt3/gb82b8l99XLKT0LwzbVm27EBPfAgC1Rus1JpsIISERDLnmDp+vemlxPisWfcXMKf/H8SP7qKv/yJ+JG+8ai0gkQq3xLq60O5rOdfXoM4QuPS/3+arn5WSweP5Upn80gdLifGz1I9z+xCak0Lp9dwDkSpWvQ9NUuObm0SS0OLmY7fC+7Xz31SfMnzUJl8uFyVh7Wv0/SE5tR2xCCoIgQqlUY7Oe+fovBkqlmiEj7iA4xDu97nDY2b7pN+Z/+SG/L1+I2+Wmznjm5zCpRVtiE1IA0Oj0OBz2JmXcA1htNuQyGScKCymvqmLJ6tWM++AD1mzbxomiIuxOJ7cOG8bi33/HaDIxc9Ei+nfrRlykt605FxwuF5WVlZSXl2KzGAE3xuoK38/tdmKzmHxpm9WMw271pc0m78JusUjAYjJSV1OJy+nAbDIikUpJTE5FEAnY7TZyjx9i+uRXmPPZW2xdvxJzXa13H8ZqXC4XVrPRa8Q6bETGJCAWiTBWVyB4PEgkEpxOB8aaSozVFZiM1Xg8YDLW+M7F6bBjNddhrK7AWleJzWLGbrfjtFR5t6mtxO3yGvfedJX3XOvPw1hdgd1m9R6nugK71YRUKsHlclJX492HxVQLeGjboZtvm+NH9/Llx6/x3Vcfs3Pzb3jcLlwuJyZjNSIBbwfI40EQIComAWNtJQ67HZlcgctpx1hdgc1iwu12nby+2ipcLofvXI01FbhdLpx2C2VlZZSVlVFXV4et3rgvKyujprYWt8vlS5eVleFyuagzGikrK6O8rAyz2YzFbPaV19bW4vF4qCgv99VxOp1UV1X56tjt9tO2qampwW63+7aprKz0daRtNhvHjh71jqg34vX67tdNLPhlAz3S0/j8pYd9+dcP7MGgHh0Qi0Vs2XeU3KJSPl2wjGc/nMmuI5nkl5Tj8bg5cDyX5NgIBEFAKZehVZ95rdi+YznER4XRq2Nr/6IAAf4xAsb9JYBYLPYZwG63iyULZ/DdVx/TvnMvevQZgqTe1/lMNMb38t9GplD6fOWtVjOfvP0s1ZVlDLv+rtOMyDPR2EWe/yZ/dDgAyksLeeflBxGJxYy4eQxBf6E605TvFYBSddIXdPPa5fz39UeJiI7nyhF3nFbPn7/yM73YiCUSZPXvlsfj4cd5n/H11Pdo3b4bPfoM+ct7IhKfvawp4HS52HHwIB1btUIkEuEBHr/zTh69807++/zzrJoxA41KxXWXX05lTQ0rNmzglw0beOT228/rnmkUClqlptK6TVv0IbEgiIlJTPP9JFI5ekO4L60LDkOtDfKlQyO8i2AdTheG8BiiE1KRK1SERsRisztQ6wyo1DpUah2Zx48gU6h58Nm36XfFdb5jhcckIZXJCQ6NJiYxDblah8vlQqMz+NIWqxWFUk1MQqp3m+hEBEEgPDrBdy4KlYbg0EhiEtMIjkxBFxyKWq1GaUgmJjGNyLgUJFIZ4dGJ9ekW3nONjPPtQ6ML9h4nMQ1tcDhmiwWZXEFUfAoxiWmERMQiCGJCwmN92yyaP53I2CRGPfIyfa+4EavNikQsJTwmCZdbqD9XES43KDR6ouNbotLocDgcyJRaYhLT0BvCkUhlvuuLiE1GJlcSEZNETGIa0QmpSGVy5JoQ2rZrR9t27YiKikIfFESbNm1o264dCQkJSGUyX3nbdu2QyWREx8TQtl072rRtS1hYGCGhob7yuLg4xGIxrVq3pm27drRu0waVSkVScrKvjlarPW2bhMRENBoNaa1a0bZdO1JSUpDL5URGRfHSK6/w9rvv0rdT60Yp3tx77SCeu/cGHrp5GMG6kwvog7QnFalcbjfxUWE8cstwnrhjBHP+7wmeuPNa76yRzf6X7/8feDwepBJJg9bkBQhwofj7JzNAs8JiNpFxeA9XjxxNmw7dkUi9EnMu57krATQFaqoqqDNW03/I9RhCIwBPs78m6v3qFQolg666GbVGh8fjweX2jkg1Z7Zv/I3W6V3p2X8YMrkCQRBwN/PrslpMHDmwi6tH3kO7TpchrV/c6nI1v+fQYrWybO1aqmpqePSOO0hNTCQ+MpLftmwhRK8nMjQUldI7EqlRqxnWrx8fff01yXFxtE4+6X7Q1KkzVqPVBWO3WTHWVuPBQ3FBbpObQWksprpaFEo15jojNdUVOJ0OTHVnnhm7VBl1zz188+23DBo8GL1ej9AAgYpT+WNx7F+5w/Tp1Aan00VhWQVRocGEBeuRS70DTsmxkRSWVuDxeCiprKayts5/cwC6tEkhu6CYbQeO4XS5sdodWGx2ZFIJggDVRpP/JgECnDdnf6oDNEsUChXpnXqxYvFcvpnxISZjLfrgUBbNn9qsjSu93kBYRCzfzprMikVfExQcxu6taykpPOFftVmR3qkXMrmCWZ9O5PflC0lKacPWDSuxWpp3g9+j7xDyczOZ8/nb7N+1kbYde7Bj8+9ndWFpDsjlSjp268vKn77hmxkfYK4zYgiLYNWyBU3Kne1s1NTVMfmrrxg/aRKvfvIJq7Zu5f8ef5y2KSmEBAUx8fHH2bh7N+MnTWLClCnM/flnHPVrI24ZOpSjOTlce/mF0+0+H0QiEa3adT1tFgygTfvuhNTruwuCQN9BI7A7bKxe8T1Oh50BQ27gt6XzEQkiWrbqgKZeMjIyOoGUVielNKNiEi5YHIbGEGQIo3V6V6TSk4pPKrWW9l16+QZqAK6//UEK8jLZsv4XNNogWrbqQE7mYWRyBS1bd/B2qEUCsQkpRETF+bZrkZZOVGyiL92caduuHdJT/pN/gtAgHWNvu5p5y9bx7Iez+L9pC9iy7ygej4f7rr+Chb9u5IWP5jB7ye9UVJ8lDkjXdrx4/828OX0hL0yezQdzfuRYTgHtUhLo1bE1D7/5Ob9t2YP7PDucNSYnP20qZt5v+XzxU87/zG/b4T/HvQgQCGJ13vzTQaxOxelwYDRWow8KOW06sKqiFLVW73MfcNhtvkAvGq0Os9mEUB+Yp6qiFK0uCJlcgbHWW0erCwagrrYa4RQ/9b/jfIJYnUptTSUikVfP/w/MpjpsVvNJjWePB5PJiMVch0ymQCZXYKqrQRcU4ltEqw8Kwel0UFtdWT+6D06nk6qKUgyh4YjFDZfDPNcgVqdSXlqESq09TTPdWFuNSBBO06Gura7EbrehVKoQS6SY6moJDgnHZrXgcjlRa3S4nM766zUgCCJsVjMmkxFDyEmJwr/jXINYnYr3/61Apzf43L08Hg/G2ioUChUyuVcmzu1yUVNdgdvtQqXW4Xa7sNtt6PQGjLVV9ZKfamw2KzaLGa0+CEEQYbWYcNjtaPXeZ7IhnGsQq1Ox26yYTcY/uUVVV5WjUmv/9G4JAqg1eswmIyKRCI0uiMryUoKCQ5DK5NQZq/G4Pb7rMNXVIggCKnXDZOwudBAru8NBScVJDX6xWIxGqUSrVvtcbDxArdFIncUCgEqhIEjrledzuVyUVFQQEhSE/BzlODnPIFb+WMwm5HIFolNc8CzmOqRSuc8Q9ni8i71dbhcKhQqX04HD6UCpVGGzWpHK5IjFYhx2Gy6Xyyd96bDbcLtdyBUNl8I81yBWp+J0OnHYbSiUKt99+aN9U6o0J++Vx43NakEQRMjkCuw2K4JIhFQqxWa1IlcoEASRN18Q+WaZrFYzYtFJN86GcKkFsXI4XVRU1xIWrEfs5zpXWWNELBah15x8z5wuN9XGOixWOxKxCL1WjUohx+F0UVljxO50olEqcLrcKOUyNCoFJouVWpOFqFDv++90uaioMeJwOJFKJATrNMikEmqMJoxmC1q1Cr3mr5+1vwtilVVo4tGP9uFyeXC5/3fMutsGxTL6qvMPynmpERi5b0ZIpFKCz6BtHhwS7jM+AKQyOSFhkYSERSJXqAg2hPk00UPCIn0GmFYX7DPsATS6oAYb9hcSnd5wmmEPoFJrTg/eIgioNTpCw6PRBRlQKFWEhEUhlcqQy5Xog7ydColE6jPsvWkJYRHRjTLsLxSh4VF/Coak1QX9KcCMLshAaHgUaq2+/roiEYlEKFVqNFo9giAgkUrRB4f6gpbJFapGGfYXCu//G3naOg5BENDpDb7nivrga8Eh4YSERaFUqVFrdAQbwhCLxQQFh6JUeT+ecrnC12EBUCjVjTLsLxQyueJPhj1AUHDoGd8tQ2gkcoWS4JBw9MGhiMXe5+wPo0mjDTrtOtQaXYMN+38CmVRKXGSk7xcdFoZOc9JYBBAAvVZLTHg4MeHhBOu8cSSo7wxEh4efl2F/oVGq1KcZ9t48zWkj3IIgIFcoUak0iEQipDI5KpUGQRChUKp8a3OkMvlpmvZSmbxRhv2FQiKRoFSd7HABiERiVOrTNdC9569GrlD6rlEmk/uu64/3SSZX+Ax76md2G2PYX4pIJWIiQ4P/ZNgDGPTa0wx7AIlYRGiQjrjIUKLCDKgU3v9PKhETERJEXEQowToNYcE6NCpvG6hWKnyGvXcfYiIMQcRGhBIREoSs3rVHr1UTGxH6t4Z9Q3B7PNgd7v8pwz7A2fnz0x0gQIAAAQIECBCg2aBSSOiSFnTJ/zqm6NEo//3BuuZGwC3nPPk33XKaGhfKLacpciHccpoaF8ItpylyIdxymhoX2i2nqXAh3XKaGhfCLacpcqm55TRX/s4tx+32YLG7/bMvOYxmB2/NPcahHO8ah4BbzpkJjNwHCBAgQICLgsvtwWR1UWdxNvufw3XSsHK6PX8qb66/AM0DkUhArRBf8j+VQtyggdT/dQIj9+dJY0fuS6psfPJDJnanN3pgc8bp8qBTSxl7fTJ2p5sXph4kIvjS8OfUa2SMu70l360t5NcdJRi0TcfX+FwprbJx66BYrugazsMf7kWvvjSmNk+UWJj7cldyis18uiibM7jSNjtsDjeRBgWP3pCMuKKEzKefRhAEhH9YHeSfxuN04nG5SH7/fUSR0fy4voj8MgviZj6LCSCTiLihXzQRwXImfn0MjbLpxtpoDCJB4NEbmr78qWX9LOz7f0GkMfgXXRK4qwvRjvoMkf7cA8hdCtSaHUyYeYT9WV7p18DI/ZkJGPfnSWONe5fbQ02dA7vz0pg+k0lFBKmleIDymqYXgfNcUcrF6NVSzFYnteZLZ/QqSCNDIRNRWevA7my+0qinIggCEcFynC4P1XUOnKeMoDZnFDLvM4jbhaOsDHe9ik1zR6RQIA0PRxCLsdndOFyXRpshFnnvmSCA2eriUlnXKBELKGRNv8fssZnwmKv9sy8dBBGCLhxBdGl0Gs+VgHHfMALG/XnSWOO+zuJk5fZSKmrt/kXNDg8QZVAwuEsYTpeHBasLzlurt6mQHK1mUOcwDuYYWbe3vNmvjwBwOD1c2S2cFjFqvltbSJWx+T+D1Ku8jLk6keo6Byu2lWI0e7XZmzMeDyRGqrm8cwgOp4dfd5RRUmX1r9YsCQuSM6RrOAqPnWMPPkjtpk2ImvmMBIBYrydtxgxUbdpw06vbkEubvkHcEPQaGVOeOBkDoKnizN2N/dDvcBGU0f4VBAFFn3sQKZv/mqLzIWDcN4yAcX+eNNa4L6ywMnNZLiF6WYPqN2XsDjdGs5MHrknE7nQz8aujtG9xusxjc6W40uZbUHss30hc+PlLlV1sMvLr6Nch1LegtmfbS2P6ev2+CuaM70JWoYnZv5wgNswbWbU5Y7Y6cbrhoWuTMFmcTF+ai14tQSpp3gaj0+WmyujkvuEJhMqcnHj9dfR9+iCPPvMiweZE8ezZRNx7L5pOnQILai8Clt8/x1WcgSg03r/oksCZvQPNLe+cdUHt/woB475hBIz78+RcjPuAWk7TJ6CW03y41NVyTBYnX63MIylKhayZjwY7nG6yCs3ccUVcwLhvJjQb4/5/XC3nf4WAcd8wmveXIkCAAAECBAgQIECAAD4Cxn2AAAECBAgQIECAAJcIAeM+QIAAAQIECBAgQIBLhIDP/XnyT/vcV5QV8/vyhTjsNlxOJyaTEa1OjyCI0OqDGXLNbcgVDVvsabNa+HbWZPpdcS2JLVr7Fzea8/G53/j7UnKzDgNgqqtFEARUai0ALVt3pFvvwX5bnJ3jR/dx7OBurrphlH/ROXOuPvcLZk3G6fSqtVRVlqFUqVHU359OPQbQOr2r3xZnZ//uTdRUltNzwHDE4vOXPztXn/vqqnLW/vIDprpaXC4ndcYaNBo9YolXlWLodXdiCG249vLib6eR3LIt6Z17+RedE+fqc1+Ql8XG33/C6XDgcNixmk1o9cEABBlCGXb9KATh799RAKvFzOzP3mT4jfcQm5DiX9xozsfnPvPYAbauWwGA3WbFbreh1ugQBIG4pFQu63slUlnD4lEU5mXzy+KvuXfsy/5F58SF9rlft2MHwx96iLTERGRSKWKxmNTERMaMHEnPDh38q/+jnKvP/Z7t6/jykzegvi2sqiglKiYRsURCdGwSDz3zFvrghrWr5aVFTJv0Mvc//jqhEef2n/pzqfncW+0OcgpKsNkdIIBSLiMmPAS1UuFftcE4nC6+/nk1qYkx9O7YmqraOkoqqmmVFOtf9ZwJ+Nx7CfjcN4y//1IEuKio1BrSO/WkQ9e+hEfHsXfHelLbdKJD1760Su+KWNJwCTmRSERIWCRy+bk3YheKhBZpdOjalw5d+5KbdYTS4nxfurHGkUKubPDH758mvXMv33X8vnwhdpvVlw6LiPGv/pcoVRo0uiAaaF/+YyiUKlq370aHrn2JiW/BpjXLCI+O912XUuXtlDWUoOBQlKqGdZb+SXR6g+9+aXXB7Nu1ifZd+tCha1/S2nb2r/6XiEQiwiJikMkbZjT/kxhCI3z3RhCLyT5+iNbpXenQtS+JLVojaoRUoFQmIyS8YUbqxUImlTL/v/9lw9y5/PjRR3Ru04bn3n+fYzk5/lWbJB279eOj2b/y0exfGT32ZaLjknhj8jd8NPtXxk2c2qi2TR9k4LbRTzdqm/81svKLuX3c+3z7y3oWrdrC0+9/ybjJs3G6zj3uh8vlYvX2fRzJzgdg56Hj/HfOIv9qp1FrsrB57xH/7AABLggB476Jo1RpaJXelbYde9AitR1KlYa0dl1o27EHLVt1QCKRsvbXRRQX5LJj0ypOZB3F6XRwZP92lv84h42//4zdVq+PLQgoFErfx33P9nXs3bGBksITrFj0NQf3bsXj/ncCAMUmpNC2Yw/aduyBPigEQ2iELx0Vm8jxI/tZ99tiKstL2L7xVwCqK8vZtGYpP3/3JRlH9uJ2extjkUSCTObtsNRWV/D78oV4PG727dzAqmULsZjrTjv2P0nr9t181yESiYmMTvClQ8Oj2LdjA4f3bae48AQH927F7XZRVlLA2pU/sOyHWeSfyPTtSyKRIpXKAIGaqnK2rFuB2WRky9rlbFz9Mw677bRj/1MoFCpS23TyPoNp6UhlclqktvVdl1QmY+eW1RQXniAr4yCH923H4/GQl3OM336ez68/f0NtTaVvf3KFwjfqX1J4gh2bVlFRXsyqZQvYuWX1v3ZdWl0QrdO99ys+OQ2lSuO7phZp7REEgS3rllNanM+urWvIzjiEy+nkyIGdrFj8NRtWLcFhr48VIAj8f3v3HR1F1QZw+Le7yZZseicJBBIgQOih96YgXZQOgooUFfgEFCwoRUCQIl269N5Dh1AMUqSHHtIb6b1v+f4IrGRFJYCQxPucM+ewM3dmM+zu3Xdn3vtepcoM6aMJZgKunOPa72cefbbWc/PqOcP79d9mY+tgOA/Xsh5YWdtS5dF5li1fiYy0ZE4c3EZifAynj+4iJzuLrIx0rlw4he+O1Vy/5I8mv+Duk1QqQ6kquPOUn5/H6aO7iI4I4cG9Gxzeu4GYqOITQEslEuxtbBjcvTt21tbM/uUXAPLy8vh24UIa9e3L+19/TXZ2NvdCQuj3+eeFArolmzczbfnyJ45YPIQF3+WzD97i9vWLTBrTn4jQQCJCA5nx5RCG92nON6N7c/fmZQDSUpPZuXExaSlJaDUatqyex6Hd69i0cg6jB73Jgulj0OSX/PktdDod+Y/eo89reM8OfDO0N/07tWTNnhOExcQbN3luzX28mT32fePVhVy+Fcigb34yXi0IL4UI7kuBbb/MZ+mcr1j78wzuBPzOvZuXuXD2OJr8PI4f2MrCGeMAyMvJYdOqOYQH3wPg1JHdrFkyjc2r55GVlc6iH77g4qNA+nW7fukMG5bNZNncr9mzZQVajYYL/keICH1AXl4uC6aP5da1iwCE3L/FkX0b4dFt6a1rfmL1wqmcP32Yy+f9mDCihyFV5nU7c3wv+7ev4sdvR/Dr8X1oNRoO79lAYnwsKSlJTBv/Pg/u3gDg1vUL/HbqIDqtlvjYaDavnsvMicN5cC+Ao/s2sWHFj8aHfy00+XmcOLiNHesWMmvicK5d+pWUxHh2bVxKRkYat65d5LP33zIE+L47fuHWtQvwKHBZtXAyS3/8ktTkBLavXYC/n6/RM7w++7auYtmcr1m1YHLBZ+v2Ffz99pObk83xA9uYPG4AALnZWaxaOIWo8GAA/P32sXL+d2xZM4+8vFxWLpjMpXN+Rkd/PRLiolm9cArL5n7DjvWLiY+L4srFU9y6dgGtVsMvS6Zx6uguAB5GhbJ+2UwA8vNy2b5uEeuX/cDh3euJjQ7ny4/fKVYBPoBapaJG5cr8evkyGq2WSUuWkJCSwpHly3F3ceHD777D2cGBvPx8dh0/DkBOXh7z1q2jfvXqxod77fLzcnkYFca2tQuoXK0O5pbWWFjZMPiTb1iy6TQ16zbl0O515OZkodVqSIx7iFarQa/Xk5qSyM4Ni3Eq48a3s9dy+/pFzpzYZ/wUJU5+fj6Tvv2WpYsXEx4e/tyBvkwmxdpCjU6vRwIM+uYnPp+7hk+m/8zn89ag1enwu3iD7v+bRsP+4xjz4yoSUgrSQe6GRDJo4k806D+WT2cs40HEQ8Nxtx85S/PBX8KjlJ19py7Q4eNJNB74Ob0/n8WZyzdZvPUAkXEJNOg/lnkb9pJfSmYMF4oHEdyXAnm5Obh7VGHG4p207zYA79qNGDT8S7r0GkLbjj0JuPKb8S4GSqWKQSO+pEe/EXh51yE0qCAPvjjIzEynQ/eBTJm3CZmJCe279qf34NF07TUEz8rViQgLNN7FwLtWQz76bCo9+o0gLPguCXExxk1em4iwB4yc8CNDP5uKqVzBwGHj6dF/BP0+GIOltd1fBkv5eXn0HzKOAUO/oOUb3bl64bRxk9cqOyuD7xdso+8HY7Cxd2T01/Po3mco7w0fT0Z6iuFHpTG5QsmgEV/xdr8RNG75FjevnTNu8trk5GThWs6TWcv20bHHIKrVbMCQUZPo1vsj3uzSl4Cr58jJzjLeDQALSxsGDptA115DqFK9LpGhDyguQ5w0mnzqNmzNnJUHKeteiWZtujBw2Hi69fqIBk3bcf33M8a7GNjaOzFszPe8N2wCMpkJoYG3jZu8dnJTU7Jzcoh8+JAzly/TtE4drt29i42lJYd//RWpRELL+vWZv349Go0GvwsXUKtUNPd5Obnl2ekJhAUGEBYYQFx0GNmZaYQ/uElYYAAx4Q/Q6bREh903tMnKTCMxLoqUhBgUpiZkpKWQnZlesH9UCGYqBR17vEerN7uRlviQ9OQ4TExkXD1/gvycDNKT40hLTkSTn4dMoic67D7REYHIpFK8a9WjYuVqZGemYW1jT+DN3w3Pm56aSGpyvOFxQmwkuTlZhsfhQbfQajQEBgZy5fJlrl69SlJiIuHh4Vy5fJkrly8TFRlJbm6u4XHAjRtkZmZy+9Ytrly+zLWrV8nMzCQsNNTQJjIykqSkJK5evcrVq1cJDg4mJzub69eucf3aNW4GBKDT6YiMjCTgxg3u3L5NYmIiCQkJ3Ll9m7t37hAfF8fGDRsY99lnLPv5Z+6HRlHUT1dMfBI7jv1GS5/qlHV2AODEhevUrFyewV3bkpaRxZy1u/l8cA/OrJlBVm4uR367il6vZ8Gm/VTzKMvZtbMYO6g7SvnTU2QvBNxj2JQlvN+tLX4rp7Hoy2HUqeLJkB7tUSkUXNw4h88GdMPU5MXHVQnCYyK4LwVUZmpq+jTB3KJgdtiszAx2b17GhI97sPynb0lMiDXexcC1rAc2do4AKBRKtBqNcZPXxs7emdr1mxekcOj1hATeYsH0sYwc2I5zpw+Rm/P0oAqgYYv2SCQSFMqCdB2t9vmu7Pwbavk0o3zFakilBR+/m9fO88PXQxnRtwVhQXfQPE71MGLn4IxLWQ8ATOSKYnM34rGmrbtg/0R+9ulju5k0ZgBffvwOOp2O3JzsQu0fcyxTFlt7JyQSCaZyxV+e/+ugMjOnbqNWqM0LxhXk5mSzZ8tyvvrkXZbN+wadVvuP58WjcQuPr6YWB+YWVtRp2MIwRiDuYSSrFk7hfx+8xf4dq8n+ix8sANXrNMJUrkAilaJQqtBqi0+f8VhUbCy1vLzIzM4mOzub0Kgozl69Skp6Oh/06IFUKqVr69bcuHePq3fusM/Pj9EDB6J6SWMm5CpLHF3K4+hSHmtbR+RKMxzKuOPoUh5bhzJIJFJsHV0NbRRKMyys7DC3tCVfo0NppkauVOHoUh4rO2dy8/Kp6FULWwcXHF3KExMdycyJIzj/6zGiIsPI02iRK1XITEzQAbaOrtg6uKDT6XAtVwlHl/LYO7liKlegNLMwPK/KzAK1uZXhsaW1PaZyheGxQ5lyyGQmuLi44FmxIh4eHlhYWuJgb49nxYp4VqyInb09crnc8Ni9fHmUSiXl3N0L9vH0RKlU4ujo+Mc+dnZYmJvj4eFB+fLlsbe3x1Qux83NDVdXVxwcHNDr9VhaWmLv4ICVtTUymQyVUomFpSVqtRrJo/4zJiaGS7//TmZGBkUZntR+xCTeHTcTBxtL1k//zBBcN/fx5qMeb+LtWY6z1+4QEh3Lb9fvsHr3MRJS0ngQEYNer+fXq7dpUrMKpiYyKrg44eb09HEO/lfv4GRvzTvtmqBSyHGwtcJCXfJn0RaKNxHclwISicSQ66vJz2fLmnkEXKmhBMYAAFKhSURBVD7L/76ex7Ax3xtyZp/mWauBvA5SmQyJpOAtmpmRxqKZX1C5Wm3mrTpI09adjZsXUpzPy+RRvjlAaNAd5n//GS3e6M7ijScp5/HXlR6K8zkBhjx6gEO717F+2Ux6v/8/ZizeWaidseJ8Vk9+trRaLWt/nsFF/2N8Mn4mw8ZMQ/o3VYyK8+v15HllpKey8qfvkMsVTFu4la69hhg3L6Q4nxdAUEQE90JDea9bN6wtLbGxsqJFvXp8NXQo3338MbM//xy1SoW7iwvtmzZl/oYNRMbG0rdjR+NDPTeZiRyV2gKV2qIg6JaZGB4rVGokEglKldqwTiYzQa5QYiJXoNPrMDExNexT8ANKh1QqNeyzb9sq2nXuw8dfzKTVm+8UPKfMBIlEil5fcGylUo0ekJkW/C1KlTkSqbTQ32ZiKsfk0XaV2gK5QolUKjM8VplZgATUajVWVlZYWVlhamqKyszM8FipVCKRSAyPLS0tkclkmJubF3r85D4qlQpTuRwrKytsbGwMbezs7bF3cMDJ2RmZTIalpSVlypTBxcUFa2tr1ObmBT8A3NywtramQoUKjPrf/1i8dCl1qnsZvwx/68jSSZxdO5MZowdhb/1HhS07S3PDhZc8jQaZVIrcxASZTMabjerQsakPEomEnJw8pLJ/DqE0Wi0WZipkjz5vgvAq/PM7UyhR8vNzSYiLxqdxG+wcyxAfG4VO99dXF0uKnOws8vPzqFqzPpmZ6SQlPPzLdIiSJDToDmoLS6rWqEdsdDgZaSnk5edCkW8wFy+hD+5QroIXFSpWIyI0EKlMRn4JH8iXn5dL/MNI6jZsiYOTKwmxUaDXl/jPVm5ONulpydRv2g6JREpiXEyJOiedXs/vAQGcuXSJPSdOMPeXX2hauzZvt21LGXt7+nfuzMQFC9h6+DDHz51j7d69ZOUUFBkYPXAgR/z9qerhgUIuNz50sWWmtiAyNJBLv53gdsDvZGdlEh0ZYtys1DI1NaVf//7MX7SInr16oVarjZu8FPWqVcRCbUbzut4Mfbc9Q99tT/3qlZBIJDjYWpGcVlCsISM7h+S0TOPdAahR0Z3A8GhDJZ3HTGRSJBLIzi3Z/aJQPIngvpRRqtS0aNeNAzt/4bv/9UNtboVrOU/mTR1d7NI4isLS2paqNerzw9dD2bJ6HrUbtOTU4Z0E3SsYfFpS1W/SDjsHZ779rB9+h3bQtmMv9m9fTUZ6waCtkqrD2wNJTozj65E9iYoIpuUb3Tm0Zz1Jf5MiVtwplCraduzF0f2bmTR2AJZWtriVr8T65TPJyX76F3tJYGllS/1mbzBv6mgWTB+Lu2cVYmMi2LtlhXHTYsfF0ZEPe/TgQUQE/leuEBkby6Du3flq6FCkUilSqZT+nTsz/8sveRgfz80HDyjn7IzCtCA/ukmdOoweOJA+HTsWizsSZVzL07Jd90Jzl1jZ2PNm137IH6UYArz/6TfY2juTnpbCG5370q5Tb9LTUlCZmdOoZQdU6oKrz96Pqqw91qDZm0Uu81ocmZiYUKt2bWxtbY03vVRlnRzo17EFn89bw9z1e5mybAvbjvqj0+np36klc9btYdFmXybMX/eX1XbaN6nDwM6tee+becxas4uvF63noP8lqnmWw9pczeiZK7h0q/iMxxFejtzcXMaPH8+gQS9v/p2iEJNYvaB/exKr4uxFJrEq7p53Eqvi7HknsSrunncSq+LsRSaxKs5e9iRWxcnzTmJV3JW2SayS0zI4fv4aHZr5YGFWOPfd78J1LM3V1PP+Y64VnU7PraAwzt+4h6ujHY1qVsHWypx8jYbzN+4RGB5Ni7rehMXE4+JgR1UPN+6HRXH1XjC932xuOM75G/e4GxpJZXdX6ntXxNTEhJiEZA77X6Zm5fLUrer5tz8wxSRWBYo6iZW/vz8TJ04kPj4eBwcHevXqxfDhw//2//p5xcfHk52dTdmyZcnNzeWjjz4iMjKSkydPGjf915XsbwpBEARBEIRnZGNpTs83m/0psAdo07BWocAeQCqVUKNSeT56pz0dm9fD1qrgQo+piQnN63rzQfc3qFjOhbYNa1HVo2BG2sruroUCe4BGNb0Y3LUtTWpVwfTR+KQy9ja8370dPtUq/ivB5n+dXq9nxowZeHp6cu3aNXbs2EHHR3fpMjMzuXbtGqdOnSIwMBCNRsOdO3e4evWqobRqamoqv/32GzqdjpycHK5cucKvv/5KYmKi8VMRFxfH+PHjGTBgAEePHuXhwz9Ko8bGxvLrr78S+sTEehqNhsuXL3Pu3DlSU1MN618WEdwLgiAIgiAIpYpEIuGrr77i6tWruLm5sXPnTiwtC+7sqtVqateuTatWrRgwYADTp0/Hzc2Nt99+m6NHjwLwxRdfcPDgQX777Te8vLyIi4ujSpUq1KtXj6VLlxZKpXJ0dMTR0RFra2tatGiBs7MzABcvXiQiIgInJyfq1KnDrFmz2Lx5M5aWlmg0GszMzPD09GTSpEmGY70MIrgXBEEQXgttZiaZAQGkX75c4pf8pD9mYc7J0xIZl10qFkEoyZo0acK2bdsYNWoUP/74I+PGjUOv1xMWFsbq1auZPHkyCQkJ6HQ6zM3Nadq0KRcuXCA1NZULFy7QokUL9u/fT25uLocOHWLJkiVUr14dhULxTOMk6tWrR7169TAxMTHcnbl+/Tq5ubkcPHiQHTt24OPjg+mjcUAvi8i5f0FFzbmPS87lxy2BhMdlF+sSgM9Cp9fjVdaCsb0rkqfR8cm868/0f1AS1Ktiw7jeFdl39iFrDoWhKOG5zjwKOEa/60nrOg6MWnCDuORc4yYlklYH2yfXJyIumx823icxreRXn9Dp9dSuaM2YXp5k5WiZvfUBQVGZlPQ793qggrMZ4/pUws5MQvz27WTdugWPSg+WZCZWVji+9x5yR0d+ORSOtpR8tdqYm9KjRfHP8872+5n8kN+RWhXMLVHaaGPuYTFwoci5L2LO/WM6nY4lS5YwduxYIiMj6d27N/b29owbN47Ro0fTvn17vvvuO7Zu3cqSJUsYPHgwq1evZvfu3axatYqVK1eycuVKvL29ATAzM/tTlaYJEyZw+/Zttm7dikQiKZRzHxwcTL169ZgwYQK5ublMnjyZmzdvYmdXME5RoVAY7iq8DCK4f0FFDe5LK50eMrKKzyQ9L0ohl6GUS8nX6MjKKT3TgqtVJpjIJGTlaMnX6Iw3l0hSqQQLMxN0Oj2ZOVp0utLxHjQ1laKSS9EDObm6UvN6mZhIUCkKan4npuaRlVs6Pl+mJlIcrOSYmkjJuncPtKXjvKQqFcoKFYxXFzvauCDybh03Xl16yM1Q1uuBRPHvlP0sKYoa3Pv7++Pm5oaZmRkrVqxg5cqVBAUFYW1tzaxZs+jUqRN9+/alcePGTJs2jcDAQPr3709+fj7vvvsukydPJioqiqZNmzJ27Fh69+5Nfn4+SqXSEJg/NmPGDA4ePMjGjRuxtLRk5MiRTw3uGzduTO/evRk9ejSDBw9Go9Egk8kMqTwvgwjuX1BRg/usHC2/3kgkLqWgznJJ52KvolkNO7JytCzdG4JaWTom6nCyVdKnjSu/3kjEPyARs0fBSEmWka3lrUZO1K1kxfydQSW9lL5BamY+3w6qQmxyLjtORaHRlvwT0+j0uNgp6dHChdw8HTvPRJOSkc8zdDHFmk4PVmoT3mnpitJUysLdQcQl55aSO2M6Pu7uQYUyZlysVAmb1q2Nm5RIaRcu4HP9uvHqYifv5jHy754CxV9P2liS6XMyUHf8HIn63y3/WdwVNbjfsGEDAQEByOVyUlNT6dixIx06dGD69OkEBwdTuXJlcnNzCQsL45tvvsHJyYlp06Zx9uxZlixZQtWqVQE4cOAABw4cwNHREYBmzZrRpk0bw4RnADdu3GDOnDm4u7vTpUsXjh07RlxcHD/99BPR0dEMGzaMfv360adPH3bt2sWRI0ewt7dHqVRSpUoVevXqZTjWixLB/QsqanAfk5jDL4fDcbJVPFP74iwvX0dKRj4fdnQnT6Nj9tYHNKxqY9ysRLobnmEohRmZkI2nS8m/WnIrJI16VWwMpTDfalg6bl8fuhDL6vF1CY7OZPOJyFJRtjQjW0NapoaPupQnM1vDL4fDcbVXYmpSsoPgfK2OqPgc3mtfDiu1CSt9w7CzMsVS/XLzTV+HgKA03m3lSkVXNVcbN6byokXGTUqkW3360CAw0Hh1sZN98md0yTHInApXuykt8u6dwbzHZJGWU8TgXqfTkZaWRl5eHmq1GjMzMyQSCbm5uaSnp2NmZoZMJiM9Pd0wA3NaWho5OTnY29sbgne9Xk96ejo5OTnI5XIsLCyQGc1QrtPpSE9PJzc3FwsLC/Lz89FqtdjY2KDVaklKSjL8DYDheRQKBWq1utDs9S9KBPcvqKjBvahzXzKIOvclh6hzX3I8WedeBPclQ4kK7p+hzn1JJercFyhqcP9fVbK/KQRBEARBEARBMBDBvSAIgiAIgiCUEiK4F16L7KwM0lKTnrrkZGcZN/9b+fl5ZGdlGK9+LdLTkv90Po+XvNyiDaLOy8st8v/Fv0Gr1ZKRlvKn83m8aLUa413+VlZmOnl5r78Mp0aTT3rq01+vzPSizRio1+tJT01GoymY2fB1ys/L/dP5PF6yszKKVNFKq9GQnpZivPq10Ot1xESGEhUe9KclJiq0SJ8vnU5LQmx0kfZ5lVLT03kQHk5gWBiBYWEER0aSkJyMVlc6KiaVNno9pGdlk5P3+j///3UXLlxgxowZxMbGGm8q1q5fv873339PRsZfxzI3b95k6tSppKUVpCT9HRHcF3NJCQ+5ee38U5fIsAfoitDZZ6ancjfgkvHq1+LK+dP4bl+N7/bVLJ39FSvmfWt4HHDlN+Pmf+vezSvs3LDEePVrcWjXOsN5zJo4gl+WTDM8Drp/07j537py4SQnDm4tcvD8sqWnJXPi4DZ8t69mx/rFzJ08ku1rFxrOKzU5wXiXv7VlzTyunD9pvPqVi42J4NCegtdry6q5LJg+1nBOp4/tLlIQnJ2VwZzJnxIWfNd40ysXHhpoOI8Ny2ay9Mcv2bdlBb7bV3PpnB+a/GefByAiNJBFP3xuvPq10Gq0+Pvtx+/QDo7t38z4EW+zY/0i/A7t4KzfAVJT/phE6p9kZ2Wya/NSoiNDjDcVC9uOHOHNIUPYfPAg6/fvZ/GmTYycPp39p06hKSUlNl+XhOQ0Vu46yg+rdzBrzS7W7DlOVFyicbMiyddoWLTZF7+LNwAICAxj+c4jxs2EV+Du3bts3ryZpCcmlXte169fJyGhaN9vzys4OJgNGzaQk/PXFxxCQ0NZv349mZmZxpv+RAT3xVxCXAw3Lvlz45I/vttXs37ZD1y9cIobl/wJD7mHTvfsHX1o8F1+mvaZ8erXonaD5rzVYxBv9RiEJj8PE1NTw2Pv2g2Nm/+tCpWq8UaXvsarX4s3u/Y3nMfdm5dxcHQxPPaoVDD5xbOqVrMBjVq+hVT6estwWlha06rDO7zVYxD1m7YjNPgudRu1MpyXlbW98S5/q+Pbg6hWq4Hx6lfO0dmNN7sUvF5e1X1IjIuhQ/eBvNVjEM3adjXMJvgslEozBn/yDS5uHsabXrmy7hUNr41b+Urk5mbTtlMv3uoxiLoNW2FiKjfe5S85u7rT/6PiEdybmJrS872RDBw2nr4fjsXWzpEO3QcycNh43h34CQ5Ozz7Q0ExtTr8PxuLmXnwrq1hZWPDtiBFM/uQTpo4cSc8332T6smXExMcbNxWKIC45lSVbD1K3igeNanpx9NxV3h37A7n5z38RRafTcSc4gpj4goAyKyeXuKS/v+MVn5TK5kNnjFcLxUivXr24ePGi8eoSQQT3xVzlanXoN2Qc/YaMo6ZPExyd3eg1aDT9hoyjSatOSCQSMjPS0Go0ZGakodfr0Ol0ZGdlkp6WQm5OluEKZBVvH2av2G84dmZGGnl5ueTl5ZKRlkJ+3rNf0XtRanNLbGwdsLF1QC5XoFCqDI/N1BZc+/1XdmxYzIO719m/fRV6vZ6I0EAO7lrLppWzOXvSl9ycgpSV2Ohwrl0s6CQT42LYsmYeqcmJnDqyk21rFxAR+uoqPVjb2hvOQyKRoDIzNzxWKFWcObaH82cOc/2SP7+e2IdWqyHwzjX2bVvJppWzuXLhFPmPrqxGhAZy7+Zl9Dod8bFR+O5YQ3jwPQ7tXsfeLctJSng1tx1lMhOsrO2wsXXA0soGqVSGhaW14bx0eh3HD2zl/u1rnD3py/nTh9Fo8rl68TS7Ni5hy+p5PLh7A72+4C7TpXN+RITcByAs+C4Hd63l3q0r7Nq0lMN71pOWmmz0F/w7TE3lhtdLbWGFzMQUGzvHR+dZUEvad8ca7t28gu+O1dy4fJbMjDR+O3WQbesWsHvTz8TFRMKjFKoTB7aRlFjwmvif2M+x/Zu5feMi29bOx+/Q9leWOiZXKAt9luRyBVY2BY/V5pYkxsewaeVsAu9cY/OqOaSnJRMfG8WJQ9vZtHI2x3y3GFJxkhPjOH10FwB5uTlsX7eAW9cvcMH/KJtXz+XapV/RFqMryUN7NmXl/O+Y8vl7bFg+k/iHUSyZNYFP+rdiRN8W7Nm8DID0tBSmfzWE+7evArD1l58YP+Jtdm5YzOjBb/LpgDYE3i0etd0lEglmKhUt6tXDxdGR/SdPotfrCQgM5L0vv6TOO+/w0bffEpuQwLlr1+j52WckP7ptn5GVRf1evTj1++/Ghy3xzp87R1xcHBrN8wXlVSq40cLHm4GdW3PtXgghUbHEJqaQlJpOQkoacUkFqXl5+RoiYxMIioghMSXd8H2q0eqITUzhQUQMDxOSydf88Tmo5lGW9zq3MTzOzc8nKi6RoMiHRDxMICsnl2Pnr/HJ9J95EBFDQnJake4UCn8vPT2db775hkqVKuHj48P+/QVxz82bN3n77bepVKkSLVq04OTJgjvIvr6+1K5dm0qVKvHxxx8THR1NjRo1ePDgAUOGDKFt27aFjp+cnEyXLl1499136dixIxUqVGDKlCmsW7eOOnXqUK5cOXbtKug37969S8eOHfHy8qJ27dp8//33pKamotVqWbBgAdWrV6d+/frs3LnTcPzExETGjBlDlSpVqFWrFkuXLiWviPGZCO5LuJioMJbN+Zqj+zcxZ/JIEuMfcuvaeXx3rGbPpp9Zu3QG0RHBAIQG3WH+92MM+y6fN5FDu9biu30V29cvYsuaeWQUk/zaoHs38N2+igO7fiEzveBHS3JSPLb2TlSsUhPfHWsIuHIOgJjIUH7/rWBmwtSURE4e2sGWNfPQarXk5+UyeexAsjNfTWD1T25cPsuujUs4fmAruTnZ6PV6YmMiKONanvKVqrF2yTTu3yoIOEKD7nDr2gV0Oh2pyYns374K352rsbS2JTzkPmuXTjc+/Guh1eRz5cIpNq+ew+9nj6NHT252NrExEbh7VEFlpmbqF4OJj40C4PyZw4Q8uAOPfpjt2riEc6cO4eZekRtXfuPk4R1Gz/D6nDm2hw0rZhEZFoROpyMlKZ683Bw8K9cgNiacKV+8B4/y3A/uXkdCbDQAAVd/Y9empdy+fpGKVWrid3A7F88eozjMHJaanMDercvZvelnsjIzyM/LJTkhFoVCiZd3Xc6fOcyx/ZvhUVrg0Uf/1mjyOX10D9vXLiQxLgbXsh7MnTyK0Ae3jZ7h9dHrdQTdv0mTVp1o+eY7WFjZ0OfDMSxc78fQ/03l5JE/vkCNRUcE4+Dsxswlu3H3rMLhPRuMm7xWFmo1ro6OBAQGkpiaypw1a+jXqRNnN27Ewc6OtXv3Ut7VlXyNhshH+ca/Xb2KnY0NTevUMT7cM8vQaLh18ya3b98mLDSUnJwcQkNDCQsNJToqCo1GQ3x8PDExMcTGxpKbm0t2djZJSUmkpqaSnZ2NRqMhOzub3Nzc5w7Gn6TX69m1YwcfDx/OhnXrCA15/vSqrJxcpFIJlmoVX8z7hXFzVjN65gpW7T6GTqdj7T4/fvxlNyt3H+OLn37hQUQMAGcu3+TzuWtYvec4v+w7wb3Qgv4NYO/JC3QeORWAjKwcpq/YzqiZy1m56yhr953gbkgk1++HkK/Rsm6/H7/fCkQngvuXJjMzky5dunD79m3atm3L+PHjAZgyZQqVK1fm7t27NGzYkNmzZxe8xmvX4uHhwc2bN/nqq6+wtrYmICAAlUrF4sWLOXHihPFTAPDbb78xduxYPvvsM3744QeuXbuGr68vZmZmLF++nLi4OHr37o21tTW///47q1atYsWKFWzZsoUzZ84we/ZsZs6cyeHDhw2TY/Fo4q1bt27h7+/PpEmTmDNnDnFxcYWe+5+I4L6Ey85M5+ypAwTeuc67Az7B0sqWchUq0+rNt3mrx3vk5GThd6ggWMpIT+HmtfOGfe/evMzpY7vxrtWQzu++z/kzh7h9o/hc4dHp9PQe9D96Dx6NVCqjZt0mNGrRgbqNWuPs6v63+bJden5I27d60rRNZxLioklOLj63shVKM4Z+NpW2HXthYmJKszZdqN+0HU1adkSpUhMf98eXxJMsLG14d8CnNG3dmRo+TQi6G2Dc5LXyqFSd4WOn07jlW6gtLOnQbQA+jdvQ4o3uZGdlEB3+9NfL2dWdrr0/pEHTN6hWsz4hgcUnWNTqtDRq0YEhoyZRu35zXMt50qp9D3wataaWTzMiQgPJSHv64FvXsp506fkhdRu2pkKlasQ/jEKvKx5f4KamCtp17sP7n3yDrb0zlb3r0qxNF3wat6FSlZrcv33FeBcDn0at6dB9AM3bdcPMTM3DqDDjJq+NRCKhftN2tHmrJ2XLV0SpMkOhUHHpnB/XL/sbfnw9TRm3CjRr0xmlmRrXsh5FHkvyKkgkEuSmpsQnJnI3JIS7wcFsPniQuIQE/K9cwd7GhqoeHuw+fpy8/HxO/f47vTt0wPQFJseRS6XY29tjZWWFQqGAR39Hbm4uubm5BT96k5OJi40lKiqKjIwMkhITuXf3LgE3bhARHk5Gejpn/f05dfIkv545g0aj4dczZ9izZw+++/YRFRXF5d9/Z8+ePezZs4e7d+6QlpZW8Hj3bg74+pKWlobfiRPs2bOHgwcOkJiYyMOYGH5Zs4bPx45l40F/ivrxuhsSyYqdR3m/Wzuc7QomYDwfcJ+x73VneM8OPExMYePBUwzr2YHvPx2Ak50VJy7cQK/Xs2TbQdo1qs33nw7gkz6dqOD69EkBj5+/xqItvnw9pBfffzKAcYPepkYld1rXr4nc1IQpH/fnrWY+yJ6Y6VR4MU5OTjRs2BBTU1OaNGlCWFgYcXFxHD16lM2bN1O/fn22bt3KjRsFr2Xr1q05d+4c/fr1Izo6GpVKZXzIp2rSpAlt2rTBysoKrVZL27ZtcXV1xdzcnIyMDK5evUpwcDCNGzfG0tISHx8fKleuzOXLl9m6dSvm5uZUqVIFOzs7mjdvbjjugQMHuHz5Mu3ateOrr74iLCyM6Oi/7rueRrybSgFbOye69R1KtVoNkCuUqC2sMJEr0GjykUplRIU/MN7FoFX7d/Cq7oODkys2dk5kpBePK/cAtvZOOLu6I5FK0el0XDx7jGnjP+Djfq046+f7twNNXcpWAInEMIPc45SQ4sCzcnUsLK2RSCRoNRpOHNzOxFG9GdqrKaFBd9Brn/63mqnNMTMvmKBJKpWhK0bnxKMUMqWqYOa97KzMR6kO3fl8WFf0ev1fvl5magsUyoL9pFIZ+iKMI/m3qVRqypavhIlpwSRL8bFRLJ83kbFDOrNk9pdoNZq/PC9zSysUyoIvCZmJCXq9vhhcty+gVJlRtnwlpDIZep2Oe7euMGfySD4d2Ja9W1f87dVVB2cXpFIZEokEqcykWH22kEhQqy0Ms0revXmJr0f25MKZw2g1mr8doySXKwzjWyTFMNDKyM4mNjGROlWrotPr0ev15Gs05OXl4ePtzQdvv42piQnNfXzwPX2aqNhYQqOiaNe4sfGhikQuleLk7IyrqyvOZcqgVCpxd3enspcXFTw8kMvlVKpcmVq1a1O3bl3s7OxwdXOjcZMmNGvenMpeXljb2NDujTdo36EDrdu0wcTEhOYtWtC9e3c6d+2Kq6srPvXr0717d7p3706VqlWxtLQsePz223Tq3BlLS0vatG1L9+7debN9e6ysrZFKpdja2tK6bVu6Na/NM8wjafDGsG8Z/v0SurduyMIJQ5E+2vmddk2oW9UTG0tzfrt2h5j4ZDYdPM2Mldu5FxpFSnpBxambgWF4lnVGKpFgYaZCrSr44WMs4EEYlcq5UreqJzKZFKVC/kI/toR/9uR4KY1Gg16vR6VSIZVKmTRpEleuXCE8PJyIiAhkMhnDhw9n69atZGRk8M477+Dv71/oeH/l8Wy3jymVykLbHxc8edwf8ehv0+v1JCcnI5PJMH303fJkWpZUKqVbt26cO3eOO3fukJ+fT4MGRRunVvx6MKHITOUKzM2t4FFe7NF9m/hlyTQO79nwj7fMTUxKxsyQaSmJbF0znze69GHhuuM0a9PFuEmJdPPaOXZtXMKAYeNZtvVX3D2rGjcpkfZuXcHlc36M/moes37ea7y5RMrPy2XTyjnk5+fxzczVfDxuBrJS8CWdlprM1jU/UdOnKXNW+NKtz1DjJiWSXq/n0m9+1G3YipFfzi64Kq9SGzcrMS7euEFqRgZtGzbEytwcRzs7mtWty4g+fRjRpw/d27UDoGHNmmg0GuavX4+dtTW2VgXfDaWJXq+nUqVKDH7/febMm8fwESMwtyjaLOLHlk3h1KrpjOjdsVCAZir7IyxSmylRmympV60iTWtX5dPenej1ZjMkEil6/bNl2SlMTcnLzxdpN69QcnIyDx48IC8vDz8/P+rXr4+FhQWdOnXC19eX1NRUcnJyCAkJQa/XExUVhY+PDytXriQ9PZ2HDx8CIJfLn6ns5F+pVq0a5cuX5+LFi6Snp3PlyhXu3LmDj48PHTt2JDk5mZCQEGJjY/Hz8zPs17VrVy5dukRgYCBarZbIyMhnqpDzJBHclzLJiXH8dvIAXXt+yMBhE6he58Wu2hQn2VkZ2No7kxAXTWTYX6dDlCRZmRlIJBKsrO24d/MKifExZOdklvjBVRlpyUhlJlhY2XD90q/ITEzIeTQAuqTS6/VkZaajVKpQKFQEB95Cr9OTmfH8nX9xoNVqyMpMx8HRhZzsTMKD7xW5zn9xJAEcnF25fulXDu1ex4mD25BIJGxbOx/dX9wdK04ysrJYvWsXy7dv54s5c5i1ejX/e+89XJyccHZwoH+nToyZOZOZq1bx07p1zFixAgBba2s6tWzJ7uPHaVSzJmZGVxNLA1NTUwa+9x7vf/ABFTw8Cl0ZfZma1KqKqYkMaws1rRvUpHWDmni4OSORgKuTHTEJBdVxElPTiY5/eiGAhjUqExmbgP+Vwhfa5KYmSCSQlpldaL3w4mQyGYsWLaJhw4YEBQUxfXrB+LRvvvkGCwsLWrVqRdu2bZk/fz56vZ7NmzfTvn17unfvTs+ePWnatCkAgwcPZtq0aXTt2tXoGZ6NnZ0d69evJz4+npYtWzJy5EgGDx5Mz5496dWrF127duXjjz9m8ODBhb7z+/XrR/fu3fnggw9o3LgxY8eOJb6IVbL+nU+E8NqYmJgikUoJD7lP8L0bREeGkBj/kIxi/GVtZWNvqE7ymNrcEjsHZ8NjC0sb2nbsxbypo9m3dSXd+gzj6oVTPLh7HYXKDBtbBwBM5XLsnyiJZ2JiipNLOUxkr/4OhVOZsqgfpdE8Zmlti4VlQW4nQMNmb1K9TiOmfzWEG1d+4/1PJuJ3aCeZGamYmZljYWUDkoLzsrFzNHyJqVRm2DuWeeLIr4aJiRwHJ5dC5RQlEgnWNvYoH6WgAPTo/zFqc0u++6wvEomUXoNGcfrobpISHmJj54iZuQUACqUKa1sHw3mZqS2wsilaac2XQaFQFnq/PWZj54hcXnC7Xa5Q8s6Aj7kTcIkpXwyiao16NGj2Blt/+YncnGycypRFoSgIpCytbAuVCLWwtEFtbkURsgZeCpWZGmsbB0PKAYCJqRx7J1dksoK7Dta29nTsMZiVCyaxdPZXNGvbFT2we9PPmMoVODq7AiCRSLFzKGNIoQKwdyyD4lEq1qtkYmpKjwEf4+jsVmh978GjqVKjfsEDiYS2b/Wi74djkZmaMnD4l3wxZSnWto7IFQo6v/s+zi7uANRp0JJO7wwyHKduw1a82aWf4fGr1qRWLca9/z45eXlotFraNW7M/sWL6di8OTKpFBOZjD4dO7J17lwcbGxwdXJicLdu8OhHzfDevZkyahRvNGlSpJKuJYVEIsHcwuK50qdkUikW6oIUDWNqlQKl4o++zcrcjK8+7MmU5Vv5euF6xsxexcYDp9DpdIzs25lFWw8y5efNfLVgPbl5+cjlBZ8puakJluYF/WHLetWZ/HF/PvtxJRN+WsuomcvxPf07dap4UN3TnQ+/W8CZy7dK/AWd4mLQoEGEhoZy5MgRrl69ypEjRwzBupeXF2vXruXq1aucPXuWn376CalUyhdffIG/vz+XL19mxYoVuLgUxBBz587l/v377Nu3r9Bz2NjYsH//ftatW2d4ztzcXENVnUuXLuHv74+5uTm1a9fm4MGDXLlyhbNnzzJ16lTs7OxQqVQsWbKEW7ducejQIRYvXszdu3ext7fH2tqayZMnc+nSJS5evMjWrVspX748nTt35v79+5Qp88/f/RK9eEe9kND4TA5fi+Gjtp7IniHhLzoxh03HI6nkpsZE9s/tn3T35mXiH0bSuFVHQzpNQlw0/if282bXfpipLdA9yp+99NsJHJxcqVi1JpfPnaRK9bo4Ortx6sgu+n44FoBdm5biXbMBXtV9ADiybxOeXtWp6FWz0PP+lZw8LeGx2QxqX448jY75O4JoVtPOuFmJdOV+KhPf82LD0QjiU3OpXLZot3yLo2uBqdSqaEXnxs58MPMK77R89rrgxdke/xhWjKtDcHQm205FUcOj8A+qkig9S0N8Sh4fdnInM1vD+qMRVChjhtz0zwFJSZKv0REcnUX/N8pipTZhpW8YdlamWKpf/Y/vly0gKI13W7lS0VXN1caNqbxokXGTEulWnz40CHx15YSfV/bJn9FlJGFSporxpkIys3O4+SCMmpUroHoikAe4FRSOSiHHw+2PH/p6vZ7I2AQCw2OwtTKnYlkXzM2UaLU6AsOjeZiYTJXybiSmpGNtaY6roy0xCcmERcfRqKaX4TgPwmOIjk/C2d4GTzdnZDIpKemZXL8XQrkyDpR3cfzbH2J5t46j7vYNUuvS0W8/r7SsfCatuUtAcMEd075t3figY8GPdOEPJfub4j+mSnUfmrfrVihP3t7Rhe59h2GmLrgSKpVKqVqjHgOHjadD9wFU9KpJ78GjqVWvOWXcKhgCe4Ae/UYYAnuA9l37PXNgLwiCIAgljVqlpGENrz8F9gDenuUKBfY8uktQ1tmBNg1qUtvLA3OzgrtzMpmUKhXcaFWvBs72NnhXLIerY8Ed6DL2NoUCe4CK5crQwsebyu4uyB7l9VtbqGlZrzoVXJ3+NrAXhKISwb0gCIIgCIIglBIiuH8JHpclEwRBEARBEITXSeTcv6CUzDzmHrhLbr6Oxl72uNurcbJSolaaIJdJUZrKePJu24vk3Bc3Iue+ZBE59yWHyLkveZ7Mub/o4YFjv9c3IPdlitu6tVTl3JdUIue+gMi5fzYiuH8JtDo918NSuBaWTEhcBjHJOWTm5JOdr6NSGQt+7F/b0DYmMYd1RyJwdVAiK+HBfW6eloSUPD7o6I4eGP/zLXLy/nqSmJKkVW0HhnR258SVeNYcLD4zcL6oke940rCqDVPW3uN+RLrx5hLJTGnC8nG1iUnMYf7OICLjSkdpuQZVbRjWtQI5uVoW7wnhdmjJLrn5WFV3Cz7uXgG10oTlvqGcv1VQTrCkc3VQMeodT1ztlTxcvRrNC9THLk5UFSpg96gST3GW/esaNPfPIjH/oxpZaaJNjMC830/IrP9c1eu/RAT3z0YE969YRrYGvyvxPEzKNd5UIrk5qGhT1wGlvGRfURQEQRBKLl1GItrY4n+H4bnJTDEtWwNkfx4I/F8igvtnI4J7QRAEQRAEodgTwf2zEZdbBUEQBEEQBKGUEMG9IAiCIAiCIJQSIrgXBEEQBEEQhFJC5NwLgiAIgiAIxdLDpBxWHwwjNikPrU5HRHwOWTkaAOyt5DhaKwE91T2s+KizyL9HXLkXBEEQBEEQiit7KwWWalNuh6VxLyLDENgDJKTmcTssjZCHWVRyVRfa779MBPeCIAiCIAhCsWQik/B2c5e/nfizsps5NT1L/gSGL4sI7gVBEARBEIRiy9VeybutXJFI/hzgS6USWta2x9byvz0HwJNEcC8IgiAIgiAUa++0cMHJ5s8BfFkHFS1r2Ruv/k8Twb0gCIIgCIJQrFmqTWjfwAnpE1fvJRL4oKM7lmqTQm3/60RwLwiCIAiCIBRrUomExt62uNgrDetqeljRpLptoXaCCO4FQRAEQRCEEsDdyYx6XtYAqBQyOjdxNm4iiOBeEARBEARBKAlMZBK6Ny+DiUyCV1lzanqICjlPI4J7QRAEQRAEoURwtVfRs5UrLWuJCjl/RcxQKwiCIAiCIJQYWTlaNDodlmamxpsEEdwLgiAIgiAIQukh0nIEQRAEQRAEoZQQwb0gCIIgCIIglBIiuBcEQRAEQRCEUkIE94IgCIIgCIJQSojgXhAEQRAEQRBKCVEtRxAEQRAEQXh+qb9CTrDx2tJDYgqWzUBZznhLsSSCe0EQBEEQSj29Xk/Xrl25fv06QUFBmJqKGukvzdWmIHc2Xlt65D2EMkPA+X3jLcWSCO4FQRAEQSj1AgMDadGiBVlZWcyfP5/BgweTlJREcHAwVapUwdzcHIC7d+9ia2uLo6MjkZGRxMXF4eTkhKurKwBXrlzB0tISiUSCRqPBw8ODyMhIEhMTsbS0xN3dHYVCAUBKSgrBwcFYW1uj0+nQarV4eXkBEBMTQ3R0NA4ODri5uSGVluBM6atNwXmQ8drSIzMAzOuWmOBeNmnSpEnGKwVBEARBEEqTL7/8EnNzc8qVK8fu3bsZPnw4YWFhvPvuu3h6elK1alU0Gg29e/fGy8uLe/fu8e233xISEsKcOXMoU6YMXl5evPHGG/j5+REYGAhARkYGy5cvJyQkhNmzZ6NQKKhVqxbh4eGMGjWKS5cucfXqVRYvXsy1a9d49913OX78OGPGjCE2NpZVq1ZhZWVFlSpVjP/kkuPhajCvbby29MiPA3kZMK9jvKVYKsE/EwVBEARBEP5ZTEwMK1asoEuXLrz99tsEBQVx4sQJqlSpgomJCQcOHECv13Py5ElSUlKwsrKib9++1KtXj9mzZ+Pq6sq8efNIT08nNDSUrKwsvv76awYNGkSLFi1YsmQJ06dPp3bt2uzbt4+8vDzWrVvHzZs3WbRoEVOmTMHR0ZGYmBgSEhKYO3cujRo14vvvv6d69eqMHj0akUghvCwiuBcEQRAEodTS6/Vs3LgRiUSCvb09jo6OSCQSdu3ahVarZcyYMQQEBBAeHs6PP/5Iw4YNSUxMJDMzk4CAAGbNmoVMJsPV1ZWMjAwAvL29DWk6qampHDt2jJUrVxIeHo5OpwPg9OnTNGnSBKVSiUqlwsrKCoC4uDgCAwMJCgpi9uzZxMXF4ejoSHp6+hN/9X+LVqfj+u1ILt0IMyyRMcno9HoCQ+JIz8gx3uWZpaRlsWz9GVLSsow3lVoi5/4Vy8hN5di9zTxMCzPeVCKVta5EO6/eaHT5bLnyE/naXOMmJVJV5/q0qtiDWw8vcObBHuPNJdYbXn2p6FCT3Td+LjXvQYWJig8afUtKVjxH720iMfOhcZMSydO+Bq0rvUu+Npfj97YQlVo6KlG4WnnQ1qs3MqkJGy/9SJ7m+b+0i5NKDrVo59WHOw9/59SDXcabS6x2Xr2p5FCy0y0SExPp168fCQkJdO7cGYlEwqFDh8jOzmbr1q2ULVuWBg0aMHLkSD777DN8fX1RKBS0adOGb775hoEDBwKgUChwdHTExsaG3r17s2rVKgC++eYb/P39GTJkCL6+vmRlZbFt2zbeeustvL29mTt3LjqdjqFDhxIeHs6yZcvo3r07AwcOpE+fPoa/093dHZlMZnhcorxgzn1GZi6dBi6kZjU37GzUADSt50mLxpX5eMImhg5oTsO6FYx3eyZ3HzykaovvuPvrZLw8n3PQbwnLuRfB/SuWkBHDsfubcLOpiExqYry5RMnT5BCbGsFb1d4jX5vH9msLqOnW1LhZiXT/4TUGN/yaI3c2kpITR1nbysZNSpzAuOtUsqtFE49OzDj2ES0rdzduUiL5P9jHF22XEZ0ajF/gdjwcqhs3KXGy8tJJyUqgi/eHZOdlcOTeBpytymMqkxs3LVE0unyik0NoX6U/pjI5v1ycTt1yLY2blUgBkecY1vR7TtzbSlxmJO52JTh/+pGg+ADK21SluWc3400lyqlTp+jfvz9+fn6GwaxBQUFUr16dVatW0a9fPwYPHoy/vz86nY7AwEDy8vKoUaMGNWrUYPXq1SgUCvR6PSqVCktLy0LBfYMGDWjbti1fffUVX3/9NUFBQWzZsoVp06Zx48YNNmzYQHx8PO+//z4KhYK9e/cyfPhwgoKC8PPzMwzMtbCwQCKRGP31JcQLBvdpGTm07DGblbMH4lPTvdC2vHwNJjIZUqkEjUYLSJBKJYb1JiYFSSh6vR6NRodWp0MmlWJqWvBD6b8Y3Iu0HEEQBEEQSq2IiAjatWtnCOwBPD096du3L0FBQej1enr16oWdnR2TJk1CJpOhUqnYu3cv1tbWTJ48menTp7N06VISExOpU6cO5cuXNxzro48+4u7du8ydOxdLS0tMTEy4ePEiQ4YMwdHRkVmzZrF8+XKys7OxsrLC0tKSiRMnUqVKFT7//HOmT5/Od999959Oy/kr+flaZiw8zO370eh0ejbv/Z3lG8+wdN1pps8/xPQFB8nOyQfg8o1wFq05yYyFh/h65l5u348xPtx/xr8S3EdHR7Nhw4anLtu3bzfkrP2brl+/TpcuXUhLSzPeJAiCIAjCf0SHDh348ccfjVczc+ZMPvjgAyQSCa1bt2bLli306tXLsN3b25uFCxfyv//9j6FDhzJ8+HAcHBxYt24dw4cPN7QbNGgQCxYsYPjw4UycOJGFCxfi4+ODp6cn8+bNY+jQoXz44YdYW1tTr149AKpWrcrSpUv54osv+Oijj5gyZQqWlpaGY/4XZWXncfDETdbvOM/eI9dISctCp9Nz4WoICcmZANx7EMvPa8/gUc6B7m/V5ujp2xw4HgCAo70F7VpUpX+PhiQmZTB94SGjZ/jv+FeC+5ycHCIjI4mMjMTPz48RI0YQEBBAZGQkMTExaLVa413+kVarJT09/ZlHkyclJXHixAny8wt+0f0VnU5HZmamYQCMIAiCIAilh4ODA46OjsarcXBwMAyKValUVKhQAaVSWaiNubk55cuXp1y5coY6+BUqVMDBwcHQRi6XU7ZsWZycnFAoFJQrVw5ra2suX77Mhx9+yNq1axk3bhzp6ekMHTrUsJ+ZmRnly5fH3d0dCwsLw/r/Kq1WR1xCGpEPk3kYn0Z+/tPjst7d6/NWG2/q1iiHnY05dx4UXKF3K2ODp7sDzg5WODpYcPFKiPGu/xn/SnDv4eHBhAkTmDBhAr169UKtVjNixAgmTJjAqFGjDCPGY2JiuHHjBsnJyYX2T0lJ4caNG4SFhaHT6cjNzWXr1q14eHhw+vRpoqOjC7V/LC8vj9u3b3P//n3y8vIKbcvJySEwMJBr164RGxsLgEaj4fDhw7Rp04bDhw8TFlYwwDAtLY07d+5w48YNkpKSCh1HEARBEAThn9SoUYOJEydSv359JkyYwPHjx5/6I0MoYGGuZHDvJnz56VsMG9ACB7uCH1PG5I9y7J+Ur9Gy3fcyH4xZy9jJ2zl66rZxk/+UP/8PvSL79+9n1KhRrF69muHDh5OYmAhAWFgYffr0YdWqVcydO5cHDx6QkZHBlStXyMjI4PDhw9y+/ecXLSMjg6lTpzJ16lRWr17NsmXLCm2fO3cuq1evZv369bz99ttcvXqVvLw8jh49SnR0NMePH+f69eukp6ezYsUKNm7cyPLly/noo4/IzS0eFWBOHfqNw7tP/mk54fsrsVHxxs1LhPS0jD+dz+Pl+P4zpCSVzLSq0MAIjuw59adzOrz7JGeOnDNuXiLo9Xru3wr60/k8Xm5dvWe8S4lx/eKtP53P4yUsKNK4eYlx+vDT+4zj+88QHV4yqwplpGf+6XweL0f3niI5MdV4lxIhPDiKo3tP/+mcDu8+yekS2mf81ykUCurUqUPnzp1p0aIF1tbWxk1em4CQNG6HpqPTPVs2RHEXGZ3MnJ+P8en7rVk0rQ9d29cybvKf8lqC++DgYL788kt+/PFHfvrpJywsLPjhhx8A2L17N9HR0cyZM4f58+dTuXJl7Ozs6NChA0qlki+++IJ27doZHxI/Pz9Onz7N+vXr+eGHH+jevXAlkK+++ooZM2YwZ84cTE1NOXToEGZmZowePRo3Nzf+97//0bVrVywsLBg7dizff/893377LUlJSVy4cKHQsV6XhLgk4mISiItJYPG0VVw4fZm4mATiHyaSk1P0HyD5efnkPsd+L5MmX2s4p3s3Avlh/AJuXblrOC/NP6RVPU1uTh75eUXf72XKyswm/mHBeR3fd5oFU5cbzjMxruh3g/R6Pbk5ua81fUyv15ORnklcTAKxUXH4bj3Kjl/2G84rPbXog8H0el77eQGkpqQZzmPTsp2cPOBveJydlW3c/B/pdDpysnOfOY3w3/Jkn7Ho+5WcPXHxxfqMfA052UXf72V6ss+4f/MB08fNI+DS7UfrEp/rs5+X+/r7jOysP/qMUwfPsnDqipfQZ+Sh1b7ez5ZQPN0Lz2Dc0gB+2hFEYloer7kLfmFyuQkKuQl3HzwkNDKJgDtRJKdmkZpW9P67NJBNmjRpkvHKl+nBgwfs2bOHIUOGGH61nj17loMHD+Li4sLVq1e5efMm9+/f5/3330ev17N7925CQkJQq9WULVsWiURCcHAw27dvZ/To0ahUqkLPodPp2LlzJxYWFnTq1Ake5dxv2rSJMWPGYGZmRlJSEqdPn+bs2bMcO3YMFxcX2rdvT0pKCjt37qRnz55YWVmh1+uJjIzkzJkz/Pbbb5w6dYoaNWpQq9bL+RWYlZdBcGIAlipbpJKi/baqVrsytep7U6u+Nwd3HKfHwE5069uB6nWrYG1bMBAnJTmNqLAYJBIJKrM/cgdTk9OIDI1Go9FiZq4iMz2LFbPXs2n5LipVq4BKrcJUbvrEs/0zrU5DZm4alRxqodNruf3wAk6W5Yyb/S2VmdJwTg5l7Di08wQjvxlCuy4tqOFTFTNzMwDiYhJ4GBWHXGGKXFFQDlCv1/MwKo646ARkMhlKlYK0lHS+/XQmt6/fx8nFETMzJSamRS85mpjxkNpuLQhKCCBHk4mVys64yd9ycLajZr1q1KrvTVJCCiH3w5m6eAK16ntTtVZBWU2tVktU+EMS45JQqf74OzUaDREh0STFJyNXypHLTQkPimTy6NnITGTITGSozVXITIpWDzkpMxY7M2fK2lTGP3g/5YtYqk8ikVDGzYla9b2pUbcqkSHRqC3UfPLl+9Sq741beRcAcrJziQyNJi01HbWFGqm04H2em5NLZEgMKUlpKB+9LoG3g5g6Zi5KlRK9To+tfdGvbIUn3aOpRxfSc5MJSbqNjbrot73dPcsa3odXzgfg07gmfT96m1r1vbF3KnjtMzOyiQiJJi8nD7WFmaFkXVZmwfrMjCzMzFVoNFpOHfqNmV8uxKVcGRQKU8P7+Fnla/PIyc/Cy7EuGm0eQYk3MFdaI5MW7TWvVuuPPuPA9uN07dOeHgM7UcOnKjZ2Bf/XaSnpRIYW5Kw+2WekpaQTERpDfl4+anMzsjKyWT1/E6vnb6JKjYooVUrkiqL1GTq9jvScFCra10QmlXEt6lfKWP1RdeRZKFUKwzk5ujiwb/NhRk38iDe7taRmvWqoLQr+r+MfJhITGYep3ATFE31GbFQ8D6PjkEoL+oyMtEymjJnLtYs3cXZ1RKlSFLkvBIhLi6ReuTaEJN4iMz8NazN74yZ/y97R1tBnpKdl8OBOCFMXjS/UZ2g0WiJDY0hKSEH1RN+m0WiJCoshITbJ0EdGhcXw/di5aPI0mMpNMFObYVLEPiM5Kw5rlQPutkXrK4Ti73ZYOhfvJPMgKhO/KwlkZGkwU5pga2H6fOU4H64G8+efD0Gn05OYnEmTep5YWz7ZX+pJSsmkTvVy2NuqSUvPxrWMNRUrFPTzCUkZVKnojE/NclSs4MjR07eJfpjCkP7N0Gh0ZOfkUbWSMympWXRsUx1zdeExFc8sPw7kZcC8jvGWYulfr3N/+PBhBg8ezPnz5w2lo/bs2WMoLfWYjY0NjRo1QqfTce3aNXbu3Imvry9ffPEF/fv35/jx4/Ts2ZOgoCBsbW2feIaCIGnixIloNBpmzZoFwMmTJ+nUqRMRERFIpVL69u2Ll5cXbdq0YfLkybRq1Yq5c+cSEhJCv3792Lp1K+XKlePBgwdMmDCB2rVrU6FCBWbPns2YMWMMk1i8qJdV537Amx8zZMwAWnVoYlh390YgG37eibObI8H3wvj06w/wqOxOZGgM86csp2wFFzQaLX2GvE1+bh7zJi3jYVQcb3RrxVvvtMGlbNHqv77sOvdB90IZ/s7nzN8wjWq1C77M9Ho9x/ad5uyJi9jYWpORkcm4qR+jVCk4svskR3afpLK3J0qVgsGj+hB4O5iJn8zEsYw9jVvXo23n5jiWKdqXLC+5zv2WlXvYs/EgW04uN6zLz8tn98aDRARHI5VKUFuoGTyyDxKphF3rD3Dr6j1c3cvgWtaZ9j1ac/HMFRZMWUHdJrXw8HLnja4tsLYtGLvyrF5mnXutRsuKORtITUln/IxPDeuzM3NYt2QbeTl5pKak413Xiy6926PTalm7eBvJCSlYWFvgUdmd9t1bsXvDQTYt30WD5nVwKedM/2HvFHqeZ/Gy69xP/HQmtet7886gzoZ1GemZLJq2CnMLNWHBkXR8tx2t32qKVqtj5oQFyBVyVGZK6jauiXcdL5bPXo//8Qu069qSRi3qUq9Z0b70/o069/3bjWDQp715s3srw7r7N4P4ZdFWXMo5E3I/nBETBlGxSgWiwx8y97ufKVvBBZ1OT6/3u6LT6VkwZTkhD8J56512vNGtJeUqFAxGfFYvu859SGA473caxcLNM6jhUxUe9RknD57l1KGz2Dnakp6WwbipI1CqlJzw/ZX9W45QpUYlFCo574/qS0hgOBM/mYm1rSVN2tSn9VtNKVPWyfip/tHLrHO/e8NBtq3ey2a/P9JLc3Ny2bnuALHR8eh0emztrOg3rAcyExn7txzl6vkA3Cq44FTGgQ492nD94k1+mrQc77pV8Kxanje7tSryj+d/qnN/OzSdPf4x5OQVLpIhlUiQyYCnRBdSaUGNcmMyCUietl4q4a9iTRPZ0y+QmZo8fQep5K+PZfqUPG4AE9nTd5DJnn4s2V88h1QiQfaU8wMMddoL0euRySRIn3IwmVQCf179t89hPDfW+VvJHL5YMP6QR6+Lo7WCWp6W9GjhSoUyZk89j7/0gnXui70SVuf+tQT3V65coU+fPvj6+lKpUiV4dPVdJpMZbs9LJBK+/vprzpw5g7+/P35+frzzzjvcv3+/0Ch1HnXmCxcu5Pfff2ft2rUA7Nu3j379+hEREYG/vz99+vQhPj4eMzMz3njjDWrWrMm8efMIDQ2lT58+bNmyhfLly7N7925++eUX9uzZQ3x8PH369GHQoEEMGvRy3rT/VnCfmZHFkK6f8clXH9CsXUN+WbCFB3dD+H7xl6yct5GbV+8y95fJSJ/oDJfNWseDuyH8uPq7J4787F5FcB90L5Tvx8xj4eZpqNRmTBo5C++6Xrw9oBOffzCJdl1a0qXPm4WuNHz+wWS861Zh8Ke9nzh60fzbwf3ta/f4ZeFWJi/4gtzcPKaNm8fQcQOxsrHk209n8vXsz3ArX8ZwXimJqUwZM4ePPhtA1Uf/N0X1KoL7/VuOcvPqXcZOGU5GWibTPv+JMZOHY6ZWMfHTmYydOoIKlf64u5OemsHET37g068/pGLV55t98FUE9xM/+QE39zIM+2IQQXdDmT1xCTOWfU3cw0RmfbmI6Uu/wtHljx+RN6/eZf7k5cxcMRFbBxvD+mf1KoL7rMxsPu45nvdH9aFlhyZs/HkHVy/cZPbqSaxdso1zfr+zZNvMQn3G6vmbuXo+gIWb/7gwUxSvIrgPC4pk2th5zFk7GbW5GdO/+InyFcvS64NufDNiBo1a1+ftAW8V6jO+/XQm5TzdGPJZ/yeOXjT/dnAfcPkOm1fs5qtZo8nLzWPG+AV8+vWHmFuqmTTqR0ZNHELFqhUM55WemsG0cT/R64Nu1G1c44mjP7t/Cu5/vZHInK2BZOYUvQKeUHwp5VI6NXZiwBvlUCtNni3IF8F9sfKUn4v/vlq1ajFy5EjGjRvHokWLWLNmDdu3bwfg9OnTrFixghUrVnDz5k2GDRsGQPXq1alYsSI//PDDnwbUPq5Rm5yczOzZs/n555/ZvXu3Ybu3tzcVK1Zk1qxZrFu3Djc3N27dukVERAQuLi5YWVmxfPlyrl27hru7OxkZGSxduhRfX19UKhX79+/n4cPiPfgs8HYIyYmpxETEcmD7cZITU4gIiSY7K5s6jaqTGJfEirkbuH3t/mvPAy6KiOAodDodp4+c5/AuP7Kzc7h55S6mchPqNKrBllW72b3hYIkbHPjgbigZ6Zkc23eaM0fOkZ6awZ3rgZhbqqlasxI/fr2Yo3tOkRBb9Fzb1+nM0XNkpmdxbN8ZTh48S0piGpkZ2SiUCmwdrFm7cCtnjp4nNbno+fmvS3ZmDv7HL5KelsmB7ce5G/CA1KQ0EuOSKePmhKmpCWsWbOZ3/6vk5hSu0lWcBd8PIzE+mdiYBA5sP05CbBIRwVFkZWZTq15VMtIy+fnHtdy8crdE9RnR4Q/Jzc3jzNHzHNrlR0ZaFjcu3cHE1JSaDbzZumo3O9f5Ehn69KprxVXA5Ttkpmfhd8Cf00fOkZqcRlhQBGpzFVVrVWLB1JUc3uVH/MNEXtXLpdc/9eK8UMLl5OnYdTqGiavvEBxTUF9eKFn+9eDex8eHjRs34uT0x21OmUzGiBEjmDp1KpUrV6ZChQr4+PjAo4kdqlWrRrly5fjuu+/o168fAI6OjmzcuJE333wTM7M/5696e3szb948atWqRY0aNfj222/ZvXs3lpaWeHp6snXrVpo1a0adOnWYP38+48ePR6VSIZfLWbRoES1btsTc3JwaNWowb948ypcvT6NGjVi4cCEffvghcvnzXzF7FTT5GvR6PU6uDtjaW9OoVT3GTBmOXCGnTqMajJ8xktycXKZ//hO/HiseA4SfhVarKwgM7a2xtbfmnfc6M3BET6RSKb0+6MYnX37ItQu3+H7cPDLSS04npMnXYGGpxtbBGgdnOwZ92puGLepiplYx8OOedOvbgaN7T7F4+mqyM0vOgCBNvgYrGwts7a1xKefMsC/ew7WcMyq1kk++/IBa9auxfsk21i3eSlYJOS+NRoNOp8POwcbwPvx8+qeUcXPEwlLN+B9G4uzqyPzJK9iycvdrHxz8rLT5WvQ6Hc4uBX1GgxZ1mTBzFAqlnJr1q/PVj6PR6/TM+nIRJw/9Zrx7saXT6lAo5IbXqlu/Drw/qg9SqYQeAzrx2aTh3Lpyj2njfiIjreT0Gfl5+Zg/6jOcXR15f1RfvGt7oVQp6fdRD94e0JETvr+yYOrK5xrc/jzsreQ0q25Hi1r2hZeadjStbkvT6nZ/WhpWtaHBUxYfL2vqVLL601LT05KanlZPXaq6Wzx1qeRm/tTFo4z6L5eyjqqnLmVslU9dnGwU2FvJ/7TYWsqxMTf902KlNsFcJXvqopRLn7qYmkgxlRVeTKSSp2XkvFRONgoGdSjHyLc9cHMoPMZRKBn+9bQcobB/Ky0n7mECw94ex2eTh9P8jYaABL1eh1QqRafTGW7V/vj1YlKS0pj+81cs/3E9924FMXvNd881gOZVpOXcuHSbWV8uZNHWH7CyKRg0rNfrnzgvKWnJaUwY+j19hnSnZYcmjB8yBa8alfhgdF+jZ3h2/3ZazqWz11m7aAvTl32NhaV5oSujj88vMjSaiZ/OZPaaSchkUqZ+Npf3R/Wlus/z3e5/FWk5K+duID42ic8mDUOpUqDT6QtyRiUFqXdSqZSH0fFMHDGD7+aPw8rGkomf/MDHX35AZW+PQs/xrF5FWs5H3cfg06Q2Q8cNePTe0xfcqn505VIqlXDm6Dk2LdvFDyu+eZSzvoyZK77BzrHwGKFn8SrSchLikvik1wSGfzGIVh2aIJFI0D2lz5g/ZQXhwVHMXTuZNQu2cOnsNRZtmfFcfcarSMu5eyOQGePn89OG7w3jUgr3GRLSUzOZ+MkPdOvbgTadm/HdyFm4updh6LjnH1v1b6flnDt5iR1r9/PtvLFY2Vga+gwJj143iZTYmHi++XgG383/HCtrC6Z//hPvvNe5yGM+HvuntByheNHp9Wi1+j/duXm8/slfBdtPRbPxWIThsUQCClMpnRs707uNG9bmRRxUXkzScvR62H/sOs4OVjSoU7TB+n9LpOUIr4Ojsz0jxg/mwLZjbFu9j4M7juPn609eXj7nT11m3+Yj7N10mKiwGNo/+nKv16wWiXFJbFmxu9he9a5asxJvvdOWWV8tZveGQxzYfpyzJ34nOysHvwP+HNh+lH1bjmBpbUGdRgV5pQ1a+HDm6DmO7ztDWsqruYJVVFVqVKRqzcqsnLOBfZuP4Lv1KIG3g0lPzeDY3tP4bj/Gsb2nqVKjIiozJWpzM6rVrsym5Ts5c/T8ay9H+Fd6vNcZrVbLusXbOLjjOAd3HCc5KYXszGx2rj3Age3H2L3uALUaeGNjb41cIcfVvQy+247ym9/vxocrNr6cNZqIkEjWL9nOwR0n8PP9lZTEVEIehLN30yH2bz3K8X1naNy6HpbWFrhXLIdCKWfHOl/Cg6OMD1cs2DvaMnTcQA5sP8bW1Xs5sOM4R/eeJi83j0v+1wr6jM2HCQ+OpFPPgvLDdRvVIDU5jU3Ld5FaTOeg8KxagY493+CHCYvYvf4gB7cf59dHn5nTh89xYPsx9m85gkqtxKdpTQB8mtTC//gFju49VWzn1qhetwrlK5Zl7aJt7N9yhP1bjxIREk1GeibH953Bd/sxjuw+SYXK7lhamaMyU1Ktthc71/ly6tBv5GTlGB9SKGWkEgmmJlLkpoUXpVyGWmWCWvnHong0iFcCuDub0bOVK0vG1GZY1wpFD+yLFT1HTt3m2q2CHy6ZWbmER5Ws9NaX4V8vhSkU9iKlMJ/kUdmdSt4emKn/uGXm4eVOpWoeyBWmmJubUdbDFRs7K5QqJVKpBJVaScv2janTqAYSiQQnFwe8ahYEjy5uzpjKi3Yn4WWUwnySUqmget0qVKpawVDuUiaTUbVmJdw93DA1NcHa1hJ3DzcsbSwxNZUBEhyc7XizWyvsnQqukJavWJZKVT1QqpU4ONkVuVwfL6EU5pNs7a2p3bA6Zdz+SE2TK+RUq+2FnaMtJiYy7JzscCtfBjP1HyUuXco60aZTMyytLZGZyPDwKo+TqwMqtRLHMg6vvBTmkyQSCY5l7KlSs2KhChxKlYIadatgZqHC1NQUl7JOOJaxx0RuglQqRSaTUaGyOy07NMbCyhyZTIZXdU8srCwwM1fh5FJ4sPyzeBmlMJ/k5l6GSlU9MLdUG9bZ2FlTvW4VFEoFCpUcl3LOODjboTJTgQTkclPqNKpB8zcaIZebIpebUr2OF2oLNfaOtoWO9SxeVinMJ3l4lceruifqJ8pyVqhUjio1KiFXmKI2N6NcBVdsHaxRqBRIpFJUZkqat2uET+OaSKQFr3m12l6ozJQ4uzkaPqfP6mWUwnySQimnhk81Knt7oFA+7jOkeFWvSPmKbpiamhb0GZ5uWNlYYmJqgl4Pdo42tOvaEgfngs91OU83Knt7oFQpcXS2K/J58RJKYT7Jxs6KWvW9C/UZCqWcarUrY2NnhYmpCQ7OdriWc0apUjzqC/Q4uTjSplMzbOyskMlklK9YDme3gvKeji4OohSmYHAzOJXY5Fz6tnOjf7uyNK9lj82LBPUvWArzZTrodxNnB0t8arpz/koIP687Q6d2zzeo3ECUwhT+zstKyykOXnZaTnHyMtNyiouXmZZTnLzstJzi4N9IyykOXnZaTnHyMtNyiguRllN6hT/MwtZKjrnqJcUhz5iWk5Obz4gJm2hSz4ODJ27iaG/Bwml9uH47kmFfbCAyOoXPhrZl/CcdkEolBNyJYuCo1UREJ9OxTXXWL/wAANNyI9i6bCg93qqDRqPlrQELmTy2C43refDp11uoVc2NIf2aUb7Bl0Q/TEUulzH8vZbM+e5d5vx8jDk/H0OtVjBvci+6vFFwB+9vibQcQRAEQRAEobgq52z28gL757Bq81ka+XjwUf/m3Al8SM+PlrN81kCuH5/Ixp0X2H/sBgAjv9lCl3Y1ibz8A+NGvGl8mL8llUpYOrM/HdtVJyt4EXMn9eR2YAxffL+L7SuGcenwV9SoUjD5YmkjgntBEARBEAThlXmnU13Gf9KeerXc8X0UyN8PjuXkuXvYWJlxJSAcgDreZTly+jZ7Dl+nuteLB+J2NuY4O1qydO1pHoTEU77s86fPFWciuBcEQRAEQRBembIuf0zul5aRg0ppSnBYPMFh8XRoU51WjQtSYWd/9y69u9VjzKRtNOr0A2npLzYw3NnBkpsnCyoEtuk5h/krTxg3KRVEzv0rlpj5kP03V2JqonihAbXFgUaXD3roVmMoGl0+ay5MxcXq+WYZLW402nwG1p+A3/1t3I69hJ266NPRFzexaRE0qdCRBu5v8uOJj3Gz8TRuUiIFxQfwTftfiEkLZf/NVVgo/xjgW1LlaXJQyFS8XWsEOfmZ7A1YjlRmgkxStAGRxY1Or0Wj1dCtxkeYSOUs8Z9AWZuKxs1KpKzcdD5sPInTD3ZzI/os9uZljJuUOHHpkTQo9waNK3Q03iQIhRUx5759q2r06VYfgE27LzJh2i4uHPySMo4F5WuNBYUlUKvtFH75aTDvdq6L2nMkq+cNonfXetwJfEj/T1ey6Pu+hXLuhw5oziG/myxcfZKDG0YWOp5Wq+PndWcYN3UHSbfnoVL+w2DiEpZzL4L7Vyxfm0tEciBZ+RnGm0okC4U1rlae6NERGH8Dnb50TENua+aIi5UHSZmxRKeFGG8uscraVMJKaUdw4i2y8opnmdCikklkVHWuT64mm4iUQHLys4yblEhWSltcrSui02uJSA4kM694lmgsKnOFJa5WFZFKpNyLu1pq+gwrlR1lrSuRnBVHVGqw8eYS63GfIQh/6wWC+/SMHMZN2UFCcgad2tYgMyuP8mXt6PJGTT79ajO1vMsSl5DG8g2/cmTzaKpUdKbnR8tAIqFJPQ8u3wjn9v1oFk37c3B/9WYEQ8et5/0+TWjZuDIZWbkcO30btzI2HD51C/SwcfGHyGT/cLFVBPeCIAiCIAjCf8YzBvcarY6DJwLwdHfA+4kcep1Oz9nfgzj7+wMqVXCkVRMv7GzUPAiJ4+jp25jKZfTuUh9LCyUAuXkaNu66gNpMQfcOtdnhe5mWjSrjWsaGwydv4uRgSd0aBaW5r92KYP+xG7RqXJmGdT3wvxjIlYAIqlV25q3W1Z9tQj4R3AuCIAiCIAj/Gc8Y3JdYJSy4/4f7EIIgCIIgCIIglBQiuBcEQRAEQRCEUkIE94IgCIIgCIJQSoice0EQBEEQBOH5BbSHvDjjtaWHLhvKTQSn/sZbiiUR3AuCIAiCIAhCKSHScgRBEARBEAShlBDBvSAIgiAIgiCUEiK4FwRBEARBEIRSQgT3giAIgiAIglBKiOBeEARBEARBEEoJEdwLgiAIgiAIQikhgntBEARBEARBKCVEcC8IgiAIgiAIpYQI7gVBEARBEAShlBDBvSAIgiAIgiCUEv8HYFi9NYOvMXsAAAAASUVORK5CYII=" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image.png](attachment:image.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using device: cuda\n" + ] + } + ], + "source": [ + "torch.manual_seed(0)\n", + "np.random.seed(0)\n", + "\n", + "\n", + "best_model_filename = 'best_transformer_model.pt'\n", + "\n", + "device = ml_helper.get_device(verbose=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load Embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "400002\n", + "vocab_size: 400002, d_model: 100\n", + "vocab_size: 400002, d_model: 100\n" + ] + } + ], + "source": [ + "embedding_matrix, word_index, vocab_size, d_model = data_gen.create_embedding_matrix()\n", + "\n", + "vocab_size = len(embedding_matrix)\n", + "d_model = len(embedding_matrix[0])\n", + "vocab_size, d_model = embedding_matrix.size()\n", + "print(f\"vocab_size: {vocab_size}, d_model: {d_model}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define Model" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "class PositionalEncoding(nn.Module):\n", + " \"\"\"\n", + " https://pytorch.org/tutorials/beginner/transformer_tutorial.html\n", + " \"\"\"\n", + "\n", + " def __init__(self, d_model, vocab_size=5000, dropout=0.1):\n", + " super().__init__()\n", + " self.dropout = nn.Dropout(p=dropout)\n", + "\n", + " pe = torch.zeros(vocab_size, d_model)\n", + " position = torch.arange(0, vocab_size, dtype=torch.float).unsqueeze(1)\n", + " div_term = torch.exp(\n", + " torch.arange(0, d_model, 2).float()\n", + " * (-math.log(10000.0) / d_model)\n", + " )\n", + " pe[:, 0::2] = torch.sin(position * div_term)\n", + " pe[:, 1::2] = torch.cos(position * div_term)\n", + " pe = pe.unsqueeze(0)\n", + " self.register_buffer(\"pe\", pe)\n", + "\n", + " def forward(self, x):\n", + " x = x + self.pe[:, : x.size(1), :]\n", + " return self.dropout(x)\n", + "\n", + "\n", + "class TransformerBinaryClassifier(nn.Module):\n", + " \"\"\"\n", + " Text classifier based on a pytorch TransformerEncoder.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " embeddings,\n", + " nhead=8,\n", + " dim_feedforward=2048,\n", + " num_layers=6,\n", + " positional_dropout=0.1,\n", + " classifier_dropout=0.1,\n", + " activation=\"relu\",\n", + " ):\n", + "\n", + " super().__init__()\n", + "\n", + " vocab_size, d_model = embeddings.size()\n", + " assert d_model % nhead == 0, \"nheads must divide evenly into d_model\"\n", + "\n", + " self.emb = nn.Embedding.from_pretrained(embeddings, freeze=False)\n", + "\n", + " self.pos_encoder = PositionalEncoding(\n", + " d_model=d_model,\n", + " dropout=positional_dropout,\n", + " vocab_size=vocab_size,\n", + " )\n", + "\n", + " encoder_layer = nn.TransformerEncoderLayer(\n", + " d_model=d_model,\n", + " nhead=nhead,\n", + " dim_feedforward=dim_feedforward,\n", + " dropout=classifier_dropout,\n", + " )\n", + " self.transformer_encoder = nn.TransformerEncoder(\n", + " encoder_layer,\n", + " num_layers=num_layers,\n", + " )\n", + " # normalize to stabilize and stop overfitting\n", + " self.batch_norm = nn.BatchNorm1d(d_model)\n", + " self.classifier = nn.Linear(d_model, 2)\n", + " self.d_model = d_model\n", + " self.softmax = nn.Softmax(dim=1)\n", + "\n", + " def forward(self, x):\n", + " x = self.emb(x) * math.sqrt(self.d_model)\n", + " x = self.pos_encoder(x)\n", + " x = self.transformer_encoder(x)\n", + " x = x.mean(dim=1)\n", + " # normalize to stabilize and stop overfitting\n", + " x = self.batch_norm(x)\n", + " x = self.classifier(x)\n", + " \n", + " # TODO check if softmax is needed\n", + " #x = self.softmax(x)\n", + " return x\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train 3945 3945\n", + "test 494 494\n", + "val 493 493\n" + ] + } + ], + "source": [ + "X,y = data_gen.load_preprocess_data()\n", + "\n", + "ret_dict = data_gen.split_data(X, y)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set hyper params" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "model created\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\felix\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\transformer.py:379: UserWarning: enable_nested_tensor is True, but self.use_nested_tensor is False because encoder_layer.self_attn.batch_first was not True(use batch_first for better inference performance)\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "params = {\n", + " # used for class balancing\n", + " 'equalize_classes_loss_factor': 0.15, # 0.15 (0.1 to 0.2)\n", + " # training parameters\n", + " 'batch_size': 32, # 32 (16 to 64)\n", + " 'epochs': 100, # 100\n", + " 'lr': 1e-4, # 1e-5 (1e-6 to 1e-3)\n", + " \n", + " # NOTE: used for gradient clipping (needed for lstm and transformer)\n", + " # use 0 to disable\n", + " 'clipping_max_norm': 0, # 0 (0.5 to 2.0)\n", + " \n", + " # patience for early stopping\n", + " 'early_stopping_patience': 5, # 5 (3 to 10)\n", + "\n", + " # learning rate scheduler\n", + " 'lr_scheduler_factor': 0.5, # 0.1 (0.05 to 0.2)\n", + " 'lr_scheduler_patience': 3, # 3 (2 to 5)\n", + "\n", + " # model parameters\n", + " 'nhead': 2, # 5\n", + " 'num_layers': 3, # 6\n", + " 'hidden_dim': 10, # 50\n", + "\n", + " # regularization parameters\n", + " 'positional_dropout': 0.5, # 0.1 (0.1 to 0.5)\n", + " 'classifier_dropout': 0.5, # 0.1 (0.1 to 0.5)\n", + " 'weight_decay': 1e-2 # 0.0 (1e-6 to 1e-2)\n", + "}\n", + "\n", + "# Model initialization\n", + "model = TransformerBinaryClassifier(embeddings=embedding_matrix, \n", + " nhead=params['nhead'], \n", + " num_layers=params['num_layers'], \n", + " dim_feedforward=params['hidden_dim'],\n", + " positional_dropout=params['positional_dropout'],\n", + " classifier_dropout=params['classifier_dropout']\n", + " )\n", + "model.to(device)\n", + "print('model created')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### create datasets" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "datasets length: 3945 493\n", + "train: 124, val: 16, test: 16\n" + ] + } + ], + "source": [ + "# NOTE: Info comes from data explore notebook: 280 is max length,\n", + "# 139 contains 80% and 192 contains 95% of the data\n", + "max_len = 280\n", + "\n", + "train_dataset = humor_ds.TextDataset(ret_dict['train']['X'], ret_dict['train']['y'], word_index, max_len=max_len)\n", + "val_dataset = humor_ds.TextDataset(ret_dict['val']['X'], ret_dict['val']['y'], word_index, max_len=max_len)\n", + "test_dataset = humor_ds.TextDataset(ret_dict['test']['X'], ret_dict['test']['y'], word_index, max_len=max_len)\n", + "\n", + "print('datasets length:', len(train_dataset), len(val_dataset))\n", + "#NOTE: overfitting test\n", + "#train_dataset.labels = train_dataset.labels[:100]\n", + "#train_dataset.texts = train_dataset.texts[:100]\n", + "\n", + "train_loader = DataLoader(train_dataset, batch_size=params['batch_size'], shuffle=True)\n", + "val_loader = DataLoader(val_dataset, batch_size=params['batch_size'], shuffle=False)\n", + "test_loader = DataLoader(test_dataset, batch_size=params['batch_size'], shuffle=False)\n", + "\n", + "# NOTE: samller because of batches not all data\n", + "print(f\"train: {len(train_loader)}, val: {len(val_loader)}, test: {len(test_loader)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set training requirements" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "#criterion = nn.CrossEntropyLoss()\n", + "#criterion = nn.BCEWithLogitsLoss()\n", + "# alpha determines the weight of the imbalance penalty\n", + "criterion = BalancedCELoss.BalancedCELoss(alpha=params['equalize_classes_loss_factor'])\n", + "\n", + "\n", + "optimizer = torch.optim.Adam((p for p in model.parameters() if p.requires_grad), \n", + " lr=params['lr']) #, \n", + " #weight_decay=params['weight_decay'])\n", + "\"\"\"\n", + "scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', \n", + " factor=params['lr_scheduler_factor'],\n", + " patience=params['lr_scheduler_patience'],\n", + " verbose=True)\n", + "\"\"\"\n", + "early_stopping = EarlyStopping.EarlyStopping(patience=params['early_stopping_patience'], verbose=False)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Training loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100 - 2.87s - loss: 0.7935 - accuracy: 0.4969 - val_loss: 2.3949 - val_accuracy: 0.4742\n", + "Epoch 2/100 - 2.70s - loss: 0.8777 - accuracy: 0.5114 - val_loss: 0.7464 - val_accuracy: 0.5005\n", + "Epoch 3/100 - 2.67s - loss: 0.8741 - accuracy: 0.4914 - val_loss: 0.7593 - val_accuracy: 0.5044\n", + "Epoch 4/100 - 2.65s - loss: 0.8460 - accuracy: 0.4999 - val_loss: 0.8106 - val_accuracy: 0.5287\n", + "Epoch 5/100 - 2.65s - loss: 0.8504 - accuracy: 0.5051 - val_loss: 0.8417 - val_accuracy: 0.4917\n", + "Epoch 6/100 - 2.70s - loss: 0.8398 - accuracy: 0.5114 - val_loss: 0.7328 - val_accuracy: 0.5365\n", + "Epoch 7/100 - 2.67s - loss: 0.8218 - accuracy: 0.5227 - val_loss: 0.8496 - val_accuracy: 0.5258\n", + "Epoch 8/100 - 2.63s - loss: 0.8164 - accuracy: 0.5248 - val_loss: 1.0123 - val_accuracy: 0.4742\n", + "Epoch 9/100 - 2.70s - loss: 0.8178 - accuracy: 0.5225 - val_loss: 0.8091 - val_accuracy: 0.5248\n", + "Epoch 10/100 - 2.75s - loss: 0.8085 - accuracy: 0.5308 - val_loss: 0.8591 - val_accuracy: 0.5258\n", + "Epoch 11/100 - 2.72s - loss: 0.8109 - accuracy: 0.5396 - val_loss: 0.7448 - val_accuracy: 0.5766\n", + "Epoch 12/100 - 2.61s - loss: 0.7906 - accuracy: 0.5392 - val_loss: 0.7868 - val_accuracy: 0.5367\n", + "Epoch 13/100 - 2.62s - loss: 0.7814 - accuracy: 0.5413 - val_loss: 0.7026 - val_accuracy: 0.5805\n", + "Epoch 14/100 - 2.64s - loss: 0.7705 - accuracy: 0.5549 - val_loss: 0.7042 - val_accuracy: 0.5874\n", + "Epoch 15/100 - 2.67s - loss: 0.7804 - accuracy: 0.5703 - val_loss: 0.7103 - val_accuracy: 0.5972\n", + "Epoch 16/100 - 2.64s - loss: 0.7535 - accuracy: 0.5731 - val_loss: 0.7967 - val_accuracy: 0.5551\n", + "Epoch 17/100 - 2.61s - loss: 0.7696 - accuracy: 0.5748 - val_loss: 0.8019 - val_accuracy: 0.5406\n", + "Epoch 18/100 - 2.65s - loss: 0.7589 - accuracy: 0.5816 - val_loss: 0.9402 - val_accuracy: 0.5278\n", + "Epoch 19/100 - 2.73s - loss: 0.7952 - accuracy: 0.5621 - val_loss: 0.7648 - val_accuracy: 0.5581\n", + "Epoch 20/100 - 2.72s - loss: 0.7454 - accuracy: 0.5914 - val_loss: 0.8648 - val_accuracy: 0.5239\n", + "Epoch 21/100 - 2.61s - loss: 0.7232 - accuracy: 0.6027 - val_loss: 0.8158 - val_accuracy: 0.5395\n", + "Epoch 22/100 - 2.59s - loss: 0.7286 - accuracy: 0.6176 - val_loss: 0.6909 - val_accuracy: 0.6303\n", + "Epoch 23/100 - 2.74s - loss: 0.7111 - accuracy: 0.6171 - val_loss: 0.6731 - val_accuracy: 0.6322\n", + "Epoch 24/100 - 2.68s - loss: 0.7176 - accuracy: 0.6195 - val_loss: 0.8146 - val_accuracy: 0.5532\n", + "Epoch 25/100 - 2.65s - loss: 0.7193 - accuracy: 0.6134 - val_loss: 0.7866 - val_accuracy: 0.5727\n", + "Epoch 26/100 - 2.65s - loss: 0.6916 - accuracy: 0.6349 - val_loss: 0.7352 - val_accuracy: 0.5883\n", + "Epoch 27/100 - 2.68s - loss: 0.7175 - accuracy: 0.6147 - val_loss: 0.6878 - val_accuracy: 0.6157\n", + "Epoch 28/100 - 2.70s - loss: 0.6831 - accuracy: 0.6403 - val_loss: 0.8379 - val_accuracy: 0.5454\n", + "Epoch 29/100 - 2.68s - loss: 0.6874 - accuracy: 0.6381 - val_loss: 0.7423 - val_accuracy: 0.6059\n", + "Epoch 30/100 - 2.62s - loss: 0.6790 - accuracy: 0.6509 - val_loss: 0.7564 - val_accuracy: 0.5816\n", + "Epoch 31/100 - 2.66s - loss: 0.6696 - accuracy: 0.6509 - val_loss: 0.6831 - val_accuracy: 0.5983\n", + "Epoch 32/100 - 2.63s - loss: 0.6541 - accuracy: 0.6646 - val_loss: 0.6756 - val_accuracy: 0.6333\n", + "Epoch 33/100 - 2.69s - loss: 0.6396 - accuracy: 0.6744 - val_loss: 0.6731 - val_accuracy: 0.6274\n", + "Epoch 34/100 - 2.63s - loss: 0.6543 - accuracy: 0.6666 - val_loss: 0.6772 - val_accuracy: 0.6176\n", + "Epoch 35/100 - 2.70s - loss: 0.6387 - accuracy: 0.6775 - val_loss: 0.7236 - val_accuracy: 0.6157\n", + "Epoch 36/100 - 2.67s - loss: 0.6173 - accuracy: 0.6958 - val_loss: 0.6906 - val_accuracy: 0.6196\n", + "Epoch 37/100 - 2.75s - loss: 0.6283 - accuracy: 0.6857 - val_loss: 0.7336 - val_accuracy: 0.6235\n", + "Epoch 38/100 - 2.75s - loss: 0.6012 - accuracy: 0.7007 - val_loss: 0.7334 - val_accuracy: 0.6244\n", + "Epoch 39/100 - 2.71s - loss: 0.5942 - accuracy: 0.7105 - val_loss: 0.6830 - val_accuracy: 0.6352\n", + "Epoch 40/100 - 2.69s - loss: 0.5850 - accuracy: 0.7192 - val_loss: 0.7207 - val_accuracy: 0.6313\n", + "Epoch 41/100 - 2.62s - loss: 0.5905 - accuracy: 0.7138 - val_loss: 0.7521 - val_accuracy: 0.6137\n", + "Epoch 42/100 - 2.67s - loss: 0.5869 - accuracy: 0.7198 - val_loss: 0.7848 - val_accuracy: 0.5894\n", + "Epoch 43/100 - 2.71s - loss: 0.5666 - accuracy: 0.7316 - val_loss: 0.7337 - val_accuracy: 0.6274\n", + "Epoch 44/100 - 2.68s - loss: 0.5588 - accuracy: 0.7350 - val_loss: 0.7804 - val_accuracy: 0.6118\n", + "Epoch 45/100 - 2.66s - loss: 0.5488 - accuracy: 0.7442 - val_loss: 0.7241 - val_accuracy: 0.6020\n", + "Epoch 46/100 - 2.72s - loss: 0.5505 - accuracy: 0.7423 - val_loss: 0.7173 - val_accuracy: 0.6331\n", + "Epoch 47/100 - 2.76s - loss: 0.5269 - accuracy: 0.7574 - val_loss: 0.7258 - val_accuracy: 0.6283\n", + "Epoch 48/100 - 2.68s - loss: 0.5336 - accuracy: 0.7543 - val_loss: 0.7117 - val_accuracy: 0.6351\n", + "Epoch 49/100 - 2.64s - loss: 0.5198 - accuracy: 0.7622 - val_loss: 0.7552 - val_accuracy: 0.6264\n", + "Epoch 50/100 - 2.68s - loss: 0.5027 - accuracy: 0.7742 - val_loss: 0.7510 - val_accuracy: 0.6089\n", + "Epoch 51/100 - 2.73s - loss: 0.4982 - accuracy: 0.7701 - val_loss: 0.7405 - val_accuracy: 0.6137\n", + "Epoch 52/100 - 2.69s - loss: 0.4766 - accuracy: 0.7866 - val_loss: 0.7566 - val_accuracy: 0.6098\n", + "Epoch 53/100 - 2.65s - loss: 0.4801 - accuracy: 0.7846 - val_loss: 0.7657 - val_accuracy: 0.5972\n", + "Epoch 54/100 - 2.64s - loss: 0.4782 - accuracy: 0.7889 - val_loss: 0.7740 - val_accuracy: 0.6107\n", + "Epoch 55/100 - 2.77s - loss: 0.4609 - accuracy: 0.8001 - val_loss: 0.7642 - val_accuracy: 0.6342\n", + "Epoch 56/100 - 2.69s - loss: 0.4562 - accuracy: 0.7939 - val_loss: 0.7496 - val_accuracy: 0.6313\n", + "Epoch 57/100 - 2.69s - loss: 0.4294 - accuracy: 0.8175 - val_loss: 0.7696 - val_accuracy: 0.6187\n", + "Epoch 58/100 - 2.60s - loss: 0.4270 - accuracy: 0.8222 - val_loss: 0.7816 - val_accuracy: 0.6226\n", + "Epoch 59/100 - 2.61s - loss: 0.4097 - accuracy: 0.8323 - val_loss: 0.8205 - val_accuracy: 0.6107\n", + "Epoch 60/100 - 2.68s - loss: 0.4083 - accuracy: 0.8251 - val_loss: 0.8314 - val_accuracy: 0.6098\n", + "Epoch 61/100 - 2.65s - loss: 0.3924 - accuracy: 0.8430 - val_loss: 0.8286 - val_accuracy: 0.6040\n", + "Epoch 62/100 - 2.63s - loss: 0.4108 - accuracy: 0.8326 - val_loss: 0.8096 - val_accuracy: 0.6089\n", + "Epoch 63/100 - 2.63s - loss: 0.4049 - accuracy: 0.8311 - val_loss: 0.8225 - val_accuracy: 0.6079\n", + "Epoch 64/100 - 2.69s - loss: 0.3702 - accuracy: 0.8442 - val_loss: 0.8243 - val_accuracy: 0.6274\n", + "Epoch 65/100 - 2.69s - loss: 0.3736 - accuracy: 0.8471 - val_loss: 0.8599 - val_accuracy: 0.6059\n", + "Epoch 66/100 - 2.68s - loss: 0.3671 - accuracy: 0.8536 - val_loss: 0.8497 - val_accuracy: 0.5922\n", + "Epoch 67/100 - 2.70s - loss: 0.3560 - accuracy: 0.8590 - val_loss: 0.8470 - val_accuracy: 0.6196\n", + "Epoch 68/100 - 2.69s - loss: 0.3339 - accuracy: 0.8693 - val_loss: 0.8498 - val_accuracy: 0.6196\n", + "Epoch 69/100 - 2.68s - loss: 0.3347 - accuracy: 0.8651 - val_loss: 0.8548 - val_accuracy: 0.6255\n", + "Epoch 70/100 - 2.68s - loss: 0.3335 - accuracy: 0.8681 - val_loss: 0.8906 - val_accuracy: 0.6020\n", + "Epoch 71/100 - 2.65s - loss: 0.3275 - accuracy: 0.8753 - val_loss: 0.9036 - val_accuracy: 0.6148\n", + "Epoch 72/100 - 2.69s - loss: 0.3119 - accuracy: 0.8796 - val_loss: 0.9040 - val_accuracy: 0.5894\n", + "Epoch 73/100 - 2.64s - loss: 0.3095 - accuracy: 0.8837 - val_loss: 0.9050 - val_accuracy: 0.5933\n", + "Epoch 74/100 - 2.71s - loss: 0.3097 - accuracy: 0.8819 - val_loss: 0.9232 - val_accuracy: 0.5894\n", + "Epoch 75/100 - 2.71s - loss: 0.3006 - accuracy: 0.8859 - val_loss: 0.9982 - val_accuracy: 0.5699\n", + "Epoch 76/100 - 2.72s - loss: 0.2991 - accuracy: 0.8881 - val_loss: 0.9575 - val_accuracy: 0.5796\n", + "Epoch 77/100 - 2.66s - loss: 0.2826 - accuracy: 0.8967 - val_loss: 0.9735 - val_accuracy: 0.5864\n", + "Epoch 78/100 - 2.65s - loss: 0.2756 - accuracy: 0.8984 - val_loss: 0.9550 - val_accuracy: 0.5981\n", + "Epoch 79/100 - 2.72s - loss: 0.2848 - accuracy: 0.8934 - val_loss: 0.9656 - val_accuracy: 0.5903\n", + "Epoch 80/100 - 2.72s - loss: 0.2697 - accuracy: 0.9001 - val_loss: 1.0160 - val_accuracy: 0.5855\n", + "Epoch 81/100 - 2.65s - loss: 0.2580 - accuracy: 0.9013 - val_loss: 0.9867 - val_accuracy: 0.6137\n", + "Epoch 82/100 - 2.63s - loss: 0.2551 - accuracy: 0.9027 - val_loss: 1.0064 - val_accuracy: 0.5883\n", + "Epoch 83/100 - 2.72s - loss: 0.2568 - accuracy: 0.9042 - val_loss: 1.0603 - val_accuracy: 0.6059\n", + "Epoch 84/100 - 2.83s - loss: 0.2601 - accuracy: 0.9046 - val_loss: 1.0153 - val_accuracy: 0.5805\n", + "Epoch 85/100 - 2.70s - loss: 0.2430 - accuracy: 0.9098 - val_loss: 1.0606 - val_accuracy: 0.5864\n", + "Epoch 86/100 - 2.61s - loss: 0.2392 - accuracy: 0.9098 - val_loss: 1.0427 - val_accuracy: 0.5903\n", + "Epoch 87/100 - 2.58s - loss: 0.2298 - accuracy: 0.9148 - val_loss: 1.0372 - val_accuracy: 0.5894\n", + "Epoch 88/100 - 2.68s - loss: 0.2203 - accuracy: 0.9186 - val_loss: 1.1209 - val_accuracy: 0.5844\n", + "Epoch 89/100 - 2.64s - loss: 0.2277 - accuracy: 0.9214 - val_loss: 1.0755 - val_accuracy: 0.5766\n", + "Epoch 90/100 - 2.58s - loss: 0.2218 - accuracy: 0.9205 - val_loss: 1.1082 - val_accuracy: 0.5777\n", + "Epoch 91/100 - 2.59s - loss: 0.2071 - accuracy: 0.9275 - val_loss: 1.1067 - val_accuracy: 0.5825\n", + "Epoch 92/100 - 2.63s - loss: 0.2030 - accuracy: 0.9276 - val_loss: 1.1445 - val_accuracy: 0.5953\n", + "Epoch 93/100 - 2.80s - loss: 0.2049 - accuracy: 0.9335 - val_loss: 1.1118 - val_accuracy: 0.6010\n", + "Epoch 94/100 - 2.74s - loss: 0.1959 - accuracy: 0.9332 - val_loss: 1.1190 - val_accuracy: 0.5834\n", + "Epoch 95/100 - 2.68s - loss: 0.1939 - accuracy: 0.9350 - val_loss: 1.1235 - val_accuracy: 0.5883\n", + "Epoch 96/100 - 2.59s - loss: 0.2025 - accuracy: 0.9292 - val_loss: 1.1709 - val_accuracy: 0.5699\n", + "Epoch 97/100 - 2.69s - loss: 0.1860 - accuracy: 0.9361 - val_loss: 1.2127 - val_accuracy: 0.5844\n", + "Epoch 98/100 - 2.63s - loss: 0.1900 - accuracy: 0.9346 - val_loss: 1.1717 - val_accuracy: 0.5864\n", + "Epoch 99/100 - 2.64s - loss: 0.1750 - accuracy: 0.9398 - val_loss: 1.2376 - val_accuracy: 0.6029\n", + "Epoch 100/100 - 2.63s - loss: 0.1702 - accuracy: 0.9435 - val_loss: 1.1950 - val_accuracy: 0.5962\n" + ] + } + ], + "source": [ + "hist = ml_history.History()\n", + "\n", + "model.train()\n", + "# Training loop\n", + "for epoch in range(params['epochs']):\n", + " epoch_start_time = time.time()\n", + " hist.batch_reset()\n", + " for batch in train_loader:\n", + " optimizer.zero_grad()\n", + " input_ids, labels = batch\n", + " input_ids, labels = input_ids.to(device), labels.to(device)\n", + "\n", + " outputs = model(input_ids)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " #torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=params['clipping_max_norm'])\n", + " optimizer.step()\n", + " preds = torch.argmax(outputs, dim=1) \n", + " # Update history\n", + " hist.batch_update_train(loss.item(), outputs, labels)\n", + " \n", + " # Validation\n", + " model.eval()\n", + " with torch.no_grad():\n", + " for batch in val_loader:\n", + " input_ids, labels = batch\n", + " input_ids, labels = input_ids.to(device), labels.to(device)\n", + " outputs = model(input_ids)\n", + " loss = criterion(outputs, labels)\n", + "\n", + " preds = torch.argmax(outputs, dim=1)\n", + " # Update history\n", + " hist.batch_update_val(loss.item(), outputs, labels)\n", + "\n", + " # Update history\n", + " hist.update()\n", + " \n", + " epoch_end_time = time.time()\n", + " hist.print_history(epoch + 1, params['epochs'], epoch_end_time - epoch_start_time)\n", + "\n", + " \"\"\"\n", + " # Step the scheduler\n", + " scheduler.step(val_loss)\n", + " \n", + " \"\"\"\n", + " # Check early stopping\n", + " early_stopping(hist.history['val_loss'][-1], model, best_model_filename)\n", + " # if early_stopping.early_stop:\n", + " # print(\"Early stopping\")\n", + " # break\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 505 + }, + "id": "H7BSCQySGIF_", + "outputId": "edada67e-3461-4d04-9708-a632cdbe3fd9" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\felix\\AppData\\Local\\Temp\\ipykernel_26112\\1470113516.py:1: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", + " model.load_state_dict(torch.load('checkpoints/checkpoint.pt'))\n" + ] + } + ], + "source": [ + "model.load_state_dict(torch.load(best_model_filename))\n", + "\n", + "model.eval()\n", + "\n", + "all_preds = []\n", + "all_labels = []\n", + "\n", + "with torch.no_grad():\n", + " for texts, labels in test_loader:\n", + " #print(texts)\n", + " texts, labels = texts.to(device), labels.to(device)\n", + " outputs = model(texts)\n", + " predictions = torch.argmax(outputs, dim=1)\n", + "\n", + " all_preds.extend(predictions.cpu())\n", + " all_labels.extend(labels.cpu())" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🚀 Finale Test Accuracy: 0.6194\n", + "🚀 Finale Test F1 Score: 0.6667\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgIAAAHWCAYAAAAFAuFoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9kklEQVR4nO3deVxUdfv/8fcgMiAKiAtICu5rpqZmpIneUrimaalliUvaopaiZt7lWkZp7lq0mWXa3aql9XXJjUzcxcy8VRS1UjAjMFAQ4fz+8OfcTaAxODDieT17zOPRfM5nzrnO3HbP5XWdzzkWwzAMAQAAU3JzdQAAAMB1SAQAADAxEgEAAEyMRAAAABMjEQAAwMRIBAAAMDESAQAATIxEAAAAEyMRAADAxEgEgAI6cuSI7r33Xvn6+spisWjFihVO3f/x48dlsVi0ePFip+63JGvXrp3atWvn6jCAmxqJAEqUo0eP6vHHH1fNmjXl6ekpHx8ftW7dWnPnztWFCxeK9NiRkZHav3+/pk2bpiVLlqhFixZFerziNGDAAFksFvn4+OT7PR45ckQWi0UWi0Wvvfaaw/s/deqUJk+erPj4eCdEC8CZ3F0dAFBQX3/9tR588EFZrVb1799ft956qy5evKgtW7Zo7NixOnDggN56660iOfaFCxcUFxen559/XsOHDy+SY4SEhOjChQsqXbp0kez/n7i7u+v8+fNauXKlevfubbdt6dKl8vT0VGZmZqH2ferUKU2ZMkXVq1dX06ZNC/y5tWvXFup4AAqORAAlQmJiovr27auQkBBt2LBBVapUsW0bNmyYEhIS9PXXXxfZ8X/77TdJkp+fX5Edw2KxyNPTs8j2/0+sVqtat26tjz76KE8isGzZMnXp0kWff/55scRy/vx5lSlTRh4eHsVyPMDMaA2gRJg+fbrS09P17rvv2iUBV9SuXVvPPPOM7f2lS5f04osvqlatWrJarapevbr+/e9/Kysry+5z1atXV9euXbVlyxbdcccd8vT0VM2aNfXBBx/Y5kyePFkhISGSpLFjx8pisah69eqSLpfUr/z7X02ePFkWi8VubN26dWrTpo38/PxUtmxZ1atXT//+979t2692jcCGDRt09913y9vbW35+furevbsOHjyY7/ESEhI0YMAA+fn5ydfXVwMHDtT58+ev/sX+zcMPP6z/+7//U2pqqm1s586dOnLkiB5++OE881NSUjRmzBg1btxYZcuWlY+Pjzp16qR9+/bZ5mzatEktW7aUJA0cONDWYrhynu3atdOtt96q3bt3q23btipTpozte/n7NQKRkZHy9PTMc/4REREqX768Tp06VeBzBXAZiQBKhJUrV6pmzZq66667CjT/scce08SJE3X77bdr9uzZCgsLU3R0tPr27ZtnbkJCgh544AHdc889mjlzpsqXL68BAwbowIEDkqSePXtq9uzZkqSHHnpIS5Ys0Zw5cxyK/8CBA+ratauysrI0depUzZw5U/fdd5++//77a37u22+/VUREhM6cOaPJkycrKipKW7duVevWrXX8+PE883v37q0///xT0dHR6t27txYvXqwpU6YUOM6ePXvKYrHoiy++sI0tW7ZM9evX1+23355n/rFjx7RixQp17dpVs2bN0tixY7V//36FhYXZfpQbNGigqVOnSpKGDh2qJUuWaMmSJWrbtq1tP7///rs6deqkpk2bas6cOWrfvn2+8c2dO1eVKlVSZGSkcnJyJElvvvmm1q5dq/nz5ysoKKjA5wrg/zOAG1xaWpohyejevXuB5sfHxxuSjMcee8xufMyYMYYkY8OGDbaxkJAQQ5IRGxtrGztz5oxhtVqN0aNH28YSExMNScaMGTPs9hkZGWmEhITkiWHSpEnGX//zmj17tiHJ+O23364a95VjvPfee7axpk2bGpUrVzZ+//1329i+ffsMNzc3o3///nmON2jQILt93n///UaFChWuesy/noe3t7dhGIbxwAMPGB06dDAMwzBycnKMwMBAY8qUKfl+B5mZmUZOTk6e87BarcbUqVNtYzt37sxzbleEhYUZkoyYmJh8t4WFhdmNrVmzxpBkvPTSS8axY8eMsmXLGj169PjHcwSQPyoCuOGdO3dOklSuXLkCzf/mm28kSVFRUXbjo0ePlqQ81xI0bNhQd999t+19pUqVVK9ePR07dqzQMf/dlWsLvvzyS+Xm5hboM6dPn1Z8fLwGDBggf39/2/htt92me+65x3aef/XEE0/Yvb/77rv1+++/277Dgnj44Ye1adMmJSUlacOGDUpKSsq3LSBdvq7Aze3y/43k5OTo999/t7U99uzZU+BjWq1WDRw4sEBz7733Xj3++OOaOnWqevbsKU9PT7355psFPhYAeyQCuOH5+PhIkv78888CzT9x4oTc3NxUu3Ztu/HAwED5+fnpxIkTduPBwcF59lG+fHn98ccfhYw4rz59+qh169Z67LHHFBAQoL59++qTTz65ZlJwJc569erl2dagQQOdPXtWGRkZduN/P5fy5ctLkkPn0rlzZ5UrV04ff/yxli5dqpYtW+b5Lq/Izc3V7NmzVadOHVmtVlWsWFGVKlXSDz/8oLS0tAIf85ZbbnHowsDXXntN/v7+io+P17x581S5cuUCfxaAPRIB3PB8fHwUFBSkH3/80aHP/f1ivaspVapUvuOGYRT6GFf611d4eXkpNjZW3377rR599FH98MMP6tOnj+655548c6/H9ZzLFVarVT179tT777+v5cuXX7UaIEkvv/yyoqKi1LZtW3344Ydas2aN1q1bp0aNGhW48iFd/n4csXfvXp05c0aStH//foc+C8AeiQBKhK5du+ro0aOKi4v7x7khISHKzc3VkSNH7MaTk5OVmppqWwHgDOXLl7e7wv6Kv1cdJMnNzU0dOnTQrFmz9NNPP2natGnasGGDNm7cmO++r8R56NChPNv++9//qmLFivL29r6+E7iKhx9+WHv37tWff/6Z7wWWV3z22Wdq37693n33XfXt21f33nuvwsPD83wnBU3KCiIjI0MDBw5Uw4YNNXToUE2fPl07d+502v4BsyERQInw7LPPytvbW4899piSk5PzbD969Kjmzp0r6XJpW1KeK/tnzZolSerSpYvT4qpVq5bS0tL0ww8/2MZOnz6t5cuX281LSUnJ89krN9b5+5LGK6pUqaKmTZvq/ffft/th/fHHH7V27VrbeRaF9u3b68UXX9SCBQsUGBh41XmlSpXKU2349NNP9euvv9qNXUlY8kuaHDVu3DidPHlS77//vmbNmqXq1asrMjLyqt8jgGvjhkIoEWrVqqVly5apT58+atCggd2dBbdu3apPP/1UAwYMkCQ1adJEkZGReuutt5SamqqwsDDt2LFD77//vnr06HHVpWmF0bdvX40bN07333+/nn76aZ0/f15vvPGG6tata3ex3NSpUxUbG6suXbooJCREZ86c0euvv66qVauqTZs2V93/jBkz1KlTJ4WGhmrw4MG6cOGC5s+fL19fX02ePNlp5/F3bm5ueuGFF/5xXteuXTV16lQNHDhQd911l/bv36+lS5eqZs2advNq1aolPz8/xcTE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print(f'🚀 Finale Test Accuracy: {ml_eval.get_accuracy(all_preds, all_labels):.4f}')\n", + "print(f'🚀 Finale Test F1 Score: {ml_eval.get_f1_score(all_preds, all_labels):.4f}')\n", + "\n", + "# Confusion matrix\n", + "con_plt = ml_eval.plot_confusion_matrix(all_preds, all_labels, ['0', '1'])\n", + "con_plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Class 0: 0.64\n", + "Class 1: 0.36\n" + ] + } + ], + "source": [ + "ml_eval.get_label_distribution(all_labels, all_preds)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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I48QFhaGv78/tWrVYtGiRan2+99pQSaTie+//56OHTvi6+tLqVKlmDNnzn3F/vvvv1OhQgW8vLwIDw9n1KhRqZZ//fXXlCpVCm9vb8LCwujSpYt92W+//UalSpXw8fEhT548NG/enNjY2PuKR8RZMvt5evjwYdasWcPrr79O6dKlmTlzZpp1Jk6caD9f8+fPz8CBA+3LLl26xDPPPENYWBje3t5UrFiRuXPnAjB8+HCqVq2aal9jxowhPDzc/rhv37506NCB999/nwIFClCmTBkApkyZQs2aNQkICCBfvnw8+uijnD17NtW+du7cyUMPPURgYCABAQE0bNiQgwcPsmLFCjw8PDh9+nSq9QcNGkTDhg1v+5qIiEj2o6SUox1YDDtmQux5V0ciIpJtGYZBXGJyht8Mw3DYc3j99df58MMP2b17N5UrV+bKlSu0bduWxYsXs2XLFlq3bk379u2JjIy85X7eeecdunXrxrZt22jbti2PPfYYFy5cuKeYNm3aRLdu3ejRowfbt29n+PDhvPXWW0yePBmAjRs38r///Y8RI0awd+9e5s+fT6NGjQBb1UnPnj3p378/u3fvZtmyZXTq1Mmhr5lkHa46R7PTeTpp0iTatWtHUFAQvXr1YsKECamWjxs3jgEDBvD000+zfft25syZQ8mSJQGwWq20adOG1atX89NPP7Fr1y4+/PBD3Nzc7ur5L168mL1797Jw4UJ7QispKYl3332XrVu3Mnv2bI4cOULfvn3t25w4cYJGjRrh5eXFkiVL2LRpE/379yc5OZlGjRpRvHhxpkyZYl8/KSmJqVOn0r9//7uKTURE7s/e05eZsu6oq8PQ9D2H+/tVuHAQ+s0Hv3qujkZEJFu6mmSh/LB/Mvy4u0a0wtfTMX86R4wYQYsWLeyPc+fOTZUqVeyP3333XWbNmsWcOXNSVT/8V9++fenZsycAH3zwAV988QUbNmygdevWdx3T6NGjadasGW+99RYApUuXZteuXXzyySf07duXyMhI/Pz8eOihhwgICKBo0aJUq1YNsCWlkpOT6dSpE0WLFgWgUqVKdx2DZA+uOkche5ynVquVyZMnM3bsWAB69OjByy+/zOHDhylWrBgA7733Hi+//DIvvviifbtatWoBsGjRIjZs2MDu3bspXbo0AMWLF7/r5+/n58f333+fatrejcmj4sWL88UXX1CrVi2uXLmCv78/X331FUFBQUyfPh0PDw8AewwATzzxBJMmTeLVV18F4M8//yQ+Pp5u3brddXwiInL3riQk8/mifUxcfQTDMKheJBcVCgS5LB5VSjma+dqbIGuya+MQEZFMrWbNmqkeX7lyhVdeeYVy5cqRK1cu/P392b17920rMCpXrmy/7+fnR2BgYJqpNHdq9+7d1K9fP9VY/fr12b9/PxaLhRYtWlC0aFGKFy/O448/ztSpU4mLiwOgSpUqNGvWjEqVKtG1a1e+++47Ll68eE9xiGQWrjpPFy5cSGxsLG3btgUgb968tGjRgokTJwJw9uxZTp48SbNmzdLdPiIigkKFCqVKBt2LSpUqpekjtWnTJtq3b0+RIkUICAigcePGAPbXICIigoYNG9oTUv/Vt29fDhw4wLp16wCYPHky3bp1w8/P775iFRGRWzMMg7+2naL5qOV8t/IwFqtBy/L5CPZ1bb9AVUo5mtu1P8DWJNfGISKSjfl4uLFrRCuXHNdR/vsB7JVXXmHhwoV8+umnlCxZEh8fH7p06UJiYuIt9/PfD34mkwmr1eqwOG8UEBDA5s2bWbZsGQsWLGDYsGEMHz6cf//9l1y5crFw4ULWrFnDggULGDt2LG+++Sbr16+3V3ZIzuGqczTl2I7iqvN0woQJXLhwAR8fH/uY1Wpl27ZtvPPOO6nG03O75WazOc00x6SktO9d//v8Y2NjadWqFa1atWLq1KmEhIQQGRlJq1at7K/B7Y4dGhpK+/btmTRpEsWKFWPevHksW7bsltuIiMj9OXo+lqGzd7By/zkAiuT25Z2HK9C0bKiLI1NSyvHslVIW18YhIpKNmUwmh03PySxWr15N37596dixI2CryDhy5EiGxlCuXDlWr16dJq7SpUvbe9G4u7vTvHlzmjdvzttvv02uXLlYsmQJnTp1wmQyUb9+ferXr8+wYcMoWrQos2bNYvDgwRn6PMT1suM5Chlznp4/f54//viD6dOnU6FCBfu4xWKhQYMGLFiwgNatWxMeHs7ixYtp2rRpmn1UrlyZ48ePs2/fvnSrpUJCQjh9+jSGYWAymQBbhdPt7Nmzh/Pnz/Phhx9SuHBhwNZr7r/H/uGHH0hKSrpptdSTTz5Jz549KVSoECVKlEhToSkiIo6zav85np+6iZj4ZDzdzDzbpATPNymBtwO/xLkf2e/dgqulJKUsqpQSEZE7V6pUKWbOnEn79u0xmUy89dZbTqt4ioqKSvMBNH/+/Lz88svUqlWLd999l+7du7N27Vq+/PJLvv76awDmzp3LoUOHaNSoEcHBwfz9999YrVbKlCnD+vXrWbx4MS1btiQ0NJT169cTFRVFuXLlnPIcRFwhI87TKVOmkCdPHrp162ZPGKVo27YtEyZMoHXr1gwfPpxnn32W0NBQ2rRpw+XLl1m9ejUvvPACjRs3plGjRnTu3JnRo0dTsmRJ9uzZg8lkonXr1jRp0oSoqCg+/vhjunTpwvz585k3bx6BgYG3jK1IkSJ4enoyduxYnn32WXbs2MG7776bap2BAwcyduxYevTowZAhQwgKCmLdunXUrl3bfgW/Vq1aERgYyHvvvceIESMc+vqJiMh1P607yttzdmKxGlQrkovR3apSLG/mmi6tnlKOZp++p55SIiJy50aPHk1wcDAPPPAA7du3p1WrVlSvXt0px5o2bRrVqlVLdfvuu++oXr06v/zyC9OnT6dixYoMGzaMESNG2K+slStXLmbOnMmDDz5IuXLlGD9+PD///DMVKlQgMDCQFStW0LZtW0qXLs3QoUMZNWoUbdq0ccpzEHGFjDhPJ06cSMeOHdMkpAA6d+7MnDlzOHfuHH369GHMmDF8/fXXVKhQgYceeoj9+/fb1/3999+pVasWPXv2pHz58rz22mtYLLZK/nLlyvH111/z1VdfUaVKFTZs2MArr7xy29hCQkKYPHkyv/76K+XLl+fDDz/k008/TbVOnjx5WLJkCVeuXKFx48bUqFGD7777LlXVlNlspm/fvlgsFnr37n2vL5WISI53JSGZSasPs3DXGS7FXZ9Knmyx8s6fOxk6ewcWq0GHqgX4+am6mS4hBWAycti1mmNiYggKCiI6Ovq23wbdk8kPwZGV0GUiVOzs+P2LiOQw8fHx9itOeXt7uzocyaZu9f/M6e8dsohbvQ46T+VuPfHEE0RFRTFnzhxXh3LH9P9cRDJCQrKF9YcusHJ/FMVD/OlRq3C6X1QkJFvoM3ED6w5dsI+VCQugVrFgjp6Ps/ePeqVlaQY0LZnuPpzpTt8/afqeo6mnlIiIiIhIuqKjo9m+fTvTpk3LUgkpERFHiTwfx5I9Z/BwN+Pn6Y6Ppxt+nu4cvRDL0j1RrD5wjqtJ1/MJR87F8nqbsqmSSlarweAZW1l36AJ+nm7kC/LmYFQse89cZu+ZywB4e5gZ3a0qbSvlz/DneDeUlHI09ZQSEREREUnXI488woYNG3j22Wdp0aKFq8MREclQ/x65QP9J/3I54dbtfkIDvKhcKBeLdp/hmxWHiIlP5r0OFXEzmzAMgxFzd/HX9lN4uJn4rndNHiiZl3NXEth45AIbDl8k8kIcLzYrRaVCQRn0zO6dklKOpp5SIiIiIiLpWrZsmatDEBFxiRX7onh6ykbik6yUzRdA4dy+XE20EJuYzNVECwHe7jQuHUKTMqFUKBCIyWTil3+P8frMbfy8IZIrCcmM7laFCasOM3nNEQBGdavKAyXzApDX34vWFfPTumLmroz6LyWlHM187bKKVlVKiYiIiIiIiOR083ec4n8/R5BosdKkTAjjHquBj6fbbbfrVqswfl7uDJqxhT+3nuRQ1BV2nowBYGi7cjxcpYCzQ3c6JaUczXytUsqiSikRERERERGRnOz3Tcd59betWA1oVyk/n3Wviqe7+Y63b1c5P75ebjz30yZ7QuqphsV4smFxZ4WcoZSUcjR7o3MlpURERERERERygl0nY/jg791EXU4g2Wol2WqQbDE4cekqAN1qFmJkp8q4me/+KnhNy4TyY/86vPrbVhqVCmFIm3KODt9llJRyNHtPKU3fExEREREREcnujl2Io8+kDURdTkh3ef/6xRjarhzme0hIpahdLDfLX216z9tnVkpKOZq9p5QqpURERERERESys+i4JPpN/peoywmUzRfA0Hbl8XAz4e5mwt1sJtjXkyJ5fF0dZqalpJSjqaeUiIiIiIiISLaXkGzh6SkbOXD2CvmDvJncrzb5grxdHVaWcufdteTO2KfvKSklIiL3p0mTJgwaNMj+ODw8nDFjxtxyG5PJxOzZs+/72I7aj0h2p/NURCRnsloNXvttG+sPX8Dfy52JfWspIXUPVCnlaPZG5+opJSKSU7Vv356kpCTmz5+fZtnKlStp1KgRW7dupXLlyne133///Rc/Pz9HhQnA8OHDmT17NhEREanGT506RXBwsEOP9V+TJ09m0KBBXLp0yanHEUmPztO7c/XqVQoWLIjZbObEiRN4eXllyHFFRFzpcnwSM/49xtT1kVyOTyI8jx/hef0olteP4xev8kfESdzNJsb1qk65/IGuDjdLUlLK0exJKYtr4xAREZd54okn6Ny5M8ePH6dQoUKplk2aNImaNWve9QddgJCQEEeFeFv58uXLsGOJuILO07vz+++/U6FCBQzDYPbs2XTv3j3Djv1fhmFgsVhwd9dHGRFxjpOXrjJ5zRF+Xh/J5YTrs6DOXUlk49GLqdYd2akSDUtl3O/+7EbT9xwtJSllUaWUiEhO9dBDDxESEsLkyZNTjV+5coVff/2VJ554gvPnz9OzZ08KFiyIr68vlSpV4ueff77lfv87LWj//v00atQIb29vypcvz8KFC9Ns83//93+ULl0aX19fihcvzltvvUVSku1v1OTJk3nnnXfYunUrJpMJk8lkj/m/04K2b9/Ogw8+iI+PD3ny5OHpp5/mypUr9uV9+/alQ4cOfPrpp+TPn588efIwYMAA+7HuRWRkJI888gj+/v4EBgbSrVs3zpw5Y1++detWmjZtSkBAAIGBgdSoUYONGzcCcPToUdq3b09wcDB+fn5UqFCBv//++55jkexH5+ndnacTJkygV69e9OrViwkTJqRZvnPnTh566CECAwMJCAigYcOGHDx40L584sSJVKhQAS8vL/Lnz8/AgQMBOHLkCCaTKVUV2KVLlzCZTCxbtgyAZcuWYTKZmDdvHjVq1MDLy4tVq1Zx8OBBHnnkEcLCwvD396dWrVosWrQoVVwJCQn83//9H4ULF8bLy4uSJUsyYcIEDMOgZMmSfPrpp6nWj4iIwGQyceDAgdu+JiKS/Zy/ksBrv22l0cdL+XbFIS4nJFMixI+RnSrx58AGfNGzGoNblKZTtYLUCg/m7fbl6VqzsKvDztL09YKjqaeUiIjzGQYkxWX8cT18wXT7S/m6u7vTu3dvJk+ezJtvvonp2ja//vorFouFnj17cuXKFWrUqMH//d//ERgYyF9//cXjjz9OiRIlqF279m2PYbVa6dSpE2FhYaxfv57o6OhUfW1SBAQEMHnyZAoUKMD27dt56qmnCAgI4LXXXqN79+7s2LGD+fPn2z/IBQUFpdlHbGwsrVq1ol69evz777+cPXuWJ598koEDB6b6QL906VLy58/P0qVLOXDgAN27d6dq1ao89dRTt30+6T2/lITU8uXLSU5OZsCAAXTv3t3+QfWxxx6jWrVqjBs3Djc3NyIiIvDwsP0dHjBgAImJiaxYsQI/Pz927dqFv7//Xcch98hV5yjoPHXCeXrw4EHWrl3LzJkzMQyDl156iaNHj1K0aFEATpw4QaNGjWjSpAlLliwhMDCQ1atXk5xsez88btw4Bg8ezIcffkibNm2Ijo5m9erVt339/uv111/n008/pXjx4gQHB3Ps2DHatm3L+++/j5eXFz/++CPt27dn7969FClSBIDevXuzdu1avvjiC6pUqcLhw4c5d+4cJpOJ/v37M2nSJF555RX7MSZNmkSjRo0oWbLkXccnIlmX1Wrwy8ZjjJy3h+irtkR9veJ5eKpRMZqUDsVstv2NqFQo7e9fuT9KSjma2c32Uz2lREScJykOPiiQ8cd94yR43lmvmP79+/PJJ5+wfPlymjRpAtg+7HTu3JmgoCCCgoJSfRB64YUX+Oeff/jll1/u6MPuokWL2LNnD//88w8FCtheiw8++IA2bdqkWm/o0KH2++Hh4bzyyitMnz6d1157DR8fH/z9/XF3d7/lNKBp06YRHx/Pjz/+aO+V8+WXX9K+fXs++ugjwsLCAAgODubLL7/Ezc2NsmXL0q5dOxYvXnxPSanFixezfft2Dh8+TOHCtm8gf/zxRypUqMC///5LrVq1iIyM5NVXX6Vs2bIAlCpVyr59ZGQknTt3plKlSgAUL178rmOQ++CqcxR0njrhPJ04cSJt2rSx969q1aoVkyZNYvjw4QB89dVXBAUFMX36dHtiuHTp0vbt33vvPV5++WVefPFF+1itWrVu+/r914gRI2jRooX9ce7cualSpYr98bvvvsusWbOYM2cOAwcOZN++ffzyyy8sXLiQ5s2bA6l/F/Tt25dhw4axYcMGateuTVJSEtOmTUtTPSUi2due0zG8OWsHm65NyyuXP5D3OlSgRtHcLo4sZ9D0PUczX6uUsqhSSkQkJytbtiwPPPAAEydOBODAgQOsXLmSJ554AgCLxcK7775LpUqVyJ07N/7+/vzzzz9ERkbe0f53795N4cKF7R90AerVq5dmvRkzZlC/fn3y5cuHv78/Q4cOveNj3HisKlWqpGreXL9+faxWK3v37rWPVahQATc3N/vj/Pnzc/bs2bs61o3HLFy4sD0hBVC+fHly5crF7t27ARg8eDBPPvkkzZs358MPP0w1Veh///sf7733HvXr1+ftt99m27Zt9xSHZG86T29/nlosFn744Qd69eplH+vVqxeTJ0/GarUCtilvDRs2tCekbnT27FlOnjxJs2bN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4ffff2fYsGE899xzDg0yy3K7lpRSTykREZEc78svv+TAgQMUKFCAokWL4ufnl2r55s2bXRSZiDjThFWHWXPwPD4eboy5SY8oDzczAx8s5YLoRERc656SUnFxcQQEBACwYMECOnXqhNlspm7duhw9etShAWZpZjfbT/WUEhERyfE6dOjg6hBEJINFno9j1MK9ALz1UHmKh/i7OCIRkczlnpJSJUuWZPbs2XTs2JF//vmHl156CYCzZ88SGBjo0ACztJTpe+opJSIikuO9/fbbrg5BRDKQYRgM/WMH8UlW6hXPQ8/ahV0dkohIpnNPPaWGDRvGK6+8Qnh4OLVr16ZevXqArWqqWrVqDg0wS0tpdK6eUiIiIiIiOcqcrSdZsS8KT3cz73esiMmkPlEiIv91T5VSXbp0oUGDBpw6dYoqVarYx5s1a0bHjh0dFlyWp55SIiIico3ZbL7lh1JdmU8k+7gUl8i7c3cBMLBpSU3bExG5iXtKSgHky5ePfPnycfz4cQAKFSpE7dq1HRZYtmDvKaWklIiISE43a9asVI+TkpLYsmULP/zwA++8885d7++rr77ik08+4fTp01SpUoWxY8fe9L1YkyZNWL58eZrxtm3b8tdff931sUXk1j6av4dzVxIpGerPs41LuDocEZFM656SUlarlffee49Ro0Zx5coVAAICAnj55Zd58803MZvvaVZg9pPSU0rT90RERHK8Rx55JM1Yly5dqFChAjNmzOCJJ564433NmDGDwYMHM378eOrUqcOYMWNo1aoVe/fuJTQ0NM36M2fOJDEx0f74/PnzVKlSha5du97bkxGRm9pw+AI/bzgGwAcdK+Hprs9GIiI3c0+/Id98802+/PJLPvzwQ7Zs2cKWLVv44IMPGDt2LG+99ZajY8y6UnpKqVJKREREbqJu3bosXrz4rrYZPXo0Tz31FP369aN8+fKMHz8eX19fJk6cmO76uXPntle558uXj4ULF+Lr66uklIiDJSRbeGPWdgB61CpM7WK5XRyRiEjmdk+VUj/88APff/89Dz/8sH2scuXKFCxYkOeff57333/fYQFmaW4pSSlVSomIiDiEJcn2pU82aRh89epVvvjiCwoWLHjH2yQmJrJp0yaGDBliHzObzTRv3py1a9fe0T4mTJhAjx498PPzu+k6CQkJJCQk2B/HxMTccYwiOdUPa45w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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ml_eval.plot_training_history(hist).show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAIjCAYAAAB/OVoZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABygElEQVR4nO3deVwV1f/H8fewbwISIO64K+57aLmkZWalLWp+/aWYZhZmfl0qv5VCaZpaamlamWKrZZqVmWaWVmrulFumhmKFW6UEKCjM7w/jxmUT7MK9F17Px2Me3nvmzJnPzB3Azz0z5ximaZoCAAAAAAB252LvAAAAAAAAwGUk6QAAAAAAOAiSdAAAAAAAHARJOgAAAAAADoIkHQAAAAAAB0GSDgAAAACAgyBJBwAAAADAQZCkAwAAAADgIEjSAQAAAABwECTpAADkYhiGYmJi7B1GmdSlSxd16dLF8v7o0aMyDENxcXE220d4eLiioqJs1l5xbN++XR06dJCvr68Mw1B8fLxd4gAAOC+SdABwInFxcTIMQzt27Mh3fZcuXdSkSZNSjqrkhYeHyzAMy+Lr66t27drpjTfeuOo2V69eXe4S8Q0bNlidR3d3d9WuXVuDBg3Szz//bO/wimXz5s2KiYnR2bNn7R2KxcWLF9W3b1/98ccfmjVrlt58803VrFmzRPaV+2eioMVWX348++yzWrlyZZHrnz59Wo888ogaNmwob29vhYaGql27dnrssceUkpJS7P074ucNACXFzd4BAABQFC1atNDYsWMlSUlJSVq4cKEGDx6s9PR03X///cVub/Xq1Zo3b16+ifr58+fl5lZ2/0SOGjVKbdu21cWLF7Vr1y69+uqr+vTTT7Vnzx5VqVKlVGOpWbOmzp8/L3d392Jtt3nzZsXGxioqKkqBgYFW6w4ePCgXl9Lvhzhy5IiOHTum1157TcOGDSvRfc2ePdsq2V29erXeffddzZo1S8HBwZbyDh062GR/zz77rO6++2716dPninX/+OMPtWnTRsnJybrvvvvUsGFD/f777/rhhx80f/58Pfjgg/Lz8yvW/gv7vAGgrCm7/wMBADiNS5cuKSsrSx4eHgXWqVq1qv7v//7P8j4qKkq1a9fWrFmzripJL4yXl5dN23M0119/ve6++25J0pAhQ1S/fn2NGjVKS5Ys0YQJE/LdJjU1Vb6+vjaPxTAMm59vT09Pm7ZXVKdOnZIkmyaRBZ333MnyiRMn9O6776pPnz4KDw+32f6vxuuvv67ExERt2rQpz5cEycnJhf6cAwC43R0AyrTCnvfN/dx1TEyMDMPQTz/9pP/7v/9TQECAQkJC9NRTT8k0TR0/fly9e/eWv7+/wsLC9Pzzz+dp89SpUxo6dKgqVaokLy8vNW/eXEuWLMk3ppkzZ2r27NmqU6eOPD09tX///mIdW0hIiBo2bKgjR45YlX/zzTfq27evatSoIU9PT1WvXl3//e9/df78eUudqKgozZs3z3IespcrnZvDhw9bevICAgI0ZMgQpaWlWe3//PnzGjVqlIKDg1WhQgXdfvvt+vXXX6/4nPvJkyfl5uam2NjYPOsOHjwowzA0d+5cSZdvq46NjVW9evXk5eWla665Rtddd53WrVtX5POX0w033CBJSkhIsDre/fv36z//+Y8qVqyo6667zlL/rbfeUuvWreXt7a2goCDdc889On78eJ52X331VdWpU0fe3t5q166dvvnmmzx1CrpGf/zxR/Xr108hISHy9vZWgwYN9MQTT1jiGz9+vCSpVq1als/v6NGjkvJ/Jv3nn39W3759FRQUJB8fH1177bX69NNPrepkPw7w/vvva8qUKapWrZq8vLzUrVs3HT58uNBzGBUVpc6dO0uS+vbtK8MwrJ69//LLL3X99dfL19dXgYGB6t27tw4cOGDVxpXO+9Uoymd16NAh3XXXXQoLC5OXl5eqVaume+65R+fOnZN0+echNTVVS5YssZzrwp75P3LkiFxdXXXttdfmWefv75/nS5mtW7fq5ptvVkBAgHx8fNS5c2dt2rTJsv5KnzcAlDX0pAOAEzp37pzOnDmTp/zixYv/uu3+/furUaNGmjZtmj799FNNnjxZQUFBeuWVV3TDDTfoueee09tvv61x48apbdu26tSpk6TLyWmXLl10+PBhjRw5UrVq1dKyZcsUFRWls2fP6pFHHrHaz+LFi3XhwgUNHz5cnp6eCgoKKlacly5d0i+//KKKFStalS9btkxpaWl68MEHdc0112jbtm166aWX9Msvv2jZsmWSpAceeEC//fab1q1bpzfffLPI++zXr59q1aqlqVOnateuXVq4cKFCQ0P13HPPWepERUXp/fff17333qtrr71WGzduVK9eva7YdqVKldS5c2e9//77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U5s2bfT111/rp59+svl+hg8frldeeUVRUVHauXOnwsPD9cEHH2jTpk2aPXu2KlSoYPN99uzZU02aNNELL7yg6OhoNWzYUHXq1NG4ceP066+/yt/fX8uXL8/3WeLWrVtLkkaNGqUePXrI1dVV99xzz7+Kp3Xr1rrrrrs0e/Zs/f7775Yp2LLPd1F7A/v376//+7//08svv6wePXpYpjXLFhERoS5duqh169YKCgrSjh079MEHH2jkyJH/Kv4rqVOnjiZPnqwJEybo6NGj6tOnjypUqKCEhAR9+OGHGj58uMaNGyd3d3dNnjxZDzzwgG644Qb1799fCQkJWrx48RWfSZekF198Udddd51atWql4cOHq1atWjp69Kg+/fRTxcfHS/rn83viiSd0zz33yN3dXbfddlu+vdKPP/643n33XfXs2VOjRo1SUFCQlixZooSEBC1fvjzPOAq2NmPGDPXs2VORkZEaOnSoZQq2gIAAxcTElMg+i/pZffnllxo5cqT69u2r+vXr69KlS3rzzTfl6uqqu+66y9Je69at9cUXX+iFF15QlSpVVKtWrXyf85ekN998U2+//bbuuOMOtW7dWh4eHjpw4IAWLVokLy8v/e9//5Mkubi4aOHCherZs6caN26sIUOGqGrVqvr111/11Vdfyd/fX5988oll/1LRPm8AcHqlPp48AOCqZU/Blj1VVm6dO3e2moLNNC9PZzR06FAzICDArFChgtmvXz/z1KlTBU4zdvr0aavtBw8ebPr6+hZpXydPnjSHDBliBgcHmx4eHmbTpk3zTP+WPeXWjBkzinzcNWvWLHDKsbi4OKspvPbv3292797d9PPzM4ODg83777/f/P777/NM83Xp0iXz4YcfNkNCQkzDMKymYyvqucn+PHJOC5WammpGR0ebQUFBpp+fn9mnTx/z4MGDpiSraewKk5ycbHp7e+eZ0i7b5MmTzXbt2pmBgYGmt7e32bBhQ3PKlClmRkZGoe0WNEVYbgUdb7bly5eb1113nenr62v6+vqaDRs2NKOjo82DBw9a1Xv55ZfNWrVqmZ6enmabNm3Mr7/+2uzcufMVp2AzTdPcu3eveccdd5iBgYGml5eX2aBBA/Opp56yqvPMM8+YVatWNV1cXKw+h9xTsJmmaR45csS8++67Le21a9fOXLVqVZHOT2FTGRZle9M0zS+++MLs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ly9X48aN5enpqfDwcD3//PNW24eHh+uZZ57RoEGD5O/vr+HDh1t6iD/++GNFRETI09NTiYmJSk9P17hx41S1alX5+vqqffv22rBhg1V7mzZtUpcuXeTj46OKFSuqR48e+vPPPxUVFaWNGzdqzpw5ll7yo0ePFnjsPj4+CgsLU+3atRUTE6N69erp448/tpyXkSNHavTo0QoODlaPHj0kSXv37lXPnj3l5+enSpUq6d5779WZHHcypKamatCgQfLz81PlypXznIvs85F963th53fDhg0aMmSIzp07Zzme7M8mdxuJiYnq3bu3/Pz85O/vr379+unkyZOW9TExMWrRooXefPNNhYeHKyAgQPfcc4/++uuvAs8PAAAAAMdFkl6GLVmyRL6+vtq6daumT5+up59+WuvWrZMkZWVlqWfPntq0aZPeeust7d+/X9OmTZOrq6skaefOnerXr5/uuece7dmzRzExMXrqqacUFxdntY+ZM2eqefPm2r17t5566ilJUlpamp577jktXLhQ+/btU2hoqEaOHKktW7Zo6dKl+uGHH9S3b1/dfPPNOnTokCQpPj5e3bp1U0REhLZs2aJvv/1Wt912mzIzMzVnzhxFRkZaesiTkpJUvXr1Ip8Hb29vqx7zJUuWyMPDQ5s2bdKCBQt09uxZ3XDDDWrZsqV27NihNWvW6OTJk+rXr59lm/Hjx2vjxo366KOP9Pnnn2vDhg3atWtXgfss7Px26NBBs2fPlr+/v+V4xo0bl28bvXv31h9//KGNGzdq3bp1+vnnn9W/f3+rekeOHNHKlSu1atUqrVq1Shs3btS0adOKfH4AAAAAOA5GcynDmjVrpkmTJkmS6tWrp7lz52r9+vW68cYb9cUXX2jbtm06cOCA6tevL0mqXbu2ZdsXXnhB3bp1syTe9evX1/79+zVjxgyrqXVuuOEGjR071vL+m2++0cWLF/Xyyy+refPmki73Bi9evFiJiYmqUqWKJGncuHFas2aNFi9erGeffVbTp09XmzZtrJ4fb9y4seW1h4eHpYe8qDIzM/Xuu+/qhx9+sHrOu169epo+fbrl/eTJk9WyZUs9++yzlrJFixapevXq+umnn1SlShW9/vrreuutt9StWzdJlxP9atWqFbjvK53fgIAAGYZR6PGsX79ee/bsUUJCguVLiTfeeEONGzfW9u3b1bZtW0mX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AICSFxUVpbNnz2rlypXq0qWLMjMz9c0331jWt2vXTjfccIOmTZumzz//XL169dKxY8dUpUoVSdKaNWvUs2dPffjhh+rTp4/eeustTZ48WQcOHJBhGJKkjIwMBQYGauXKlbrpppskSbfeequSk5Pl4eEhV1dXrVmzxlIfAABYc7N3AAAAwD6aNWtm9b5y5co6deqUJOnAgQOqXr26JUGXpMjISKv633//vQ4fPqwKFSpYlV+4cEFHjhyxvF+0aJHq168vFxcX7du3jwQdAIBCkKQDAFBOubu7W703DENZWVlF3j4lJUWtW7fW22+/nWddSEiI5fX333+v1NRUubi4KCkpSZUrV776oAEAKONI0gEAQB6NGjXS8ePHrZLq7777zqpOq1at9N577yk0NFT+/v75tvPHH38oKipKTzzxhJKSkjRw4EDt2rVL3t7eJX4MAAA4IwaOAwAAeXTv3l3169fX4MGD9f333+ubb77RE088YVVn4MCBCg4OVu/evfXNN98oISFBGzZs0KhRo/TLL79IkkaMGKHq1avrySef1AsvvKDMzEyNGzfOHocEAIBTIEkHAAB5uLi46MMPP9T58+fVrl07DRs2TFOmTLGq4+Pjo6+//lo1atTQnXfeqUaNGmno0KG6cOGC/P399cYbb2j16tV688035ebmJl9fX7311lt67bXX9Nlnn9npyAAAcGyM7g4AAAAAgIOgJx0AAAAAAAdBkg4AAAAAgIMgSQcAAAAAwEGQpAMAAAAA4CBI0gEAAAAAcBAk6QAAAAAAOAiSdAAAAAAAHARJOgAAAAAADoIkHQAAAAAAB0GSDgAAAACAgyBJBwAAAADAQfw/b8YTpsoAb0UAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ml_eval.plot_rating_preds(all_preds, all_labels, test_dataset).show()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/transformer_1a.py b/transformer_1a.py deleted file mode 100644 index bc8de3e..0000000 --- a/transformer_1a.py +++ /dev/null @@ -1,240 +0,0 @@ -""" -This file contains the transformer model. -""" - - -# TODO refactor the code -# TODO create ml helper script -# TODO create ml evaluation script - -# TODO track overfitting better -# TODO validate model in training (accuracy, loss, etc) - -# TODO set length to a constant value which is the max length of the sentences or nearly - - -# TODO user gloVe embeddings - -#TODO: add attention mask -# TODO: add positional encoding -#TODO: add dropout (if needed) - - -import torch -import torch.nn as nn -import torch.optim as optim - -import pandas as pd -import numpy as np -from sklearn.model_selection import train_test_split -from nltk.tokenize import word_tokenize -from transformers import BertTokenizer, BertModel - -from torch.utils.data import DataLoader -from transformers import AdamW -from sklearn.metrics import accuracy_score - -import gensim - -import time - -# Disable the warning for beta transformers -import torchvision -torchvision.disable_beta_transforms_warning() - - -def get_device(verbose=False): - device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') - if verbose: - print('Using device:', device) - return device - -# Test if GPU is available -DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') -print('Using device:', DEVICE) -# Input maximum length -MAX_LEN = 100 - -# download nltk data -import nltk -nltk.download('punkt') -nltk.download('punkt_tab') - -def get_embedding(model, word): - if word in model.wv: - return model.wv.key_to_index[word] - else: - return unk_index - -def encode_tokens(tokens): - return [get_embedding(model_embedding, token) for token in tokens] - -def pad_sequences(sequences, MAX_LEN): - return np.array([np.pad(seq, (0, MAX_LEN - len(seq)), mode='constant', constant_values=unk_index) if len(seq) < MAX_LEN else seq[:MAX_LEN] for seq in sequences]) - - -class HumorDataset(torch.utils.data.Dataset): - def __init__(self, encodings, labels): - self.encodings = encodings - self.labels = labels.reset_index(drop=True) - - def __getitem__(self, idx): - item = {'input_ids': torch.tensor(self.encodings[idx], dtype=torch.float)} - item['labels'] = torch.tensor(self.labels[idx], dtype=torch.float) - return item - - def __len__(self): - return len(self.labels) - - -class TransformerBinaryClassifier(nn.Module): - def __init__(self, vocab_size, embed_dim, num_heads, num_layers, hidden_dim, dropout=0.1): - super(TransformerBinaryClassifier, self).__init__() - self.embedding = nn.Embedding(vocab_size, embed_dim) - self.transformer = nn.Transformer(embed_dim, num_heads, num_layers, num_layers, hidden_dim, dropout) - self.fc = nn.Linear(embed_dim, 1) - self.sigmoid = nn.Sigmoid() - - def forward(self, input_ids): - input_ids = input_ids.long() - embedded = self.embedding(input_ids) - transformer_output = self.transformer(embedded, embedded) - pooled_output = transformer_output.mean(dim=1) - logits = self.fc(pooled_output) - return self.sigmoid(logits) - -if __name__ == "__main__": - # Load the data from csv - df = pd.read_csv('data/hack.csv') - print(df.shape) - - # transfrom data into dataset - X = df['text'] - y = df['is_humor'] - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) - - # Tokenize the data with nltk - train_tokens = [word_tokenize(text.lower()) for text in X_train] - test_tokens = [word_tokenize(text.lower()) for text in X_test] - - # Embed the data with word2vec - model_embedding = gensim.models.Word2Vec(train_tokens, window=5, min_count=1, workers=4) - - # Add a special token for out-of-vocabulary words - model_embedding.wv.add_vector('', np.zeros(model_embedding.vector_size)) - unk_index = model_embedding.wv.key_to_index[''] - - # Encode the tokens - train_encodings = [encode_tokens(tokens) for tokens in train_tokens] - test_encodings = [encode_tokens(tokens) for tokens in test_tokens] - - # Define the maximum sequence length - train_encodings = pad_sequences(train_encodings, MAX_LEN) - test_encodings = pad_sequences(test_encodings, MAX_LEN) - - train_dataset = HumorDataset(train_encodings, y_train.reset_index(drop=True)) - test_dataset = HumorDataset(test_encodings, y_test.reset_index(drop=True)) - - - vocab_size = len(model_embedding.wv.key_to_index) - embed_dim = model_embedding.vector_size - num_heads = 2 - num_layers = 2 - hidden_dim = 256 - - print(f"Vocabulary size: {vocab_size}") - print(f"Embedding dimension: {embed_dim}") - - model = TransformerBinaryClassifier(vocab_size, embed_dim, num_heads, num_layers, hidden_dim) - - # Training parameters - epochs = 30 #3 - batch_size = 8 - learning_rate = 2e-5 - - # Optimizer and loss function - optimizer = AdamW(model.parameters(), lr=learning_rate) - criterion = nn.BCEWithLogitsLoss() - - - # Data loaders - train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) - test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False) - - for td in train_dataset: - print(td['input_ids'].shape) - print(td['labels']) - break - - for batch in train_loader: - print(batch['input_ids'].shape) - print(batch['labels']) - break - - # Model to device - model.to(DEVICE) - - print("Starting training...") - start_training_time = time.time() - losses = [] - # Training loop - model.train() - for epoch in range(epochs): - epoch_start_time = time.time() - batch_losses = [] - for batch in train_loader: - optimizer.zero_grad() - - input_ids = batch['input_ids'].to(DEVICE) - labels = batch['labels'].unsqueeze(1).to(DEVICE) - - outputs = model(input_ids) - loss = criterion(outputs, labels) - - loss.backward() - optimizer.step() - batch_losses.append(loss.item()) - losses.append(np.mean(batch_losses)) - epoch_end_time = time.time() - print(f"Epoch {epoch + 1}/{epochs}, Time: {epoch_end_time - epoch_start_time:.2f} sec, Loss: {losses[-1]:.5f}") - end_training_time = time.time() - print(f"Training finished in {end_training_time - start_training_time:.2f} seconds") - - print("Starting evaluation...") - # Evaluation - model.eval() - predictions, true_labels = [], [] - with torch.no_grad(): - for batch in test_loader: - input_ids = batch['input_ids'].to(DEVICE) - labels = batch['labels'].unsqueeze(1).to(DEVICE) - - outputs = model(input_ids) - preds = outputs.round() - predictions.extend(preds.cpu().numpy()) - true_labels.extend(labels.cpu().numpy()) - - accuracy = accuracy_score(true_labels, predictions) - print(f"Accuracy: {accuracy}") - - # Save the model - timestamp = time.strftime("%Y%m%d-%H%M%S") - torch.save(model.state_dict(), f'models/transformer_acc_{accuracy}_{timestamp}.pth') - print("Model saved.") - - # Save model hyperparameters as json - hyperparameters = { - 'max_len': MAX_LEN, - 'vocab_size': vocab_size, - 'embed_dim': embed_dim, - 'num_heads': num_heads, - 'num_layers': num_layers, - 'hidden_dim': hidden_dim, - 'epochs': epochs, - 'batch_size': batch_size, - 'learning_rate': learning_rate, - 'accuracy': accuracy - } - pd.DataFrame(hyperparameters, index=[0]).to_json(f'models/transformer_acc_{accuracy}_{timestamp}.json') - \ No newline at end of file diff --git a/transformer_1b.py b/transformer_1b.py deleted file mode 100644 index 05ffd62..0000000 --- a/transformer_1b.py +++ /dev/null @@ -1,199 +0,0 @@ -""" -This file contains the transformer model. -""" - - -# TODO refactor the code -# TODO create ml helper script -# TODO create ml evaluation script - -# TODO track overfitting better -# TODO validate model in training (accuracy, loss, etc) - -# TODO set length to a constant value which is the max length of the sentences or nearly - - -# TODO user gloVe embeddings - -#TODO: add attention mask -# TODO: add positional encoding -#TODO: add dropout (if needed) - -import time -import json - -import numpy as np -import torch -import torch.nn as nn -import torch.optim as optim -from torch.utils.data import DataLoader -from transformers import AdamW - -from sklearn.metrics import accuracy_score - -import ml_helper -import ml_history - -class TransformerBinaryClassifier(nn.Module): - def __init__(self, vocab_size, embed_dim, num_heads, num_layers, hidden_dim, dropout=0.1): - super(TransformerBinaryClassifier, self).__init__() - self.embedding = nn.Embedding(vocab_size, embed_dim) - self.transformer = nn.Transformer(embed_dim, num_heads, num_layers, num_layers, hidden_dim, dropout) - self.fc = nn.Linear(embed_dim, 1) - self.sigmoid = nn.Sigmoid() - - def forward(self, input_ids): - input_ids = input_ids.long() - embedded = self.embedding(input_ids) - transformer_output = self.transformer(embedded, embedded) - pooled_output = transformer_output.mean(dim=1) - logits = self.fc(pooled_output) - return self.sigmoid(logits) - - - -if __name__ == "__main__": - - # Load the data - data_path = 'data/idx_based_padded' - - train_dataset = torch.load(data_path + '/train.pt') - test_dataset = torch.load(data_path + '/test.pt') - val_dataset = torch.load(data_path + '/val.pt') - - # +2 for padding and unk tokens - vocab_size = train_dataset.vocab_size + 2 - embed_dim = 100 #train_dataset.emb_dim - - # NOTE: Info comes from data explore notebook: 280 is max length, - # 139 contains 80% and 192 contains 95% of the data - max_len = 280 - - device = ml_helper.get_device(verbose=True) - - # Model hyperparameters - num_heads = 2 - num_layers = 2 - hidden_dim = 256 - - model = TransformerBinaryClassifier(vocab_size, embed_dim, num_heads, num_layers, hidden_dim) - - # Training parameters - epochs = 3 #3 - batch_size = 8 - learning_rate = 2e-5 - - # Optimizer and loss function - optimizer = AdamW(model.parameters(), lr=learning_rate) - criterion = nn.BCEWithLogitsLoss() - - - # Data loaders - train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) - test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False) - val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False) - - - ################################################################################################ - # Training - ################################################################################################ - - # Initialize the history - history = ml_history.History() - - # Model to device - model.to(device) - - print("Starting training...") - start_training_time = time.time() - - # Training loop - model.train() - for epoch in range(epochs): - # init batch tracking - epoch_start_time = time.time() - history.batch_reset() - - for batch in train_loader: - optimizer.zero_grad() - # prepare batch - input_ids = batch['input_ids'].to(device) - labels = batch['labels'].unsqueeze(1).to(device) - # forward pass - outputs = model(input_ids) - loss = criterion(outputs, labels) - # backward pass - loss.backward() - optimizer.step() - # calculate accuracy train - preds = outputs.round() - train_acc = accuracy_score(labels.cpu().detach().numpy(), - preds.cpu().detach().numpy()) - # update batch history - history.batch_update_train(loss.item(), train_acc) - - # calculate accuracy val - model.eval() - with torch.no_grad(): - for val_batch in val_loader: - val_input_ids = val_batch['input_ids'].to(device) - val_labels_batch = val_batch['labels'].unsqueeze(1).to(device) - val_outputs = model(val_input_ids) - val_acc = accuracy_score(val_outputs.round().cpu().numpy(), - val_labels_batch.cpu().numpy()) - history.batch_update_val(val_acc) - model.train() - - # update epoch history - history.update() - - epoch_end_time = time.time() - - print(f"Epoch {epoch + 1}/{epochs}, Time: {epoch_end_time - epoch_start_time:.2f} sec, Loss: {history.history['loss'][-1]:.4f}, Train Acc: {history.history['train_acc'][-1]:.4f}, Val Acc: {history.history['val_acc'][-1]:.4f}") - - end_training_time = time.time() - print(f"Training finished in {end_training_time - start_training_time:.2f} seconds") - - - ################################################################################################ - # Evaluation - ################################################################################################ - print("Starting evaluation...") - - model.eval() - predictions, true_labels = [], [] - with torch.no_grad(): - for batch in test_loader: - input_ids = batch['input_ids'].to(device) - labels = batch['labels'].unsqueeze(1).to(device) - - outputs = model(input_ids) - preds = outputs.round() - predictions.extend(preds.cpu().numpy()) - true_labels.extend(labels.cpu().numpy()) - - accuracy = accuracy_score(true_labels, predictions) - print(f"Accuracy: {accuracy}") - - - ################################################################################################ - # Save model and hyperparameters - ################################################################################################ - timestamp = time.strftime("%Y%m%d-%H%M%S") - - ml_helper.save_model_and_hyperparameters(model, 'transformer', accuracy, timestamp, - max_len=max_len, - vocab_size=vocab_size, - embed_dim=embed_dim, - num_heads=num_heads, - num_layers=num_layers, - hidden_dim=hidden_dim, - epochs=epochs, - batch_size=batch_size, - learning_rate=learning_rate) - - #save history - - history_path = f'models/transformer_history_{timestamp}.json' - with open(history_path, 'w') as f: - json.dump(history.get_history(), f) \ No newline at end of file diff --git a/transformer_evaluation.ipynb b/transformer_evaluation.ipynb deleted file mode 100644 index a36a2e1..0000000 --- a/transformer_evaluation.ipynb +++ /dev/null @@ -1,414 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "import json\n", - "import numpy as np\n", - "import os\n", - "import matplotlib.pyplot as plt\n", - "\n", - "import ml_helper" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# TODO: \n", - "- clean and refactor maybe ml_plot.py whith plot functions" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading model from: models/transformer_acc_0.5056_20250127-061459.pth\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\felix\\AppData\\Local\\Temp\\ipykernel_5648\\1644685603.py:5: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " model = torch.load(model_path)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading history from: models/transformer_history_20250127-061459.json\n", - "Loading hyperparameters from: models/transformer_para_acc_0.5056_20250127-061459.json\n" - ] - } - ], - "source": [ - "# load newest model\n", - "path = 'models/'\n", - "model_path = ml_helper.get_newest_model_path(path)\n", - "print(\"Loading model from: \", model_path)\n", - "model = torch.load(model_path)\n", - "\n", - "# load history\n", - "history_path = ml_helper.get_newest_model_path(path, name=\"history\", extension=\".json\")\n", - "print(\"Loading history from: \", history_path)\n", - "with open(history_path) as f:\n", - " history = json.load(f)\n", - "\n", - "# load hyperparameters\n", - "hyperparameters_path = ml_helper.get_newest_model_path(path, name=\"para\", extension=\".json\")\n", - "print(\"Loading hyperparameters from: \", hyperparameters_path)\n", - "with open(hyperparameters_path) as f:\n", - " params = json.load(f)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "History:\n", - "{\n", - " \"loss\": [\n", - " 0.6977859839254063,\n", - " 0.6934245683644947,\n", - " 0.6932587604291043\n", - " ],\n", - " \"train_acc\": [\n", - " 0.5086032388663968,\n", - " 0.5080971659919028,\n", - " 0.5063259109311741\n", - " ],\n", - " \"val_acc\": [\n", - " 0.5093117408906882,\n", - " 0.5093117408906882,\n", - " 0.5093117408906882\n", - " ]\n", - "}\n" - ] - } - ], - "source": [ - "# print history\n", - "print(\"History:\")\n", - "print(json.dumps(history, indent=4))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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SEYPPqLl8uXL+P3330s9yoMebunSpTA3N0e/fv3kLoXoiVq5ciU0Gg3/8yAT9okikpGnp6f0DLD4+HgsWrQIRkZGmDp1qtyl1Qq//vorzp07hx9++AGTJ0/W6RROVJft2bMH586dw+eff47g4GCd53/Sk8PLeUQyGjVqFP766y8kJSVBpVLB398fX3zxBTp27Ch3abWCu7s7kpOTERQUhJ9++omDDFK90b17d2m4jZ9//pnPypMJQxQRERGRHtgnioiIiEgPDFFEREREemDH8mqk1WqRmJgICwsLvZ8GTkRERE+WKIrIzs6Gi4sLFIryzzcxRFWjxMTEKnlWFBERET15169fR8OGDcudzxBVje7dKXT9+vUqeWYUERERVb+srCy4uro+8o5fhqhqdO8SnlqtZogiIiKqZR7VFYcdy4mIiIj0wBBFREREpAeGKCIiIiI9MEQRERER6YEhioiIiEgPDFFEREREemCIIiIiItIDQxQRERGRHhiiiIiIiPTAEEVERESkB4YoIiIiIj0wRBERERHpgQ8grm1EESjOk7sKIiKimsHQFHjEg4KrC0NUbVOcB3zhIncVRERENcMHiYCRmSyb5uU8IiIiIj3wTFRtY2h6N3UTERHR3e9FmTBE1TaCINtpSyIiIvoPL+cRERER6YEhioiIiEgPDFFEREREemCIIiIiItIDQxQRERGRHhiiiIiIiPTAEEVERESkB4YoIiIiIj0wRBERERHpgSGKiIiISA8MUURERER6YIgiIiIi0gNDFBEREZEeGKKIiIiI9MAQRURERKQHhigiIiIiPTBEEREREemBIYqIiIhIDwxRRERERHpgiCIiIiLSA0MUERERkR4YooiIiIj0wBBFREREpAeGKCIiIiI9MEQRERER6YEhioiIiEgPDFFEREREemCIIiIiItKD7CFq4cKFcHd3h7GxMXx9fXHo0KFyl125ciUEQdB5GRsb6ywjiiJmzJgBZ2dnmJiYIDAwEJcvX9ZZ5tixY3j++edhZWUFW1tbjBs3Djk5OTrLJCQk4KWXXoKpqSkcHBzw7rvvoqSkpOp2nIiIiGo1WUPUhg0bEBYWhpkzZ+LYsWNo164dgoKCkJKSUu46arUat27dkl7x8fE68+fMmYMFCxZg8eLFiImJgZmZGYKCglBQUAAASExMRGBgILy8vBATE4Pw8HCcPXsW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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# plot training accuracy vs validation accuracy\n", - "plt.plot(history['train_acc'], label='train_acc')\n", - "plt.plot(history['val_acc'], label='val_acc')\n", - "plt.legend()\n", - "plt.title('Training accuracy vs Validation accuracy')\n", - "plt.xlabel('Epoch')\n", - "plt.ylabel('Accuracy')\n", - "# set y-axis limits to 0-1\n", - "#plt.ylim(0, 1)\n", - "# set x-axis limits to integer steps\n", - "plt.xticks(np.arange(0, len(history['train_acc']), 1))\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(8000, 6)\n" - ] - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "# Load the data from csv\n", - "df = pd.read_csv('data/hack.csv')\n", - "print(df.shape)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\felix\\AppData\\Local\\Temp\\ipykernel_5648\\4202493223.py:4: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " train_dataset = torch.load(data_path + '/train.pt')\n", - "C:\\Users\\felix\\AppData\\Local\\Temp\\ipykernel_5648\\4202493223.py:5: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " test_dataset = torch.load(data_path + '/test.pt')\n", - "C:\\Users\\felix\\AppData\\Local\\Temp\\ipykernel_5648\\4202493223.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " val_dataset = torch.load(data_path + '/val.pt')\n" - ] - } - ], - "source": [ - "# Load the data\n", - "data_path = 'data/idx_based_padded'\n", - "\n", - "train_dataset = torch.load(data_path + '/train.pt')\n", - "test_dataset = torch.load(data_path + '/test.pt') \n", - "val_dataset = torch.load(data_path + '/val.pt')" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{False: 2001, True: 1944}\n" - ] - }, - { - "data": { - "image/png": "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FBSotLTU4zpTp07Vvn37XLf8/Py6awIAADRIXgs4AQEBiouLU05OjmvM6XQqJydHCQkJHte58MILtWnTJjmdTtfYDz/8oJYtWyogIMDjOg6HQyEhIW43AABgN69+RJWenq4XXnhBL7/8stavX6+bbrpJBw8edF1VNXr0aE2dOtU1/6abblJRUZEmTJigH374QQsXLtRDDz2k8ePHe6sFAADQAHn1MvERI0Zo9+7dmjZtmgoKCtSrVy9lZ2e7Tjzevn27fH3/l8FiYmL04YcfauLEierRo4dat26tCRMm6I477vBWCwAAoAHyasCRpLS0NKWlpXlclpubW2EsISFBX331VT1XBQAAGrNGdRUVAABAdRBwAACAdQg4AADAOgQcAABgHQIOAACwTrWvonr33XervdHLLrusVsUAAADUhWoHnOTk5GrN8/Hx4a97AwAAr6p2wDnxzyMAAAA0ZKd9Ds6RI0fqog4AAIA6U6uAU1ZWpvvvv1+tW7dWs2bNtGXLFknSPffcoxdffLFOCwQAAKipWgWcBx98UHPnztUjjzzi9le8zzvvPM2ePbvOigMAAKiNWgWcV155Rc8//7xGjRolPz8/13jPnj21YcOGOisOAACgNmoVcHbs2KEOHTpUGHc6nTp69OhpFwUAAHA6ahVwunXrps8++6zC+JtvvqnevXufdlEAAACno9qXiZ9o2rRpSklJ0Y4dO+R0OvXWW29p48aNeuWVV/T+++/XdY0AAAA1UqsjOJdffrnee+89ffzxx2ratKmmTZum9evX67333tMll1xS1zUCAADUSK2O4EhS//79tXjx4rqsBQAAoE7UOuBI0ooVK7R+/XpJx8/LiYuLq5OiAAAATketAs7PP/+skSNH6osvvlBYWJgkae/evbrgggs0b948/eEPf6jLGgEAAGqkVufgjB07VkePHtX69etVVFSkoqIirV+/Xk6nU2PHjq3rGgEAAGqkVkdwli5dqi+//FKdO3d2jXXu3FlPPfWU+vfvX2fFAQAA1EatjuDExMR4/EK/srIytWrV6rSLAgAAOB21CjiPPvqobrnlFq1YscI1tmLFCk2YMEGPPfZYnRUHAABQG9X+iKp58+by8fFx3T948KDi4+Pl7398E8eOHZO/v7+uu+46JScn13mhAAAA1VXtgDNz5sx6LAMAAKDuVDvgpKSk1GcdAAAA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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# count train_dataset labels\n", - "train_labels = train_dataset.labels\n", - "unique, counts = np.unique(train_labels, return_counts=True)\n", - "print(dict(zip(unique, counts)))\n", - "\n", - "idx_range = range(0, len(train_dataset))\n", - "# plot label distribution\n", - "plt.bar(idx_range, train_labels)\n", - "plt.title('Label distribution')\n", - "plt.xlabel('Index')\n", - "plt.ylabel('Label')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- If distribution wouldnt be random it could screw up the training process" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[4679, 52, 2818, 1536, 1298, 3516, 6809, 6992, 5134, 7257, 496, 3880, 3045, 4945, 839, 3997, 2611, 7456, 5910, 599, 788, 7284, 294, 335, 4183, 645, 2612, 4222, 7133, 3622, 6766, 491, 6704, 3430, 6220, 1581, 271, 7851, 2748, 1366, 4286, 7612, 342, 7038, 1094, 896, 1755, 5683, 1095, 289, 6574, 7860, 7906, 6832, 444, 1738, 6571, 685, 464, 1684, 854, 5436, 299, 3441, 6199, 3797, 430, 6532, 6440, 3413, 5855, 173, 2945, 356, 1018, 1854, 6855, 3825, 1288, 6152, 735, 7049, 879, 2335, 6883, 321, 4095, 631, 6182, 3383, 7615, 4858, 2577, 7149, 1054, 1142, 2302, 7068, 3858, 3917, 4300, 504, 1994, 7161, 175, 1570, 4595, 5265, 7998, 2438, 7450, 3427, 5411, 7241, 2795, 2970, 6584, 6375, 3074, 6945, 4783, 4079, 3703, 7331, 4521, 5268, 2222, 3474, 1286, 3590, 1965, 2323, 1424, 2614, 5417, 118, 6754, 7114, 4898, 4767, 7341, 7314, 6039, 3560, 4557, 2651, 787, 7785, 4139, 3731, 7227, 3318, 2322, 6021, 3783, 1005, 7629, 2604, 5006, 7349, 3252, 5405, 1421, 4297, 1712, 3230, 570, 7472, 1921, 2500, 2400, 2716, 5821, 5770, 1961, 7107, 535, 2013, 4765, 5812, 4995, 1829, 7806, 6496, 5457, 5180, 2996, 708, 3562, 721, 2404, 7099, 4674, 26, 4147, 1547, 398, 7289, 575, 7447, 2387, 3892, 4706, 5032, 2693, 5541, 6982, 7807, 4502, 782, 1400, 2680, 5566, 3125, 4195, 6023, 804, 4226, 3701, 7751, 1826, 2953, 5423, 2114, 7468, 686, 5671, 5013, 4471, 3303, 7779, 7996, 5092, 4607, 1809, 2274, 6089, 252, 7677, 2870, 998, 1041, 3824, 1746, 5792, 5502, 7098, 4526, 533, 6479, 4180, 7384, 1010, 5131, 7881, 4584, 2971, 2421, 4279, 1226, 828, 7655, 53, 6655, 1893, 1210, 3359, 3800, 5328, 6912, 1272, 3058, 3971, 370, 1392, 2325, 3739, 640, 274, 861, 3732, 3656, 4323, 3602, 3604, 2790, 5453, 1901, 6834, 4169, 5995, 3158, 5540, 7360, 895, 5672, 6785, 3364, 6047, 2187, 7877, 5517, 4369, 7104, 4230, 2165, 1919, 2224, 521, 1725, 4662, 7231, 4558, 2771, 3874, 1959, 1007, 3947, 6991, 1945, 527, 1046, 1462, 2582, 1844, 6872, 7428, 2810, 2778, 5001, 2248, 5248, 7957, 1677, 4141, 6626, 5185, 6155, 1313, 7744, 1601, 3070, 4247, 2601, 7935, 5119, 4958, 6729, 2781, 7065, 280, 2410, 3040, 7196, 7146, 351, 6198, 5903, 1114, 4076, 3844, 6596, 1816, 3195, 3061, 4891, 6974, 7753, 5886, 914, 5303, 7101, 1932, 1450, 4968, 2661, 4206, 1323, 6573, 2871, 338, 471, 1834, 5165, 2496, 2066, 1623, 6697, 6549, 563, 2857, 2315, 7517, 4041, 7608, 2004, 413, 2361, 2739, 7578, 5477, 4021, 88, 7631, 6187, 6265, 3808, 4396, 7722, 1696, 1796, 868, 1719, 5290, 4979, 51, 1173, 3846, 5837, 6183, 3959, 691, 3990, 1482, 6743, 6640, 7217, 5275, 5726, 2458, 2018, 1470, 4993, 2342, 805, 5118, 293, 6826, 2815, 517, 6083, 4978, 7458, 7981, 6110, 2829, 6347, 7326, 1880, 7551, 75, 3818, 5974, 2811, 2253, 7984, 4773, 649, 5721, 2295, 2562, 1303, 2110, 4661, 3855, 2402, 3674, 408, 2766, 2607, 1886, 5998, 1045, 4592, 2622, 5673, 5982, 2154, 7294, 3047, 7976, 6273, 6784, 174, 4976, 419, 2277, 2907, 1941, 3723, 96, 2145, 1123, 3044, 6846, 6210, 5042, 3184, 3623, 1097, 6905, 5104, 4806, 5575, 4505, 461, 5031, 4889, 5569, 5985, 6814, 2494, 3270, 1192, 5396, 541, 3775, 4372, 5253, 7054, 1753, 7890, 7316, 3630, 6415, 6524, 7893, 6325, 2416, 791, 6939, 7363, 4047, 6258, 3285, 4816, 3367, 6162, 3612, 4090, 1675, 3619, 7809, 5142, 5737, 5746, 1071, 6698, 4170, 1670, 4102, 3795, 1975, 7831, 6913, 4199, 2451, 2668, 392, 1904, 425, 3745, 1827, 104, 4099, 3433, 4352, 4772, 7500, 7410, 4445, 3585, 3206, 4078, 2017, 160, 4177, 435, 810, 3981, 7882, 2553, 1408, 3845, 1477, 7662, 6173, 5712, 2469, 1356, 572, 212, 483, 2521, 1646, 607, 1543, 3979, 5946, 1236, 2626, 2896, 7453, 3282, 4975, 5140, 3241, 3097, 2289, 6748, 6003, 7011, 7936, 2456, 1944, 4729, 7115, 6142, 5452, 170, 6029, 7688, 5764, 98, 121, 1296, 584, 7846, 1277, 3678, 6838, 3436, 5213, 5623, 5948, 2793, 187, 3894, 3748, 5775, 1479, 192, 3021, 2566, 2053, 5460, 5522, 5363, 1928, 5506, 3698, 3329, 704, 2950, 6121, 1516, 3694, 3396, 2300, 6365, 7192, 2450, 2003, 7703, 6275, 3400, 6840, 520, 4888, 2974, 7509, 5227, 4810, 2430, 2436, 1653, 3470, 4293, 5596, 2380, 2000, 3599, 3676, 1988, 6291, 6296, 662, 6869, 11, 1528, 699, 2149, 1092, 3511, 7372, 5138, 7839, 7411, 3357, 5445, 3851, 4249, 2933, 6779, 6133, 4173, 312, 2391, 3390, 1982, 4233, 2667, 6776, 4787, 4273, 3912, 6836, 7771, 1857, 2372, 440, 3522, 3692, 6623, 2129, 3982, 360, 3145, 2976, 909, 2014, 5639, 3378, 2185, 3886, 660, 5641, 1812, 410, 473, 5677, 612, 7197, 4907, 3542, 3566, 6928, 5594, 2827, 7006, 2530, 2932, 2287, 1150, 7402, 4758, 3297, 6242, 2111, 715, 6463, 4067, 1568, 3742, 1059, 6107, 6287, 3726, 4332, 4793, 646, 7665, 7090, 4017, 6818, 6887, 7635, 5865, 7426, 4213, 5657, 6512, 7484, 5669, 677, 4623, 6473, 2231, 4616, 7273, 1923, 5277, 2393, 5009, 7880, 159, 4962, 6715, 2064, 7357, 6631, 3751, 5014, 4653, 5229, 5038, 4702, 2645, 7203, 0, 2557, 7080, 6527, 2216, 5375, 5486, 4050, 4508, 3514, 624, 5495, 1741, 3734, 3407, 1324, 2940, 3254, 2516, 6540, 1322, 2546, 4693, 2918, 6849, 605, 6059, 5161, 5568, 5488, 2883, 4312, 3822, 1406, 6079, 5026, 883, 1897, 1984, 3138, 5174, 80, 3746, 1129, 1057, 6866, 1216, 2365, 7442, 3275, 3095, 1409, 1222, 2646, 143, 4456, 4920, 3840, 4154, 2418, 4637, 3446, 1178, 4296, 3908, 6663, 2814, 4192, 5202, 5542, 1821, 5286, 6374, 7158, 6628, 552, 1940, 6333, 2459, 7465, 916, 120, 2329, 5767, 7094, 4346, 7919, 2999, 202, 287, 4582, 7153, 5007, 3993, 2992, 3333, 4015, 3756, 973, 3178, 45, 1063, 4681, 5256, 6284, 279, 2603, 692, 534, 7131, 2364, 548, 5081, 4028, 1776, 765, 1176, 5999, 1599, 3132, 4708, 2381, 1999, 3422, 7723, 3071, 2123, 7174, 7355, 1066, 6283, 3787, 5497, 6514, 7342, 5043, 4840, 426, 4269, 6192, 3487, 5705, 5778, 7031, 5068, 2091, 7425, 5302, 2615, 5549, 4515, 3077, 6212, 6936, 6890, 110, 4080, 4137, 357, 536, 7968, 6012, 1326, 2001, 5724, 139, 7037, 6289, 4472, 515, 5172, 4335, 4319, 3343, 7588, 7139, 6827, 5305, 1877, 625, 3476, 3557, 4589, 6870, 4356, 2285, 2670, 5388, 1795, 7255, 2807, 2207, 4101, 1602, 453, 2800, 2122, 6005, 1463, 6323, 6492, 128, 3453, 5491, 5928, 995, 6386, 5845, 4035, 667, 7154, 3092, 7254, 5310, 3039, 2535, 5315, 6707, 6070, 1360, 797, 990, 219, 877, 886, 1445, 2252, 2620, 5858, 4617, 352, 6075, 6606, 2838, 1870, 339, 7163, 4026, 2895, 6180, 4446, 878, 2321, 5835, 3276, 4731, 5273, 5711, 1553, 2659, 6307, 3399, 849, 2968, 5331, 7074, 6132, 2592, 1035, 7729, 1584, 6769, 4562, 6580, 7765, 3708, 249, 7379, 7335, 1779, 4196, 7172, 463, 1526, 5283, 3588, 5344, 3747, 6014, 1544, 6114, 7455, 2740, 7520, 4678, 3969, 4437, 1614, 5820, 3465, 3528, 7640, 1605, 3946, 4660, 6349, 4658, 6521, 6096, 2368, 2281, 420, 3790, 1524, 7202, 4251, 396, 7717, 2831, 7778, 5563, 1509, 3712, 427, 1076, 4324, 3104, 5685, 1887, 7696, 5483, 6774, 6143, 6447, 4719, 3110, 993, 3803, 6222, 3083, 2653, 5512, 412, 1373, 6798, 2010, 1852, 3188, 888, 6943, 775, 2164, 3725, 12, 5205, 5062, 2359, 6299, 2943, 1257, 1661, 4449, 6915, 3228, 2088, 2888, 4930, 710, 1435, 7144, 1269, 2821, 5372, 7800, 1438, 3773, 1782, 4651, 845, 6363, 5267, 6478, 2789, 988, 903, 4402, 5190, 549, 4887, 7300, 688, 3091, 6031, 3777, 3352, 2497, 3571, 6450, 2463, 1582, 7056, 841, 284, 5525, 7572, 6865, 907, 7715, 5757, 3888, 7234, 4082, 4061, 4350, 608, 1383, 3052, 586, 3764, 6911, 1813, 7686, 6253, 2188, 3553, 7351, 6072, 4634, 7754, 1918, 7221, 7808, 2317, 6904, 4190, 2377, 1428, 3681, 6935, 2046, 5853, 1362, 4866, 925, 329, 2642, 3269, 1472, 1025, 5094, 3202, 264, 5039, 5093, 7191, 1003, 6428, 2332, 873, 5281, 7267, 6797, 6361, 4210, 3915, 6424, 3023, 1036, 5056, 1032, 5597, 6575, 3397, 7939, 4883, 5827, 4484, 1505, 872, 6858, 3085, 3289, 3057, 2644, 5583, 7685, 3398, 6964, 5661, 7190, 7941, 1357, 967, 3547, 6122, 4517, 6882, 2559, 6821, 6041, 4311, 1750, 2873, 7768, 2100, 5838, 7600, 2975, 6926, 1672, 5097, 2171, 758, 5476, 2656, 6322, 6847, 5235, 4092, 4083, 2247, 1200, 5739, 4104, 1414, 1873, 1637, 2191, 862, 1801, 1862, 6423, 5587, 3666, 6309, 99, 4555, 3140, 6244, 7888, 1761, 7734, 7622, 3934, 1542, 1766, 298, 5410, 3382, 3652, 7815, 3283, 4232, 6400, 5723, 367, 5888, 3129, 4845, 7182, 2292, 3540, 1125, 1845, 6542, 6038, 2880, 4791, 1702, 6659, 3663, 502, 3700, 2306, 1701, 3500, 6639, 2826, 4944, 4440, 7940, 5099, 5300, 7270, 2441, 3121, 714, 3857, 4000, 7943, 7275, 576, 3546, 1864, 6161, 3488, 2969, 1728, 36, 3348, 2660, 4091, 5101, 4414, 6380, 3767, 734, 1745, 136, 6503, 4182, 451, 737, 343, 6565, 2235, 376, 4370, 955, 7076, 3654, 6373, 3702, 1068, 7937, 3704, 7533, 5072, 3966, 5440, 1267, 7775, 5429, 6353, 5077, 7735, 1103, 7847, 5404, 3518, 5688, 3009, 779, 2725, 3620, 5178, 3758, 1270, 832, 833, 5327, 6523, 3879, 3584, 5520, 7726, 5925, 4453, 2453, 3054, 1056, 4393, 4905, 585, 4171, 184, 5263, 7598, 3601, 5635, 2606, 4735, 1574, 5643, 4454, 6507, 6701, 3907, 7443, 6768, 3548, 6208, 3305, 6812, 1256, 2101, 7574, 2303, 2012, 6735, 689, 2698, 581, 4184, 373, 6825, 6388, 7046, 639, 3389, 134, 1367, 1694, 7862, 5091, 5130, 1388, 123, 3648, 7303, 6176, 4602, 4843, 3696, 4105, 6633, 6131, 5432, 3534, 668, 620, 7556, 5412, 162, 4700, 4980, 3151, 2370, 5170, 4828, 4275, 7660, 2567, 5803, 2794, 5890, 7169, 2904, 3809, 3143, 1132, 3960, 4444, 789, 740, 6272, 6922, 277, 4875, 7667, 6197, 4664, 3668, 3424, 1466, 2351, 6350, 1203, 3716, 3974, 4145, 7870, 1974, 812, 7616, 5658, 7746, 2511, 6938, 3572, 7226, 3317, 1247, 7788, 5926, 663, 189, 6637, 7749, 1325, 2291, 2262, 3478, 2549, 2635, 2911, 7694, 627, 3743, 1437, 7950, 6737, 2211, 6164, 7271, 3450, 1606, 729, 5620, 1765, 3153, 6893, 1107, 3930, 1037, 3865, 3159, 4340, 4365, 6098, 5284, 7619, 6058, 3056, 616, 4038, 4955, 7772, 1368, 866, 142, 6160, 3207, 6217, 6449, 4585, 4097, 2703, 1722, 3172, 4098, 4570, 380, 4692, 5538, 1863, 2928, 6598, 265, 5544, 7521, 5297, 6360, 5087, 5760, 6237, 2937, 5151, 6293, 2327, 5733, 4481, 5383, 7145, 7437, 4451, 2362, 947, 70, 890, 7071, 4825, 388, 2193, 4384, 4686, 6612, 2347, 416, 4361, 2726, 2786, 6420, 1353, 3035, 4046, 3260, 546, 4727, 2591, 5338, 7501, 767, 5993, 6946, 5381, 7423, 4998, 6312, 2847, 7160, 3975, 4544, 6845, 6355, 7477, 7595, 2076, 4885, 7198, 4911, 6597, 553, 6150, 7399, 4148, 7343, 2319, 1061, 3406, 1026, 4037, 4314, 5644, 6044, 5240, 4913, 5704, 4052, 2378, 5254, 177, 2956, 2426, 3885, 2009, 4309, 4533, 1888, 6102, 97, 5382, 6851, 7907, 2799, 3563, 5650, 4008, 4152, 7089, 6378, 5793, 1141, 6839, 1789, 5660, 2251, 7857, 117, 3120, 5040, 2845, 1207, 4546, 1650, 4318, 1951, 7004, 4208, 1846, 2024, 4496, 6568, 5461, 1638, 5368, 4339, 2552, 7661, 2964, 5220, 7983, 5627, 701, 7917, 1802, 6345, 4850, 1053, 2508, 5629, 6599, 5059, 5932, 1023, 1081, 2043, 770, 2564, 4881, 7403, 7020, 2373, 7474, 5744, 4175, 6027, 82, 6852, 4847, 1396, 1754, 1163, 7354, 4254, 7789, 2672, 2665, 3921, 7579, 6758, 7953, 5244, 7164, 5304, 7597, 6559, 4218, 2268, 6077, 2286, 1957, 2296, 7756, 2914, 2392, 5110, 59, 5633, 3796, 5044, 3815, 3583, 7664, 2107, 557, 3462, 4349, 6617, 6534, 2711, 6362, 2348, 5150, 2695, 4673, 1929, 4523, 2734, 6136, 591, 6541, 3111, 2217, 2960, 1278, 748, 216, 1284, 519, 6517, 1153, 7181, 4588, 3964, 7690, 7075, 7352, 4781, 4316, 638, 5323, 1649, 4935, 1453, 3901, 4127, 7836, 3860, 6238, 73, 4577, 5245, 489, 7218, 5943, 1070, 1925, 4329, 3150, 4053, 2390, 5527, 5602, 3452, 1682, 1572, 3259, 3479, 7362, 3784, 6158, 490, 2344, 2428, 4288, 4656, 1495, 6667, 5915, 4473, 2618, 6602, 1327, 6609, 2213, 7194, 1379, 1640, 5352, 30, 2634, 2691, 785, 6533, 5913, 7618, 5734, 5523, 1105, 5918, 2600, 6451, 7515, 1657, 3897, 1783, 2172, 2704, 3245, 2146, 6156, 3224, 5979, 550, 6528, 1615, 6106, 6035, 6889, 6326, 5924, 6340, 1876, 3814, 1962, 133, 2464, 822, 2260, 4385, 6467, 1664, 199, 2228, 5747, 7394, 1454, 4516, 6716, 2221, 493, 2674, 3933, 6230, 2158, 7400, 4007, 4124, 2030, 1976, 349, 6859, 4855, 2019, 3711, 4427, 439, 781, 1699, 2005, 7336, 1656, 6412, 4961, 5053, 4100, 6651, 1734, 3509, 6276, 450, 5787, 2155, 7958, 1586, 6146, 6207, 5030, 5599, 1006, 5136, 2809, 2273, 6403, 3000, 2554, 2663, 3804, 3589, 3279, 7947, 3167, 2141, 3253, 7136, 911, 6461, 6705, 2754, 5936, 5508, 2095, 1399, 7651, 2919, 2624, 3234, 4266, 428, 1021, 3780, 4808, 485, 733, 2353, 2388, 3319, 7137, 5978, 3426, 47, 6085, 7439, 1358, 6062, 3258, 7848, 800, 7066, 6876, 603, 3010, 2472, 3823, 5898, 4668, 3788, 593, 5173, 3847, 6884, 1538, 7461, 6641, 4524, 3477, 6456, 7256, 6731, 3351, 842, 5916, 1031, 2073, 295, 6052, 5050, 5482, 2913, 4830, 2346, 5431, 7790, 2495, 5463, 2079, 6491, 979, 5371, 2764, 3569, 1565, 4176, 6174, 7087, 6137, 5842, 632, 3354, 7603, 3205, 254, 2819, 4707, 5624, 1468, 562, 2007, 7466, 3468, 707, 7913, 1225, 2802, 4819, 7960, 4725, 499, 876, 6406, 7611, 3226, 492, 3781, 1122, 3810, 3127, 1102, 1217, 7490, 2069, 5212, 5717, 7084, 6305, 5012, 4974, 4910, 1591, 25, 1426, 1312, 818, 7159, 644, 5616, 6937, 337, 5931, 732, 6297, 3932, 6004, 172, 5941, 6392, 3055, 2765, 6267, 7441, 881, 2343, 3682, 5109, 4559, 7648, 3124, 1028, 7680, 506, 7887, 7507, 2176, 672, 7205, 163, 4939, 220, 3515, 5274, 140, 4723, 3635, 5152, 5408, 3506, 4261, 3152, 2858, 6711, 3685, 1, 5208, 7928, 3156, 6474, 6863, 4392, 5535, 1820, 5692, 944, 2737, 7320, 4760, 6710, 6318, 2550, 6264, 346, 1262, 2304, 5971, 3313, 4603, 7253, 5570, 6045, 2538, 268, 7531, 5689, 7875, 2198, 3268, 436, 116, 6157, 1775, 622, 929, 2234, 7979, 6459, 4131, 6518, 7825, 4869, 7659, 6324, 5621, 2844, 3046, 2057, 7243, 3658, 4492, 5699, 838, 5421, 4777, 598, 2525, 6057, 3179, 7566, 556, 3943, 3646, 6646, 2760, 1724, 942, 830, 7187, 6555, 4012, 1769, 5695, 7641, 7380, 2116, 2934, 1289, 1290, 6525, 3014, 7606, 3209, 5238, 6190, 6277, 2481, 2298, 6861, 7435, 130, 1420, 3802, 32, 5424, 4519, 7306, 2529, 5025, 5125, 1596, 2762, 5192, 6300, 7699, 1800, 6636, 4594, 1444, 5833, 7323, 5666, 7048, 821, 1193, 2363, 6285, 7508, 4064, 4853, 3445, 4733, 7587, 1473, 5782, 1692, 4065, 3929, 1551, 6033, 6427, 1154, 6410, 1104, 1134, 3806, 3665, 5648, 753, 35, 4448, 1442, 3967, 1496, 6725, 5951, 3633, 7752, 2067, 773, 6930, 4804, 1992, 441, 1618, 3379, 2028, 3849, 905, 2339, 1629, 5480, 5470, 932, 6954, 4073, 2204, 1654, 1083, 3902, 4698, 713, 5511, 5968, 5866, 573, 3344, 7123, 7361, 2731, 6914, 2510, 2035, 3222, 472, 2509, 3267, 939, 5397, 3887, 3449, 7017, 3900, 4390, 670, 4179, 1729, 6279, 7293, 885, 6965, 6235, 7527, 3998, 7522, 6537, 1954, 2768, 4214, 6567, 4572, 2750, 4630, 4231, 3882, 3467, 5246, 3850, 5218, 5938, 2102, 6020, 6086, 7155, 3384, 3064, 5574, 2573, 2201, 7095, 3505, 3875, 5776, 3684, 7610, 5052, 1868, 6169, 1595, 1295, 4904, 2763, 5500, 62, 722, 1483, 6448, 1963, 2080, 3838, 63, 1597, 5183, 1611, 6185, 6430, 2309, 6611, 2527, 68, 2411, 6153, 272, 2215, 4497, 5758, 7589, 6331, 4337, 7514, 6367, 2637, 2112, 2257, 3134, 921, 6741, 5132, 3292, 1455, 6259, 1268, 258, 2, 3673, 5215, 3417, 1375, 4424, 3995, 5785, 2583, 2874, 3107, 1713, 7529, 2505, 4423, 7140, 7386, 90, 2912, 3105, 3736, 4138, 4525, 6454, 6564, 1331, 7570, 5157, 5521, 2272, 7793, 1439, 6032, 2599, 2581, 1255, 4223, 6109, 3686, 3038, 1773, 6578, 5731, 2170, 5504, 2376, 1309, 5922, 6306, 5986, 3414, 6767, 7927, 3624, 5209, 1580, 5547, 5955, 626, 4255, 7760, 4856, 1136, 678, 468, 7780, 230, 6604, 3299, 6712, 1908, 5682, 3326, 4239, 6996, 544, 6506, 5822, 4824, 423, 3919, 2063, 2867, 5697, 432, 1124, 1215, 391, 510, 759, 3298, 1567, 7462, 1318, 6654, 3109, 7359, 5664, 2121, 6372, 2926, 1229, 401, 3984, 871, 5249, 1196, 498, 6103, 4766, 1859, 2356, 7867, 27, 5236, 4469, 5642, 1502, 4916, 2241, 5811, 4126, 5832, 66, 579, 6487, 292, 4921, 4839, 1956, 4610, 5980, 1841, 3625, 4317, 5861, 5224, 1936, 7480, 6860, 996, 7969, 2379, 630, 4943, 1530, 3911, 6371, 7220, 4272, 6357, 1174, 1336, 2468, 7586, 4751, 210, 5818, 1019, 537, 618, 7216, 7792, 6073, 2947, 629, 1144, 1704, 6311, 5448, 78, 2528, 7673, 5904, 7763, 1825, 4071, 5844, 1998, 6418, 4908, 3913, 2448, 2822, 7737, 6472, 2916, 543, 348, 5937, 2195, 20, 2467, 5902, 6234, 6223, 4870, 4632, 5058, 6499, 3763, 4165, 4713, 158, 5753, 2369, 276, 169, 6899, 5783, 7985, 6862, 6422, 6116, 6545, 6431, 100, 2020, 7422, 1708, 7168, 4457, 3434, 2471, 5713, 244, 3650, 769, 6765, 6878, 5796, 6557, 5773, 5374, 2841, 5738, 7678, 1218, 5860, 2891, 6829, 5494, 6582, 637, 1228, 4380, 4321, 6917, 150, 2184, 7125, 4514, 4615, 296, 6330, 4397, 5806, 3334, 2163, 234, 49, 6590, 7060, 6592, 1117, 4635, 2269, 2997, 7562, 6600, 2588, 5879, 7200, 1130, 6301, 4914, 4811, 6958, 2759, 4790, 724, 4640, 3309, 2869, 3749, 986, 270, 1180, 6791, 5447, 3360, 6385, 5996, 2616, 935, 2288, 4949, 5225, 2743, 5019, 7021, 4833, 69, 2255, 3388, 3529, 5216, 4672, 119, 6191, 4301, 5162, 3362, 702, 6404, 3327, 4122, 5358, 2128, 2885, 7691, 5576, 2132, 379, 4205, 831, 4168, 5312, 5171, 4467, 1191, 7559, 7878, 3412, 4334, 5233, 4459, 946, 2131, 2270, 7503, 7237, 6254, 3068, 4844, 7873, 5342, 1471, 7371, 2094, 1529, 7833, 3741, 2519, 7249, 5175, 7112, 1139, 7495, 4984, 1211, 5826, 3141, 7047, 4629, 6319, 817, 127, 7956, 2142, 7269, 1484, 5619, 5991, 7679, 5127, 3568, 6764, 1258, 530, 3330, 3248, 1545, 1329, 7240, 1478, 4075, 290, 266, 2470, 719, 4111, 6500, 7637, 2147, 5116, 1822, 7814, 5667, 2108, 6661, 7431, 5972, 7532, 7478, 5347, 5366, 7281, 5076, 526, 2901, 4033, 3256, 3257, 3018, 7486, 501, 1348, 5004, 7534, 5631, 1966, 7023, 5750, 6314, 3455, 5618, 3586, 3088, 2403, 1261, 1299, 6017, 92, 4820, 5406, 3115, 6018, 7432, 1550, 2745, 5336, 3504, 1867, 1616, 4132, 310, 4967, 5259, 2279, 4262, 1248, 7510, 5022, 5676, 5214, 458, 7891, 673, 7122, 3778, 4386, 3366, 5503, 1169, 1556, 6977, 3670, 1622, 5211, 2836, 6720, 524, 4220, 2263, 2784, 1774, 4087, 547, 5997, 232, 1106, 5586, 1817, 1374, 1583, 7558, 2422, 6383, 3575, 4382, 1067, 1644, 102, 454, 3611, 7516, 3051, 5786, 7769, 1970, 3227, 41, 7762, 6490, 6647, 1240, 1429, 7584, 1537, 4343, 5834, 3869, 7299, 7965, 6556, 7295, 610, 6271, 6983, 7302, 855, 3714, 7459, 6266, 1535, 6051, 7427, 3817, 5691, 324, 5206, 2183, 4895, 5684, 4374, 3135, 1533, 3910, 898, 3013, 7156, 4650, 4918, 1972, 3996, 2647, 5551, 5651, 7743, 4628, 2906, 2331, 4569, 6147, 5467, 5464, 5732, 5036, 83, 1663, 3128, 5614, 6260, 972, 4966, 6970, 194, 6675, 6270, 4759, 5199, 2202, 4965, 569, 7448, 5730, 4409, 1338, 2636, 5989, 4937, 1612, 5314, 7946, 6657, 3552, 7377, 3961, 577, 3801, 551, 1319, 7366, 1147, 5201, 7321, 7666, 6618, 5390, 19, 2714, 3429, 7571, 2973, 1291, 5459, 7909, 4527, 4327, 146, 5659, 200, 6082, 4680, 3832, 3394, 6613, 5401, 7097, 5232, 4612, 4711, 3034, 3017, 4278, 3639, 3782, 1555, 4982, 1837, 4203, 3576, 661, 1506, 2050, 760, 3301, 1969, 4244, 7698, 3192, 5051, 6483, 3481, 5981, 3243, 6513, 4963, 2036, 3558, 4381, 1627, 3556, 6091, 5831, 2159, 3032, 3794, 3968, 3458, 1743, 7932, 4234, 122, 4691, 2153, 6986, 1425, 6226, 7658, 4807, 5505, 4146, 7823, 4260, 5727, 596, 3098, 6920, 7000, 6502, 2595, 1832, 5964, 5668, 7777, 4796, 3237, 7926, 6956, 3839, 2197, 516, 2613, 6015, 3338, 3605, 2697, 415, 7244, 3307, 1467, 6061, 3287, 3112, 2967, 2547, 7034, 365, 1171, 7176, 1874, 4461, 1372, 4135, 4738, 183, 1043, 3, 6744, 746, 7, 1501, 4201, 1740, 4193, 387, 1900, 4645, 6049, 3878, 5706, 5561, 4149, 2597, 7721, 3765, 4376, 7489, 2148, 5613, 6167, 7446, 3819, 3203, 5702, 2839, 4426, 7843, 4001, 6465, 2424, 6811, 3497, 1914, 7222, 374, 109, 2594, 5318, 5828, 193, 2118, 3204, 7225, 7171, 3361, 5015, 6940, 5422, 7151, 4522, 1497, 2650, 580, 5324, 3444, 6660, 836, 95, 1034, 487, 4465, 2084, 3331, 5908, 6696, 4659, 6805, 3706, 3669, 3722, 2825, 3190, 6948, 5060, 3867, 834, 6304, 5069, 6718, 3191, 1078, 6775, 1073, 6932, 3060, 5287, 449, 2773, 4779, 1465, 7758, 1232, 3096, 6526, 6186, 6686, 6179, 4197, 6734, 4919, 5801, 4580, 5647, 211, 3541, 3448, 5156, 6979, 6897, 2182, 3273, 4018, 2220, 2177, 3480, 3437, 6426, 2047, 5306, 5479, 4548, 3001, 4932, 615, 377, 1760, 3221, 6399, 1251, 3508, 1082, 400, 2548, 5557, 3369, 2958, 1155, 7464, 3322, 6760, 4399, 7232, 2371, 2692, 4452, 3246, 633, 609, 7186, 3482, 2629, 7337, 6341, 6723, 362, 3559, 5098, 2959, 7356, 1297, 4648, 17, 3147, 2982, 407, 7212, 2558, 4794, 1513, 7093, 4066, 6111, 6681, 4489, 859, 4435, 7195, 7304, 1879, 1074, 4900, 571, 4578, 4495, 2212, 749, 4366, 5399, 5897, 2282, 5808, 7178, 5481, 2052, 5698, 2044, 7682, 6952, 5320, 4757, 6755, 3011, 7783, 3411, 204, 1522, 1330, 7260, 2482, 1986, 801, 6934, 3242, 4989, 3170, 2265, 1457, 725, 7421, 6010, 7389, 6906, 5714, 6677, 5836, 1151, 6772, 3591, 4730, 2935, 5663, 5103, 2965, 1891, 2168, 6980, 813, 2710, 795, 7252, 3015, 2271, 6024, 3854, 5243, 2501, 1990, 4336, 4852, 1952, 2503, 5349, 5389, 4114, 1563, 7015, 1185, 1892, 5337, 4838, 3489, 1739, 4229, 1910, 5223, 5895, 4763, 5102, 222, 5794, 4493, 1156, 2952, 4058, 7073, 6747, 623, 7736, 2229, 7639, 949, 6382, 4718, 3768, 6099, 5598, 6229, 6671, 7344, 3471, 2543, 6583, 1843, 4501, 4809, 4060, 5637, 1086, 4537, 5426, 1177, 648, 5111, 2460, 1334, 5288, 6416, 1002, 176, 658, 4983, 2619, 7916, 6770, 4688, 7467, 3375, 1224, 4128, 6409, 5478, 6634, 3962, 7103, 1744, 6321, 5680, 4425, 6452, 2540, 3925, 6063, 7424, 2724, 1382, 5749, 1458, 540, 4587, 5017, 2203, 1666, 4550, 2627, 4030, 6040, 5266, 7412, 3353, 7213, 7805, 2631, 4014, 3675, 4797, 7565, 4969, 3469, 5061, 7555, 6529, 5442, 4432, 5690, 2709, 6874, 5112, 3719, 924, 2385, 6572, 5420, 5954, 889, 4604, 816, 1767, 2682, 1662, 3131, 1884, 4586, 180, 1202, 7681, 5960, 1342, 185, 7643, 7577, 1030, 7233, 7079, 6695, 1625, 1430, 4, 4959, 5073, 4307, 4034, 6233, 2767, 1882, 5278, 910, 6104, 6050, 6700, 1386, 3212, 4479, 1909, 1592, 4363, 7276, 6221, 3826, 6648, 6670, 4785, 835, 3977, 2991, 857, 4532, 7045, 5154, 1274, 6551, 2297, 4108, 245, 4884, 2721, 4694, 7915, 6248, 4415, 3075, 902, 2946, 3347, 196, 5510, 5392, 7978, 4826, 1603, 3727, 307, 1872, 1128, 7645, 978, 6918, 486, 5558, 7702, 1737, 4153, 7990, 1749, 4088, 3579, 2026, 28, 5063, 7512, 1320, 4981, 7654, 1569, 366, 5439, 4022, 893, 5591, 2735, 1716, 5610, 7401, 1564, 7977, 4420, 7844, 7710, 1991, 2475, 6435, 2125, 7816, 261, 6569, 1566, 6135, 5239, 4641, 6113, 7184, 4802, 3570, 152, 4143, 5166, 405, 6334, 6801, 2350, 2652, 7585, 6441, 2738, 5176, 7287, 1889, 3661, 2712, 5147, 3332, 6603, 5048, 7369, 6030, 3325, 5906, 7876, 1011, 418, 5468, 6558, 2920, 7986, 3852, 3171, 4827, 780, 2994, 2797, 4710, 5219, 231, 3223, 2236, 4543, 1064, 2908, 4069, 5516, 6929, 1881, 5299, 982, 5805, 3130, 319, 4752, 3770, 7119, 1246, 7279, 6831, 5272, 326, 5696, 2796, 4486, 2755, 5649, 1387, 7676, 6616, 3501, 1127, 7910, 4861, 5992, 2632, 5626, 5804, 2113, 7539, 3012, 6093, 5354, 7856, 6060, 5606, 3244, 1069, 7747, 6069, 7157, 7683, 1143, 2099, 4328, 6504, 2139, 3628, 5350, 3306, 2479, 2681, 7883, 7920, 5874, 4351, 4973, 2585, 4408, 4242, 5128, 5373, 2782, 1735, 7505, 5250, 2705, 2830, 6780, 894, 4509, 1403, 2409, 336, 7268, 1423, 7274, 799, 1690, 6209, 4348, 2542, 4478, 4412, 1307, 5909, 3976, 7452, 5041, 323, 5035, 3695, 5772, 7246, 7309, 619, 2427, 4354, 3288, 4161, 105, 6281, 3341, 784, 602, 6444, 1759, 1433, 542, 1667, 2083, 6149, 7374, 5419, 1635, 3210, 6949, 262, 7774, 2433, 6213, 4225, 5630, 1674, 4992, 6369, 2565, 3164, 5120, 57, 6475, 1259, 4142, 2399, 2227, 4224, 4564, 3310, 386, 3339, 3820, 965, 3944, 4676, 1044, 6288, 5761, 5193, 2477, 2070, 3084, 7538, 4874, 4418, 301, 2929, 1598, 4438, 3320, 4144, 1768, 754, 4699, 7849, 6652, 5496, 7382, 1938, 3939, 3861, 1250, 2720, 201, 4724, 5148, 5605, 7173, 745, 5024, 6108, 1398]\n" - ] - } - ], - "source": [ - "print(train_dataset.original_indices)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'max_len': 280, 'vocab_size': 10556, 'embed_dim': 100, 'num_heads': 2, 'num_layers': 2, 'hidden_dim': 256, 'epochs': 3, 'batch_size': 8, 'learning_rate': 2e-05, 'accuracy': 0.5056}\n" - ] - } - ], - "source": [ - "print(params)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\felix\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\transformer.py:379: UserWarning: enable_nested_tensor is True, but self.use_nested_tensor is False because encoder_layer.self_attn.batch_first was not True(use batch_first for better inference performance)\n", - " warnings.warn(\n", - "C:\\Users\\felix\\AppData\\Local\\Temp\\ipykernel_5648\\3082896325.py:7: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " model.load_state_dict(torch.load(model_path))\n" - ] - } - ], - "source": [ - "import transformer_1b\n", - "\n", - "model = transformer_1b.TransformerBinaryClassifier(params['vocab_size'], params['embed_dim'], \n", - " params['num_heads'], params['num_layers'], \n", - " params['hidden_dim'])\n", - "\n", - "model.load_state_dict(torch.load(model_path))\n", - "\n", - "\n", - "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - "model.to(device)\n", - "\n", - "predictions = []\n", - "labels = []\n", - "\n", - "# Predict on test set\n", - "model.eval()\n", - "with torch.no_grad():\n", - " data_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)\n", - " for batch in data_loader:\n", - " input_ids = batch['input_ids'].to(device)\n", - " labels_batch = batch['labels'].unsqueeze(1).to(device)\n", - " outputs = model(input_ids)\n", - " outputs = outputs.cpu().round().numpy()\n", - " labels_batch = labels_batch.cpu().numpy()\n", - "\n", - " predictions.append(outputs)\n", - " labels.append(labels_batch)\n", - "\n", - "# Concatenate all predictions\n", - "predictions = np.concatenate(predictions)\n", - "labels = np.concatenate(labels)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# get df data for original indices\n", - "df_test = df.iloc[test_dataset.original_indices].copy()\n", - "df_test['prediction'] = predictions\n", - "df_test['label'] = labels\n", - "df_test['pred_correct'] = (df_test['prediction'] == df_test['label'])\n", - "\n", - "df_test_sorted = df_test.sort_values(by='humor_rating').reset_index(drop=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "997\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from matplotlib import patches as mpatches\n", - "\n", - "median_rating = df['humor_rating'].median()\n", - "# get first index where humor_rating is greater than median_rating\n", - "median_idx = df_test_sorted[df_test_sorted['humor_rating'] > median_rating].index[0]\n", - "print(median_idx)\n", - "# range idx for len df_test\n", - "range_idx = range(len(df_test))\n", - "colors = df_test_sorted['pred_correct'].map({True: 'g', False: 'r'})\n", - "# bar plot for each df_test humor_rating value \n", - "plt.bar(range_idx, df_test_sorted['humor_rating'], color=colors)\n", - "# vertical line for True/False cut off\n", - "plt.axvline(x=median_idx, color='black', linestyle='--')\n", - "# Create a legend handles\n", - "green_patch = mpatches.Patch(color='g', label='Correct Prediction')\n", - "red_patch = mpatches.Patch(color='r', label='Incorrect Prediction')\n", - "line_patch = mpatches.Patch(color='black', label='humor_rating cut off')\n", - "plt.title('Humor Rating vs Prediction for Test Set')\n", - "plt.xlabel('Index')\n", - "plt.ylabel('Humor Rating')\n", - "plt.legend(handles=[green_patch, red_patch, line_patch])\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# NOTE: \n", - "- model currently only predicts 0 therefore one site is green and other red\n", - "- plot can be helpfull to identify if around the cut off the model gets confused" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/transformer_reg.ipynb b/transformer_reg.ipynb new file mode 100644 index 0000000..62ea12e --- /dev/null +++ b/transformer_reg.ipynb @@ -0,0 +1,584 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KuFFT6LrB6Fe" + }, + "outputs": [], + "source": [ + "import time\n", + "import json\n", + "import math\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "from nltk.tokenize import word_tokenize\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.optim as optim\n", + "from torch.utils.data import DataLoader\n", + "from torch.optim.lr_scheduler import ReduceLROnPlateau\n", + "\n", + "from sklearn.metrics import accuracy_score, precision_recall_curve, f1_score, confusion_matrix\n", + "from sklearn.model_selection import KFold\n", + "# local imports\n", + "import ml_evaluation as ml_eval\n", + "import ml_helper\n", + "import ml_history\n", + "import dataset_generator as data_gen\n", + "# class imports\n", + "import HumorDataset as humor_ds\n", + "import EarlyStopping\n", + "import BalancedCELoss\n", + "\n", + "\n", + "# architecture inspired:\n", + "# https://n8henrie.com/2021/08/writing-a-transformer-classifier-in-pytorch/\n", + "\n", + "# TODO: maybe KFold for cross validation?\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using device: cuda\n" + ] + } + ], + "source": [ + "torch.manual_seed(0)\n", + "np.random.seed(0)\n", + "\n", + "\n", + "best_model_filename = 'best_transformer_reg_model.pt'\n", + "\n", + "device = ml_helper.get_device(verbose=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load Embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "400002\n", + "vocab_size: 400002, d_model: 100\n", + "vocab_size: 400002, d_model: 100\n" + ] + } + ], + "source": [ + "embedding_matrix, word_index, vocab_size, d_model = data_gen.create_embedding_matrix()\n", + "\n", + "vocab_size = len(embedding_matrix)\n", + "d_model = len(embedding_matrix[0])\n", + "vocab_size, d_model = embedding_matrix.size()\n", + "print(f\"vocab_size: {vocab_size}, d_model: {d_model}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define Model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class PositionalEncoding(nn.Module):\n", + " \"\"\"\n", + " https://pytorch.org/tutorials/beginner/transformer_tutorial.html\n", + " \"\"\"\n", + "\n", + " def __init__(self, d_model, vocab_size=5000, dropout=0.1):\n", + " super().__init__()\n", + " self.dropout = nn.Dropout(p=dropout)\n", + "\n", + " pe = torch.zeros(vocab_size, d_model)\n", + " position = torch.arange(0, vocab_size, dtype=torch.float).unsqueeze(1)\n", + " div_term = torch.exp(\n", + " torch.arange(0, d_model, 2).float()\n", + " * (-math.log(10000.0) / d_model)\n", + " )\n", + " pe[:, 0::2] = torch.sin(position * div_term)\n", + " pe[:, 1::2] = torch.cos(position * div_term)\n", + " pe = pe.unsqueeze(0)\n", + " self.register_buffer(\"pe\", pe)\n", + "\n", + " def forward(self, x):\n", + " x = x + self.pe[:, : x.size(1), :]\n", + " return self.dropout(x)\n", + "\n", + "\n", + "class TransformerBinaryClassifier(nn.Module):\n", + " \"\"\"\n", + " Text classifier based on a pytorch TransformerEncoder.\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " embeddings,\n", + " nhead=8,\n", + " dim_feedforward=2048,\n", + " num_layers=6,\n", + " positional_dropout=0.1,\n", + " classifier_dropout=0.1,\n", + " activation=\"relu\",\n", + " ):\n", + "\n", + " super().__init__()\n", + "\n", + " vocab_size, d_model = embeddings.size()\n", + " assert d_model % nhead == 0, \"nheads must divide evenly into d_model\"\n", + "\n", + " self.emb = nn.Embedding.from_pretrained(embeddings, freeze=False)\n", + "\n", + " self.pos_encoder = PositionalEncoding(\n", + " d_model=d_model,\n", + " dropout=positional_dropout,\n", + " vocab_size=vocab_size,\n", + " )\n", + "\n", + " encoder_layer = nn.TransformerEncoderLayer(\n", + " d_model=d_model,\n", + " nhead=nhead,\n", + " dim_feedforward=dim_feedforward,\n", + " dropout=classifier_dropout,\n", + " )\n", + " self.transformer_encoder = nn.TransformerEncoder(\n", + " encoder_layer,\n", + " num_layers=num_layers,\n", + " )\n", + " # normalize to stabilize and stop overfitting\n", + " self.batch_norm = nn.BatchNorm1d(d_model)\n", + " self.classifier = nn.Linear(d_model, 1)\n", + " self.d_model = d_model\n", + " #self.softmax = nn.Softmax(dim=1)\n", + " #self.sigmoid = nn.Sigmoid()\n", + "\n", + " def forward(self, x):\n", + " x = self.emb(x) * math.sqrt(self.d_model)\n", + " x = self.pos_encoder(x)\n", + " x = self.transformer_encoder(x)\n", + " x = x.mean(dim=1)\n", + " # normalize to stabilize and stop overfitting\n", + " #x = self.batch_norm(x)\n", + "\n", + " #NOTE: no activation function for regression\n", + " # sigmoid would only distort the output\n", + " x = self.classifier(x)\n", + " \n", + " return x\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "def load_preprocess_data(path_data='data/hack.csv'):\n", + " df = pd.read_csv(path_data)\n", + " df = df.dropna(subset=['humor_rating'])\n", + "\n", + " df['y'] = df['humor_rating']\n", + " X = df['text']\n", + " y = df['y']\n", + " return X, y" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train 3945 3945\n", + "test 494 494\n", + "val 493 493\n" + ] + } + ], + "source": [ + "X,y = load_preprocess_data()\n", + "\n", + "ret_dict = data_gen.split_data(X, y)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set hyper params" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "model created\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\felix\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\transformer.py:379: UserWarning: enable_nested_tensor is True, but self.use_nested_tensor is False because encoder_layer.self_attn.batch_first was not True(use batch_first for better inference performance)\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "params = {\n", + " # used for class balancing\n", + " 'equalize_classes_loss_factor': 0.15, # 0.15 (0.1 to 0.2)\n", + " # training parameters\n", + " 'batch_size': 32, # 32 (16 to 64)\n", + " 'epochs': 100, # 100\n", + " 'lr': 1e-4, # 1e-5 (1e-6 to 1e-3)\n", + " \n", + " # NOTE: used for gradient clipping (needed for lstm and transformer)\n", + " # use 0 to disable\n", + " 'clipping_max_norm': 0, # 0 (0.5 to 2.0)\n", + " \n", + " # patience for early stopping\n", + " 'early_stopping_patience': 5, # 5 (3 to 10)\n", + "\n", + " # learning rate scheduler\n", + " 'lr_scheduler_factor': 0.5, # 0.1 (0.05 to 0.2)\n", + " 'lr_scheduler_patience': 3, # 3 (2 to 5)\n", + "\n", + " # model parameters\n", + " 'nhead': 2, # 5\n", + " 'num_layers': 3, # 6\n", + " 'hidden_dim': 10, # 50\n", + "\n", + " # regularization parameters\n", + " 'positional_dropout': 0.5, # 0.1 (0.1 to 0.5)\n", + " 'classifier_dropout': 0.5, # 0.1 (0.1 to 0.5)\n", + " 'weight_decay': 1e-2 # 0.0 (1e-6 to 1e-2)\n", + "}\n", + "\n", + "# Model initialization\n", + "model = TransformerBinaryClassifier(embeddings=embedding_matrix, \n", + " nhead=params['nhead'], \n", + " num_layers=params['num_layers'], \n", + " dim_feedforward=params['hidden_dim'],\n", + " positional_dropout=params['positional_dropout'],\n", + " classifier_dropout=params['classifier_dropout']\n", + " )\n", + "model.to(device)\n", + "print('model created')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### create datasets" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "datasets length: 3945 493\n", + "train: 124, val: 16, test: 16\n" + ] + } + ], + "source": [ + "# NOTE: Info comes from data explore notebook: 280 is max length,\n", + "# 139 contains 80% and 192 contains 95% of the data\n", + "max_len = 280\n", + "\n", + "train_dataset = humor_ds.TextDataset(ret_dict['train']['X'], ret_dict['train']['y'], word_index, max_len=max_len)\n", + "val_dataset = humor_ds.TextDataset(ret_dict['val']['X'], ret_dict['val']['y'], word_index, max_len=max_len)\n", + "test_dataset = humor_ds.TextDataset(ret_dict['test']['X'], ret_dict['test']['y'], word_index, max_len=max_len)\n", + "\n", + "print('datasets length:', len(train_dataset), len(val_dataset))\n", + "#NOTE: overfitting test\n", + "#train_dataset.labels = train_dataset.labels[:100]\n", + "#train_dataset.texts = train_dataset.texts[:100]\n", + "\n", + "train_loader = DataLoader(train_dataset, batch_size=params['batch_size'], shuffle=True)\n", + "val_loader = DataLoader(val_dataset, batch_size=params['batch_size'], shuffle=False)\n", + "test_loader = DataLoader(test_dataset, batch_size=params['batch_size'], shuffle=False)\n", + "\n", + "# NOTE: samller because of batches not all data\n", + "print(f\"train: {len(train_loader)}, val: {len(val_loader)}, test: {len(test_loader)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set training requirements" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#TODO: change to RMSE\n", + "\"\"\"\n", + "criterion = nn.MSELoss()\n", + "loss = torch.sqrt(criterion(x, y))\n", + "loss.backward()\n", + "print(x.grad)\n", + "\"\"\"\n", + "criterion = nn.MSELoss()\n", + "\n", + "optimizer = torch.optim.Adam((p for p in model.parameters() if p.requires_grad), \n", + " lr=params['lr']) #, \n", + " #weight_decay=params['weight_decay'])\n", + "\"\"\"\n", + "scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', \n", + " factor=params['lr_scheduler_factor'],\n", + " patience=params['lr_scheduler_patience'],\n", + " verbose=True)\n", + "\"\"\"\n", + "early_stopping = EarlyStopping.EarlyStopping(patience=params['early_stopping_patience'], verbose=False)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Training loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100, Train Loss: 1.8054, Val Loss: 1.8873, Time: 2.55s\n", + "Epoch 2/100, Train Loss: 1.8085, Val Loss: 1.8873, Time: 2.23s\n", + "Epoch 3/100, Train Loss: 1.8083, Val Loss: 1.8873, Time: 2.36s\n", + "Epoch 4/100, Train Loss: 1.8059, Val Loss: 1.8873, Time: 2.38s\n", + "Epoch 5/100, Train Loss: 1.8048, Val Loss: 1.8873, Time: 2.28s\n", + "Epoch 6/100, Train Loss: 1.8138, Val Loss: 1.8873, Time: 2.21s\n", + "Epoch 7/100, Train Loss: 1.8064, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 8/100, Train Loss: 1.8110, Val Loss: 1.8873, Time: 2.06s\n", + "Epoch 9/100, Train Loss: 1.8102, Val Loss: 1.8873, Time: 2.06s\n", + "Epoch 10/100, Train Loss: 1.8093, Val Loss: 1.8873, Time: 2.17s\n", + "Epoch 11/100, Train Loss: 1.8080, Val Loss: 1.8873, Time: 2.26s\n", + "Epoch 12/100, Train Loss: 1.8101, Val Loss: 1.8873, Time: 2.39s\n", + "Epoch 13/100, Train Loss: 1.8050, Val Loss: 1.8873, Time: 2.29s\n", + "Epoch 14/100, Train Loss: 1.8101, Val Loss: 1.8873, Time: 2.19s\n", + "Epoch 15/100, Train Loss: 1.8032, Val Loss: 1.8873, Time: 2.29s\n", + "Epoch 16/100, Train Loss: 1.8097, Val Loss: 1.8873, Time: 2.28s\n", + "Epoch 17/100, Train Loss: 1.8081, Val Loss: 1.8873, Time: 2.44s\n", + "Epoch 18/100, Train Loss: 1.8078, Val Loss: 1.8873, Time: 2.17s\n", + "Epoch 19/100, Train Loss: 1.8064, Val Loss: 1.8873, Time: 2.15s\n", + "Epoch 20/100, Train Loss: 1.8063, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 21/100, Train Loss: 1.8134, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 22/100, Train Loss: 1.8103, Val Loss: 1.8873, Time: 2.09s\n", + "Epoch 23/100, Train Loss: 1.8091, Val Loss: 1.8873, Time: 2.16s\n", + "Epoch 24/100, Train Loss: 1.8034, Val Loss: 1.8873, Time: 2.24s\n", + "Epoch 25/100, Train Loss: 1.8082, Val Loss: 1.8873, Time: 2.46s\n", + "Epoch 26/100, Train Loss: 1.8084, Val Loss: 1.8873, Time: 2.38s\n", + "Epoch 27/100, Train Loss: 1.8093, Val Loss: 1.8873, Time: 2.35s\n", + "Epoch 28/100, Train Loss: 1.8091, Val Loss: 1.8873, Time: 2.15s\n", + "Epoch 29/100, Train Loss: 1.8136, Val Loss: 1.8873, Time: 2.24s\n", + "Epoch 30/100, Train Loss: 1.8051, Val Loss: 1.8873, Time: 2.28s\n", + "Epoch 31/100, Train Loss: 1.8026, Val Loss: 1.8873, Time: 2.19s\n", + "Epoch 32/100, Train Loss: 1.8056, Val Loss: 1.8873, Time: 2.16s\n", + "Epoch 33/100, Train Loss: 1.8121, Val Loss: 1.8873, Time: 2.13s\n", + "Epoch 34/100, Train Loss: 1.8098, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 35/100, Train Loss: 1.8036, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 36/100, Train Loss: 1.8073, Val Loss: 1.8873, Time: 2.19s\n", + "Epoch 37/100, Train Loss: 1.8108, Val Loss: 1.8873, Time: 2.50s\n", + "Epoch 38/100, Train Loss: 1.8082, Val Loss: 1.8873, Time: 2.45s\n", + "Epoch 39/100, Train Loss: 1.8134, Val Loss: 1.8873, Time: 2.38s\n", + "Epoch 40/100, Train Loss: 1.8080, Val Loss: 1.8873, Time: 2.22s\n", + "Epoch 41/100, Train Loss: 1.8028, Val Loss: 1.8873, Time: 2.26s\n", + "Epoch 42/100, Train Loss: 1.8088, Val Loss: 1.8873, Time: 2.30s\n", + "Epoch 43/100, Train Loss: 1.8062, Val Loss: 1.8873, Time: 2.28s\n", + "Epoch 44/100, Train Loss: 1.8029, Val Loss: 1.8873, Time: 2.14s\n", + "Epoch 45/100, Train Loss: 1.8079, Val Loss: 1.8873, Time: 2.14s\n", + "Epoch 46/100, Train Loss: 1.8091, Val Loss: 1.8873, Time: 2.22s\n", + "Epoch 47/100, Train Loss: 1.8048, Val Loss: 1.8873, Time: 2.19s\n", + "Epoch 48/100, Train Loss: 1.8069, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 49/100, Train Loss: 1.8115, Val Loss: 1.8873, Time: 2.22s\n", + "Epoch 50/100, Train Loss: 1.8028, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 51/100, Train Loss: 1.8087, Val Loss: 1.8873, Time: 2.17s\n", + "Epoch 52/100, Train Loss: 1.8086, Val Loss: 1.8873, Time: 2.08s\n", + "Epoch 53/100, Train Loss: 1.8075, Val Loss: 1.8873, Time: 2.00s\n", + "Epoch 54/100, Train Loss: 1.8087, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 55/100, Train Loss: 1.8107, Val Loss: 1.8873, Time: 2.02s\n", + "Epoch 56/100, Train Loss: 1.8125, Val Loss: 1.8873, Time: 2.17s\n", + "Epoch 57/100, Train Loss: 1.8090, Val Loss: 1.8873, Time: 2.34s\n", + "Epoch 58/100, Train Loss: 1.8032, Val Loss: 1.8873, Time: 2.17s\n", + "Epoch 59/100, Train Loss: 1.8079, Val Loss: 1.8873, Time: 2.11s\n", + "Epoch 60/100, Train Loss: 1.8100, Val Loss: 1.8873, Time: 2.05s\n", + "Epoch 61/100, Train Loss: 1.8063, Val Loss: 1.8873, Time: 2.08s\n", + "Epoch 62/100, Train Loss: 1.8068, Val Loss: 1.8873, Time: 2.22s\n", + "Epoch 63/100, Train Loss: 1.8012, Val Loss: 1.8873, Time: 2.32s\n", + "Epoch 64/100, Train Loss: 1.8079, Val Loss: 1.8873, Time: 2.35s\n", + "Epoch 65/100, Train Loss: 1.8109, Val Loss: 1.8873, Time: 2.36s\n", + "Epoch 66/100, Train Loss: 1.8030, Val Loss: 1.8873, Time: 2.28s\n", + "Epoch 67/100, Train Loss: 1.8085, Val Loss: 1.8873, Time: 2.24s\n", + "Epoch 68/100, Train Loss: 1.8049, Val Loss: 1.8873, Time: 2.20s\n", + "Epoch 69/100, Train Loss: 1.8115, Val Loss: 1.8873, Time: 2.18s\n", + "Epoch 70/100, Train Loss: 1.8019, Val Loss: 1.8873, Time: 2.15s\n", + "Epoch 71/100, Train Loss: 1.8025, Val Loss: 1.8873, Time: 2.19s\n", + "Epoch 72/100, Train Loss: 1.8124, Val Loss: 1.8873, Time: 2.17s\n", + "Epoch 73/100, Train Loss: 1.8086, Val Loss: 1.8873, Time: 2.06s\n", + "Epoch 74/100, Train Loss: 1.8096, Val Loss: 1.8873, Time: 2.06s\n", + "Epoch 75/100, Train Loss: 1.8049, Val Loss: 1.8873, Time: 2.08s\n", + "Epoch 76/100, Train Loss: 1.8059, Val Loss: 1.8873, Time: 2.38s\n", + "Epoch 77/100, Train Loss: 1.8141, Val Loss: 1.8873, Time: 2.39s\n", + "Epoch 78/100, Train Loss: 1.8092, Val Loss: 1.8873, Time: 2.44s\n", + "Epoch 79/100, Train Loss: 1.8106, Val Loss: 1.8873, Time: 2.30s\n", + "Epoch 80/100, Train Loss: 1.8125, Val Loss: 1.8873, Time: 2.25s\n", + "Epoch 81/100, Train Loss: 1.8142, Val Loss: 1.8873, Time: 2.26s\n", + "Epoch 82/100, Train Loss: 1.8073, Val Loss: 1.8873, Time: 2.08s\n", + "Epoch 83/100, Train Loss: 1.8064, Val Loss: 1.8873, Time: 2.14s\n", + "Epoch 84/100, Train Loss: 1.8085, Val Loss: 1.8873, Time: 2.15s\n", + "Epoch 85/100, Train Loss: 1.8080, Val Loss: 1.8873, Time: 2.17s\n", + "Epoch 86/100, Train Loss: 1.8096, Val Loss: 1.8873, Time: 2.12s\n", + "Epoch 87/100, Train Loss: 1.8083, Val Loss: 1.8873, Time: 2.09s\n", + "Epoch 88/100, Train Loss: 1.8093, Val Loss: 1.8873, Time: 2.11s\n", + "Epoch 89/100, Train Loss: 1.8101, Val Loss: 1.8873, Time: 2.25s\n", + "Epoch 90/100, Train Loss: 1.8047, Val Loss: 1.8873, Time: 2.42s\n", + "Epoch 91/100, Train Loss: 1.8056, Val Loss: 1.8873, Time: 2.34s\n", + "Epoch 92/100, Train Loss: 1.8090, Val Loss: 1.8873, Time: 2.37s\n", + "Epoch 93/100, Train Loss: 1.8107, Val Loss: 1.8873, Time: 2.20s\n", + "Epoch 94/100, Train Loss: 1.8031, Val Loss: 1.8873, Time: 2.18s\n", + "Epoch 95/100, Train Loss: 1.8032, Val Loss: 1.8873, Time: 2.07s\n", + "Epoch 96/100, Train Loss: 1.8062, Val Loss: 1.8873, Time: 2.20s\n" + ] + } + ], + "source": [ + "# Training loop\n", + "\n", + "for epoch in range(params['epochs']):\n", + " epoch_start_time = time.time()\n", + " model.train()\n", + " \n", + " train_loss = 0.0\n", + " \n", + " for batch in train_loader:\n", + " optimizer.zero_grad()\n", + " input_ids, labels = batch\n", + " input_ids, labels = input_ids.to(device), labels.to(device).float() \n", + "\n", + " outputs = model(input_ids)\n", + " outputs = outputs.squeeze().float()\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " #torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=params['clipping_max_norm'])\n", + " optimizer.step()\n", + " preds = outputs\n", + " \n", + " train_loss += loss.item()\n", + "\n", + " train_loss /= len(train_loader)\n", + " \n", + " # Validation\n", + " model.eval()\n", + " val_loss = 0.0\n", + " \n", + " with torch.no_grad():\n", + " for batch in val_loader:\n", + " input_ids, labels = batch\n", + " input_ids, labels = input_ids.to(device), labels.to(device).float() \n", + " outputs = model(input_ids)\n", + " outputs = outputs.squeeze().float()\n", + " loss = criterion(outputs, labels)\n", + " preds = outputs\n", + " \n", + " val_loss += loss.item()\n", + "\n", + " val_loss /= len(val_loader)\n", + " \n", + " epoch_end_time = time.time()\n", + " \n", + " print(f'Epoch {epoch+1}/{params[\"epochs\"]}, '\n", + " f'Train Loss: {train_loss:.4f}, '\n", + " f'Val Loss: {val_loss:.4f}, '\n", + " f'Time: {epoch_end_time - epoch_start_time:.2f}s')\n", + "\n", + " " + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}