{"cells":[{"metadata":{},"cell_type":"markdown","source":"# About this Notebook\n\n**This notebook is the first part of my notebook series to reach [lb.9508](https://www.kaggle.com/mint101/jmtc-20-lb-9508-mono-lingual-models) before blending with others result. Hope this kernel can serve as a starter notebook of this competition, and help people avoid some traps in the begining.**","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"# Simple Setting and Result\nThis simple pure XLM-R notebook uses the original training data and [multiple language translation](https://www.kaggle.com/miklgr500/jigsaw-train-multilingual-coments-google-api) of the 2018 one. It sampled the negative data to nearly the same size of the positive ones, and combined all of them into the final training data. \n\nThe learning schedule is to train 2.5 epoch on training data (save and load best model by ModelCheckPoint) and 1 epoch on valid data, both with nearly constant learning rate (1e-5 and 8e-6, chosen heuristically).\n\nWith this simple setting, one can get lb around <span style=\"color:red\">0.9420 - 0.9445</span> within 1h. By simple ensembling results of multiple attempts, one can get about <span style=\"color:red\">lb.9455+</span>.\n\n<u>(One can check version-1 for exact training logs. I do not rerun the kernal as I am lack of TPU quota)</u>","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"# Intro. of the task and literature (- early 2020)","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"Jigsaw Toxic Comment competition has been hold for three years. The first year(2018) one gives toxic and non-toxic comments, while the second year(2019) one enlarges data size and gives soft label of toxicity. For the third year, JWTC-2020 combines the training data of last two year, while try to judge toxicity cross language.\n\nThe JWTC task is a typical sentimental analysis task in the area of nature language processing(NLP). Before going deep into the task, we'd better look at the current literature of NLP. \n\n<br/>\n\nThe NLP area is quite different before and after 2018. Before 2018, people usually design different models for different tasks, while model consists of fixed word embedding plus RNN/CNN. After 2018, Bert-like pretrained models dominate all tasks. An additional top layer with fine-tuning is enough to transfer them to down-streaming task and get a deccent result.\n\n**The following graph shows this development process:**","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"![process.png](attachment:process.png)","attachments":{"process.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA2AAAAG/CAYAAAA+ZbR3AAAAAXNSR0IArs4c6QAAAHhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAACWAAAAAQAAAJYAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAA2CgAwAEAAAAAQAAAb8AAAAAMa+W3wAAAAlwSFlzAAAXEgAAFxIBZ5/SUgAAQABJREFUeAHsnQd4FUXbhjd0sIGIoIIiiA1FsSAiKBawf1bshf+zt0/sDRV7F7tiAxXsCnaxUkRsiAgoCgIqoBQVRHrJ/9zLGTycJJCEnOSc5Hmv68nZOuXe2dl5Z2Y3UWQzARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwARMwAROoqAQqV9SMO9+rRWBDnd1KqiP9lhTSRlreQZohVZfaSlWkP6VUa6gNO0mNJZZrSBw7RyrIttOOW6Rq0ncFHVTE7XV1/B3SFtJnRTw39fDa2nCztIs0UDpCuloaI02XstG4JpdLR0mDpYVSQba9dpB/rg8sbpD+kn6WbNlDIEdJ5d7cUpolzZOwmlI7qarEPb2NtLU0VVosJRtlgDA2l5pIlAfO5/5eKqXantpwjdRJ6iBxL4Z4tVjmRj1xj7S39F4Jp2Z/hXel9Lc0USotox4nT/Wk4auI9Fjtv1CaILF8vnSAtI70rWQzARMwARMwARNIM4EzFD4NrtlS26S4ztEyjabmUkuJY3jA52cXaCP7F0hzpUUSjfWHpYZSqtFZ0F/iOBp+JWWbKCCcigElECCNNByt4BzigD0rwaOkDEeVRg+N5NIwGttfS1yn9VYR4WHanys9IDWS/pG+kGiM27KHANd8uMT92Tsp2Zsltt2X2PaKfrkf2Z5q62vDjxL7ub/nS0ukQdKRUqqdpw2UnfckOi0o4yVtVyjArsUMlHu7h9RdKul7jzSRdxiUplEvEe/zhYiUepljD5WOlXom1vm1mYAJmIAJFJFApSIe78NNAAI0QHCI1pSukmiwYZQnltkfjuG4/Ixj2Xe7dKD0P2m0dKaEc5ZqrbWho/SENCqxk9GZHaX9pI0S2/hZV2L72hK9vDtJ1SVsE4l9IV00Kmgg0jMfevhbaDnZSCvbDpI2T96hZZwL0tZKIj2zJRqb2CfSrdJEifi2l3AuOW5nqamUbMTfRiIswt1MSnXertS2iVJdKdgaWiDs+hLXhLDrSRjHtZXYnmycQzz7Spsm70gsEy9pWUuCDYxgFYyRD3rAk/NAAxtjhONXCeebtHB9bNlFgDJKmT1G2iuR9NR7mmMQ2/MzyvNkiRGe4yWc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JmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmACJmAC2U0gpwyT30xxH1yG8Ze3qF9QhiZnWaa2Unr3z7I0V6TkTldmn6lIGXZeTcAEyoRAO8W6c5nEXP4iXawsPSHNKX9Zc45MoPwQqFKGWWm5ySab3HXQQQeVYRLKR9Qvv/xyNHXq1K+Vm2xzwFpvttlmd+27777l40KUo1xMmzYteumll8YqS3bAytF1dVZMIEMJHL799tt32W233TI0edmRrEWLFkVPP/10NH/+/JeVYjtg2XHZnMoKSqAsHbDF2223XfTAAw9UUPQll+2vv/4aB2xJyYVYaiEt2nnnnV0GSg134SMaNWoUDtjcwp/hI03ABEyg2AQW7LffftEtt9xS7AB84jIC/fr1k/81P9c8TMAEMptApbJM3uLFjJTbVpfAkiXZ6Hsty7XLwOpe/fScP3eufa/0kHWoJmAC+RFYuHBhfpu9rQgE/vnnnyg3175XEZD5UBMoMwJl6oCVWa4dsQmYgAmYgAmYgAmYgAmYgAmUAQE7YGUA3VFmFoGZM2dG33zzTbRgwYISSdjYsWOjCRMmFDms77//Pvrll19WOE9TSaLhw4dH9Gz+9NNPEWHbTMAETMAEMovArFmzoh9++CGzEuXUmIAJZCwBO2AZe2mcsFQCS5cujf73v/9Fl156abzrs88+i1q1ahX16tUrXn/00Uejww8/PCrqVJYBAwZEHTt2jH777bflUY4bNy4OWy+GR7yriNq1axfNmbPq95rPO++86Oqrr14eVmEX/u///i+66667Vjh88uTJ0Z577hk7Ya+++mrUp0+fFfZ7xQRMwARMYNUErr322og6Nhgdbj/++GO8SocZHXGrY9TV/fv39xTA1YHoc02gAhEoy49wVCDMzmpJEKhUqVJUs2bN6IUXXohf1v7iiy+iL7/8Mnr99dejzp07R0899VS05pprRtWqVYudqU8//TSqW7du7DgxL/7zzz+P6tSpE/31118RX9vigTl+/PiI950YYcLBC8Y6YV9//fXRDjvsEPGeXeXKlWMR7sYbbxx9++230aabbhrVr18/YhtOWqNGjWInrXbt2tHEiRPjOMKXvQhj8ODBUY0aNaLWrVvHURHnwIEDo6ZNm/LlqmjevHnx9j/++CMOn3BIC42FffbZJ+IrVziYX331VdSwYcNo5MiRUYMGDaIdd9wxPo+GBCNlLVu2jHtj+cgJo2pVqlSJ9NXRkD3/moAJmECFIUDnGvUsdf3o0aOj5s2bR++++27Us2fPuI6/4447oq222iq68MILo5ycnOijjz6KeD+5Q4cOcZ1Ph9x6660XDR06NKJO3WCDDSK+FMsHsNZaa63ldT9f9OV84iG+tddeO37WUGfzPOB5NGTIkOVhVJgL4IyagAnkIWAHLA8Sb8hkAjwQ77///ujXX3+NRowYEe2+++7R9OnT+Qpk9Pvvv0dXXnll7OScffbZEc7Ld999F51++unRxRdfHO29997RuuuuG+2yyy5xFnHaNtxww9g5wSlKNh6iOHxbbLFFtO2228bOGeHhAPG1rs033zz6888/Y2cI5wdnrUmTJtHHH38cO4k4hzfccEOkL1JFXbp0ieM/7rjjYqcIJxKn7uGHH47OPPPM6K233or233//6Oeff47at28fO0wHHHBAHA4OHmnBqezevXv8YH/wwQfjhsGWW24ZO204WJ988kncYDj00EOjxo0bx47moEGD4vhoTNAQsAOWfIW9bAImUFEIvPLKK3FHHB1nzz33XHTjjTfGz4u///47rkN5hmy00Ubx8gUXXBDtuuuucQfYBx98ED9TmFlx1FFHxXXsE088EYfBcThyVatWjTvCqI/vu+++6LHHHos7BJs1axbNmDEjrt8vueSS6Nhjj42on+lQY7YGzwY6xmwmYAIVk4CnIFbM6561ucbZYZQLh4NRoHPPPTceNaI3k+mBOFc4KjhOjDYxXfGRRx6JnTRGm9q0aROPoNE7SQ8nzsnRRx+dZ9oiTg/HX3XVVdGRRx4ZHXbYYfHDFaeM7Yxqvffee/EDFmeJ/71C7+iYMWNix61WrVrR448/Hp111lnxFEl6PXngHnjggdHWW28d72MK5WuvvRbdeuut0UMPPRSts846sbPF+2iMzr3//vuxg0Z8GA9rRNoQYdEDu8Yaa8S9uR9++GHcGGBK5RFHHBEfy8jZaaedFucxay+6E24CJmACxSTAzAOmbzOFHMeK+pGZBnSCMVOAaeyMfv3nP/+JR6mYQUDHF51hHMusAupmOtBuuummuI6lw49wGQVj+jr7MOpiOuGop+++++74X6zQCThlypSIZ8IxxxwTh8G5dCLaTMAEKi4Bd79U3GuflTlnFAonjJ7G6tWrxw9V3pviPbD1118/HuVhXn/45870eOLAMAWEnkqm8TGaxHx/wmJaIVMIUz/dyzrOFlNT2rZtG4eB40dYPFzp+eRhy0OVhzgjTDhF9G5ixMs601aYWohxLFMgefAffPDBsSNJeKSbETjCI16mHzKthTDZRzjJxjHkncYEv4yo0aAgLM4jT5xnMwETMIGKToCOroma/kcnGXU60xHpeGMaYTA649iHU8T0QTrAqHeZgk5dyugY0wcx6mn29ejRI3r++eejyy+/PH5Pl84/tlM/M9MCo86f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y/8OW75UBguhrZiue4V2yeTJk6M6depEa665ZqnkkPudezS5TZpcHyS3qUolQYWIpFIhjinVQ77//vvoyCOPjM4888zotNNOi0444YTo44+X3a/PPPNMdMopp8SQSRTH3nDDDRFOD8f16tVreVpvuumm6MUXX1y+vjoLjz76aNSvX78VgiDOq6++Ovq///u/OJ3nn39+NGPGjOiee+6J03jIIYdERx11VLz87rvvRi+99FJ04oknxg+IENDtt98e/e9//wurK/2lYK3Mfv311+j444+PzjjjjPj3vPPOi/7666/Yefryyy+XO0aEQUE96aSTop9//nmFIMePHx/nh3M7d+4cPfLII3EYXAvyeeCBB8Zh//e//42++eabOIz77rtveRg4Escee2z09ttvL9/mhYIJjB49Oi63sEUPP/xwXLZff/316JhjjonmzqVTTRPvVZF17do13nfFFVfEZT6E+tZbb0VPPsmMiRXtzjvvjN5777343iBc7ikc61SjXF50EbM00mNUeldddVX0xRdfpCcCh2oCJmACItC3b9/4ectzl+cvbYW77767xNi88cYb0VlnnRX99lsYyCixoMtDQAuViauke6SrpaelkjJ6B0+RcLpw8GgQ9pCqSxi/+fUgNtZ2nMFka6yVLaTkHst1tV5Hai61koKtr4WGYUW/G0h4E/wu6+HWQhlZTcVbu7hx9+7dO74/OnXqFB122GHx8r333lvc4PKc99xzz0W0iengLS2jvUtbNbRrv/vuu/h+pR1FW5b1TLN/h4wyJGW///571LBhw+iOO+6InZUBAwZEF198cfTZZ5/FFxNn5tlnn40dARqUOAJ4uT/99FN01113RXvuuWe0ySabRDRuC9PzhTNyyy23RPXr14+OOOKIaN11uRdXtB9++GH5KFDY884770QffvhhxC8jXDR4R44cGTtAOGc4Q9ttt12EM7P22mtH999/f+yYkN6dd945bgzjMG64IaPsqzacmoEDB8aO0dZbb53nBAofeu211yIYHnTQQVHz5s3j9Oy0007LR+A4EWdu0KBB0T//hA6qZcHdfPPNcXquv/76aOLEibFDwAgGjiKFmAfb5ZdfHoe71lprRTh248aNi29eRgCHDh0aO7377rtvnvR5w4oEpk6dGp1++ulxQwFnF+cdR6hNmzZxOX/zzTdj/myD/ddffx1fN0a16HiAcatWraJJkybFI13JoQ8bNiy+FjRIcHzotWWklnDoveX6E9706dMjrm8YaUsOgzI0ZMiQqGnTptH2228f7xoxYkQ0fPjwaI899og23XTTOFx6nWmQ/Pnnn9EBBxwQffXVV9GWW24Z9xBzf3JfdunSJS5D3LeFuSeT0+FlEzABEygMgf322y9q3759RKcg9V5oUPJcpv6j7mvSpEn8zOZZSX3VoEGDiOc7+z7//PP4d/fdd4+YQcDzjPpt8803j3je0Yhr0aJF/Iz8448/Ihwy9lEP88znmRnaL6xTvzL7hM60H3/8MaLO79ixY9xeoGFKW4aRNDo2OZ66ks42nu8bb7xxYbKciceMSkOiGKHCHpRoRb8l9ZOeleiZvl7aSBouMf2Qhg3HtpZwDHHehkp443tKNPKYNtlZaifdL/HOGI2x2RLtYpzJIxPLjObdLL0pER7Tndj3o1RWtrMiflTCGYUFPZx/SYWyww8/PC53PXr0iNsQtPloB9B24F6pW7duXLZph8yaNSs+ljYy99J6660XP+f53XXXXeO28aeffhrfKzz7GYFisIR2A/cX5f7999+P2xLcK3TU09nPvdKoUaP4PNoKtCXpKOZeoT20zz77xPcK7QvOJ037779/3G7l2ClTpsQzuxo3bhznmf20rS+77LLo8ccfj3//85//xPcuzhf3bqZZxo2AUQhq1KgR0aBHG220UXyBaTTSeLv11lsjRqSowFjH+aGSBC4jM9ddd13MmCl3hLMqY+rWcccdFztEjB7deOONccMy+TwKVOoUL6Z2UTD79OkTF7Brrrkmdv6oUOvVqxc7XThzLFevXj1iKiVOWRhJo/Lddttt40IZpu0lx5m6jGO5ww47RDhJ9MIxKojzGIyhZNbx/imcrDPtC04UyORjYQy71IY3NxPpQgwd41TCf/31148fOuSNdW5Ezufhw9Q1HlwYIzeHHnpoHlYhjf79lwAVFuX70ksvjfny0KVs8MuUT0aN+vfvv7wjgXLOPUAlwzndunWL1ymbyUPuxPDyyy/HDjjXaJdddokYDaYi5HyMUS8caSqw0IEQ70j8oXJk9HnMmDHx7wcffBA3Pq699tq4oXDuuefGFTGjb4zqUt4YhcPBYtQZxw977LHH4jLRtm3bOO5vv/02EYN/TMAETKBkCeAk8bzluUunJ8s8s+jgopOVjlpGxGhk0hnF857nIh2MdPLyrGSGAY012hg822ksXnnllXFjkfN5jtMBRgMWJ+7BBx+Mj6XByDbqPs6hIUmHKU4co3F0Xj300EPRq6++GjFb5eSTT46nnVOHMkMBZ43jqGuLaEt1fHBQinhq1hxOHrHQoBusZab6NZWYvoHzdYfUSToqoTb6xbm6T2LUCsfrRIn9h0oc20E6S5ognSwRJg/JZlJXiXjek26U6PWuKq0ncW5ZOl+KPn6vbAv9nim9I+F89pSOk0hjMPKTx7gvaNchHCnadLRTmUnGLC7a1DhnlFvKMyNLdEpwH11yySVxm5d2APu5f1555ZX4ONoldMbSJqENyYDD0UcfHZdvyj8DEXQyUNaZoUO5p/3NvfLJJ5/Eo3E4YLQ9ceJoo9AW4d7m3uL+pdOZwZKPPvpohTYs7Vk6tTfYYIO4/UNbinMx0kObONMMTz+jjEYjoz04N4CmUuQCs51eIpwWLiiNSiqx4ETQaAU+2/CWeacm2TiXC0wlirNGIxNPn/DoFQuFiguGl//CCy8kn55nGeeDRicVKNMIcaKojBsnvHEau6HBy8nET88aeaPipvBRYZPWZGOEIfSi4fThUNHopueAnjTEjcHQMSMU4d0aChe9CIyqUahpcPOwCI4XcXKzYDhagVty3EzZ4MZkZI9eRHowuOEIO7xrFJzFkDd673ho4PBy49HYJq+2lRPAaUkdbaUCxKj8GGGinDLFFgWjnMOckaYnnngivsZhX/hlZJJrjOG4cT3CdWMbo8lMFaXDgvuL3mIaEPxSeeF40TOFE3jqqafGDjWNBMr5XnvtFd9DVIZU3Nw73HOUVRxIGjKMXjPFdfDgwXEYxEm5ojeY0VibCZiACaSLQPKzN9R7dJAyIwXHjGcsjUqerbQxaBPQc05dxwwDGoOMiDEixfOTmTU8T5kNwDN81KhRcf16wQUXxJ1PzHKhg5S69rbbbosbqjyz6eRipgGvKvBs5V0Y1nH+aBCSNka6qEupV5n5QwdzaofaKjjR2KbhnXFtuVWku7C75+rAXxMHB0ezodbrSgskRqPYzvDGQ9J4CWcLB+lnCQcsR7pGmi6NkXDIpkmNpHoSo2MzJI5nugeNR8JkquEk6WGJd78qS/2lOdIzUlkZPe+kLRj520TqnBB5+UJ6TWJqZYFGGQxtOZbpFGYQgvYc7RPKOm1x2gw4QxxLWaXtQHuBzgicN9rW3AO0F3HqaB/vvffe8b1Em5h7hY4Nwm7dunXcoc9gAqNjxENbA2eNe4aBCtqyYcogjh/3KPFwb9LGpH2Ek8b76wwYMNhCuPy2a9cudiIL+3pPgXBKYUfG3bSAbq9pBPS24wlzQejFD8bFoKJkOhzDozhmGIWHBiw9WIyCNWvWbLkzxH4aoYw6MOWKypRGKo4KjcjQeOTiUnDoMUu11BEwGqw0JkkblTQFDKeloDnnFFwKGqNYOG5U1i1btszzvhRTJyl47OMYCjmFjRuCBi3THiicOHs8EIKRBhrNPAAwnCg44KyRdgoq55MO0oADllrRw4OeO8QUC6YxEk6HDh1CNCv8wpT8w/Xpp5+ObwCuQbihVzjYKysQwPFnuijOVrgOXHce/FwvyilOEh0BTz311PJyTiCUdUY16SygUUE5STbKQvLoL/txopOPIx6M49jHMD+VKPcN8eMwYVR63HNc19CpQSVNOWUfUw4w4sTJDw4Wzhjx0bDByCeNHpsJmIAJlBYBnkXUdYi2Bb32POPpxKLOwqgDqcswnot0zDI6xmwPRvS7d+8edy4RFmFwTOg8w6HDacOp4nUC6nI6yRqr0Um4HE+DFON8RuVw+qhjeX5yHGmifuQZH54F8QmF+0PjG0dkXuEOz7qj6M0NI2A4WTR6gjNF7zWNQx5WT0j7SOOkytIxUivpJOlPaZTUWDpIwmlrII2U2kmc11Li+EXSTxJODFN7PpVaS3yMhActrPllqmJZ2txVRA4zygYqlFFe6RCg84CyiZO14447Lr9XaCcg2s8Y9wHlnoEPyjEza2gD066hjcJ9QJshlH/uQbZxf9HuDvcHHRPcD7QzuAcwzqdtz2AExn1EW4PXH1jm/iMttFlp1xIGbWbaIIyy9erVK/6l/UG7GCvGvRWfl84/GeeAUREBnp54xJxpeph4aZAKE7EfR4v5oDT4KAgUGESBofcf54Oe+GBcID5kEIyGazCmGFCRMtIWLlbYxy/h0jhm6gLpowAygkVBw1EkbHoHwrsynENB49hgLBMO887x4EkbDVmOSzaGgJONKX0YDVqmpDFcy3tCFNhUYzSDkREKKI4a0wMppDR8uUHC9EwYsi3M92WdhxKNephz4zFNgnBCQ524SCs3RjBuGBrqDPXS88F0C9KZX9rCOf5dRoCKBGednlF6fHDocaoZ1YIx7DHKFz1JXL9QztlH44DzGH2i9yjZmB5LRYThWNGTS28vjjL3BhVZH02vodHBy7L84hAijBEwnD4cMkZsOR5Hm22UJ8o9c6upfEM6Kd+UByo57sELL7ww7vnl+GC8m2kzARMwgXQSoC5Kfq5SL1GnUl8x/alz587x85o6kenzHJtcj/E8pDHJs436l5kqNPTYzjN8t912i50metp5l5qGHw1NwsfJQiF+4iV+jPOJhzqY86hvqWNpoNKmCecUkQ2jOkxDK8+2rzI3Rrogkcmx+j1VYhSru7SW9JT0s/Sy9LqEQ/WANFPiATlcogF4scQFIawhEg2wm6S7JVr7OF44bOdITE88UnpHoveQNMB7gnS2VJa2oyJf1jhcNm1yktY/lD6Q3pNIJ7bSdHKvhLLPs5vndSjnDICcffbZ8cwVOoQZBePYcDz3AmX9+eefj5027hUGRrjHCINyTzuHabecy5RB2rxMJwydsZwf7g/uFcLEiIN12tQMAuCYca/Q9qYzOJxDhzGz4TDCxFdghhztIpw31kkf4dE2Jn+Eu6kGNegMKWvL24pf/RQdofmd21IpFccASwM+vDDH1DvA0agDHA4SHjrD9VwIHAamBdDgxNvlXJwrGp5sX9XntSkADJ1ybOj1T003I04MtTI1kSkEpIMLzNAsjhiODKNKDHkGLxtnCMeEAoIxAkUPGduoqCkkVLosBycyNd7kdUa7aPTSiE1u1IZjSBM3DOnjlwY6o4ccS9w4bcnn4TByHMO+TMmggDMvl0Y6PQrklREW2GBw4iHEMC83EEYeeZhwDXgAMWIGEx4oFPDiGDevXqCkIuxRnPMz8JzDdd1aUD6SjdEheDESS/mh/PJuF+WeZSoanC56ehBlnsoMR417i94jrhnXlnIfPjdPHFSWlEvKC5UWo2hcM6bd8sv8aa4/+0gXcYaRKs6nd4ryRu8vlRRlnetOhUYlSscHzh9TTkkbcVP5cT/SKCHtHEsvMp0TLDNCSk9vGEUjHoy8ayR7hBb7xRv8xwRMwASWEWiuzp9OTLsvilEn8iynzgrPLTqQqMuo25gyzy/h8gyjnqUOo21B3cszluc077TyLMQBoxOM6VJM+afe5VjetaVeZnoj9Tk9+3SuYizTdgkNxfDxARqgfCyEZyb1K89UngNsp/FZlHYTs1QeeOCBWYruQenfnlESUL7sZ2XnqYSe1C8f3/hNwnCwXpOel9jHOr2XOCK8R8K2yRJ8PpHY1kcaIuVK7CO8FyXi6C9xPlMYOZZ9bON8HDtGxJZIZW2bKwFtJNKNg3mtBANG9ZJHx1rpGX8AbYH8jHLKu1qUaYwyRRmk4502ANP7eJ4zG4fyzysHHEv55Vg6ZzmOjlxeiaFtwAfCaKfQ9uZYRtW4V2gXMnBCG5n7gnsFB5CPwbFMBwSdzLTfwz3MvUe7mTYM8R988MFxGwKHivs72Rgk4f7lw2WEwz1Pu537Gb+Ati2v4dBG5v5FycZ7bJpySVn6Jnl7ti330RQ71Xs2Eyg6AfWUUCnSW1Ve7Bk5lEUHsRpnyAHLlYOfKydsNUIpmVNVUeaqFypXXxDLN0BNkeV69yovF9v5MAETKDECR6lTMN96wxtzc/X1xlw1NCeIdsbNZCqxEuCACiJQUztqF7Qzafs5emXHt0shCMjJpC3SOYld2hf/nR+U9qgcgQmYQGkQYHSMabX0CJW10UtGzzNTLW0mYAImYAImYAKrTYB3/hjts2UxAfecZPHFc9JNoCACTCsM03gLOqY0tvN+GV8Bs5mACZiACZiACZiACSwj4BEwlwQTMAETMAETMAETMAETMAETKCUCdsBKCbSjMQETMAETMAETMAETMAETMAE7YC4DJmACJmACJmACJmACJmACJlBKBOyAlRJoR2MCJmACJmACJmACJmACJmACdsBcBkzABEzABEzABEzABEzABEyglAjYASsl0I7GBEzABEzABEzABEzABEzABOyAuQyYgAmYgAmYgAmYgAmYgAmYQCkRSIsDVqlSWoItJSSOpiwJlMeyUx7zVFJlxGxKiqTDMYHyRyAnJ6f8ZaqEclS5cuUSCsnBlGcCvocKd3XLglM6/hFzpZkzZ0ZTp04tXK59lAkkEZgxYwZr5cmDz/H9kHSBUxZhI3MrK4WLV03ABKKc+fPnuy1RQEGYNm0ae8rTs7KAnHrzahDImTt3ru+hQgCcN28eR5VqWyQdkT1arVq1I6pWrVqILFe8Q3Jzc2so11Xkbf9T8XK/6hwvXbo00o0wSkfuseqjs+KIR3Q/dPL9kP+1WrRoUbRw4cLntfec/I/wVhMwgQpK4FCN8jxRowaPzIywqnp+19Sze5ZSk462U5EymXhW/qqTdpIWF+lkH1xRCJxapUqV26pXr54x+dU9VE2JqaH76O+MSZQSQmfPkiVLztXic6WVrnRUIjWVeHtfBV/B87SLCvPkgg+p8HuWiMCcckLB98OqL+QiHRJ3P636UB9hAiZQQQjQjqD+zBSjU/A+aVdpboYkaqnS4c7cDLkYGZiM2NnJsHQdovRcILXPsHSRHNohtEdKxdIxBZEMuDFV8OWDzUIpo7z/gpPrPatJwPfDagL06SZgAhWSAA2hUmsMFYIwjg7DcXQQ+vldCGA+pMwJ0NZEmWR0rjP4U+HvIc8fLv1iScFLx8hj6efEMZqACZiACZhAxSDAcztX8vO7Ylxv5zI9BHz/JLjaAUtPAXOoJmACJmACJmACJmACJmACJpCHgB2wPEi8wQRMwARMwARMwARMwARMwATSQ8AOWHq4OlQTMAETMAETMAETMAETMAETyEPADlgeJN5gAiZgAiZgAiZgAiZgAiZgAukhYAcsPVwdqgmYgAmYgAmYgAmYgAmYgAnkIWAHLA8SbzABEzABEzABEzABEzABEzCB9BCwA5Yerg7VBEzABEzABEzABEzABEzABPIQsAOWB4k3mIAJmIAJmIAJmIAJmIAJmEB6CNgBSw9Xh2oCJmACJmACJmACJmACJmACeQjYAcuDxBtMwARMwARMwARMwARMwARMID0E7IClh6tDNQETMAETMAETMAETMAETMIE8BOyA5UHiDSZgAiZgAiZgAiZgAiZgAiaQHgJ2wNLD1aGagAmYgAmYgAmYgAmYgAmYQB4CdsDyIPEGEzABEzABEzABEzABEzABE0gPATtg6eHqUE3ABEzABEzABEzABEzABEwgDwE7YHmQeIMJmIAJmIAJmIAJmIAJmIAJpIeAHbD0cHWoJmACJmACJmACJmACJmACJpCHgB2wPEi8wQRMwARMwARMwARMwARMwATSQ8AOWHq4OlQTMAETMAETMAETMAETMAETyEPADlgeJN5gAiZgAiZgAiZgAiZgAiZgAukhYAcsPVwdqgmYgAmYgAmYQPkhsFBZyZUWlJ8sOScmYAJlRaBKWUXseE3ABEzABEygghBoq3w2kipXkPyWt2wuVoZaSGtKJ0l/SO7AFoQMtyVK30RpaIan08mrgATsgFXAi+4sm4AJmIAJlCqBmxRbU+m3Uo3VkZUkgbUVWDXpZImRMFvmE9hQSRwp7Zf5SXUKKxoBO2AV7Yo7vyZgAiZgAqVNoIYivEHqUdoRO74SI9BOIT0m7VRiITqgdBM4UxEcme5IHL4JFIeAHbDiUPM5JmACJmACJrByAkw3rCrxztCD0mgpHcaoDMY7Srb0EaiuoGkzcU0XpS8ah1yCBNzGLUGYDqpkCbhwlixPh2YCJmACJpDZBNZX8k6T1pD+kj6TPpV4X6QkbX8Fdqp0ovR0SQacEtYdWv9Tui5lu1dLlgCO9LSSDdKhpZkAbVwcZ1vmEKBjihkBFd7sgFX4ImAAJmACJUigocIKIxIlGGyZBUWjc3KZxZ6eiHkv5EbpeWkDqav0mnSWNEfKkXhf6ycp+V2fjbWOwzZbClZfC7wbNF4KDtxaWqYM1JFaSeE5u25i++/6xUjHPIkRFcJNHVXh+PWknyWuA/HwEYiZEk7kRAnbViJMwuNjETgJNHJIL8vkKduNvNWUyFcw8vx3WCmBX67TvtL3Etcz1b7ShqMkGBfacjt1qjx81OSG86vlLm4zYmh8L32144611l5Ys8GftRbNqD+15sLfa89v0LpZo19zXnoplKHoi+Y7N6hRqXqthdXm/brTsGGLuumjH/s0b9uwWk6l3J1HDZqkQppcNgudngp24BfK79wKludMzy73V49MT2RppC88GEojLsdhAiZgAuWdwBv169fftlq17PfB5s+fH02fPv0zXbC25fCi0XC/XqIx8JT0fuJ3ln7ZvqXEy/sXSjgx90jtJRymLtJH0s3SgVI96XPpOAln6EGJ8AnrH4lG9fnSyRLOVj+JOHpKG0mEeYT0ixTsEi3Q2G8kjZFOlPaQuktDpHbSsxLhLpRwss6V9pF2kdj/RuL3G/1muz2vDLSSZkg4yBjX5oV4qWT+0B56TsIhvy+fILlOk/LZHjbV1gIOIl9IXG5ffjexXlSl6uBKS6Klg1q223n34YOnL11Y7bKllXO6RvMqnzdt7UUjKy2NXh3+7ZTtdNKUcGJupaqPyNc6eMnCypSNfh2a79yiZuXcTxblLprwXfPmO0ajR3Pd87Nm2ni0tFTCccdxpXw8KVEmV9foYLhCGiy9s7qBldD53Ie8m8c1wjGtJQ2XXpc+lVZmHItTncyTUTPCSd6m1TxWSVtqSEVx8hh553jCX6XpoJzPtm19cuWcSmsvXpLbu83ooX+OaNFm/YVR7nFLc6PJudHShZWiytvquLm5ublLKuVENZfk5s7Jyc0dru90Nltr6T99mhdcVlYZf1EOGNGi4xrzcmd3zskV/5zcxZVyc0ctWSP6vPXnn/89tHnrUxXW1F1Hf0a9NJJwP9tml/pVciofvzQ3Z3KrUUPie/mLbXZtUzknp+3CpUuH6FjqunJrVDg2EzABEzCBkiFQ6dVXX6280060BbLbBg4cGHXs2JEGRnk1nCGMBhoNoo5SXam5dJ7US7pM+kA6VNpVOkyqL3GBcQA6SEz/w8lh344SjfDjpHskGsHNpBulPtJE6RbpPYkRrw2kgyQajltLoWGGE4BD9aH0rUR4OGg03u6XPpaul66WiAOn5BmJc7aQCHO0NEoqD0Yj9wdpF4kyieB3vNRQwrHYQXpI4lrQgD5F2kZ6URogVZVoqHeSJkq3S5wHr7OkQRINcXgSfhups9Rf6ittKp0s/STRaH9QSjauWT2JY1aw3Cg3t0alSptUXrRwezWUP/giitrrt5I25+jC5SyNcvK0xZbm5lZaooN02JH6069yVKV9TpRbK3ifK0Sw4gp5+EdqIB0i9ZTmSMRB2aQM/S1Vk0jvbxJ5hg/ncgz54xiM8xh9nSlx3O4SbEL+19Qy58ASgz3h4PgtlJZI3FfTJKy2RFjBCJtzpic2sMw5XHPykWxc49nS2OSNWp4vEX97qY7E9SLP2EYScVNeiCvki/wj7s0h0qsS8XLtT5c452WJbaSZ80OYWoytlf7C+HqJexhW60sw5erhrJJeDKaEfavEPUx5TrYNtXKORFgLknbkyLqtWanyJn8vWThZ21+ZvyR3n9pVq3SfuWTJsNyllXtUrhRtvDjK3VuFqYkifUq1wdQoJ0fpyPnv7AVrvqJzuA5ptzk5s2urED2g8jxMuZ+i0t210pzop0+b77pfpUrR9blRznAl4o2QkNylOY1rVat81+wli34fvHHb99r98slfS3Nyr6pXtdoBUxcuvFPHcV3KrVFYbCZgAibw/+ydB5gURf6GayM5KChGgjlgRMwBzHrmnNOZc86eep56xjOcEQPmHM6sKKAiCgiKiJgQEEVUomQ2zP97y23+wwpK2J2dmf1+z/Nt9/R0V1W/1TNbX1dVjwnUEAF6v/KhBywfzuEvqpQGFUEjlIYYjZv2Etu3lB6R6H3qJI2Rvpauk2gDnynRGPtQolFK4wtz0E5iPxpgA6X1pRYSjUkaxDTG/ivRqKOhSeOINGjw0RAcKj0h0XDrL5HvCGlVifLRSO0l0Ti8RGI/tbli43mYluR5jNRVuk+iIZwPAa/W0tES/OH9uLSdxLZbpQ2kB6XNpbukNSTq715pW2l/6WTpbgnDtZbEsa9LcKcBTwOdtGlUPyTdL90irS1hxGD+qUQdJrGkVtaRVpZaSZSJa2C0FCMlBza7oLJ/ZUHhrh+su9H3xamw9JSK8s8LQmFpVUcIdThXqMEaZqRSPdX4bv/+OussoV6FXWZXpl7V2befa8c/vhihTZS5g7S6dL1EHC4dJHEd3ST9Q+L6mC2dIe0q7S4Nk7pKGIUvJK7L4RLXLyx5j7ZjG4lz5Riip8Q1d7sEhw8k6ozrfwWJa7evBNuXJfY9UuosLSv1lu6UYMtxfSTKmR7b6wVl+SZ9o9bfqdJMLdtKnD/nTnmLpMbSaRKfjUkS1wnXDAaLa6OBRP1izvis7ib9JL0lHSttLBEvSY/Etd//7KDFTlXbltdyb6mlNF06VbpMelWCKTyfkDgGrl9J6cFxJ0uXp29kvTAVZk4pLxtbWFCwn14+p57RAyfrdSgsKNps6IfdtK1bv3U2uz8l81dcOvu4TTRktd86m56vj8rvHp5EMhC6yZAKyjFVEB7eeMiHt6mH67AGhcWPVJRVbKiyUjdcb/8fxcVhekXFVJWzYUmLsq1l1N7X52Hd8WWzfy7kA5DnwYfIYQImYAImUEMENAykhlKq22Ty5TzmQ5FG1mbSmtLZEo1vGmPctd9QonFIg/1zaZREY6qTdLRUJvWQaDDRUJsmNZFogG4q0QjrKNEwK5FobH0j0Qj7n0SDlUYkjUIagwRm4nVphkRjtULaRaIhSuO/u1QgkR4NSrY3kygDr5P/5Q9o/W7pZ4lGbr5EpU4EXptLnC8N5aek2dI46UyJ+npMWlWCnRqg0UQtpSV1dKRELweNeo67VKK+YMm+30qkA8uNJGJJiYbjlhKNfIJG9Stx7fc/HbSg0by61EC6QrpVGi3FUMUVaLjYG+rx2rYkVbyfarKvTmjZoO4LGaxkt7mXldwUSPVTT0aXklRjGYdUSaqw8H9KAyOxINFIO8EKbtOlthLczpaWl+A3SLpH4jpuKsHudGmsdLjEe1zL10hcb1OkPhLpYKhgsYMEI9J7TVpHek66U3pR4pq/WOovPSldJd0gvSmRB8yJ7hJc16paf0TLJNh2sEQ9TJJ4fb80RkoPMYufEbaR9ijpQekS6TiJz8cd0voSx/aUvpYoN+dEwOojqZ+0srS7tI/URrpOekGaKhGcE1y+kGBB+XtL5PE3qbt0jcT1Rx7kB3O4JMHxHMvnnOvnYelD6Xbp99BFUlkZnpUnWffjdTZbpywVWqv79AXdetlizi6yPephCrNLS7l+y5LtmV5q+KMu9bDVh+tsOkPX7rHqmZtRUVI0uiBUqshzlyZVWVFUoSG7smwf6hQ3V09eE31UBpRj2isrS+beO/9eUVEOEzABEzABE6gvBGhgDZVOlrjN+otE444GGY3INSTMy08SDaWBEo0hGnI0/q6Uekk0Ki+UKqXLpZek4dIm0qPS5xINNY6hgXWSREOOhifbaPiRJ8F+iMBQnCYdJB0t3Sk9Lm0lDZHID30qYdi+kSZLxIvSf6WPpR+kfAkaYyOkw6udENtHVm2bpWWFpPZbHMLVsGr7+lqOlnhNA5doLMEQfrSDMB+lEm6INCZI1NFjEuzh20gi7epcP9G2XSWukaUl6m3uBnBBKNEcnoGVoXJL9WJcXJGqOKQgVXhcSjsmUTK7nHznhN4rKAoF0zRK8WX1Ilw8M1T0UBt7pOb2FM3ZaeFWyA4zxHW2lHSItLnUXmolYaIGS5zrZxLv9ZMwHHdL30n/kOAGB5hNkUZKxHBpNWmihNkgvdlSXwkDwrXLNdtcoq7Yd03pTAnuvE8dkeZ7EscnQX2QzkrSWOlDiTT/LDbQm5STY6jjn6vUW8trJbbDBM3FXq85R8reWhol8ZlEpVIHibIS7Eddcz1xLsR2EufAtfWFxPdLF+kwieuVvKrnRxrTJcrCcXNdP7oZpuNSH+ve3vrK8JKCUDAxVVAolqku2vdPY0aDRpQxY6HMyG9teneLU6lRs1Ll/9zi8/5f919nM3X8Vrdg2lAQigsqCp7XxX6Zbi5srA6012XG9tV9iYyWO2OA0jLionSYgAmYgAmYQH0h8K1OdEupUKLBk96QG6nXR0utJBqSSSPgQq3/W6KRRMOMoBF3m0TjMTFPNFy3l2ic0pClQUlj8znpZUl3eGO6WkRDVr0hxnaCBu+DEseTDkGjtofEMX0kGno0Us+VOA/KfKhEee6U8ik4v1WkeyXqDcGUSNoxGBMayOOlR6WzpU2knaQuEtvOkIg9pRckeiNGStdLP0rNJNJ5XTpd2k3aTHpEGiiRF3mnB9cI9dBb4nga0HNiZmVlQWlhaKA5Xb+qj+JzGaoNi0vLP6iYXXpagcYkUpuaAdZiWuPC//bruOmk4qLC4rIK9ZQUVJbHuWEFFT2KC0r+XVlR8FRhgfxEQWHxH5uxc7L7qxWuDeJS6RPpEmkbieuV6zp5nyXXWVvpaekWievxCOkLCQ4/SLDGzHGNrypNkjg2SUer0fTCjH0wFhxL2pgquJ0v6cSigRmtJccmnyetxsB0USf0Eo2Q3pb+KihLH+keaUOJ8raRtpe6S9TvZZLMTaxzLeYEZWwhYUBZYrD4fFG/U6QkKGtzCXbTpbukD6TO0mAJE7icNEA6VuomkRbpJ0F61MMqEtfa36W5QsZLz9YonFZYkHq1WVHxtZPKy07WNh64kc5Zx8jOzLUpVdK4fPpS/dbYuEGRLqAWlZOnrPrtt9RDrUVJQUHxrFRl982GfMhnKsYV+szsojXdPGjYq32Xls1KpxSXVxbPlrGU1yooLisu+6wkVVKeKizYpLCi4sxQWHSszBif+byO9Isgr0/UJ2cCJmACJmACIkCDmcbSnwUNy+pBg656pJu35D0ak8m+6Y1xGmkoCRqffxY0lNIbS6SLCBqwyTkk+7TTtk0lGnO9pXyKG3QymAEMFkGD/jfpUamXRNDgpVFN4/0Kie2bSNtK30jXSG9IO0sHSwOlMqmrhLH4WnpLIp0vpG2kAyQaki9KGI3TJEzCvOKxeW2cUVL2W0lFwwuKG84cWTCz9PaygjBg44EDx/XruNkdlUWVoypKi8YWlYWzCgsrG2oIWaHGbxWpofqLzNodqcowedOlGn380a8zj55VVvZ+w8KSpgWl4YqhQ9dS/Q+dV3bp21J6wbWeBK8R8ZCEQcWQ9JW4bj6XkuuL/VjnhsEVEvyKpHek5SQa/hgHuNwmwRF2FIr3knzIv0HVa7aTRlKOz7R+j3SrRJoYl08lru3keK3OFZR79lxb5n7Bcck5k+6pUleJ8zhZ4pz/J3WXXpK2kXpKx0twSD73XAPnSYdLlOluqUR6QholJTFMK9dK+IvbJfI4Q6KMZ0oXSTdJQySuD/hhJq+QuFbTvx9+1mvygxEM5oR6gypkxot0cu/K0P9aWF78Tiiu2Erbk/qS9ZKdT6XmvNbBZY0KC1vNKA19dVylfE6YVLG08vz2uTkJ18KK8qooKCycq/xkI6M1taggbNWo2azPCwoaFKisXxakKm5OFRRVTK0o+XWJwlQflbKsYdHMb2fIo6qnOKnHWihldiTJB8KRWQLnKDv+KfDF7jABE8gvAoP79++/bufOnXP+rHr37h26du36oU5k85w/GZ+ACdQ/AqU65SWkXyS1i+N8QRroSe9SO61jFH6S2A9TS5twnNRAala1vqSWK0pjpF8lzAxpT5QITBzHkg6xrISRIW3emyzNkpaWSJt9W0kYEYJ9SHOkRKN7GYn90s2EXi5Q0FuFgZlQtTemqYP0ozRNaiv9IJEPZYDLJGll6XuJciaxilYoI7yWlzgfzr96cL5wg09zidcjJEwIx5EuwXlRBswqPNlngc6xz9pbtm1dnpr42VfLTV9mze+W3mrYwLH9VtmkmXxK800/68f5BP3EwVIlqbImm3760SgVJqXfmmtROrtRq+nlZUXUJhXaaEbx2DW++mAK+9dG8Jt3H3/5U7uC0hnj9dt11Puc6N+x84qFoaS0vLiikLJMn1U0e2rJ1HGtKpq36jS0zw86n6YFxamSTb7sP0H7rpAqL5iuda4jhwnUGAEM2NM1lpoTMgETyCYCGDANnsj96NWrF42TvtkEN4fLsofKvlYOl99FNwETMAETqEEC3IlwmIAJmIAJmIAJ1B6By5R0l9pL3ilniAA9Kg4TMAETWGwCxYudghMwARMwARMwAROoToDhUO0lhiIxjIlhXutIDDv6UqKH0ZH9BFZTERk1xfJA6WqJYFgbQ+Uc2UWAIYhrSAwLxDDzembV8jsta20IntJ2zJ8AdUJ90PHDMqkThmgmw1m1Wn/CBqz+1LXP1ARMIEsJTJo0KcyaNWvOg5+K9QOVrVq1CtOnTw8NGjQIvE5i2rRpgR+pbNSoUbIpzJ49Ox7frBnTNn6PsWN/n2KxzDJMPXDUAQEa7K9LSeVtoPXzpT7S7pINmCDkQFyuMu4m0aCnMb+TRN3tJ70tObKLAHV0j8TNDtYRc7u4CbKtZAMmCHUQ1yvPbaTEgFEn3Izis/WhVO8i+cdQ707cJ2wCJmACC0GAiej8I5/XJOyFSOaPu5aXl4eDDz44NG3aNJSWlkYTttxyy4Vrr702XHrppeHwww8PG2644ZwDr7/++vDpp5+GF154IRox3jj99NNDRUVF6NatWxg+fHg45ZRTYlpFRUX6PcvKcMMNN4TVVsMPODJI4DPl9YO0XrU8e+g1DwFw5AaBt1TMQ6oVdYRe96u2zS+zgwAPy+gpbZFWnIZaHyTRA+aoGwJ873HjKQl6lT+XPkk21LelDVh9q3GfrwmYwKIQ6KKDrpUGSs9INL7GSIsdGDB6tTBPGC89viOmiXkaOXJk7AVLz2Tq1KlBD/oIgwYNChtttFHc58033wybbLJJIK2jjz46bLHFFuHss8+OBu3mm28OxxxzTHjnnXdib1p6Wl6vVQLc4X1JSjdgv+k1DRFH7hDoraLyJEGe4pfEq1pxT0pCI/uW9DxfIJWmFe0FrS/QUwfTjvFqzRHge48nI7ZIS5LvR4Yi1sugK9CRWQIMY/CXQGaZOzcTWFwCM5QAXUgHS89LDJl4VjpCaistcuj3UeIQwj59+gQ9eTD07Nkz9nCRICaM99OjSZMm4bDDDos9YGx/+eWXw3bbbRfN2zfffBNmzJgRzj333LDUUkvFYYznnHNO3PbVV1+lJ+P1zBCgoc4d+ST4TaEvkhde5gSBUSrlR2klZU7fy2mvvZp9BLhRlv6Fx/DDN7OvmPWqRF/qbNN7u8r0mu/HehvuAct81fPlvbPkL/DMs3eOJrCoBKpPpMJ0oX0lejVooD0oLfR3KgaLuV7vvfdeaN68eRxKyHDBTp06Kbk/BvO9MFxPPvlkGDduXPjggw/CoYceGt56663AXLKWLVvGdJIjGdqIGZs8ea6fZUne9rJ2CWC4hkrM/yKek37v4owv/SdHCHCzhZ8SIDBkHn4YUWTtH2560OO1TlUJB2j5XdW6F3VHgM9Rl6rsqxuyuitVHeW80I2FOipnPmX7mk6GBhvjXx0mYAK5QWB9FXOjeRSVz/JnUk9puFQpLVQwR6tNmzaBuV2YpepRUsIDo/4/GKKIoWL4IcMLl19++bDqqquGV155Jay00kphxIgRcXgiQxKJYcOGhe+++y6sscYa/5+I1zJFYJYy6iVhwLgL30dy5B4BbrBMkJaU3pV8N0MQsjyoJ3pZ+AJl+JtHHglCHccHyn+K1EzifyYjS+pt2IBlvurpFk/vGs98CZyjCZjAwhL4mw44ruqgiVryj4SbKfyTHyYlvRoLbcDoAeOJhU888URo3bp1nAOGydp+++1jz9hrr70WxowZE8rKyuLcLh62wfpOO+0UNt544/Dss9xUDHEeGUaOOWAnnHBCOOSQQ0K7du3i3LLjjjsumra4o/9kmsBLyvAsiTu+mHVH7hH4VkVmWNsO0v9yr/j1ssSYZnor20uvSI66JzBERWAI9sYS34v1Oniql8METMAETODPCayit5kze6t0gXSX9LFU/amIJ8nstKFXakGDR8pjqsaPHx9+/fXXOerYsWNYcsklw4QJE+Zs69ChQ2jbtm00VpgrHtqBEeMx9Qw9XH311cPWW28dVlhhhTB69OgwZcqUsNdee4WjjjpqQYszZz8eAPLQQw/9oA33z9nolUUhMF4HHSg9LfWWHLlJgLv29IJfKM3IzVOoV6Wm92tVidFG/5YW+uaYjnHULAFuVC4trSxdJqXPj9VLhwmYgAmYgAnMTWBBb1YN1hMK1YGV+6EHgvDPsu/cGPxqEQmcr+PWXcRjfVh2EOigYlyRHUVxKRaQwJba7+QF3Ne7ZYbA2srmosxkld25eAhidtePS2cCJpAdBHh4jiP/CGyjU2I4TG3HEspgT2mnWs4I09xNmlzL+WRT8vwi+QlSSS0Xip4U8jqvlvMh+cHSWxnIp66yaKOMj8hA5o2VB/WWiTpjnhkP3cnXYBLx7jVwcg2VRhOpJurkJ6XzaA2UqU6SsAGrE+zO1ARMwARMIAsI7K0fuT5jq622yoKiLF4RGMbavXv3oN+J4+lv9cmANW3QoMF/mPuo5eJBzIKjBw8eHHr37v2QipLPBqxtq1atrufnNPIhevToEb744ovTdS75bMA2Wnnlla/fbbfdsqLKfvzxR+Y/M6fWBiwrasSFMAETMAETMIEFJzCLOXTXXHPNgh+RxXu++OKLFTJg9W2uS6px48ZTb7/99qbMhcz1uPfeezFgPD0zn6OSebK33HJLXpwjDz2SAWPOWT5HuW5WZU2dDRgwAAM2PZeB+4eYc7n2XHYTMAETMIHFIsDvquVDzJo1Kz5BMx/OZWHPQTMu6flb2MOycn/qsT4EP7+RL8FTaetDlJdnz5P8+e3MXA8bsFyvQZffBEzABEzABEzABEzABEwgZwjYgOVMVbmgJmACJmACJmACJmACJmACuU7ABizXa9DlNwETMAETMAETMAETMAETyBkCNmA5U1UuqAmYgAmYgAmYgAmYgAmYQK4TsAHL9Rp0+U3ABEzABEzABEzABEzABHKGgA1YzlSVC2oCJpALBEpKavv3YDNDIV/OIzO0nIsJmIAJmIAJLDiB3P/RjAU/V+9pAiZgArVNoHjo0KG1nUdG0h82bBj5+H9ERmg7ExMwARMwgfpEwP9c61Nt+1xNwARqm8DXhx12WEFtZ5LB9L/NYF7OygRMwARMwATqBQEbsHpRzT5JEzCBDBHYO0P5OJssI/D111+H9957LzRr1ixssskmoX379rGE77//fhg1alQoLCwMK6ywQnyPH9t95ZVX4g8nN27cOCQ/Kvq3v/0ttGzZMsvOLH+L88svv4R33303zJw5MzRq1Ch07tw5tGvXLkybNi306tUrTJo0KZ48P/S81FJLhe233z7W8ZgxYwI/JNy0adOw5ZZbhiWXXDI899xzgR/kJR1+3LuioiJstdVWMb38JZg9ZzZlypT4maJe0j9TO+ywQ/j000/Dzz//HD9v1OPOO+8cCgry6T5Z3dbDt99+Gz8rG220USwIrL/44ouwxRZbhP79+4eNN944lJaWLnQh+QwRRUVFC31sLhzgOWC5UEsuowmYgAmYQNYSePLJJ8N+++0XaJiPHj067L///qFnz56xvNdcc0347LPPwq+//hq6d+8ejjnmmDBjxowwduzY8M0334QjjzwyLmm00IB3ZI7ARx99FP773/+GqVOnRsO13Xbbxbqgbi655JIwcuTIWE+8Hj9+fDRmV111Vfj+++8DJvqTTz4Jhx56aPjuu+8CZu6HH34I559/fvjggw9ig596dmSGAJ8d6om64DPFEGo+U5joG2+8MUyePDl+vqg3R80SwCCdddZZkTkpn3766YGh+Ny4uPTSSwPmeF6R3HhKf496SuKJJ54IPXr0iOkk2/Jp6R6wfKpNn4sJmIAJmEBGCWCsaGS89NJLYa211op577333rFRz4uGDRuGo48+Oqy55pqxIbHtttuGH3/8MZx99tmxQX///feHc889N/amZLTgziyUl5eH9dZbL5x00knRULGOKV5ttdVChw4dYr2mY6IxTw/nCSecEFq1ahXfOuSQQ6LZPu200+JrekF5f5111kk/1Ou1TIBeSEwAvY/dunWLny+2cVOEujr88MNj7+Si9MTUctFzPnk+K3yHXXHFFYFeMHqB+UxxA6J6T+O4ceOiIeYz9tZbb4UNNtggXHDBBaFPnz7h+eefDxMmTAirrrpqrL9HH300LLHEEnHUAMt8CxuwfKtRn48JmIAJmEDGCNC7te6660aDxfAnhiISyy67bFxyZ56eEhoib7/9dmwgMsyNYOgbd4lZMpzNkVkCDRo0iObpnHPOCV9++WVo3bp12HrrrWNPyldffRWOP/74wD7UUdeuXcMuu+wSjTXDDalf7vL/9NNPgZ4zgiFTXAOYAEfdEEj/TFECXtMrts8++8R6oaf6jDPOqJvC5XGue+65Z3j11VfDlVdeGXnTK8bnpnrwffjMM8+E2267LTA6gBEB9FjeddddgZsZGDLNo47DFxnCuPrqq4cWLVpUTyYvXtuA5UU1+iRMwARMwATqgkCTJk3i8EJ6UzBZ77zzThg+fHgcikhDg+3MM2IeGA2SBx54YE7vSV2U13n+PwHqZu21144NP+Z9MZT07rvvDvvuu2+c80VjnfrFVC2//PJxyTp1SW/YPffcE+uTO/aO7CTQtm3b8Pjjj8dG/G+//RZ7wnbdddfYy5KdJc7NUjFEd8SIEfFGFDeaMFPzCm5SYKo23XTT+D240korBeaQccODGxsMOaS3C6NGbyUjCJg/m49hA5aPtepzMgETMAETyAgBhh0yrOa1114Lu+++ezjllFPixPNrr7025k8D4uSTT45D3eZVoHndJZ7Xft5W8wQwUwxT69SpU0ycRiBz9/baa6+4nYdupDf+kiGIDDdcZpll4lCrBx98MGyzzTZz9nN91nw9LWyK6XXA3DyGtx1wwAHxBgm/b+hhiAtL9M/3h/eFF14YH27CzYuDDjoofqbo6ee99M9QklJ6HdFbVlxcHL8n11hjjXgDi+8hOdLkAABAAElEQVRV6g0jlq9hA5avNevzMgETMAETqHUCzZs3D7fffntgGNt9990X5w4xNI3hawSNC3pa5hf+wev5kan97QwvZM4WDw1g2CA9l8xjoTHIXfkTTzwxDkHEqDHkkLl8vJc8XIP333jjjfDss8/GBj4l5v3q815q/0ycQzqB9M8Un0+eOPrwww9HU80czGQIcPoxXl90AvQwchOKoZ1c/wwr5PuQ7fSMMT+MJ1MS9IxxUyo9lltuufjZYlgin52JEyfG3uiOHTvG+Xw8nZSeTIcJmIAJmIAJmEB+ELhODQXdjF38UKMhNXjw4JTme6XU6JiToIarpfS0rzmv01dkzFKae5TSXd70zYu0rrkuKQ2Tw+l1yI+qWeCzaK1H90+B/8KGns6W0iPKU4MGDUpp7l5KQ9RiEnpSXkomOjVgwICUHqMdNWTIkBSMqU/eT0I9LCk9FTF5mdKTE1MyaHNeL+yKGqFMnLlngc8+N3fspMb1wqJZoP01xO0PnymZ67hND1hZoDQWdicZc+rsxNysigUu9UF6uNA80ejGRar654/PD58Xvt/SP0fqRY6fF777CD05dM7nSfMp4+dRTyWN77EPafM5rR69e/eG+YcLXPos3NE9YFlYKS6SCZiACZhAbhHg97vm9Rtef3bnlt4x5kM46oYADz7hyYfVgyFqyRMtq79XvT75Xan0cO9KOo3MrzPcrfpnih6x6tsyX7L8zZF5XNUj+fzMi3v6QzWYW5kEw3pREnw/zivt5P1cX+bnzLZcrxWX3wRMwARMwARMwARMwARMIC8J2IDlZbX6pEzABEzABEzABEzABEzABLKRgA1YNtaKy2QCJmACJmACJmACJmACJpCXBGzA8rJafVImYAImYAImYAImYAImYALZSMAGLBtrxWUyARMwARMwARMwARMwARPISwI2YHlZrT4pEzABEzABEzABEzABEzCBbCRgA5aNteIymYAJmIAJmIAJmIAJmIAJ5CUBG7C8rFaflAmYgAmYgAmYgAmYgAmYQDYSsAHLxlpxmUzABEzABEzABEzABEzABPKSgA1YXlarT8oETMAETGBBCJSWli7Iblm/T4MGDUJBQUHWl7M2Csh5N23atDaSznia1GN9iMLC/Gl+lpSU1IcqC8XFxVlzno0bN86asixqQbKH5qKegY8zARMwARMwgUUj0OCNN94IU6dOXbSjs+ioioqKMGnSpCIVKX9atgvGt2DatGlNTznllJAP5mXw4MGcdcMFO/Wc3avoxx9/DKeffnrOnkB6wd9//31e5rsLKx40aFDW1BnXjyKnXVj9vF1GtTlMwARMwATqO4GtBaBzBiCcojw+lAbVcl4ppX+/NLmW88mm5BupMMdJtd0AXlV57CndJMG5NuMzJd6jNjOo47TbKP/D6rgMNZ3920owuueaTjhL0ltD5fhblpQlKcZPWnk8eeGlCZiACZiACZiACaQT6KUXR6Zv8HrOEdhcJR4u+cZ1zlWdC2wC2Uegvg1VyL4acIlMwARMwATynQBDA+mpceQuAeqPemyWu6fgkpuACWQLARuwbKkJl8METMAETMAETMAETMAETCDvCdiA5X0V+wRNwARMwARM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MAETMAETMIF8IJBPExbruj5Wu+WWW9bdfPPN67oci53/8OHDw8EHH4zRy5dod84556x74IEH5sv5ZP15nHbaaaFfv35MjHaYgAmYgAmYgAmYgAmkEbABS4OxmKvla6+9dujcufNiJlP3h7do0YJClNV9SWqsBOUrrbRSXtRNjRGp5YRatozei9+vc5iACZiACZiACZiACaQRyJ9fUUs7qbpaLSvLD88ye/bsukJYa/mWl5fXWtpO+I8EKivtvf5IxVtMwARMwARMwARMIAQbMF8FJmACJmACJmACJmACJmACJpAhAjZgGQLtbEzABEzABEzABEzABEzABEzABszXgAmYgAmYgAmYgAmYgAmYgAlkiIANWIZAOxsTMAETMAETMAETMAETMAETsAHzNWACJmACJmACJmACJmACJmACGSJgA5Yh0M7GBEzABEzABEzABEzABEzABGzAfA2YgAmYgAmYgAmYgAmYgAmYQIYI+IeYMwR6UbNJfk+psDD7vXL/jp1XLKsoKdxiWN9RnG/fFTZrVNy8cKUmBZO+mVTZYrUfOy4/7IBnnqngvVQIBQPW2mKtslmpX7cY3vcXthH91tt4tekzKiZ0/XrguN+35N5f6qygoCAql0qfq+XOJcYuqwmYgAmYgAmYgAlkf6s+z+po4sSJ4e677w633XZbuOWWW8Jjjz0Wfvvtt/me5XXXXRceffTR+b4/vzemTZs2v7dqbXtFRdFSRUWV3T/quEkbMilqUfCvyqLK3ac2adKsuDj14gbff9/k/zO/oiAUVb5U3Dh1fbKN41Kpop6NS0p3TbZlw/Kdd94Jt956a7j99tvDzTffHPr06TPfYlVUVIRrr702/PLLHE85333T3+C46dOnp2+a53oqlQovvfRS+Pbbb+e836NHjzBo0KAwatSoQFnTY8KECeHOO+8M48b9v58dP358uOuuuwLvpcdDDz0U3n///fRNXjcBEzABEzABEzABE6hhAjZgNQz0r5IbOXJkePLJJ8MKK6wQWrRoEd56661w5JFHhpkzZ8ZD6YWYPHnynGQ+//zzMGLEiDB16tRQXl4+ZzsrNKpnzJgRt3EcjXP2GTt2bDjrrLPmNLBnz54dDQHv12ZsNuyjQer4eVm/733NgLU23SUUpjoWj599W2p6QbGybjy5vLwgyX9gp5eLtG28Xq/Wd7XNlq/avmNBKjVNvUeVyX5/scTonSdtJZX+xb6L/DaGGdO14oorRsZXXnllNGJJgtRNYnhh/MUXX8T6Sq9H9sVkpRuzpM6o+9dffz3861//CtQVgSmfNGlSXE//Q88aRu3EE0+Mdf3ll1+G888/PzRv3jyaMExUevz888/hlFNOCS+/rGqpimeffTacfPLJ4aeffko2xeV3330Xy5eUi3xq+5qZqwB+YQImYAImYAImYAL1gICHIGa4kmncduzYMeyzzz4x58MPPzx07do1NoZpsN9www2xYb3SSiuFSy65JDasn3rqqTB48OBQWloarrrqqmjebrrppngMhu6f//xnbCifffbZYeWVV47G7o033gibbrpp2HrrrcOFF14YWrVqFU3eHXfcEZo2bbogZ40JWmjHtsmQj27ut+5mD6dCwSOVqdRWm4wZOP29Fp1alBaXzmWqGs2cWTC1qPTnUJH6oqikcjvl9XBhQcG2Grz3qE5mQW8MYLqukLiO6RJ6RnpP+kj66+4k7bQgUVxcHFnutddecfdVVlkldO/ePcD73nvvjb1GGJVddtklHHroodEgnXrqqaFhw4Zh7bXXjvUzcODA8PDDD0fDjBGjV+qJJ54ITz/9dNzn+++/D5ip/fbbLwwZMiS88sorMa9tttkmkFZ6HHTQQeGTTz4J//jHPwL1f+mllwbKxHHkmR7kteOOO8YyHnHEEdEE0mO23XbbxfX0fYuKikKjRo3iDYJHHnkkcA3SS1tSUpK+m9dNwARMwARMwARMwAQWg4AN2GLAW5RDacx+/fXXgZ4Keqs++OCDsNpqq4W2bduGnXfeORxwwAGBBvbf//730Lt370CjmEY8DX10//33R1M1bNiwgJnCnNFzcsYZZwS2devWLRoses6OOeaY2Kint2TdddeNvR5vvvlm2HfffRek6Etopz0lumH+yhDRs0XXzceptfevHFD5o9xW5XT1ZrXStvlHZSgpCqk3ygsK9xvYcdMB5amCmaGg8gclhItYX1pS+jMTSPp0AbJcS7pcYo7ZCOl/0ttSX2lOdz1cTgAACQxJREFUz5vWFzqoM+ppiSWWiL2TmNv9998/mh+MGHVAnHDCCWGHHXaIvUhHH310NFOYHowR9dK5c+dovE8//fTw/PPPxx5M0r788suj6Vl66aXDhhtuGI9PhjGeeeaZsR4x35g8rgfmA15xxRXR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"}},"execution_count":null},{"metadata":{},"cell_type":"markdown","source":"1. In the begining, people used RNN/CNN over fixed word embedding like Word2Vec.\n2. In translation and text generation tasks, [Attention mechanism](https://arxiv.org/pdf/1409.0473.pdf) is found to be useful.\n3. Based on Self-attention and embedded ensembling(multi-head), [Transformer](https://arxiv.org/pdf/1706.03762.pdf) is proposed and replace RNN/CNN in this field.\n4. Fixed word embedding is showed unable to capture difference of the same word in varied contents. <***Hence, combining word embedding and layers atop to provide contextualized word representations become mainstream.***>\n5. [ELMO](https://arxiv.org/pdf/1802.05365.pdf) is proposed first based on ***Bi-directional LSTM***.\n6. [GPT](https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf) is the next with ***Decoder part of Transformer***. (It uses the generative part, so only in one direction.)\n7. [BERT](https://arxiv.org/pdf/1810.04805.pdf) is the last but the best one. It use ***Encoder part of Transformer and Masked language model(MLM)*** to look up context on both side from the begining.","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"**After Bert, there are two main directions in this field:**\n\n**The first one is to change structure of BERT(including training pattern):**\n1. [Roberta](https://arxiv.org/pdf/1907.11692.pdf):  fine tunes BERT and get better performance.\n2. [XLNet](https://arxiv.org/pdf/1906.08237):  invents Transformer-XL for super long context by involving a segment-level \"RNN\" on Decoder, then use Permutated language model(PLM) to train a generative model with knowledge of context in both side.\n3. [Albert](https://arxiv.org/pdf/1909.11942.pdf):  use word embdedding decomposition and weight sharing to save training cost and  time. With this saving, it makes BERT wider and deeper for better performance.\n4. [T5](https://arxiv.org/abs/1910.10683):  unifies different tasks to the same text-to-text pattern, use multiple task learning(MTL) to achieve a new SOTA.\n5. [Electra](https://arxiv.org/pdf/2003.10555.pdf):  use the concept of GAN to train BERT with generator and discriminator.\n\n\n**The second one is to enlarge training corpus and include different languges:**\n1. A lot of monolinguish BERT models are trained with languge other than English.\n2. Cross languge model like mbert and [XLM-Roberta](https://arxiv.org/pdf/1911.02116.pdf) are trained on multiple language corpus. \n","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"# Two ideas and Corresponding Starter Kernel","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"Back to JMTC-2020. One special point of the task is that the training data is in English, while valid and test data are in other languages. It is a zero-shot like task, where competition orgnizer want to see whether pure training on english can transfer to other language directly.\n\nTo solve this problem, we can either use a **pretrained cross language model**, or some kinds of **translation**. (**or both**)","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"1. For the first idea, the typical starter kernel is @xhlulu 's https://www.kaggle.com/xhlulu/jigsaw-tpu-xlm-roberta. (lb.9383). \n\nHe only use the English training data, sample the negative data for label balancing, train on training data for 2 epoch and valid data for 2 epcoh. His result illustrated the importance of label balancing and ultilizing valid data in this competition.\n\n<br/>\n\n2. For the second one, the starter of this \"translation to English\" path is @miklgr500 's https://www.kaggle.com/miklgr500/jigsaw-tpu-bert-with-huggingface-and-keras (lb .9158). \n\nHe traina BERT-base on fraction of 2018 data and elaborate on learning rate schedule. I tried his way with other advanced BERT-like model and more data, but the lb score always <.92 indicates that using translation to inference may be misleading.","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"In contrast, the first one seems better. To further boost its performance, people start to do different data augmentations. They find that the second idea can also be used as augmentations, so they translate the training data into target languages, then use XLM or other monolinguish models over the translations. \n\n<h4><u>This \"use both\" idea is the mainstream choice in this competition and is used in this notebook.</u><h4/>","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"# The trap about BERT-like model volatility","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"The BERT-like model are very powerful but volatile. From https://arxiv.org/pdf/2002.06305.pdf, we can find that changing random seed of weight initialization and data order alone can affect performance a lot.\n\nMoreover, training with TPU intorduing [uncontrollable randomness](https://cloud.google.com/tpu/docs/troubleshooting#deterministic-training) in data order and parameter updating. That means the training result can vary a lot even all hyperparameters remain the same and random seed is fixed.\n\nCombine the two facts above, we can understand that hyperparameter tuning and model structure choosing is more difficult on TPU. If one just use one-time training result to select hyperparameter and structure, it can be easily mislead by randomness.\n\n<br/><br/>\n\nFor example, the following three kernels use similar structure and complexer setting but have smaller lb score:\n\n1. https://www.kaggle.com/yeayates21/xlm-roberta-augmentation-ssl-0-9417-pub-lb (.9399): used extra open-subtitle dataset and additional augmentations.\n2. https://www.kaggle.com/riblidezso/train-from-mlm-finetuned-xlm-roberta-large (.9422): used seperated learning rate by layers.\n3. https://www.kaggle.com/shonenkov/tpu-training-super-fast-xlmroberta (.9416): used huge amount of augmented data and upsampled the positve data rather than downsampling the negative one. \n\n<span style=\"color:blue\">They all add extra setting before thoroughly explore the basic one, which consumes more resource but does not give better result.</span>\n\n<br/>\n\n<u> I actually followed the third one and implemented upsampling with tf.data.experimental.sample_from_datasets in kaggle kernel. It is more volatile but not giving significant better result. Moreover, it need futher efforts to reduce sizes due to [memory leak](https://www.kaggle.com/questions-and-answers/164991). One can check the commented place in version-1 to know the detailed implemention. </u>\n\n<h3>Lessons learned</h3>\n\n* ***Try basic setting enough times*** before moving to complexer ones when training BERT-like model. \n* ***Train multiple times with the same setting***, and make the decision with mean or the best prediction about hyperparameter and structure.\n","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"# Let's start coding now","execution_count":null},{"metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"import os,re,gc,pickle,random,sys\n\nimport numpy as np \nimport pandas as pd \nimport tensorflow as tf\nimport transformers\nfrom transformers import TFAutoModel\nfrom tensorflow.data.experimental import sample_from_datasets\nfrom tensorflow.data import Dataset\n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom tqdm.notebook import tqdm","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Configuration","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"AUTO = tf.data.experimental.AUTOTUNE\ntry:\n    tpu = tf.distribute.cluster_resolver.TPUClusterResolver()\n    print('Running on TPU ', tpu.master())\nexcept ValueError:\n    tpu = None\nif tpu:\n    tf.config.experimental_connect_to_cluster(tpu)\n    tf.tpu.experimental.initialize_tpu_system(tpu)\n    strategy = tf.distribute.experimental.TPUStrategy(tpu)\nelse:\n    strategy = tf.distribute.get_strategy()\n\nprint(strategy.num_replicas_in_sync)\nBATCH_SIZE = 32 * strategy.num_replicas_in_sync","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"np.random.seed(1234)\nrandom.seed(1234)\nos.environ['TF_DETERMINISTIC_OPS'] = '1'\nwith strategy.scope():\n    tf.random.set_seed(1234)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"MAX_LEN = 192\nMODEL = 'jplu/tf-xlm-roberta-large'\nHEAD = \"mean\"\n\ninput1 = \"/kaggle/input/jigsaw-multilingual-toxic-comment-classification/\"\ninpath = \"../input/jwtc-xlmroberta-encoding-192-pickle/datain/\"\nform = \"training/encode_{}.pkl\"\nlangs = [\"en\",\"en2\",\"es\",\"fr\",\"it\",\"pt\",\"ru\",\"tr\"]\nused_data = langs #[\"en\",\"en2\"]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Load Data","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"Since we will train on the same data many times, I follow https://www.kaggle.com/yeayates21/xlm-roberta-augmentation-ssl-0-9417-pub-lb to do encoding in a seperate kernal and save the result as a [dataset](https://www.kaggle.com/mint101/jwtc-xlmroberta-encoding-192-pickle). This method save about 20 min per kernel run.","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def pick_load_format(path):\n    with open(inpath+path,\"rb\") as f:\n        return pickle.load(f)\n\ndef load(path):\n    return pick_load_format(form.format(path))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_cong(n,verb=True):\n    tot = round(1+(n*2)/10_000)*10_000\n    if verb: print(\"Pos: {}, Sample neg: {}, Total: {}\".format(n,tot-n,tot))\n    return tot,tot-n\n\ndef load_data(seed=1214):\n    train = []\n    for i in used_data:\n        df1 = load(i+\"_l1\")\n        size, sample_size = get_cong(df1.shape[0])\n        df0 = load(i+\"_l0\").sample(n=sample_size, random_state=seed)\n        train += [df1,df0]\n    train = pd.concat(train)\n\n    train = np.stack(train.comment_text.values, axis=0).astype(\"int32\"),train.toxic.values\n\n    valid = pick_load_format(\"valid.pkl\")\n    x_valid = np.stack(valid.comment_text.values, axis=0).astype(\"int32\")\n    y_valid = valid.toxic.values\n\n    test = pick_load_format(\"test.pkl\")\n    x_test = np.stack(test.content.values, axis=0).astype(\"int32\")\n    \n    return train,(x_valid,y_valid),x_test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\ntrain,valid,test = load_data()\ngc.collect()\n\nvalid_size = len(valid[1])\ntrain_size = len(train[1])\nprint(train_size,valid_size)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# TF dataset","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"The shuffle_size must be large need to ensure dataset well shuffled.","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def make_dataset_pipeline(dataset, cache=False,repeat_and_shuffle=False,shuffle_size=128_000,seed=386491):\n    if cache: dataset = dataset.cache()\n    if repeat_and_shuffle:\n        dataset = dataset.repeat().shuffle(shuffle_size,seed)\n    dataset = dataset.batch(BATCH_SIZE)\n    dataset = dataset.prefetch(AUTO)\n    return dataset","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dataset = Dataset.from_tensor_slices(train)\ntrain_dataset = make_dataset_pipeline(train_dataset,True, repeat_and_shuffle=True)\n\nvalid_dataset = make_dataset_pipeline(Dataset.from_tensor_slices(valid) ) \nvalid_dataset2 = make_dataset_pipeline(Dataset.from_tensor_slices((valid)), True,\n                                       shuffle_size=8000, repeat_and_shuffle=True ) \n\ntest_dataset = make_dataset_pipeline(Dataset.from_tensor_slices(test))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Build the model and check summary","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"The build_model function is defined to allow different top layers: CLS, globalmean, globalaverage. One can add other structure into the 'dic' and referred by self-defined string.","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.layers import Input,Dropout,Dense,GlobalAveragePooling1D,GlobalMaxPool1D\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.metrics import AUC \nfrom tensorflow.keras.initializers import GlorotUniform\n\ndef get_cls(x):\n    return x[:, 0, :]\n\ndic = {\"mean\":GlobalAveragePooling1D(),\n      \"max\":GlobalMaxPool1D(),\n      \"cls\":get_cls}\n\ndef build_model(transformer,head=\"cls\" , loss='binary_crossentropy',\n                max_len=512, drop_rate=None, lr=1e-5,seed=940208):\n    input_word_ids = Input(shape=(max_len,), dtype=tf.int32, name=\"input_word_ids\")\n    sequence_output = transformer(input_word_ids)[0]\n    x = dic[head](sequence_output)\n    if drop_rate is not None: \n        x = Dropout(drop_rate)(x)\n    out = Dense(1, activation='sigmoid',kernel_initializer=GlorotUniform(seed))(x)\n    \n    model = Model(inputs=input_word_ids, outputs=out)\n    model.compile(Adam(lr=lr), loss=loss, metrics=[AUC()])\n    \n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"%%time\nwith strategy.scope():\n    transformer_layer = TFAutoModel.from_pretrained(MODEL)\n    model = build_model(transformer_layer,head=HEAD,loss='binary_crossentropy', max_len=MAX_LEN)\nmodel.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, LearningRateScheduler,ReduceLROnPlateau\n\nmodel_path = \"xlm-roberta.h5\"\ncheckpoint = ModelCheckpoint(model_path, monitor='val_auc', mode='max', save_best_only=True, save_weights_only=True, verbose=1)\nes = EarlyStopping(monitor='val_auc', mode='max', patience=6, restore_best_weights=False, verbose=1)\nrp = ReduceLROnPlateau(monitor='val_auc', factor=0.8, patience=3, verbose=1, mode='max')\n\ncallback_list = [checkpoint,es,rp]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Training","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\nN_STEPS = train_size // (BATCH_SIZE*4)\nEPOCHS = 10\ntrain_history = model.fit(\n    train_dataset,\n    steps_per_epoch=N_STEPS,\n    validation_data=valid_dataset,\n    callbacks=callback_list,\n    epochs=EPOCHS\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del model\ngc.collect()\ntf.tpu.experimental.initialize_tpu_system(tpu)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\nwith strategy.scope():\n    transformer_layer = TFAutoModel.from_pretrained(MODEL)\n    model = build_model(transformer_layer,head=HEAD,loss='binary_crossentropy', max_len=MAX_LEN,lr=8e-6)\n    model.load_weights(model_path)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\nn_steps = valid_size // (BATCH_SIZE)\nEPOCHS = 1\ntrain_history_2 =model.fit(\n    valid_dataset2,\n    steps_per_epoch=n_steps,\n    epochs= EPOCHS\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!rm xlm-roberta.h5","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Make Submission","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"sub = pd.read_csv(input1 + \"sample_submission.csv\")\nsub['toxic'] = model.predict(test_dataset, verbose=1)\nsub.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Further Steps","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<h3> Pseudo labeling </h3>\n\nAfter achieve <span style=\"color:red\">lb.9455</span> with ensmeble basic XLM-R model, I followed the [second place solution](https://www.kaggle.com/xiwuhan/jmtc-2nd-place-solution?scriptVersionId=37463887) to train XLM-R model with pseudo-label on test data. It suggests using high quality predictions on test data as augmentations. Rather than hard label, I followed [first place](https://www.kaggle.com/c/jigsaw-multilingual-toxic-comment-classification/discussion/160862) to use soft label. \n\nhttps://www.kaggle.com/mint101/example-code-of-pseudo-label-on-xlm-r is an example code of training XLM-R with pseudo-labeling.\n\nTwo lessons are learned from training with pseudo-labeling:\n1. Mixing the pseudo-labeling with original training data and training together is better than training two data sequentially.\n2. Training with pseudo-labeling does not guarantee a better result, but ensemble it with the one generating pseudo-label is likely to give better result.\n\n\n\n\n\nEnsemble on multiple results with pseudo-label boost my score to <span style=\"color:red\"> lb.9462</span>\n\n<u> With multiple turn of pseudo-label and fine-tune, it can achieve [lb.9475](https://www.kaggle.com/hmendonca/jigsaw20-xlm-r-lb0-9487-singel-model). (<span style=\"color:red\">Need huge resource and extensive search</span>) </u>","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"<h3>Transfer to monolingual model</h3>\n\nAfter achieve <span style=\"color:red\"> lb.9462</span>, I follow [first place](https://www.kaggle.com/c/jigsaw-multilingual-toxic-comment-classification/discussion/160862) to transfer knowledge of cross language model to monolingual models. \n\nhttps://www.kaggle.com/mint101/transfer-to-monolingual-mix is an example of transfer to a spanish model. It scores <span style=\"color:red\"> .9461</span> before and <span style=\"color:red\">.9467</span> after ensemble with the result being transferred.\n\nAfter transfer to monolingual models in each language, I combine all these models and get <span style=\"color:red\"> lb.9500</span>. With slight adjustment, I achieve [lb.9508](https://www.kaggle.com/mint101/jmtc-20-lb-9508-mono-lingual-models).","execution_count":null}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}