diff --git a/Figures/.ipynb_checkpoints/Loss-checkpoint.png b/Figures/.ipynb_checkpoints/Loss-checkpoint.png new file mode 100644 index 0000000..fb1366e Binary files /dev/null and b/Figures/.ipynb_checkpoints/Loss-checkpoint.png differ diff --git a/Figures/.ipynb_checkpoints/Train Acc-checkpoint.png b/Figures/.ipynb_checkpoints/Train Acc-checkpoint.png new file mode 100644 index 0000000..cacb02f Binary files /dev/null and b/Figures/.ipynb_checkpoints/Train Acc-checkpoint.png differ diff --git a/Figures/.ipynb_checkpoints/Val Acc-checkpoint.png b/Figures/.ipynb_checkpoints/Val Acc-checkpoint.png new file mode 100644 index 0000000..c3ee326 Binary files /dev/null and b/Figures/.ipynb_checkpoints/Val Acc-checkpoint.png differ diff --git a/Figures/Loss.png b/Figures/Loss.png new file mode 100644 index 0000000..9b28db4 Binary files /dev/null and b/Figures/Loss.png differ diff --git a/Figures/Train Acc.png b/Figures/Train Acc.png new file mode 100644 index 0000000..f5223c0 Binary files /dev/null and b/Figures/Train Acc.png differ diff --git a/Figures/Val Acc.png b/Figures/Val Acc.png new file mode 100644 index 0000000..960c366 Binary files /dev/null and b/Figures/Val Acc.png differ diff --git a/VisualizeResults.ipynb b/VisualizeResults.ipynb new file mode 100644 index 0000000..94e3aa4 --- /dev/null +++ b/VisualizeResults.ipynb @@ -0,0 +1,176 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import seaborn as sns; sns.set()\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('results.csv',index_col=0)\n", + "df = df.fillna('SQLNet').replace(['ca', 'baseline', 'train_emb'],['Column Attention','Baseline','Train Embeddings'])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def plot(y, save=False):\n", + " sns.lineplot(x='Epoch',y=y, hue='Type',data=df)\n", + " plt.title(y)\n", + " plt.xlabel('Epoch')\n", + " plt.ylabel(y)\n", + " if save: plt.savefig('Figures/'+y+'.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot('Loss',save=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot('Train Acc',save=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEcCAYAAAA/aDgKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzs3Xd4HOd96PvvzPaODhAgSDRiSLFTvVda1bIsF1m2JdmO7WM7dnJjO3Hie+L4JDe5OUkc59rxjRyXWI7c5CJZsmU1qlcWsZeXIECA6LtoC2wvM+ePWYJgExdtARDv53n2mdnZKe+gzG/frhiGgSRJkiRNhjrXCZAkSZIWHhk8JEmSpEmTwUOSJEmaNBk8JEmSpEmTwUOSJEmaNBk8JEmSpEmzznUCJOl8omlaHXAUsAkhMnOcHEmaNTJ4SNIEmqY9BWwVQnztlO3vAb4LLJ2JoKBp2ovAeqBKCJGc7vkkqdBksZUknewh4KOapimnbL8P+MkMBY464GrAAO6c7vkkaS7InIcknewx4EHMh/vLAJqmFQN3AJfm3t8O/D9AIxAGfiCE+PokrnE/8CbwFvAA8MvjH2ia5sqd+/1AEbAX2CyEiGuadhXwT8AFwBjw10KIH03xPiVpWmTOQ5ImEELEgUcwH/DHfRA4JITYnXsfzX1eBNwOfFbTtLsmcZn7gZ/kXjdrmlY54bN/AS4ErgBKgL8AdE3TlgN/AL4NlAMbgF2TuztJmjky5yFJp3sI+J2maZ8XQiQwH/YPHf9QCPHihH33aJr2M+BazFzLO8rlHpYDjwghBjRNawU+DHxT0zQV+ARwmRCiO3fI67njPgw8J4T4WW77YO4lSXNCBg9JOoUQ4lVN0waAuzRN2wZcAtx9/HNN0y4F/hFYA9gBBxOKns7hAeAZIcRA7v1Pc9u+CZQBTqD1DMfVnmW7JM0JGTwk6cx+jJnj0ICnhRD9Ez77KfDvwK1CiISmaf+G+eB/R7n6jA8CFk3T+nKbHUCRpmnrMes3Eph1KbtPObwTM4hJ0rwgg4ckndmPgf8JrAP+7JTPfMBQLnBcglns9Ewe57wLyAJrgdSE7Y8A9wshvqRp2g+Bf9U07T6gHzNgvI1ZP/JVTdM+CPwGCAC1QghZ7yHNCVlhLklnIIRox6xv8ACPn/Lx54C/1TRtDPga5sM/Hw8A/yWEOCaE6Dv+wszFfETTNCvwZcwcyDZgCPjfgCqEOAbcBnwpt30XZj8RSZoTipwMSpIkSZosmfOQJEmSJk0GD0mSJGnSClZhrmlaM2Zb+VLM9un3CyFazrDfB4G/BhTM4RtuOqWliyRJkjTHCpnzeBD4jhCiGfgO5iBzJ9E07SLg65jDMawBrsIc/kGSJEmaRwpSYa5pWgVwGCgVQmQ1TbNg5j5WCCFCE/b7CbBFCPHDKVzGAVwM9GI2h5QkSZLOzQIswWzhl/cIz4UqtqoFuoUQWYBcAOnJbQ9N2O8C4KimaS8DXsz27H8vhMgnwl0MvDKzyZYkSVo0rgZezXfn+dZJ0ILZKWsz5rAPTwHHMDtsnUvvLKZLkiTpfDepZ2ihgkcnUKNpmmVCsVV1bvtEx4Bf5SbHSWqa9lvMHrb5BI8swOBgBF03KC/3EQqNzeAtLBzy3hfnvcPivv/FfO8w9ftXVYXSUi9Msri/IBXmQoggZo/Ye3Ob7gV2TqzvyPkp8C5N0xRN02zAjZw+xo8kSZI0xwrZ2uozwBc0TTsMfCH3Hk3Tnsy1sgL4ORAEDmAGm/3ADwqYRkmSJCkPBavzEEIcIjcT2ynbb5uwrgNfzL0kSZKkeUr2MJckSZImTQYPSZIkadJk8JAkSVrg5mJ09PnWz0OSJGnR0w2DaDzNWCzNWCzFWCzN6CnLSCzFaO7zVFrn7/7HFZR5bQVLowwekiRJBZLO6IQjSUaiKXMZSRGO5paR1PhnY7EUZ8tMeJxWfG47PreNJSVumpcGKPI5qK3yEY8kCnYvMnhIkrRg6YZBZ3+EPW2DJNI69ZVeVteX4HLM7qNNNwwSyQzRRIZYIkM0kT5lmSGWSBNNZIjE04RzwSKayJx2LkUBv8dOkcdBkc/B8iofAa8dn8uOz2PD57bjzwULr8uG1XLm2gavyyaDhyRJ0tlEE2n2Hx1ib9sge9uGGI2a08G7HBb+kMxiURVWLA2wrrGM9U2lVJW4URRlStfSDYOegShHusK0dIVp7xtlNJoilsycNWcAYFEV3E4rbqcNr9NKVYkbbVkRRR47Aa+DIq+dgMdc+tx2VHVq6ZtLMnhIkjSvGYbBsf4Ie9sG2dM2SFv3KLph4HFaWV1fwtqGUtY0lFJfW8ybu7vZ3TrAntZBHnnhCI+8cITyIqcZSBpL0ZYVYbNaznqtZDrL0Z5RWrrDHOkK09odJpY0cwt+t43GmgCrlhfjdtrwOK24nVY84+sntjlslikHrIVCBg9JkmZELJEhNBInOBInOBwjNJIgNBInNBLHMAzzIesyH7Dm0obHdeLhO/Fzq0VFdI6wt3WQvW2DhHO5i+WVPm67fBlrG0ppqPZjUU8U4VgsKs21RTTXFvGB65oYCMfZ2zrI7tZBXt7dw5YdXdhtKhcsL2FdUynrG8tQFMZzFUe6RzjWHyGrm1mK6jIPF62sYMXSAE1LA1QUuc77gDAZMnhIkpS3SDxNdyhCcCQ+HhyCw2aAiMTTJ+3rc9uoKHLRVBPAoipm+X8iTfdAlGgiQzSeHn9Qn43bcSJ3sbahhIDXkXdaywIurt+0lOs3LSWVznLo2DC7jwyyp3WAXUcGADG+r82qUr/Ezy2XLqOpJkBjTQCvq3AtlxYiGTwkSTqjSDxNe98oHX1jtPeN0dE3xkD4RIWsokCp30lFsYuLtHLKi1yUF7moKDaX56q0NgyDZDpLNG5WNB8PKNFEmkQqS0O1/7TcxVTZbRbWNZaxrrEMw2imeyDKvrYhFAWalgZYXuk7a0W0dGYyeEiSxFgsdVKQaO8bY3D0RKAoL3JSt8TPdRtrqK3wUlHsotTvnNYDV1EUnHYrTruV0oBzJm4j7+suLfeytNxbsGuej2TwkKQFxDAMIvE0Q6NJhkYTDI4mGBoz14fGzBlEs1kDVQFFVVAVxVxXFFRVQVHIbTPfZ7I6XaEIQ6MnZh+tKHLRUO3nhk01LK/ysbzKh8d5/hXhGNksKArKDORsFiMZPCRpnklnshzrj9A9EDWDwmjypCCRzugn7W+1qJT4HZT4HHg9DhLJNIZuoBtmsNF1A90wzHXDQNcZXweFppoAyy/0UVdpBgr3HAWKzOgoqe4ukt1dpPr7Ue02LB4vqseDxeMx191uLB4PqseL6nSesQLbMAz0WIzMyDCZ4eEJy5GTtmXHxlAsFmzlFdjKy7FVVGKvqMBWUWluKy1FscpH5NnIn4y0oBmGQToYJNHWSrytldDYCPa1G/FdcimqbWYfgnoqxegbrxN+5SUsXi/e9RvxbNiIrbh46uc0DPqHYrT1jNLWO0pbzyhdwRMtfhQg4LVT4ndSW+FlfWMppX4nJX4nJX4HpX4nPrdt/CG6EGbT0xMJkj09pLo7zUDR3U2yq4vs2Oj4PqrLhZHNYqRSZz+RquYCiQeL20Of0048NEgmPHLG4yxeH5aiIqxFxTiWL8daVIyRTpMO9pMKBokdOnjycaqKrbQMW0UFtooK7OWV2MrLUex2FIsFVNXMtagqimpBsainbUNVUSwWFKsVxWYzl5azNxVeSJS5GFBrltQBR+U0tAvjATJVeiJO4uhR4q1HSLS1kmhrIxsx71VxOLEH/CSDQSw+P4Hrrqfo2uuxFhVN65qZ8AgjL2wh/OKLZCNjOGpr0ZMp0sF+ABx19XjXb8C7YRP2pUvfsTlnOJIcDxJHe0c52jtGPNePwGG3UF/lo77aT8OSALWVXkp8jknVK5SVeQkFR0HXMcwshrk8Zd0wjNy24+sGGMaJ9wZg5I4Z/1w3O8YZuXNksyfOp2dBN8yiIEPHyJ7YbmSzZAYHc4Gii3ToxASiit2OvboGx9KlOKqXYl+6FEfNUix+P4qioKdT6NEY2WiUbDSCHo2evB6LoUcjZKNRrIqB4fFhDRRhLS7GWlQ8vrQUBVBt9nf82RmGQXY0TDoYJBXsJx0Mkg4FSQWDpPv70OPxvH8P70hRTgSS40vrye8tLheWQACrP4DF78fi9+fWA1j9flSP57S/sxmYhrYeaM/7NmTwmJ8MXSd5rINERweq3Y7qcp30sjjN5Zmy1bN175mxUeKHBXFxiGRPD9biYmxl5diPZ/vLy7H4AzNWhmzoOqm+vlyQOEK8tZVUTzfHu/bal1TjbGjE2diIq6ERe3UN5RV+Ol5+i5HnniG6dw+oKr6LLqH4ps046xsmdf1k5zGGn32asa1vYWSzeNZvoHjzzbiaNQBSvT1Ed+0ksmsniaNtYBhYS8uwrFpLsmEVIyVLGYllGI4kGQgnaO8dZTBXt6AqCksrPDQs8eeChZ8lpR5UVUFPJMiEw2QjY+ixmPmAjMXQ4yfWs7n3p35uZE4f/mJeUFXslVXYa2pw1CzFsXQp9ppabGVlM/b3Mpv/84ZhoEejpAdCGOn0iaB5UgDVQc+9z054n81iZDIY6QxGJm2uZ9LmeSZs1zOZ8W16LEZmNEx21PwicBqLBavfPx5MrCUlNH/8o4Qzky9MksHjPAgeejpF7OBBort3Etm9i+zIyDmPUWw2VKcL1e0yly4X3spy9JJyHNU12KtrzKz2FP5Bs2NjxHLBIiYOkeruMq+Z+7aYHQ2TGR5m4jgNis2GrcwMJOPL8gpsZWWoTmfuW2MUPZZb5r5Fjm+f+HkkgpE2+w6objfOBjNIOBsacTY0YHF7TkvzxN97qr+fkeefY/S1V9ATCZyNTRTfuBnvpgvPWpZt6DrRfXsYfuZp4ocOotjtBK66mqIb34W9spJ0Rqe1O0z/cIzhsSQjucHt4oPDFPceYdlwO8vjvdiMLAnVTqu7hqP+ZYQr61he5qLeCzWuLCVqGiUyav4Mw+YrGw6TGQ1jJJNnTBuAYrWiut1m2b/bjerK1QG43ObvvshLLJ4+URGsqietK4pibju+ruSKWcyadHNfTqyjHN/vxEtRFVAtE4pnVPO9ZcL6KftY/L5zfvOfroX4P38uhq6jR6NkRnN/K6Oj438n2dHR8e16MskFf/kl4r7ySV9DBo9pBg/DMMyon0qhp1K5ZRIjlcJIp9GTyROfpc2l6nSa36aqqrAEiqbU+zQzOkp0z24iu3cS278PI5VCcTjwrFmLZ90G3M0aRjaLnoijx+Nk4+by+Hs9kTC/gcYTJ7aNDJEMDYxfQ7HZsC+pxl5dPR5Q7NU1p33ry0YiJweLrk7zeLsdV9MKXNpK3CtX4VxeN/7w1dNpMoODpAeCpEMh0gMhcxkKkQ4F0RPnHqhNsdvNB6Dbc6IMO/eyV9fgamjEVlmVVwA80+89G48z+tqrjGx5lnQoiLW4mMB1N1B0zXVYfD7zPpJJRt94jeHnniHd14e1uISiG24icM21DKVV9uXGUTrYMUwynR0/t99to8jnoNjroNjnoMjroNipUBJqx9l+CEPsQ49Ezppe1e02iyOKisxlrqjCGghg8flOBInjr3M8gM/HB2i+FvO9gyy2mo46phg8YocO0v1v35hWll9xOLFXVmKvqsKWCyj2SnPd4nKN72cYxonijt27SLS1msUdxSV4NmzAu34DLm3ltL6llZf76O8MmpWSPd1mhWRPN6meHjLDQyfSbLdjr1qCvbKSVF8vya4uMAwzWDSuwKVpZrCoq59Sq5PxrH4oSCoUxEilJwQHb2793A/Eyd772X7vhq4T3buHkeeeJXZwP4rNhu/Sy7H4fIRffhE9GsVRV4/vhs10lzext2OEvW1D9A/FACgLOFnbWMqa+hJqK7wUec9dH2HoOonWI8SPtKC6XFgDRWaACJhl2TP9bXwxP0AX872DDB7TUccUg0cmHCb8yksoqopid6Da7SgOO4rNbq7b7ah2R25py+1jIxuNkervI93fR6qvz1zv6yM9OHBSUY4lEMBeWYW1uIREWyvpUBAAx/I6vBs24lm/AUftshkbN+ed7j0bi5Hq7ZkQULpJ9fdhr6g0cxbaSpz1DQu2iWK+v/dkdzcjW55l9M3XMdJprKvX09VwEdtjHkRXmHRGx2ZV0ZYV5YbGKKWyeP6PbbSYH6CL+d6h8MFjYT4hZpg1EKD0jjsnfZzqdGErLYULVp+0XU+nSAdDuWDSS6q/n1R/HzFxEGftMopvuRXPug3TauI5VRa3G1djE67GpoJfe16pqKLvijvYX7IR0RaiM6bCgRRVJVau3VDNuoZSmmuLsNvOj2aVkjTTZPCYBarNjqOmBkdNzVwnRZogOBxjT6s5rPehjhEyWT03ymoF1zWUsKahlPIi17lPJEmSDB7S+Sud0TncZQ7rvad1kL5c3UVliZvrN9awrtHMXdiscngKSZosGTyk84ZhGISG47y0q5s9rYMc6BgmmcpitaisXFbE9ZvMgFFZ7J7rpErSgieDh7RgpNJZhsdy4zyNHh8MMMHg8fXR5Hgz2lK/gytWV7G2sZRVy4px2GXdhSTNJBk8pHmpbyjGa3t76RmIjg8MeOpkQwABj50Sv4PqMg9r6kupWxpgWamb6rLTh2+QpPksFBtka98OtvbvJJwM47Q6cVtdOK1OXBYnLqv5clqPr7vGt/nsXsrK1hQ0vTJ4SPNGVtfZ1TLACzu7OdA+jEVVqCp1U+JzUr/ER7HfSanfQYnPSUnASbHXcVp9xWJvrinNPMMwGEoM0xPtIxgboNJdTmNRHS7r9BtXxNIxdgT3sLVvB23hDhQUmosbWV+2mkQ2QSyTIJFJEM8kGE6GSWTixDMJUvrpX6S+6vk8NdZl005TvmTwkObc8FiSl3f38PLuHobHkpT4Hbz3mgauWbdkUtOOStJ0xTNxuiN99ER66Y6ay55IP4nsySMlKCjU+qpZUdTIiuIGGgP1uG35BZOsnmX/4CG29r3N3oEDZIwsVZ5K3tN4KxdXbqTYee6BPLN6lnguqMSzcbK6zrqqVQwORKd031NRsOChaVoz8BBQCgwC9wshWk7Z5+vA54Ce3KbXhBB/XKg0SoVjGAaHOoZ5fmc3Ow8PoBsGaxpK+Oi7mlnXWDojU49KkmEYZIwsGT1NWs+QzmZI59YzeprBxDDdkV56In10R3oZTp4YT85ldVLtWcIlVZuo9lZR411CuauUnkgfLSNttIy08lLXa2zpfBkFhaXeJawobqSpqIGmono8NvdJ6Tg21sVbfW+zo38XkXQUr83D1TWXc0nVJmp9NZMqZrWoFrx2D177ifHdVKWw/zOFzHk8CHxHCPGwpmkfBb4L3HCG/X4shPhyAdMlFVA0kea1vX28uLObvqEYHqeVd11Sy3UbqqmQraCknHByjEg6QjxXbJPIJk9aP16Uc3w9kUmSIU0inTSDRC44pPVzDzmkKup4UVSNZ8l4oChyBM74QNdKmtBKzE62qWya9tFjZjAZbuXl7jd4vvMVFBSqvVU0FzXisbnZ3r+LvlgQq2plbdkFXFq1iQtKNCzqwm3IUZDgoWlaBbAJ2Jzb9DPg3zVNKxdChM5+pHQ+0HWD1p4wr+7p5a0D/aQyOo3Vfj55xyouXlmBzbpw/4GkmRNLx9kR3M1bvds5OnrsrPspKDitTpwWx3gFssfuxu/2YKQVrKoVm2rFptomrFuxqrYT6xYbVsVCkSNApacCmzq1R6HdYqO5uJHm4kao30w6m6Z9tJMjI20cHmnj1Z63SOtpGgN13KvdzaaKdbht58eXpELlPGqBbiFEFkAIkdU0rSe3/dTg8SFN094F9AF/I4R4YzIXyo3RApiVp4vVXN97Mp1l9+EQb+7rZeuBPsKRFA67hesvquW2K+ppqAnM2rXn+t7n2kK6f13X2dN/kBePvsG27t2k9Qy1/iV8eN1dVHnLcdtcuGxOXDYnbpsLt9WJw+qY1y3pqqtKuIL1AGSyGaLpGAGnvyDXLuTvfr5VmD8I/L0QIq1p2mbgt5qmrRJCDOZ7goU8n8dMmat7j8TT7D4ywK6WAfYeHSSV1nE5LKxtKGVTczlrG0pxOcw/udlK32L+vcPs339Wz5I1dOyW6U3x2xvt563eHWzt20E4NYbH6uaK6ku5rOrC08v/dSAJ2SSMkWaM01sawXz+3SuExmY/XTMwMOKkFCp4dAI1mqZZcrkOC1Cd2z5OCNE3Yf1ZTdM6gTXASwVKpzRJAyNxdrYMsLMlxOHOMLphUOxzcOXaJWxcUcbKZcWTmkZVmhu6oTOWijKaGiWcNF8jE9bDufWxVAQDw+xX4CylzFVCmauEUlcpZU5zPeDwn7HyNpqOsaN/F2/27qBjrBNVUVldupLLqi5kddmqKRcdSXOjIL8tIURQ07RdwL3Aw7nlzlPrOzRNqxFCdOfWN2AOsy4KkUYpf6GROK/t7WVnywCdQXOio5pyD7ddvoyNK8qpq/LN62KFxc4wDDrHutkzsJ9DQ0cYTo4wmhpDN06f7tRn8xJw+Ak4/NR6awg4/FgUC0OJIQbiQ7SG29nevwuDE1MQWFUrpc5iSl0llDlLKXEW0THaOd4stca7hPeteDcXV27EZ5/8N14JjFQcfTSYe4UwEqNkrnsfML0c4WQUMtR/BnhI07SvAcPA/QCapj0JfE0IsR34B03TLgSyQAq4b2JuRJo7hmHQ0hXm2W2dvN1ixvwVNQHuuaGJjSvKZEupeS6tZzg83MregQPsHTjASDKMgkJ9YDkrS1ZQZPePBwm/3U+Rw4/f7surNVBGzzCUGGEwPsRAYpCBuBlYBuODtI10kMgmzGapSy/n0qqLqPVVF+COFzbDMDDiYfTRIMZ4kAjm3ocwEicXTymuANmLbwJLWcHSWLDgIYQ4BFx6hu23TVh/oFDpkfKTyepsOxTkmW2ddPSN4XFaufXS5dywqYYSv3Ouk3feGk2NMRAfJJB7qFunUKQTTcfYP3iIPaH9HBgSJLMp7BY7F5Q0s67sFlaXrjypn8BUWVUrFe4yKtynP7gMwyCeieOwOBZ0s9TZZGSS6IOdZAc60Ac6zOVIL2RTJ3ZSFBRPCaq/AkvdJhR/Ber4qxzF7sZR7oMC1vnIQkbpjMZiKV7a1cPzb3cxEklRVeLmvps1rlhdJQcZnCXRdIxdob3s6N/N4eHWk4qCfHYvxY4AAUeAYkeAookvp7l0WOz0R0K82LmNPaH9tIbb0Q0dv93HRZUbWVd2AVpxE7ZpVnZPhqIoC65pqpGKo0eGMKKD5jKSW0aHMGIj4PCgekvNh7m3FMV7Yqk4vO9YZGuk4mQHj6EPtI8HC32kZ3zmUcXhRS2vw1a9EtVfPh4gFG8ZimV+Pa7nV2qkOdczEOXZ7Z28vq+PdEZndX0JH7u1ljUNJaiyHmPGJTJJ9gzsZ0f/bg4OHSZrZCl3lXJL3Q0s99cyloownAwzkggzkgozGB+ideQosUz8tHM5LQ4S2SQASzyVbF52HevKL2CZb2nBex/PV8eLg4zREPpY6ERwiB4PEoOQOuVnqygo7mIzSBTXYCSjZEPtGEd3wKmdEC32E8HEU4LqLQGrDX3gGNnBDoxw/4nTuotQy5Zjr78QtWw5lrI6FE/JgqkvlMFDwjAM9h8d4pltnew7OoTVonLFmko2X1RLTbms0Jxp6Wya/UOC7f272DdwkLSepsgR4LraK7moYkNeQ1WksilGkuHca3Q8uCwvq6bB2Ui5u7RAdzP/GMmoGRhGQxhjA+b62ABGbkn25Ka+isOL4i1F9ZVjWaKheEpRvSXmNm8JirsI5QxFboahY8THMKJD6JFBjEhumXuvd+0lEwsDBoq3FEtZHeqKK7GULUctW47qPvcYVvOZDB6LWM9AlG2Hgrx1oJ++oRgBj533Xl3PtRtr8Lvtc528eSORSdA+2snRcAdt4Q7ac72ffXYvXpsXv91rrttz6zYvPrsPn92Dz+7FaXGiGzqHho+wo38Xu0P7xyuRL19yERdWbqAhsHxSuQO7xU6Fu5wKd/lJ2+dvX4eZYxYrDeQCw0AuMAzQFR8iNdx3es7B7kb1laMWVWNZth7VV4bqK0fxlZs5BNvUBt9UFBXFHQB3AEt5/ZnTms1ANoViX1hFd/mQwWOR6R2Msu1gkG0iSHcoigKsWBrgjitWccmqykXfJ+P48Ntt4Q7awu20hTvojvRiYKCgsMRTyYbytVhVK2OpMcbSEXqi/USGW4lmYmc8p1W1YlFUktkULquTDRVruKhyA81FjbIS+QyMTCqXazBzCicCRS7nkDxl5FiLHdVXhq20EltpfS4wlJl1Br5yFMf0GwVMlWKxwjyrq5gp5+ddSSfpHYyy/VCQbYeCdE0IGB++aQUXahUU+xbvsOcZPUPnWHcuWHRwNNxOOGV+c3dY7NT7l3NL3Y00BJZT51/2jsNuZ/QMkXSUsVTUDCypCGPpCJFUlGQ2ycqSZi4o1RZsZzhDz6APdaFHhlCcXvPlyL0mOQqyGSCC6KP9GOF+9HC/+T7cjxEdOnlniw3VV4biK8NW3mAGBl/5+DbFafYrWgy5rvlkYf4VS+fUNxRj26Eg2w4G6QqZHfmalga496YVXLSIA0YkHeVouIPWkXbawu10jHWRyVV6ljpLaC5eQUNgOQ2B5VR7qyZVlGRVreMtoM4HemyEbH8rerCVbP8RsqH2k5uPjlPA4c4FFJ8ZTI4HF6cPxemFZCwXIPrPGCAUpw/FX4GleiVqoNJsZZQrWlJc/gVTibyYyOBxHtF1g5d39/Dq3j7aesIANNUEuPfGFVyolS+6fhmGYRCMD9CWCxSt4Q76Y0EALIqFWl8N19RcTkOgjobAcgKOwgxeNx8Z2bTZxyDYSra/lWywFSOSG1JOtaCWLce26joslY2o/gqMZBQjEcm9xsxlMvc+OoQ+eMzsyDahcvqkAOGvNINELlDMZdGSNDUyeJwnOoMRHnrqEG09ozTVFvGhG1dw0SILGIZhcHigje0d+8frLCJps3zcbXXREFjOpVWbaAjUsdxfO+3B/eYTQ89gjA2QSPWRGQxDNgN6Oldhm4FsGiObhmzG3Kbn1lMxsqF29IGO8WaOw2B5AAAgAElEQVSnircUS0UjlrXvwlLRiFq6DMU6tQYURiaJkYig2JwyQJxnZPBY4JLpLI+/dpRntnbidlr51Lsv4N3XNjEwEJnrpBWMbujsCu3jqfYtdEd6AahwlbG6dCWNgToaiuqodJcv+L4O40NWjPSaRUDhvvF1YzQERpZJTUKqKGB1YCldhm3NZiyVjWaw8BTPWJoVqwNFTiV8XpLBYwHb1zbIj58WDIQTXLVuCR+8vgmvy7ZoyoezepYdwd083f48fbEgle4KPnfJ/dTal+O3L5w5Lc5EHw2RDbaeHCjCfZCeMJe2xYYaqMRSshS1/iLUQCWBygpGIxmwWFEsNrOlz/i6DUW1Qm77mfouSFK+ZPBYgMLRFD/f0sJbB/qpKnHzlQ9vRFs2c98W57usnmVr39s83fE8ofgg1Z4qPrH6I2ysWEtlRWBBtrgxMimyvYfIdO4l07kXI3x8PFAFxVeKGqjCVnkVaqAKtagKNVBlDodxSm7KU+4jtgDvX1p4ZPBYQHTD4NU9vTzy/BFSmSx3XlnH7ZfXYbMu7OKYfKX1DG/2bufZjhcYTAxT663mU2vvZ13ZBQuuSMowDIxwnxksuvaS7TlkVi5bbFiqV2FdfSOWJWbLo6nWN0jSbJLBY4HoGYjy46cOcbgrTHNtEQ/corGkdHFUQKayaV7v3cqzHS8ykgxT51/GB5vvYnXpygVVRGekE2S7D5LpyuUuxsyh7dVAFbZV12OtXWsOjyGDhbQAyOAxz6UzWX73egdPvtmB027h47eu5Mp1SxbcIIW6oRNLx1EUBQUFRSG3VM0lTPjMXKb0NK92v8lzx15iNDVGY6Cej676ACuLV8yboGEYBmSSJzddPd5k9fi2ZAQjMki2/wjoWbA6sNZcgGX9rViXrkX1l5/7QpI0z8jgMY919I3x4OP76R+KcdnqSj50wwr8noX1rdQwDPYOHODRI78nGB+Y0jmai5v4xOoPs6K4cYZTlz8jESEbbDP7QYTaMCLD40HitJFVJ8o1UVVcAWxr3mXmLqpWmBXYkrSAyeAxTx1oH+Lbv9mLx2nli/esZ039whsltTvSy69bnkAMH6HKXcHdTXegKqo5T4VhoGOYZf8YYDDhvW7OZGEYrCxpprGorqDpNvQs+nC32as62Ire32q2dAJQFNTipaiBChRHg9l72uFFcXpO9Kwef++RQUI6b8ngMQ9tOxTke0/sp7LEzRc/uGHBDSUylorwRNvTvN6zFbfVxQea38PV1ZfN20EA9VgYPdhGNnjE7F0dOgoZc14MxenDUtmEtfkqsx9EeT2KbfF0vJSks5HBY555/u0ufvLMYRqXBvjT96/D41w431zTeoYXO1/lqfYtpPQ01y29klvrb8IzD2aSM9KJCWMr5QbgOz7OUtwcygXFglq2DJt29XiHOcVXPm/qVyRpPpHBY54wDIPfvnqUx19rZ31jKZ+5aw0O2/z8pn4qwzDYFdrHY0d+z0BiiDWlq7i76XYqPRWFS4OexUiMkewbIN1xNNex7gwBIkdxF6H6K7AuW4daXI1a0YSlbLls6SRJeZLBYx7QdYOHnz3Mizu7uXJtFR+7dSWWSQ5xPVeOjXXx65YnODJylGpPFZ/f8ElWlTTPyLnNSX8GMeKj5uB748uxk7bpibHxOR4mDs8xMUAopw7EJ4ueJGlaZPCYY+mMzvee2M92EeLWS5fx/usaF0QxSTg5yuNtT/FW7w48Njcf0t7LFUsumZF6DUPPkt73DMntj0Lm1CHAFbNS2uVDcfpRS2uxOH3msN1OH4GqSiKGz+xcJwOEJM0aGTzmUDyZ4du/3sOhYyPcc0MTN1+ybK6TlJc3erfzy8OPkdGz3LDsam5ZfuM7TpI0GdmBDhIv/xf6QDuWZRuwrbhiPFAoLt85Jx7ylvuIy+E5JGnWyeAxR8LRFN98ZBfdoSifvGMVV6xZMtdJOqe0nuFXh3/Lqz1v0VzUyL0r30eFu2xGzm1kkqR2/JbUnqdQnF6cN30Oa/3FCyIXJkmLkQwecyA4Eudff76LkUiSL7xvHesa538fjuHECN/f9zDto8fYvOw63t1w84w1vc10HyDxyo8wRoPYtGtwXHaPnPtBkuY5GTwK7Fj/GN98ZDeZrM6X791IU838n7L08PARfrDvJ6T1NJ9ccx8bK9bOyHmNRITEm78gc/gVFH8lrju+grV61YycW5Kk2SWDRwGJY8N869d7cNqt/OW9F1JTNr+/XRuGwZbOl/lt6x8od5Xx6bX3UeWpnJHzZtq2knz9JxiJCPYNd2DfdKdsJitJC4gMHgXSFYrwr4/spizg5Ev3bJj308MmMgkePvQrdgb3sKF8Lfet+gBO6/TTrEcGSbz6Y7LHdqOW1+O67ctYShdGQwFJkk4oWPDQNK0ZeAgoBQaB+4UQLWfZVwN2Av+/EOLLhUrjbElndP7z8QO4HFb+4sObCMzzwQ37o0H+c++P6Y+FuKvxNm5adu20K64NXSd9YAvJbb8GQ8dx2b3Y1mx+x5ZTkiTNX4XMeTwIfEcI8bCmaR8FvgvccOpOmqZZcp89VsC0zarHXmmjKxThT9+/bt4Hjl2hffz3gV9gVa18YcOn0Eqapn3ObKidxKs/Rg+1YVm6BufVD6D65DDkkrSQFSR4aJpWAWwCNuc2/Qz4d03TyoUQoVN2/0vgd4A391rQxLFhnnrrGNdtqGZ908w0a50NuqHzRNvTPNPxAsv9tXxqzX0UO4umdU4jESG57dekD76I4vLjvP7TWJsul81vJek8UKicRy3QLYTIAgghspqm9eS2jwcPTdPWAzcD1wN/PZULlZaeiDfl5b5pJHn6ovE0P/zDIarKPPzxBzfidBQuozeZex9NRvjWGw+xp/8gNzVcxcc3fRDbNIYSNwydsV3PM/TCw+iJKP5Lbqfk6g+iOgvTQGCuf+9zbTHf/2K+dyjs/c+bCnNN02zAfwIfzwWXKZ1ncDCCrhuUl/sIzXFP4+//7gCDIwn+6r5NjI3GKVRq8r13wzDYGdrLr1ueIJKO8pGVH+CK6osZGUoAiSldOxtqJ/Haj9GDbViqmnHffh9GSS2DYzqMzf5PYD783ufSYr7/xXzvMPX7V1XlpC/d+SpU8OgEajRNs+QCgwWozm0/bgnQCDyZCxxFgKJpml8I8ekCpXPGbD8U5PV9fdx5ZR2N1fOvL0fXWA+/anmclpE2arxL+PTa+1nur53y+U4uovLJIipJOs8VJHgIIYKapu0C7gUezi13TqzvEEIcA8YrBTRN+zrgXYitrYbHkjz01CHql/i444q6uU7OSSKpKE8cfZrXut/CbXPxIe1urqy+BFWZWqsnw9BJi1dIvfVLjFQM25rNOC66C8U+93N4SJI0ewpZbPUZ4CFN074GDAP3A2ia9iTwNSHE9gKmZdYYhsF/PXmQdEbnk3dcgNUyP5qiZvUsL3e/we+PPksym+S6pVdyW/1NuKcxUdOpRVSOK+/DUjr13IskSQtHwYKHEOIQcOkZtt92lv2/Pttpmg3Pv93NvqND3PeuZpaUzo8e5AcHD/OrlsfpiwVZWbyC9zffyZJp9BQ3klGziOrAC7KISpIWqXlTYX4+6B2M8ssXjrC2oZTrNtbMdXIIxkL85sjv2DtwkDJXKZ9Z9zHWlK6a8kPeMAwyLa+TfPPnGMkItjU34bjovbKISpIWIRk8Zkgmq/O9Jw5gt1n4+G0r5/RbeCwd57EjT/J85ytYVQt3Nd7GdbVXYVOn/uvODveQfPUhsr0CtaIR19V/LocVkaRFTAaPGfLEa+20943xx+9dQ5HXMWfp2N63k9+8/nvCiVEuq7qIOxtvIeDwT/l8RiZJ6u0nSO35A9icOK7+GLaV16BMsYJdkqTzgwweM+BId5jfvdHOlWuruFCrmJM0pLIpfnH4Md7s3U5TSR3/Y80D02p6C5Dp2EXi9YcxxgawNl+J49J7UF1TD0SSJJ0/ZPCYpkQqw/efOECp38mHb2qekzT0Rvv5wb6H6YsGuWX5DTxwyd0MDcamfD49Mkjy9Z+QaX8btbga57v/CuuSqXXalCTp/CSDxzT9fMsRQiNxvvKRTbgKOPzIcW/0bucR8Sh2i50/3vBHrCppnvIMf4aeIb33WZI7HgPDwH7J+7GvvQXFIv9MJEk6mXwqTMOulgFe3t3DrZcto7l2eoMITlYym+IX4lHe6tvBiqIGPrb6XoocU+/JnulrIfnqQ+hDXViWbcB55UfkyLeSJJ1VXsFD07T7gV1CiD0Ttq0H1gkh/nu2EjefjUZT/OgPB6mt8HLXVQ0FvXZPpI8f7HuY/liIW+tu4rb6m6beQzydJPnGT0kfegnFU4LzXX+CrW7TDKdYkqTzTb45j78DNpyyrRN4HFiUweNnW1qIJbN8+d4LsFkL0/LIMAze6N3GI4d/i9Pq4PMbPsnKkhVTPp8+GiT+zLfRh7qwrbsFx4V3odjm9wyHkiTND/kGDz8wesq2MObghYtOIpVhhwhx7YZqlpYXZsqRRCbJz8Vv2Na/E624iQcuuJeAY+rDL2c69xDf8iAoCq5bv4i1du0MplaSpPNdvsHjAPA+4JEJ294LHJzxFC0A+48OkcnqXNhcmDqB7kgvP9j3MMHYAHfUv4ub626Y1kCGqZ2/I7X9UdTSpbg2fwHVPzfNiyVJWrjyDR5fwRwq/R6gFWgCbgTOOC7V+W5nywAep5UVtbM71LphGLzW8xa/ankcl9XFn2z8NM3FjVM/XypO4sXvkWl/G2vT5Tiv+RiKde46NEqStHDlFTyEEK9qmrYG+DDm7H9bgT8VQnS+85Hnn6yus/vIAOsay7Cos1vXsaXzZR498ntWFq/gY6vvxWefehFZdriHxDPfQh8N4rj8w9jWbJYDGUqSNGX5trZyAL1CiH+csM2maZpDCJGctdTNQy2dYaKJDBtXzO585D2RPp5ofYr15Wv45JqPTrmYCiB9dAeJF7+HYrXjuv0vsFavnMGUSpK0GOX7RHoWuPCUbRcCT89scua/nS0DWC0qaxpKZu0aGT3Djw/8HKfVyb3a3VOv39B1klt/ReLZb6MWVeN+79dl4JAkaUbkW+exFnjrlG1bgfUzm5z5zTAMdraEuKCuGKd99vpXPtW+hc5ID59ee/+Ui6qMRIT48w+S7dqHbeU1OK68D8Vim+GUSpK0WOX7BAwDlUDfhG2VQHTGUzSPdYeiDIQT3Hb58lm7RsdoJ093vMClVReyvnzNlM6R7G8n+ug/YkSHcVz9MeyrrpvZREqStOjlGzx+DfxU07Q/AdqARuBfObnp7nlvZ0sIBdjYNDv1HalsmocO/AK/3cf7V9w5pXOk27bS8+L3weHBfedfYamYeussSZKks8m3MP3/xuzTsRUYA94EBPDVWUrXvLSzZYCGaj+BWZqv44m2p+iPBfnoqg/gtrkmfXz6yJsktvwH9qoG3O/9ugwckiTNmryChxAiIYT4Y8ADVAFeIcTngdRsJm4+GR5L0t43xoZZamXVMtzKC52vck3N5awqmfzQ7unWrSRe+C6WKo0lH/4aqnt2+6BIkrS4TaoZjxDCEEKEgDWapv0z0DU7yZp/drWEANi4YuZ7lScyCf774COUukq4q+n2SR+fbttG4vkHsVSuwHXL/4Vqkx3/JEmaXXk3GdI0rRyzk+ADmK2sXgX+dJbSNe+83TJAZbGLJaXuGT/3b478nqHECH+26bM4LPZJHZtuf5vElgdRKxpw3fJncmBDSZIK4h2Dh6ZpNuBO4GPAzcAR4GfAcuADQojgbCdwPoglMhzqGGbzRbUz3it7/+AhXut5i83LrqOxqG5Sx2Y6dpF47juo5ctx3/olFPvk60kkSZKm4lzFVv3AdzErxy8TQlwghPg7FlFdB8C+o4NkdWPG6zui6Rg/OfhLlngqub1+86SOzRzbQ/zZf0ctXYb7ti/LwCFJUkGdK3jswRx2/VLgYk3Timc/SfPPzpYBfG4bTTUzWwn9yOHHGEtHeeCCD2GbRAe+TNc+4s9+C7WkJhc4Zr4oTZIk6Z28Y/AQQlyH2afjGeDLQJ+maU9gtrpaFN2VM1mdPa2DrG8qQ1Vnrsjq7eAetvfv4ra6m6j11eSfnq79xJ/+/8zhRm77cxSHZ8bSJEmSlK9ztrYSQnQIIf5OCLECcxj2XkAHdmua9k+zncC5JjpHiCdndiDE0dQYPxe/YZlvKe9afn3ex2V6DpqBI1CJ6/Y/R3EWZiIqSZKkU022qe6rQohPY/b1+ALmmFfntV2HB7BbVS6om5mBEA3D4KeHfk0ym+KBC+7BolryOi7TK4g/9U1Ufzmu2/8C1Tn1WQQlSZKma0qj+wkhEpitrn6W7zGapjUDDwGlwCBwvxCi5ZR9Pg78GWbOxgJ8TwjxramkcSYYhsHOIyFW15fgsOX3kD+XN/t2sHfgAHc33UGVpzKvYzJ9LcT/8K+o3lIzcLj8M5IWSZKkqZrd2YxO9iDwHSFEM/AdzFZcp/o1sF4IsQG4AviSpmnrCpjGkxzrjzA0mpyxVlZDiWF+dfhxmorqub72qryOyfYfIf6Hb6B4inHd8RXZc1ySpHmhIMFD07QKYBMncio/AzblOh6OE0KMCiGM3Fs3ZqW8wRzZ2RJCUWD9DAyEaBgGDx/8JTo69626J685OrJDXcSe/AaKK4D7jq+guoumnQ5JkqSZUKicRy3QLYTIAuSWPbntJ9E07U5N0/YDHcA/CyH2FiiNp9nZMkBTTQC/e3K9vs/kwNBhxPAR3tt4G2Wu/OpPUtt+DaqK+46/QPUsylbSkiTNU2et89A0Ld9BE/WZSw4IIR4HHtc0bRnwmKZpTwohRL7Hl5aeaIFUXj71SuX+oRidwQifePfqaZ3nuJf2vUKJq4j3rLsRq+XcVU2pgS7GOnZSdNX7Kamvm/T1ZiLNC9VivndY3Pe/mO8dCnv/7/QUy/DORUZK7vN8apI7gRpN0yxCiKymaRagOrf9jIQQxzRN2wrcgdnDPS+DgxF03aC83EcoNJbvYafZst1M2orq6Z0H4NhoF/uDh3lv0+0MD8XzOibx0q/AYiddf82krz/de1/IFvO9w+K+/8V87zD1+1dV5aQv3Xkf9w6f1QMN7/A6/vk55cbA2gXcm9t0L7AzN0LvOE3TVk1YLwOuB+ak2GpXywDVZR4qi6ffe/u5Yy/htDi5svrSvPbXo8OkW17Hpl0tW1ZJkjQvnTXnIYTomOFrfQZ4SNO0rwHDwP0AmqY9CXxNCLEd+LSmae8C0pg5m38XQjwzw+k4p2gijTg2wq2XLZv2uQbiQ7wd3MONy67BZc1vxNvU3mfA0LGvu2Xa15ckSZoNkxmS/U7gWqAM88EOgBDi/nyOF0Icwhwj69Ttt01Y/7N80zOb9rQOohszMxDi852voCpq3k1zjWSU9MEXsDZcguqf+blDJEmSZkJeleKapv0NZr8MFfgAZie/m4GR2Uva3NnZMkDAa6d+yfSKjCLpKG/0bOXiyo0UOfLrn5E6+AKkE9jX33bunSVJkuZIvk11PwFszuUMUrnlu4G62UrYXElndPa2DbKhqQx1mnN3vNL1Bik9zY3LrslrfyOTIr33WSxL12ApWz6ta0uSJM2mfINHkRBiX249pWmaTQixFbMY67xysGOYZCo77elmU9k0L3a9xurSlVR7q/I6Jt3yOkY8LHMdkiTNe/kGj1ZN01bn1vcBn9U07T7Miu/zyq6WEA67hVXLp9cp762+HUTSUW5all98NXSd1J4/oJbVYalede4DJEmS5lC+Feb/E3NAQ4C/BH4KeIHPzUai5opuGOw8MsDa+hJs1ql3vtcNneePvcwy31JWFOXVmplM+w6McD+Omz4341PdSpIkzbRzzWGuCiF0IcSTx7fliquaZj1lc6C9d4xwJDXtIqs9AwcIxgf4xOqP5BUIDMMgtftJFH8F1rqLpnVtSZKkQjjX1+tuTdP+SdO0NQVJzRzb2RJCVRTWNpaee+ezMAyD5zpepMxZwoby/H5s2d5D6KGj2NfdgqIWcqBjSZKkqTnXk+ozmD3Jt2ma9ramaX966ki455NdLQM01wbwuqY+w25ruJ2jo8e4Ydk1eU/0lNr9JIrLj605v74gkiRJc+1cc5j/VgjxAWAJZj+PDwBdmqY9rmna+zRNO2/mMQ8Ox+geiE67yOq5Yy/hsbm5fEl+xU/ZwU6ynXuxrdmMYp3+6L2SJEmFkO/IuSNCiO8KIa4CVgHbgW9izmd+XtjZMgAwrbnK+6JB9g4c4JqaK7Bb8gsEqd1Pgs2J/YIbpnxdSZKkQptUAbumaXbgIsxhRiqZo0ELZ8POlgFqK7yUFbmmfI4tx17Gplq5dukVee2vj4XItL6FbeW1KA7PlK8rSZJUaHk11dU07SrMgQw/AISA/wY+NwuDJ86JsViKlq4R3n1F3ZTPEU6OsrVvB5dVX4zPnt/wxqk9TwMK9rU3T/m6kiRJc+FcTXW/DnwUs4/HL4E7hBCvFSBdBXWgfRjDYFr1HS92vUbW0LmxNr+hSPTEGOlDL2NdcRmqN7+ZBSVJkuaLc+U8LsXsIPiYECJRgPTMifpqPx+8volllZOfEAUgkUnwSvebrC9fQ4U7vzqT9P4tkE3JoUikactmMwwPh8hkUgSDKro+o5N7LhiL+d7h3PdvtdopLi7HksdMpvl4x7MIIW6dkavMcxVFLm65dOpzd7zeu414Jp7/UCTpJOl9z2FZtgFLcc2UrytJAMPDIZxONx5PFTabhUxmcT5ArVZ10d47vPP9G4ZBNDrK8HCIsrIlM3I92SNtmrJ6luePvUJjoJ76QH4BKC1ewUhGsG+QuQ5p+jKZFB6PXw5rI52Voih4PH4ymdSMnVMGj2naEdzNcHKEzcvzHQAxS2rvU6iVTVirmmc5ddJiIQOHdC4z/Tcig8c0GIbBc8deospdwerSlXkdk2nbijE2gGP97bOcOkmSpNkzMzUni9Sh4Ra6I718ZOUHUJVzx+HjAyCqRdVYlq8vQAolqbA+9akHSKfTZDJpOjuPUV/fCEBzs8ZXv/o3c5w6aSbJ4DENz3W8RMDu4+KqjXntn+3ahz7YifPaP0LJI9hI0kLzve89BEBvbw+f/OR9/OhHP53jFEmzRQaPKeoc6+HQcAvvabgVm5rfjzG1+0kUTzHWpstnOXWSNL988Yuf5z3veR/XXns9AFu2PMsf/vAE//Iv3+Kzn/0jVq26gD17djM2NsrmzbfwyU9+BoBQKMi//ds/Ewz2k0wmufnm2/jIRx6Yy1uRcuTX3yl6vvNlHBY7V9Vcltf+2ZEesj0Hsa/ZjDJD7awlaaF43/vu4dFHfzn+/tFHf8ndd39w/P2xYx08+OAP+a//+gkvvvg8b775OgB/+7d/zYc+9FG+970f84MfPMwrr7zE229vL3j6pdPJp9gU6IbO/sFDbChfi9uW31hYmTbzD17mOqTF6PLLr+Tb3/4mx451kMmkCQb7ueyyE2PA3XrrHVitVqxWKzfccBNvv72NtWvXsWfPLr7xjf89vl8sFqW9/SibNslJ0+aaDB5T0B8LEU3H8p5iFiBzdBuWyhWonunNjS5JC5Gqqtx99/t57LFfkUqluOuu96GeY+IzXTdQVZXvf//HWK3yUTXfyGKrKWgdOQpAY1FdXvvr4T70wU6sDfLbkrR43Xbbnbz44vO8+OIWbr/9zpM+e/rpJ8lms8RiMV544Tk2bboYn8/H6tVr+dnP/nt8v76+XoaGBguddOkMZDifgiMj7fjsXspdeY5jdbzIql4GD2nx8nq9XHTRJRiGQSBQdNJntbXL+MxnPs7o6Cg33XTzeJHW17/+D3zrW9/g/vvvwTAMvF4vX/3q1ykpmfpU0dLMkMFjCtrCR2kM1OfdYzNzdBtqRSOqV/7BS4vDkiXV/P73W07alslk2Lt3N//rf/3DaftffPFlfOELXzxte1lZGX/7t//vrKVTmjpZbDVJw4kRBhPDNBXV57W/PhpEH+jAJouspEXspZde4J577uLKK6+huTm/0Rik+a1gOQ9N05qBhzDnBhkE7hdCtJyyz18DHwKyQBr4qhDi6UKlMR+Tre/IHJVFVpJ07bXXj/fxONV//McPCpwaaSYUMufxIPAdIUQz8B3gu2fYZytwsRBiHfAJ4Beapk19XthZ0Bpux2GxU+PJb1jjdNt21PJ6VN/UJ5qSJEmabwoSPDRNqwA2AT/LbfoZsEnTtJOeqEKIp4UQsdzbPYCCmVOZN46MHKUhUIdFtZxzX31sAD3UJnMdkiSddwqV86gFuoUQWYDcsie3/WzuB1qFEF0FSF9eYukYvdF+GgN1ee2fOboDAJsMHpIknWfmZWsrTdOuBf4O2DzZY0tLT0wlW17um8FUwds97RgYXFi3Oq9zd3e9jb2ynsqmphlNRz5m+t4XksV278GgitV64nvgxPXFZjHfO5z7/lVVnbH/j0IFj06gRtM0ixAiq2maBajObT+JpmmXAw8D7xFCiMleaHAwgq4blJf7CIXGpp3wiXZ0HMCiWCjSS895bj0yRLJLYL/o7hlPx7nMxr0vFIvx3nVdH59+dD5MxZrJZPjRj77Pc889g8NhR1VVNm26mM9+9gvv2FP87//+66xcuYr3ve+eKV13Ju790Ud/xTe+8Y/88IcPn9Qq7JFHfsrmzbdQXFwCwNtvbyeTyfyf9u48PooqW+D4r9cEQsIuEiCBJOSyI/sWcRBEZRFRHgNRILKoPMFRRJwBBlAwLCoqDGjYFBR1fDPOiDKMozIu4AwSARWEErKQlSVAEpJAOr28PzppQvYGOgnp8/18/NhdVV11brrISd1bdS59+1attl150tPT+P77/zJmzAOuZXPnPsnTT8+jVavWbu2rKu232+2l/n3o9bqr/uiuqmpJ05qmnQEOARMLF00EDmqadrb4dkqpPsCfgXGaph2ojtjcEZeVSJB/K8wGc6XbWrUpwT4AAB1XSURBVBMLu6xC+no6LCFqlejo50lIiGPLlnfYuvUDNm7cRlBQMBbLjZsC1VN27txBr1592Llzx1XLP/zwfS5cOO96f/DgD3z//X+v+3jp6Wns2PG3q5a9/PIatxNHTajObqvHga1KqUXABZxjGiil/gEs0jQtFlgP1ANilFJFn5ukadrP1RhnmQpsBSRlJ/ObNhFV2t4avx99k9boG93q4ciEqD2Sk5P45pt/89FH/6B+fT8AjEaj6y9rm83GG2+sZd8+Z9Xcfv0GMnPmbAyGq29AKXkVUvz9iy8uwWQykZKSTGpqCnfcMYRBgwazZUsMp0+fZvz4SMaPd/6dOm7caO65ZyT79+/j3LkMJk58uNwrm/j4E1y4cJ6lS1cwY8ZknnjiKcxmM1u3biYj4ywLFz6H2ezDggVL+Pjjj7Db7cTGfs/QocOZNCmK//xnD9u2bSE/34LJZGL27Dl06dKVAwdiWbNmNZ06debIkZ8BHc8/H03btu1YvXoV6empREVF0rp1a5YtW8W4caNZtepVQkLCSElJ5qWXosnMvIDBYODRR59wPX0fEdGbRx/9X7755iuysrKYPfspBg8u+3ZoT6i25KFp2jGgXxnLRxR73ae64nFXYnYyVoetSg8H2vMysZ06jrnX/dUQmRBX7Pkpja8Ppnlk3xHdWjKoa8W3qP/6q0br1kEEBASUuX7Hjr9x/PivbNmyHXB20ezY8TfGjh3nViwJCfG8/vob2O12xo0bTU5ODm+8sYnTp88QGfkgo0aNoX79+gBcvnyZmJi3SE9PY/Lk33LvvaNd64r79NOPuffeUbRsGUhYWDjffvsVQ4cOZ8qUaXzyyd9ZtmwlISHO8csxYx7g0qVLzJr1FACpqSm8/fZmVq9ei59fA+Lj45g790k++mhnYbxxzJ+/iHnzFrB162a2bt3M4sXLmDNnHuvWvc7mze+Uigfg+ecXMmbMWEaNup+EhHhmzZrBu+/+hcaNnQVW/fz82LRpGz/9dIjFi/9QrcnDu0eX3BCXlQhAu4bBlW7rvMvKIYUQhSghNnYfI0aMwmQyYTKZGDFiNLGx+9zez+23/waz2Yyvry9BQcEMGDCocDD4Fvz9Azh79oxr22HDhgPOkikl1xWxWq18/vln3HvvKABGjBhdquuqIvv2/YfU1BSeeOJRoqIieeGFP2Kz2VxFHIOCgl1jKJ07dyU1tfKbSPPycjlx4ldGjHAWkWzXLoSwMFV49eI0dOjdrn2ePXuW/Pz8Ksd8vWrl3Va1UVxmAi39WtDA5FfpttaEWOc85Y1bVUNkQlwR0S2Q/p1qrqs0PFyRkpJEdnZ2uVcfVWEwGLDbHa73FsvVvxR9fK6MO+r1esxmn6ve22xW13uz2VzuuiJ79nxNbm4Ov/vdTMA5sHz+/DlOnz5FixaV/zwdDgf9+g3gj398odS6xMSEMuKzVbrPqihqW1G3343ab1XIlUcV2B124rNOVun5DvulbGzpx+SqQ3ilNm2CGDRoMC+9FE1eXi7g/IX2ySd/Jy8vj969+7Fr16dYrVasViu7dn1Knz6lerNp1aoNx44dASAjI4MDB37waNw7d+7g6afn8Ze/fMJf/vIJH320kxEjRrNr16eAs3soJyfHtb2fnx+5uVfe9+3bn337/kN8fJxr2dGjRyo9rp9fg6v2U1z9+n6EhYW7YkhMTCAu7lc6d+56TW280eTKowpSc05x2XaZ0CqMd1gTD4DDgbFdrR2+EcKjFi58ni1bNjB16iRMJiMOh4P+/QdhNpu5776xpKQk88gjkQD07TuA0aPHltrHfffdz8KFz/Hww/9DmzZBdOrU2WPxZmSc5eDBH1i0aNlVy4cPv5fo6OeZMmUa48ZNIDr6BXx9fVm8eBmDBw9h/vxniYqKdA2YL1q0lBUrlpKfn4/VWkDXrt3p2LHiuENDwwgKCmbSpPEEB7dl2bJVV61fvHgZL70UzYcfvofBYGDhwhdc4x01TedwOCrf6ubQFkjwxHMeXyXv5f+Of8zSgX+giW/FX1zezpew52TgN35FlUu232je+KxDEW9s+6lTJ7n1VudYXG14zqOmeHPboWrtL36uFCn2nEc7ILGqx5Nuqyo4kZVAY59GlSYO++WL2NKOYmrXp8YShxBCVAdJHpVwOBzEZyZUqQS7s8vKjjFEuqyEEHWbJI9KZFw6T5blIqENqzDekRCLzr85+qZB1RCZEELUHEkelYjLck7+VNnDgY78XGwpv2AKkS4rIUTdJ8mjEnGZCdQ31uNWv1sq3M568iA4bDJ3hxDCK0jyqMSJLOfkT3pdxT+qgvj96Bo0Rd+8anObCyHEzUySRwUuWnI4k5dReZeVJQ9byhGM7XpLl5UQwivIQ4IViMt0jndU9nCg9eQhsFsxyV1WQjBu3GjMZjNmsw8WSz7du/fgmWd+X+FcHu5KT09j+vRJ7Nz5JQBRUZFs2vQ2RmPl0yWIG0OSRwVOZCVg0hsJ8q+4RpU1fj86v8bobwmppsiEqN2KKtDabDaeeGIGX3+9m6FDh3vseG+//Z7XPyRY3SR5VCAuM5G2AUEY9eX/mByWS1hTfsbUcQi6SsZFhPA2FosFiyUff/8AYmO/Z+PGN7BY8rHZbEyePJVhw5xVYbds2cAXX3yG2eyDTgdr1sTg7+/PkSOHefPNteTmOutkTZ/+OAMHlp5TJyKiN7t378Fs9q1wDo+kpERef301WVmZFBQUMH78REaOvK/6fiB1iCSPcly25pOSk8bwoN9UuJ016UewWeXBQFEr5B/bQ/7Rrz2yb5MajCl8UJW2LZo4KTU1hb59+9G3b3+ys7NZv34TBoOB8+fPMW3aJPr2HQA4+PDD9/j443/i4+NLXl4uZrMPFy9e5OWXo3nppTU0a9aMjIwMZsyYzLZtf670+GXN4WE2m1myZCGLFy8jOLgteXm5TJs2iS5duhEc3Pb6fjheSJJHORKzk7A77JWPdyTEoqvfCEOLsGqKTIjar6jbKj8/n4UL5/Hhh+/Rv/8gli9/gZSUJAwGI9nZWSQlnaRjx060atWGpUsX07dvfwYOvJ369f04fPhH0tPTmDv3Sdd+dTodqanJNGzYqMLjlzWHh91u5+TJBBYvnu/arqCggMTEBEke10CSRzlOZCagQ1fh5E+OgnysST9hUrdLl5WoFXw6RGAIG1jTYbj4+PgwcODtfPfdt+zd+y2DBg0mOvoldDodEyY8gMWSj8FgICbmLX7++UcOHIhl2rSHeeWVtTgcEBrannXrNpbab3p6xbMllj2Hh46GDRvx9tvv3ehmeiX5jVeOuMwEWjdoST2jb7nbWJN/AptF5u4Qohx2u51Dh36gTZsgLl68SMuWLdHpdOzf/19SU5MB54x5mZmZ9OjRi2nTHiMkJJT4+Di6dOlGSkoSBw7EuvZ39OgRrrUSeFBQML6+vvzznztdy06eTCx3Pg1RMbnyKIPNbiMhO4lBgX0r3M4avx+drz+GW1U1RSbEzaFozMNqLaBdu1Ciomagab/wyisr2bx5Ax07diI0tD0AOTk5LFgwD4slH7vdTnh4B+64Ywg+Pj6sWLGadete5/XXX8FqLSAwsBUrV756TTEZjUZWrnyVNWte4f3338Fms9OkSRNeeGHFjWy615D5PMqQkJXEyz/8iWldHqbnLd3K3MZhtZCzbTam9gPwvT3qmoP2BG+c06KIN7Zd5vNw8ua2g8znUSsUFUOsqJKuNeVnsObLjIFCCK8kyaMMcZmJNK/XlIY+/uVuY43fj86nAYZA6bISQngfSR4l2B124rISKrzqsF/KxpoQizG0L7oKHiAUQoi6SpJHCWfyzpJbkFfh8x0FR78CmxVT52HVF5gQQtQikjxKOJFZNPlT2zLXO+xWCn7ZjaF1FwyNA6sxMiGEqD0keZRwIjMRf1MDmtdrVuZ6a3wsjrxMzF3kqkMI4b0keZQQn5VAaKN25c7LYTnyBbqAFhjalH0LrxDebvfuL3jkkUiioiKJjHyQJUsWAM4iiWvXvsr48WOIjHyQqKhIdu/+wvU559Plk0rtLz09jYiI3rz88vKrlo0cObTSWC5evMj27VtvQKtESTLaW8yFy5mcu3yB37QpXbUTwHYmHvvpE/gMfEjKkQhRhoyMDFavXsHmze/SosWtOBwOjh/XAHjllRVcunSJd975EB8fH+LjTzBnzmwCAgLo3bviB3Lr1avPt99+xcSJk2jVqnWV48nJuch7723joYemXFe7RGnVljyUUuHAVqApcA6YrGna8RLbDAeiga7AWk3T5lZXfHBl8qewcu60shz+HEy+mMLLTi5CeLvz5zMwGIyuwoU6nY7w8A6cOpXO7t2f89e/foqPjw8AISFhTJkyjbfe2lhp8jCbTUyYMIkNG9bz/PPRpdYfOXKYmJg/kZPjLDVSVLp99eqV5OTkEBUVia+vL2++ueUGt9h7VeeVx5vAOk3T3lVKPQzEAHeW2CYemA6MA8ovKuUhcVmJ+BjMtGrQstQ6e14m1vjvMXW6E525XnWHJkSV/Cctlr0p33tk3wNa9qFfy14VbhMWFk6nTp158MGR9OjRi27dbuPuu0cQF3eCVq3aEBDQ8KrtO3fuQkzMuiod/4EH/ofIyAc5flyjQYMrz2AVlW5/9dW1NGrU9KrS7XPmPMf06ZOkGKIHVEvfi1LqFqAn8H7hoveBnkqp5sW30zTthKZphwBrdcRV0onMBNoFBGPQG0qtK/jl32C3Y5bbc4Uol16vZ/nyV1i7NoYePXrz3Xd7mDJlItnZWeV+przxxZJ8fHyIippeKtkUlW5/+unZREVFMnfuk67S7cJzquvKow2QqmmaDUDTNJtSKq1w+dkbeaDCGi2As85RVeVYcknPPU1Euz6lPuewFpCkfU39sJ60CLs55u1wp+11jbe1/cwZPUaj8+/AAYG9GRBY81Wew8PDCQ8P57e/ncCECQ9y8WI2qanJ5OZepGHDK1cfR48eoVu3bhiNegwGPTodrrYUMRj0gA6jUc99943hgw/e5fDhQ65ler2OsLD2vPnm5lJxpKWlubbzBpW1U6/X37B/H3VuwPxaCyMezjiKAwctTYGlPlfw615suZk4wofcFEX3vLE4YBFvbLvdbncVxKvp4oBnz57h9OlTdOnivBvxzJnTZGZe4LbbejJkyDBWroxmwYIlrgHz99/fztKly7Fa7dhsdhwOSsVvs9kBR+FyHdOnP8769Wtcyzp27EpychI//LCf7t2d3WpHjx6hQ4dO+PrW4/LlS1y+bMForHO/7q5Sle/ebreX+vdRrDCie8dz+xPXJhlopZQyFF51GIDAwuW1wonMBAw6A20D2ly13OFwYDn8OfpGgRhada6h6IS4OdhsNjZvjuHUqXR8fHxxOOxMnz6T8PAOPPPMc8TErOPhh8ej00FGxlliYt6iffsr9eHi4o4zduwI1/vevfsydeqjVx1jyJBhbN++jbw857zmAQEBrFixmvXr15CdnX1V6faAgIYMH34vU6ZMwN8/QAbMb6BqK8mulPoK2FRswHyapmlDytl2CdDAzbut2nIdJdlf+WE9Doedub1nXbXcduo4eTtexCdiMuZOJcf3aydv/Ou7iDe2/WYsyW61Wlm16kXOnDnNypWvuu7Auh43S9s9pbpLslfnddzjwFal1CLgAjAZQCn1D2CRpmmxSqkI4AMgANAppSbgTDKfeTKwAlsBSdnJ3NFmUKl1lsOfg7kepval1wkhro3RaGT+/MU1HYa4DtWWPDRNOwb0K2P5iGKv9wBVfwLoBknMTsbqsJV6vsOecx5rQiymrsPRma7/LyMhhKgrvOMWhEqcv3wBk95ISIliiAW/7AYcmDtXXgZBCCG8Sd2+/aCKerXoTvvGITQw+bmWOawWCo5+hTG4B3r/5hV8WgghvI9ceQBGvZEmvo2vWmY98V8c+TmYutxVQ1EJIUTtJcmjDK7bc5u0wdCyQ02HI4QQtY4kjzLY0jXs55MxdRlW5dIJQgjhTWTMowwFhz9H59MAU9iAmg5FiJvKjBlTKCgowGotIDk5iXbtQgEID1du35o7Z84snn12Pi1bVn3GzpSUZB56aJzruABNmjRh9eo/uXXsDRvWY7PZmDlztlufK+mFF/5It27duf/+cRWui4lZR3i4YsiQm6d2niSPEuwXz2I9eQBz95HojOaaDkeIm8rGjc6Jl9LT0yqtZmuz2TAYShchLeLuL/wiDRs2uumq6D722BM1HYLbJHmUYDmyG9Bh6lTmw+9CiGu0f/8+1q9/nZCQME6cOM7jj88iKyuTv/71z1itVnQ6HbNmPU3Pns7CjmPHjuC119YTHNyWmTOn0bVrN37++ScyMs5y11338Oij/+v28d94Yy3t24dz9OgRTCYzCxYsYcuWDSQkxHHrrYFER6/Cx8c5G8SpU2nMnv0Y585lEBISxvz5i6hf3w+LxUJMzDp++ukgFksB7duHM3fuH/D19eX06VO8+OISzp8/R2BgK+z2K098V7Su+FXIhg3rSU9PIzs7m/T0VFq3DmLp0uX4+Phy8eJFoqOfJykpkWbNbqFp06Y0b34LM2fO5t///pING97AYDBis1mZO/cPdO/e4wZ8c2WT5FGMoyCfgmNfY2zXG32DpjUdjhBuy9y7hwtff+2RfTeMGEzAwOurtBAXd4Jnn51Pp05dAMjKyuSee0YCkJAQzzPPzOajj3aW+dkzZ86wbt1GcnNzGT9+DKNGjSEwsFWp7bKyMomKinS979q1O8888xwA8fEnWLBgCaGhYaxa9SJz5z7Jhg1v06xZc+bMmcWXX37OiBGjAfjxx0O89dZ7NGrUiGXLFrN16xZmzpzNO++8RaNGjdm4cRsAa9e+yvbtW5k27TFefXUVvXr1YcqUaSQnJ/HII5FERAwGqHBdSceO/cLGjdvw8/Pjd7+byRdf/IuRI+9j8+YYmjRpwvLlL5OVlcnUqQ8zbNjdAGzY8Abz5y+mY8fOWK1WLJZ8t78fd0jyKKbg+HdgyZPbc4XwkODgtq7EAZCcnMySJQvIyDiLwWAkI+MsmZmZNGrUqNRn77zzLvR6Pf7+/gQFBZOamlJm8qio26pt2xBCQ53TKoSHd+DChfM0a9bc9T4l5Uqt1oiIwTRu7LyFf9SoMaxf/zoAe/d+w+XLl/nyy38BUFBgQamOABw48APz5jnnbG/TJsh1FVXZupL69x9EgwbOSredOnUhNTUFgIMHY5k3b6GrncWTT69efXjttZe544476d9/ICEhoaV3fANJ8ijkcDgoOPI5+mZtMbS4OebsEKKkRoMiaNBvYE2HUa569epf9X7x4j8wZ85zDBp0OzabjaFDB5X7F7PZfGUMUq/XY7PZ3D5+8X0YDIZr2qfD4WDevAXcdltPt49fVdcS19y5z3HsmMaBA/tZsOBZHnpoCqNGjfFYjHKrbiFb6i/YL6Rh7nKX3J4rRDXJzc1x3U31ySd/w2qtkUlEy7R377dkZmYCsGvXp/Ts2QeAiIg7+OCDd8nPdya53NwcTp5MBKBXr97s3PkJAKmpKRw4EOvaX0XrqqpHj17s2vUpANnZWezd+61r3cmTiYSFtWf8+Ejuuusejh076vb+3SFXHoUsh/+Frl4AxtC+NR2KEF7jySef4bnnnsbf358BAyJcXTXXo+SYh8FgYPPmd9zeT7dut7Fo0e/JyDhLSEgoTz3lnCFi8uSpbNr0JjNmTEan06HT6Zk69VGCg9vy1FPPsmzZYj77bCeBga2uujqpaF1VTZ36GNHRS4iMfJBmzZrToUNH189s7drXSE1NwWAw4u/v7/GqxdU2n0c1aMs1zudhzzpN7p9/j7nnffj0HuvRIKuDN85pUcQb234zzufhCd7QdqvVit1ux2w2k5OTw+OPT2XOnHn07Nm7Ts/nUWvZziWByVduzxVC1GqZmZnMm/c77HYHFks+d989osKBd0+S5AGYQvpgbN0FnbleTYcihBDlatasGVu2bK/pMAAZMHeRxCGEEFUnyUOIOqAOjV0KD7nR54gkDyFuckajmdzcbEkgolwOh4Pc3GyMN7Ben4x5CHGTa9y4ORcunCUnJxO9Xn9VzSRv4s1th8rbbzSaadz4xs2KKslDiJucwWCkWbOWgHfeqlzEm9sO1d9+6bYSQgjhNkkeQggh3FaXuq0M4Hxaskjx195G2u69vLn93tx2uLb2F/tM+TNzlaEulSeJAL6tdCshhBBluR3YU9WN61Ly8AH6AOmA+7WahRDCOxmAlsB+oMozSNWl5CGEEKKayIC5EEIIt0nyEEII4TZJHkIIIdwmyUMIIYTbJHkIIYRwmyQPIYQQbpPkIYQQwm11qTwJAEqpcGAr0BQ4B0zWNO14zUZVPZRSicDlwv8AntM07bMaC8jDlFIvAw8CbYGumqYdLlxe58+BCtqeSB0/B5RSTYF3gFDAAhwHHtM07axSqj8QA9QDEoGHNU07U1OxekIl7XcAPwNFtdknaZr2syfiqItXHm8C6zRNCwfW4TyRvMk4TdNuK/yvTv3SKMPfgcHAyRLLveEcKK/tUPfPAQewStM0pWlaVyAOWKGU0gPvAk8UfvffACtqME5PKbP9xdYPLPb9eyRxQB1LHkqpW4CewPuFi94HeiqlbtwMKKLW0DRtj6ZpycWXecs5UFbbvYWmaec1Tfuq2KL/AsFAL+CypmlF9ZneBMZXc3geV0H7q1WdSh5AGyBV0zQbQOH/0wqXe4vtSqmflFLrlVKNajqYGiDngBedA4VXGzOBHUAQxa7ENE3LAPRKqSY1FJ7HlWh/ka+UUoeUUsuVUj6eOnZdSx7e7nZN07rjLBCpA/5Uw/GI6udt58BaIIe6387ylGx/kKZpvXF2aXYC/uipA9e15JEMtFJKGQAK/x9YuLzOK+rG0DQtH1gPDKrZiGqEnAN4xzlQeNNAe+C3mqbZgSSKdd8opZoBdk3TztdQiB5VRvuLf//ZwCY8+P3XqeRReFfFIWBi4aKJwEFN087WXFTVQynlp5RqWPhaB0zA+bPwKnIOeMc5oJSKxjnGcX9hogT4AainlIoofP848H81EZ+nldV+pVRjpVS9wtdGYBwe/P7rXEl2pVQHnLdpNgYu4LxNU6vZqDxPKRUC/BVnbX4D8AvwpKZp6TUamAcppdYADwC3AhnAOU3TOnvDOVBW24HReME5oJTqDBwGfgUuFS5O0DRtrFJqIM6763y5cqvu6RoJ1EPKaz+wCmfbHYAJ+A54StO0HE/EUeeShxBCCM+rU91WQgghqockDyGEEG6T5CGEEMJtkjyEEEK4TZKHEEIIt0nyEKKWUUo5lFJhNR2HEBWpcyXZhbjRCsuctwBsxRa/rWnarBoJSIhaQJKHEFUzWtO0L2o6CCFqC0keQlwjpVQUMAM4CEwC0nHOJfFl4fpAnGXBI4DzwEpN0zYWrjMAzwHTgFtwPi18f7Ey68OUUruA5sB2YJamafJEr6g1ZMxDiOvTD+dkPM2AxcBHxUqAfwCk4CzMOA6IVkrdWbhuDs66WyOAAGAqkFdsv6NwVsbthnNOirs92wwh3CNXHkJUzd+VUtZi758FCoAzwGuFVwV/Vko9A4xUSn2Fs6LpSE3TLgOHlFKbgMnAbmA6MK9Yza0fSxxvhaZpmUCmUurfwG3APz3UNiHcJslDiKq5v+SYR2G3VWqJ7qSTOK80AoHzmqZdLLGud+HrNjivWMpzqtjrPKDBNcYthEdIt5UQ16dVYfnzIkE4Zy5MA5oopfxLrEstfJ0MhFZPiELceHLlIcT1uQV4Uim1Hrgf6Aj8Q9O0c0qp74DlSqm5QDjOwfGHCj+3CViqlPoFOAF0xXkVc67aWyDENZDkIUTVfKKUKv6cx+fAx8A+nLO5ZQCngXHFEsBEnHdbpeGcV2Rxsa6v1YAP8C+cg+3HgLGeboQQN4rM5yHENSoc85iuaVpEZdsKUdfImIcQQgi3SfIQQgjhNum2EkII4Ta58hBCCOE2SR5CCCHcJslDCCGE2yR5CCGEcJskDyGEEG6T5CGEEMJt/w83N4Ie79iSagAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot('Val Acc',save=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Type\n", + "Baseline 0.489491\n", + "Column Attention 0.576416\n", + "SQLNet 0.514666\n", + "Train Embeddings 0.549697\n", + "Name: Val Acc, dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby('Type')['Val Acc'].max()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Epoch 25\n", + "Loss 3.15244\n", + "Train Acc 0.81668\n", + "Type Column Attention\n", + "Val Acc 0.576416\n", + "dtype: object" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['Type'] == 'Column Attention'].max()" + ] + } + ], + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/results.csv b/results.csv new file mode 100644 index 0000000..c17ae5c --- /dev/null +++ b/results.csv @@ -0,0 +1,101 @@ +,Epoch,Loss,Train Acc,Type,Val Acc +0,1.0,3.152441825012953,0.2657261999822553,ca,0.25139532122075764 +1,2.0,1.9233437205617467,0.37819181971431104,ca,0.3614772592328702 +2,3.0,1.6020875352984385,0.4436163605713779,ca,0.4102838142738392 +3,4.0,1.4056703347151205,0.4858131487889274,ca,0.4412777579859874 +4,5.0,1.2647626501402705,0.5165468902493124,ca,0.4626528915805724 +5,6.0,1.1560891387837242,0.5489131399166002,ca,0.4740529628310177 +6,7.0,1.0657616407506776,0.5790790524354538,ca,0.4890155563472272 +7,8.0,0.9860491295057988,0.5962913672256233,ca,0.4995843724023275 +8,9.0,0.9158722292127822,0.6222163073374146,ca,0.5135969599809999 +9,10.0,0.8583681810030168,0.6583089344335019,ca,0.5175157344733404 +10,11.0,0.8112080607986654,0.6743323573773401,ca,0.527372046075288 +11,12.0,0.7555627780379044,0.6922189690355781,ca,0.5369908561928513 +12,13.0,0.7158581418646713,0.7074971164936563,ca,0.5405533784586154 +13,14.0,0.6846994967355289,0.7168840386833466,ca,0.5477971737323358 +14,15.0,0.6473466469585584,0.7362789459675273,ca,0.5517159482246764 +15,16.0,0.6186081368512181,0.7522846242569426,ca,0.5513596959981 +16,17.0,0.5952552809096326,0.7548043651849881,ca,0.5581284883030518 +17,18.0,0.5706163181967537,0.7741637831603231,ca,0.5627597672485453 +18,19.0,0.5516676480868897,0.7829118977907905,ca,0.5603847524047025 +19,20.0,0.5292934146655948,0.7798953065389052,ca,0.5701223132644581 +20,21.0,0.5183792234048817,0.7858042764617159,ca,0.5601472509203183 +21,22.0,0.4954190115974764,0.7990595333155887,ca,0.5679847999049994 +22,23.0,0.4827050468596112,0.8085351787773933,ca,0.5702410640066501 +23,24.0,0.4701324140689206,0.8144618933546269,ca,0.5735660847880301 +24,25.0,0.4599563327326177,0.8166799751574838,ca,0.5764161026006412 +25,1.0,3.573900915438128,0.04682814302191465,baseline,0.04607528797054981 +26,2.0,2.6060291402268647,0.12774376719013394,baseline,0.12492578078612993 +27,3.0,2.1129694725011574,0.2432614674829208,baseline,0.2284764279776749 +28,4.0,1.7113606998442588,0.3385502617336527,baseline,0.3018643866524166 +29,5.0,1.4488942152393414,0.3860881909324816,baseline,0.3364208526303289 +30,6.0,1.2837511772039505,0.4218969035578032,baseline,0.3633772711079444 +31,7.0,1.1734200586666392,0.4606334841628959,baseline,0.3842774017337609 +32,8.0,1.0780796291982362,0.4928755212492237,baseline,0.4047025293908087 +33,9.0,1.0008816508178162,0.516351699050661,baseline,0.4264339152119701 +34,10.0,0.9360244527946991,0.5353384792831161,baseline,0.4292839330245814 +35,11.0,0.8800347688648443,0.5545027060597995,baseline,0.4341527134544591 +36,12.0,0.8287701132536336,0.5724602963357288,baseline,0.4416340102125638 +37,13.0,0.7849042063205309,0.5881643154999556,baseline,0.4441277757985988 +38,14.0,0.7473488626817709,0.604897524620708,baseline,0.453746585916162 +39,15.0,0.7141888514268199,0.6230857954041346,baseline,0.458852867830424 +40,16.0,0.6778465865551235,0.6279478307159968,baseline,0.459802873767961 +41,17.0,0.6503648032038735,0.6453908260136634,baseline,0.4672841705260658 +42,18.0,0.6255410082993242,0.6489042675893887,baseline,0.4646716541978387 +43,19.0,0.5952404732839967,0.6587348061396504,baseline,0.4695404346277165 +44,20.0,0.5764907036611577,0.6757519297311685,baseline,0.4738154613466334 +45,21.0,0.5557291547467954,0.6834353650962648,baseline,0.4782092388077426 +46,22.0,0.54108503703142,0.6874101676869843,baseline,0.4821280133000832 +47,23.0,0.5189275389205869,0.6975955993257031,baseline,0.4782092388077426 +48,24.0,0.5055449966000491,0.7101943039659303,baseline,0.4848592803705023 +49,25.0,0.4879523117152412,0.7207701180019519,baseline,0.4894905593159957 +50,1.0,3.8088366864916594,0.09718747227397746,,0.08336302101888136 +51,2.0,2.675252985897171,0.24251619199716085,,0.2270514190713692 +52,3.0,2.154994575925077,0.32653713068937984,,0.30138938368364804 +53,4.0,1.8514290377977587,0.39283115961316656,,0.3512646954043463 +54,5.0,1.6451062848009304,0.42269541300683167,,0.37667735423346393 +55,6.0,1.4877504237213657,0.4569425960429421,,0.396389977437359 +56,7.0,1.3594844812742302,0.5014284446810399,,0.4231088944305902 +57,8.0,1.2608773096273451,0.5346109484517789,,0.4424652654079088 +58,9.0,1.1767423611812187,0.5461094845177891,,0.44222776392352453 +59,10.0,1.10109581349112,0.5833910034602076,,0.45885286783042395 +60,11.0,1.031487466604451,0.5983674917930973,,0.4666904168151051 +61,12.0,0.9753751500477206,0.6221275840653003,,0.4744092150575941 +62,13.0,0.9239239417505015,0.6357554786620531,,0.47144044650279066 +63,14.0,0.8700500574650077,0.663561352142667,,0.48319676997981237 +64,15.0,0.8395638044444621,0.6701268742791234,,0.4795154969718561 +65,16.0,0.8031920616126041,0.6880844645550528,,0.4899655622847643 +66,17.0,0.7618953338015018,0.7015881465708456,,0.4934093338083363 +67,18.0,0.7353718515910904,0.7078165202732677,,0.488896805605035 +68,19.0,0.7080798257847304,0.7250820690267057,,0.5016031350195939 +69,20.0,0.6814877947742668,0.732392866648922,,0.5035031468946681 +70,21.0,0.66245001171086,0.7379469434832756,,0.5045719035743973 +71,22.0,0.6388247888932876,0.7500665424540857,,0.5106281914261964 +72,23.0,0.6198319518347195,0.7557625765238222,,0.5021968887305546 +73,24.0,0.5965490427047673,0.7684854937450093,,0.5146657166607291 +74,25.0,0.593067036308801,0.7709874900186319,,0.5126469540434627 +75,1.0,0.8464526326492827,0.7281518942418597,train_emb,0.533428333927087 +76,2.0,0.7405659701151303,0.7536864519563482,train_emb,0.5347345920912006 +77,3.0,0.6366430191527919,0.7855203619909502,train_emb,0.5296283101769386 +78,4.0,0.5482917674388874,0.813219767545027,train_emb,0.5399596247476547 +79,5.0,0.4863096246712168,0.8306450181882707,train_emb,0.5380596128725804 +80,6.0,0.43587352056785056,0.8443261467482921,train_emb,0.5323595772473578 +81,7.0,0.4006621176174165,0.8604737822730902,train_emb,0.5409096306851918 +82,8.0,0.368943785412184,0.8692218969035578,train_emb,0.5363971024818905 +83,9.0,0.33995129278162844,0.8767101410700027,train_emb,0.5387721173257333 +84,10.0,0.32167263366232407,0.8867536154733386,train_emb,0.546253414083838 +85,11.0,0.3050888048339658,0.8880489752462071,train_emb,0.5315283220520128 +86,12.0,0.28891750369559754,0.90055895661432,train_emb,0.5466096663104144 +87,13.0,0.2741173390873195,0.9017655931150741,train_emb,0.5361596009975063 +88,14.0,0.26199377139377655,0.9105314523999645,train_emb,0.539365871036694 +89,15.0,0.2486100437292961,0.9115251530476444,train_emb,0.5415033843961524 +90,16.0,0.24523729920207465,0.9130157040191642,train_emb,0.5418596366227288 +91,17.0,0.233209152249602,0.9175583355514151,train_emb,0.5420971381071131 +92,18.0,0.2245500935262568,0.9176648034779523,train_emb,0.5425721410758817 +93,19.0,0.21688872236461332,0.9230236891136545,train_emb,0.5485096781854887 +94,20.0,0.2056622814696119,0.9304764439712536,train_emb,0.5461346633416458 +95,21.0,0.2072420766953091,0.9259515570934256,train_emb,0.5496971856074101 +96,22.0,0.1977520210247858,0.9337592050394818,train_emb,0.5449471559197245 +97,23.0,0.19190842592772273,0.931541123236625,train_emb,0.544472152950956 +98,24.0,0.18917305693314604,0.9386744743146127,train_emb,0.5435221470134188 +99,25.0,0.18108282707596554,0.9367580516369444,train_emb,0.5404346277164233 diff --git a/sqlnet/utils.py b/sqlnet/utils.py index 2311671..692a1b8 100644 --- a/sqlnet/utils.py +++ b/sqlnet/utils.py @@ -62,14 +62,14 @@ def load_dataset(dataset_id, use_small=False): test_sql_data, test_table_data, TRAIN_DB, DEV_DB, TEST_DB def best_model_name(args, for_load=False): - new_data = 'new' if args.dataset > 0 else 'old' - mode = 'seq2sql' if args.baseline else 'sqlnet' + new_data = 'new' if args['dataset'] > 0 else 'old' + mode = 'seq2sql' if args['baseline'] else 'sqlnet' if for_load: use_emb = use_rl = '' else: - use_emb = '_train_emb' if args.train_emb else '' - use_rl = 'rl_' if args.rl else '' - use_ca = '_ca' if args.ca else '' + use_emb = '_train_emb' if args['train_emb'] else '' + use_rl = 'rl_' if args['rl'] else '' + use_ca = '_ca' if args['ca'] else '' agg_model_name = 'saved_model/%s_%s%s%s.agg_model'%(new_data, mode, use_emb, use_ca) @@ -78,7 +78,7 @@ def best_model_name(args, for_load=False): cond_model_name = 'saved_model/%s_%s%s%s.cond_%smodel'%(new_data, mode, use_emb, use_ca, use_rl) - if not for_load and args.train_emb: + if not for_load and args['train_emb']: agg_embed_name = 'saved_model/%s_%s%s%s.agg_embed'%(new_data, mode, use_emb, use_ca) sel_embed_name = 'saved_model/%s_%s%s%s.sel_embed'%(new_data, @@ -106,7 +106,7 @@ def to_batch_seq(sql_data, table_data, idxes, st, ed, ret_vis_data=False): col_seq.append(table_data[sql['table_id']]['header_tok']) col_num.append(len(table_data[sql['table_id']]['header'])) ans_seq.append((sql['sql']['agg'], - sql['sql']['sel'], + sql['sql']['sel'], len(sql['sql']['conds']), tuple(x[0] for x in sql['sql']['conds']), tuple(x[1] for x in sql['sql']['conds']))) @@ -142,7 +142,7 @@ def epoch_train(model, optimizer, batch_size, sql_data, table_data, pred_entry): score = model.forward(q_seq, col_seq, col_num, pred_entry, gt_where=gt_where_seq, gt_cond=gt_cond_seq, gt_sel=gt_sel_seq) loss = model.loss(score, ans_seq, pred_entry, gt_where_seq) - cum_loss += loss.data.cpu().numpy()[0]*(ed - st) + cum_loss += loss.data.cpu().numpy()*(ed - st) optimizer.zero_grad() loss.backward() optimizer.step() @@ -183,7 +183,7 @@ def epoch_exec_acc(model, batch_size, sql_data, table_data, db_path): except: ret_pred = None tot_acc_num += (ret_gt == ret_pred) - + st = ed return tot_acc_num / len(sql_data) diff --git a/train.py b/train.py index ed0cab5..da09e71 100644 --- a/train.py +++ b/train.py @@ -1,5 +1,6 @@ import json import torch +import pandas as pd from sqlnet.utils import * from sqlnet.model.seq2sql import Seq2SQL from sqlnet.model.sqlnet import SQLNet @@ -9,8 +10,11 @@ import argparse if __name__ == '__main__': + columns = ['Epoch', 'Type', 'Loss', 'Train Acc', 'Val Acc'] + results = pd.DataFrame({i:[] for i in columns}) + parser = argparse.ArgumentParser() - parser.add_argument('--toy', action='store_true', + parser.add_argument('--toy', action='store_true', help='If set, use small data; used for fast debugging.') parser.add_argument('--suffix', type=str, default='', help='The suffix at the end of saved model name.') @@ -20,151 +24,159 @@ help='0: original dataset, 1: re-split dataset') parser.add_argument('--rl', action='store_true', help='Use RL for Seq2SQL(requires pretrained model).') - parser.add_argument('--baseline', action='store_true', + parser.add_argument('--baseline', action='store_true', help='If set, then train Seq2SQL model; default is SQLNet model.') parser.add_argument('--train_emb', action='store_true', help='Train word embedding for SQLNet(requires pretrained model).') args = parser.parse_args() - N_word=300 - B_word=42 - if args.toy: - USE_SMALL=True - GPU=True - BATCH_SIZE=15 - else: - USE_SMALL=False - GPU=True - BATCH_SIZE=64 - TRAIN_ENTRY=(True, True, True) # (AGG, SEL, COND) - TRAIN_AGG, TRAIN_SEL, TRAIN_COND = TRAIN_ENTRY - learning_rate = 1e-4 if args.rl else 1e-3 + params = vars(args) + + for opt in ['ca', 'rl', 'baseline', 'train_emb']: + params[opt] = True + N_word=300 + B_word=42 + if params['toy']: + USE_SMALL=True + GPU=True + BATCH_SIZE=15 + else: + USE_SMALL=False + GPU=True + BATCH_SIZE=64 + TRAIN_ENTRY=(True, True, True) # (AGG, SEL, COND) + TRAIN_AGG, TRAIN_SEL, TRAIN_COND = TRAIN_ENTRY + learning_rate = 1e-4 if params['rl'] else 1e-3 - sql_data, table_data, val_sql_data, val_table_data, \ - test_sql_data, test_table_data, \ - TRAIN_DB, DEV_DB, TEST_DB = load_dataset( - args.dataset, use_small=USE_SMALL) + sql_data, table_data, val_sql_data, val_table_data, \ + test_sql_data, test_table_data, \ + TRAIN_DB, DEV_DB, TEST_DB = load_dataset( + params['dataset'], use_small=USE_SMALL) - word_emb = load_word_emb('glove/glove.%dB.%dd.txt'%(B_word,N_word), \ - load_used=args.train_emb, use_small=USE_SMALL) + word_emb = load_word_emb('glove/glove.%dB.%dd.txt'%(B_word,N_word), \ + load_used=params['train_emb'], use_small=USE_SMALL) - if args.baseline: - model = Seq2SQL(word_emb, N_word=N_word, gpu=GPU, - trainable_emb = args.train_emb) - assert not args.train_emb, "Seq2SQL can\'t train embedding." - else: - model = SQLNet(word_emb, N_word=N_word, use_ca=args.ca, - gpu=GPU, trainable_emb = args.train_emb) - assert not args.rl, "SQLNet can\'t do reinforcement learning." - optimizer = torch.optim.Adam(model.parameters(), - lr=learning_rate, weight_decay = 0) + if params['baseline']: + model = Seq2SQL(word_emb, N_word=N_word, gpu=GPU, + trainable_emb = params['train_emb']) + assert not params['train_emb'], "Seq2SQL can\'t train embedding." + else: + model = SQLNet(word_emb, N_word=N_word, use_ca=params['ca'], + gpu=GPU, trainable_emb = params['train_emb']) + assert not params['rl'], "SQLNet can\'t do reinforcement learning." + optimizer = torch.optim.Adam(model.parameters(), + lr=learning_rate, weight_decay = 0) - if args.train_emb: - agg_m, sel_m, cond_m, agg_e, sel_e, cond_e = best_model_name(args) - else: - agg_m, sel_m, cond_m = best_model_name(args) + if params['train_emb']: + agg_m, sel_m, cond_m, agg_e, sel_e, cond_e = best_model_name(args) + else: + agg_m, sel_m, cond_m = best_model_name(args) - if args.rl or args.train_emb: # Load pretrained model. - agg_lm, sel_lm, cond_lm = best_model_name(args, for_load=True) - print "Loading from %s"%agg_lm - model.agg_pred.load_state_dict(torch.load(agg_lm)) - print "Loading from %s"%sel_lm - model.sel_pred.load_state_dict(torch.load(sel_lm)) - print "Loading from %s"%cond_lm - model.cond_pred.load_state_dict(torch.load(cond_lm)) + if params['rl'] or params['train_emb']: # Load pretrained model. + agg_lm, sel_lm, cond_lm = best_model_name(args, for_load=True) + print "Loading from %s"%agg_lm + model.agg_pred.load_state_dict(torch.load(agg_lm)) + print "Loading from %s"%sel_lm + model.sel_pred.load_state_dict(torch.load(sel_lm)) + print "Loading from %s"%cond_lm + model.cond_pred.load_state_dict(torch.load(cond_lm)) - if args.rl: - best_acc = 0.0 - best_idx = -1 - print "Init dev acc_qm: %s\n breakdown on (agg, sel, where): %s"% \ - epoch_acc(model, BATCH_SIZE, val_sql_data,\ - val_table_data, TRAIN_ENTRY) - print "Init dev acc_ex: %s"%epoch_exec_acc( - model, BATCH_SIZE, val_sql_data, val_table_data, DEV_DB) - torch.save(model.cond_pred.state_dict(), cond_m) - for i in range(100): - print 'Epoch %d @ %s'%(i+1, datetime.datetime.now()) - print ' Avg reward = %s'%epoch_reinforce_train( - model, optimizer, BATCH_SIZE, sql_data, table_data, TRAIN_DB) - print ' dev acc_qm: %s\n breakdown result: %s'% epoch_acc( - model, BATCH_SIZE, val_sql_data, val_table_data, TRAIN_ENTRY) - exec_acc = epoch_exec_acc( + if params['rl']: + best_acc = 0.0 + best_idx = -1 + print "Init dev acc_qm: %s\n breakdown on (agg, sel, where): %s"% \ + epoch_acc(model, BATCH_SIZE, val_sql_data,\ + val_table_data, TRAIN_ENTRY) + print "Init dev acc_ex: %s"%epoch_exec_acc( model, BATCH_SIZE, val_sql_data, val_table_data, DEV_DB) - print ' dev acc_ex: %s', exec_acc - if exec_acc[0] > best_acc: - best_acc = exec_acc[0] - best_idx = i+1 - torch.save(model.cond_pred.state_dict(), - 'saved_model/epoch%d.cond_model%s'%(i+1, args.suffix)) - torch.save(model.cond_pred.state_dict(), cond_m) - print ' Best exec acc = %s, on epoch %s'%(best_acc, best_idx) - else: - init_acc = epoch_acc(model, BATCH_SIZE, - val_sql_data, val_table_data, TRAIN_ENTRY) - best_agg_acc = init_acc[1][0] - best_agg_idx = 0 - best_sel_acc = init_acc[1][1] - best_sel_idx = 0 - best_cond_acc = init_acc[1][2] - best_cond_idx = 0 - print 'Init dev acc_qm: %s\n breakdown on (agg, sel, where): %s'%\ - init_acc - if TRAIN_AGG: - torch.save(model.agg_pred.state_dict(), agg_m) - if args.train_emb: - torch.save(model.agg_embed_layer.state_dict(), agg_e) - if TRAIN_SEL: - torch.save(model.sel_pred.state_dict(), sel_m) - if args.train_emb: - torch.save(model.sel_embed_layer.state_dict(), sel_e) - if TRAIN_COND: torch.save(model.cond_pred.state_dict(), cond_m) - if args.train_emb: - torch.save(model.cond_embed_layer.state_dict(), cond_e) - for i in range(100): - print 'Epoch %d @ %s'%(i+1, datetime.datetime.now()) - print ' Loss = %s'%epoch_train( - model, optimizer, BATCH_SIZE, - sql_data, table_data, TRAIN_ENTRY) - print ' Train acc_qm: %s\n breakdown result: %s'%epoch_acc( - model, BATCH_SIZE, sql_data, table_data, TRAIN_ENTRY) - #val_acc = epoch_token_acc(model, BATCH_SIZE, val_sql_data, val_table_data, TRAIN_ENTRY) - val_acc = epoch_acc(model, - BATCH_SIZE, val_sql_data, val_table_data, TRAIN_ENTRY) - print ' Dev acc_qm: %s\n breakdown result: %s'%val_acc + for i in range(25): # 25 epochs + print 'Epoch %d @ %s'%(i+1, datetime.datetime.now()) + avg_reward = epoch_reinforce_train(model, optimizer, BATCH_SIZE, sql_data, table_data, TRAIN_DB) + print ' Avg reward = %s'%avg_reward + dev_acc, breakdown = epoch_acc(model, BATCH_SIZE, val_sql_data, val_table_data, TRAIN_ENTRY) + print ' dev acc_qm: %s\n breakdown result: %s'% (dev_acc, breakdown) + exec_acc = epoch_exec_acc(model, BATCH_SIZE, val_sql_data, val_table_data, DEV_DB) + print ' dev acc_ex: %s', exec_acc + + epoch = pd.Series([i+1, opt, avg_reward, dev_acc, exec_acc], index=columns) + results = results.append(epoch) + if exec_acc[0] > best_acc: + best_acc = exec_acc[0] + best_idx = i+1 + torch.save(model.cond_pred.state_dict(), + 'saved_model/epoch%d.cond_model%s'%(i+1, params['suffix'])) + torch.save(model.cond_pred.state_dict(), cond_m) + print ' Best exec acc = %s, on epoch %s'%(best_acc, best_idx) + else: + init_acc = epoch_acc(model, BATCH_SIZE, + val_sql_data, val_table_data, TRAIN_ENTRY) + best_agg_acc = init_acc[1][0] + best_agg_idx = 0 + best_sel_acc = init_acc[1][1] + best_sel_idx = 0 + best_cond_acc = init_acc[1][2] + best_cond_idx = 0 + print 'Init dev acc_qm: %s\n breakdown on (agg, sel, where): %s'%\ + init_acc if TRAIN_AGG: - if val_acc[1][0] > best_agg_acc: - best_agg_acc = val_acc[1][0] - best_agg_idx = i+1 - torch.save(model.agg_pred.state_dict(), - 'saved_model/epoch%d.agg_model%s'%(i+1, args.suffix)) - torch.save(model.agg_pred.state_dict(), agg_m) - if args.train_emb: - torch.save(model.agg_embed_layer.state_dict(), - 'saved_model/epoch%d.agg_embed%s'%(i+1, args.suffix)) - torch.save(model.agg_embed_layer.state_dict(), agg_e) + torch.save(model.agg_pred.state_dict(), agg_m) + if params['train_emb']: + torch.save(model.agg_embed_layer.state_dict(), agg_e) if TRAIN_SEL: - if val_acc[1][1] > best_sel_acc: - best_sel_acc = val_acc[1][1] - best_sel_idx = i+1 - torch.save(model.sel_pred.state_dict(), - 'saved_model/epoch%d.sel_model%s'%(i+1, args.suffix)) - torch.save(model.sel_pred.state_dict(), sel_m) - if args.train_emb: - torch.save(model.sel_embed_layer.state_dict(), - 'saved_model/epoch%d.sel_embed%s'%(i+1, args.suffix)) - torch.save(model.sel_embed_layer.state_dict(), sel_e) + torch.save(model.sel_pred.state_dict(), sel_m) + if params['train_emb']: + torch.save(model.sel_embed_layer.state_dict(), sel_e) if TRAIN_COND: - if val_acc[1][2] > best_cond_acc: - best_cond_acc = val_acc[1][2] - best_cond_idx = i+1 - torch.save(model.cond_pred.state_dict(), - 'saved_model/epoch%d.cond_model%s'%(i+1, args.suffix)) - torch.save(model.cond_pred.state_dict(), cond_m) - if args.train_emb: - torch.save(model.cond_embed_layer.state_dict(), - 'saved_model/epoch%d.cond_embed%s'%(i+1, args.suffix)) - torch.save(model.cond_embed_layer.state_dict(), cond_e) - print ' Best val acc = %s, on epoch %s individually'%( - (best_agg_acc, best_sel_acc, best_cond_acc), - (best_agg_idx, best_sel_idx, best_cond_idx)) + torch.save(model.cond_pred.state_dict(), cond_m) + if params['train_emb']: + torch.save(model.cond_embed_layer.state_dict(), cond_e) + for i in range(25): # 25 epochs + print 'Epoch %d @ %s'%(i+1, datetime.datetime.now()) + loss = epoch_train(model, optimizer, BATCH_SIZE,sql_data, table_data, TRAIN_ENTRY) + print ' Loss = %s'%loss + train_acc, breakdown = epoch_acc(model, BATCH_SIZE, sql_data, table_data, TRAIN_ENTRY) + print ' Train acc_qm: %s\n breakdown result: %s'%(train_acc, breakdown) + #val_acc = epoch_token_acc(model, BATCH_SIZE, val_sql_data, val_table_data, TRAIN_ENTRY) + val_acc = epoch_acc(model,BATCH_SIZE, val_sql_data, val_table_data, TRAIN_ENTRY) + print ' Dev acc_qm: %s\n breakdown result: %s'%val_acc + + epoch = pd.Series([i+1, opt, loss, train_acc, val_acc], index=columns) + results = results.append(epoch) + if TRAIN_AGG: + if val_acc[1][0] > best_agg_acc: + best_agg_acc = val_acc[1][0] + best_agg_idx = i+1 + torch.save(model.agg_pred.state_dict(), + 'saved_model/epoch%d.agg_model%s'%(i+1, params['suffix'])) + torch.save(model.agg_pred.state_dict(), agg_m) + if params['train_emb']: + torch.save(model.agg_embed_layer.state_dict(), + 'saved_model/epoch%d.agg_embed%s'%(i+1, params['suffix'])) + torch.save(model.agg_embed_layer.state_dict(), agg_e) + if TRAIN_SEL: + if val_acc[1][1] > best_sel_acc: + best_sel_acc = val_acc[1][1] + best_sel_idx = i+1 + torch.save(model.sel_pred.state_dict(), + 'saved_model/epoch%d.sel_model%s'%(i+1, params['suffix'])) + torch.save(model.sel_pred.state_dict(), sel_m) + if params['train_emb']: + torch.save(model.sel_embed_layer.state_dict(), + 'saved_model/epoch%d.sel_embed%s'%(i+1, params['suffix'])) + torch.save(model.sel_embed_layer.state_dict(), sel_e) + if TRAIN_COND: + if val_acc[1][2] > best_cond_acc: + best_cond_acc = val_acc[1][2] + best_cond_idx = i+1 + torch.save(model.cond_pred.state_dict(), + 'saved_model/epoch%d.cond_model%s'%(i+1, params['suffix'])) + torch.save(model.cond_pred.state_dict(), cond_m) + if params['train_emb']: + torch.save(model.cond_embed_layer.state_dict(), + 'saved_model/epoch%d.cond_embed%s'%(i+1, params['suffix'])) + torch.save(model.cond_embed_layer.state_dict(), cond_e) + print ' Best val acc = %s, on epoch %s individually'%( + (best_agg_acc, best_sel_acc, best_cond_acc), + (best_agg_idx, best_sel_idx, best_cond_idx)) + results.to_csv('results.csv')