{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "accelerator": "GPU", "widgets": { "application/vnd.jupyter.widget-state+json": { "97ec0cd332334ec0babed9d67365fef4": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_dd0b94325ff946648fb3d6572bcefe21", "IPY_MODEL_1da3d2dd8d67470c906267db0d033eea", "IPY_MODEL_66fb8e5d0514480e9c7bc6ac83ce62bb" ], "layout": "IPY_MODEL_8e56558e9cd0430a9ffea5b045802cc7" } }, "dd0b94325ff946648fb3d6572bcefe21": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_4b5202b98b7f4d7bbd3495ef7bd215dc", "placeholder": "​", "style": "IPY_MODEL_df17bef95f9b47c38cc518d6fc6067f1", "value": "Downloading: 100%" } }, "1da3d2dd8d67470c906267db0d033eea": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_498010aed4c44fc9bb350c537be0343a", "max": 213450, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_4f0210f7882c4cbc985a05cc2d07eb6c", "value": 213450 } }, "66fb8e5d0514480e9c7bc6ac83ce62bb": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_7e9ab77b6e744800aa2064867e3baaaf", "placeholder": "​", "style": "IPY_MODEL_66fbc9ef81c8404cb403fbdabe29f85d", "value": " 213k/213k [00:00<00:00, 794kB/s]" } }, "8e56558e9cd0430a9ffea5b045802cc7": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4b5202b98b7f4d7bbd3495ef7bd215dc": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "df17bef95f9b47c38cc518d6fc6067f1": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "498010aed4c44fc9bb350c537be0343a": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4f0210f7882c4cbc985a05cc2d07eb6c": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "7e9ab77b6e744800aa2064867e3baaaf": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "66fbc9ef81c8404cb403fbdabe29f85d": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "ac7dc14bb6cd4a4db9c793a3b816b94d": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_a7cd8077934941b49f9cc8d019c02080", "IPY_MODEL_61d4ffc13ea44ef5b4604b04c7427c5d", "IPY_MODEL_50a2d2adfeeb45f8ad0af2d4c6ec7be7" ], "layout": "IPY_MODEL_47c729c8718f47dc82d1a4ad0b8ba507" } }, "a7cd8077934941b49f9cc8d019c02080": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_0c4d5e22864b4e0b973291057e84a072", "placeholder": "​", "style": "IPY_MODEL_4cead8f48ae541d3a03ab96dba59dda0", "value": "Downloading: 100%" } }, "61d4ffc13ea44ef5b4604b04c7427c5d": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_9455e5c7106d469fb5ef5c771adb5d39", "max": 29, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_68e1b90fa71c46cf8f4736ada2c53c62", "value": 29 } }, "50a2d2adfeeb45f8ad0af2d4c6ec7be7": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5287164483dd43f9b13f0baeef16301f", "placeholder": "​", "style": "IPY_MODEL_2d5148a6ac534f768cec7b25bc7963a8", "value": " 29.0/29.0 [00:00<00:00, 1.49kB/s]" } }, "47c729c8718f47dc82d1a4ad0b8ba507": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "0c4d5e22864b4e0b973291057e84a072": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4cead8f48ae541d3a03ab96dba59dda0": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "9455e5c7106d469fb5ef5c771adb5d39": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "68e1b90fa71c46cf8f4736ada2c53c62": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "5287164483dd43f9b13f0baeef16301f": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "2d5148a6ac534f768cec7b25bc7963a8": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "53b9dc8721ce4e998d3511e845feed54": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_fb42909d39124bae88a7b4dc3c59f14f", "IPY_MODEL_44d8f866c7414ae0b7a0ee01b1be065a", "IPY_MODEL_095728c4ac944228ada0a95be25da0ca" ], "layout": "IPY_MODEL_45f503bfcc66414ba2cdb04a7f9c14f7" } }, "fb42909d39124bae88a7b4dc3c59f14f": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_3051e41119b9472b9c575dfdd9d38323", "placeholder": "​", "style": "IPY_MODEL_049a2ad3c16343989b954adb01b3cfbc", "value": "Downloading: 100%" } }, "44d8f866c7414ae0b7a0ee01b1be065a": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_350727a179c44dcab20d3f7fd882f772", "max": 570, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_198f59d7cd9e4aeb84bd207f2b6b452c", "value": 570 } }, "095728c4ac944228ada0a95be25da0ca": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_72db6f65efe94b88ae465d44fa17b571", "placeholder": "​", "style": "IPY_MODEL_4cb93c7181154dd0bdea8d21d97dd131", "value": " 570/570 [00:00<00:00, 31.7kB/s]" } }, "45f503bfcc66414ba2cdb04a7f9c14f7": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "3051e41119b9472b9c575dfdd9d38323": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "049a2ad3c16343989b954adb01b3cfbc": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "350727a179c44dcab20d3f7fd882f772": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "198f59d7cd9e4aeb84bd207f2b6b452c": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "72db6f65efe94b88ae465d44fa17b571": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4cb93c7181154dd0bdea8d21d97dd131": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "1b584462ac5e4251ae40be84572216a1": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_862f9e6a8b9d4681b94dac3300ea8c60", "IPY_MODEL_ca2252e81a3741eba39508589e80a8b8", "IPY_MODEL_5aeb828437eb43a6940aa66fd61d2aca" ], "layout": "IPY_MODEL_a87edd46a25d42c1b9202565e1906aaa" } }, "862f9e6a8b9d4681b94dac3300ea8c60": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_fc0b3769309e441ea5b7fb858aaac313", "placeholder": "​", "style": "IPY_MODEL_e6170b4fe7a74df6bd24c2f528e0eddd", "value": "Downloading: 100%" } }, "ca2252e81a3741eba39508589e80a8b8": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_6829493970a6428dba31f6471a9de0aa", "max": 435779157, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_b4beeba096c54cd7a82eac7bc88efbe3", "value": 435779157 } }, "5aeb828437eb43a6940aa66fd61d2aca": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_4158cb4fa3ed43e5845d0bfd82c759b3", "placeholder": "​", "style": "IPY_MODEL_bf7aa9240b7c4cfbb17eee03fcc1fad3", "value": " 436M/436M [00:06<00:00, 62.7MB/s]" } }, "a87edd46a25d42c1b9202565e1906aaa": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "fc0b3769309e441ea5b7fb858aaac313": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "e6170b4fe7a74df6bd24c2f528e0eddd": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "6829493970a6428dba31f6471a9de0aa": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b4beeba096c54cd7a82eac7bc88efbe3": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "4158cb4fa3ed43e5845d0bfd82c759b3": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "bf7aa9240b7c4cfbb17eee03fcc1fad3": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } } } } }, "cells": [ { "cell_type": "code", "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "# Text Preprocessing & Cleaning\n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "from nltk.corpus import stopwords\n", "import re\n", "from wordcloud import WordCloud,STOPWORDS\n", "from nltk import SnowballStemmer\n", "\n", "\n", "from sklearn.model_selection import train_test_split # Split Data \n", "from imblearn.over_sampling import SMOTE # Handling Imbalanced\n", "\n", "# Model Building\n", "from sklearn.ensemble import GradientBoostingClassifier\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.ensemble import RandomForestClassifier \n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.naive_bayes import MultinomialNB\n", "from xgboost import XGBClassifier\n", "from sklearn.svm import SVC\n", "\n", "\n", "from sklearn.metrics import classification_report , confusion_matrix , accuracy_score # Performance Metrics \n", "\n", "\n", "# Data Visualization \n", "import matplotlib.pyplot as plt\n", "from wordcloud import WordCloud\n", "import seaborn as sns\n", "import warnings \n", "\n", "\n", "warnings.filterwarnings('ignore')\n", "%matplotlib inline" ], "metadata": { "id": "oUtTJtcjzAC1" }, "execution_count": 3, "outputs": [] }, { "cell_type": "code", "source": [ "import nltk\n", "nltk.download('stopwords')" ], "metadata": { "id": "n_1t9i0uzKMg", "outputId": "758409f2-dcdd-44ec-88cf-6474b90c3553", "colab": { "base_uri": "https://localhost:8080/" } }, "execution_count": 4, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "[nltk_data] Downloading package stopwords to /root/nltk_data...\n", "[nltk_data] Unzipping corpora/stopwords.zip.\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "True" ] }, "metadata": {}, "execution_count": 4 } ] }, { "cell_type": "code", "metadata": { "id": "Kj_7Tz0-pK69", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "0b1f99fd-287d-4925-bc92-05eb10cec7cf" }, "source": [ "!pip install -q -U watermark" ], "execution_count": 5, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\u001b[?25l\r\u001b[K |▏ | 10 kB 13.1 MB/s eta 0:00:01\r\u001b[K |▍ | 20 kB 6.4 MB/s eta 0:00:01\r\u001b[K |▋ | 30 kB 9.1 MB/s eta 0:00:01\r\u001b[K |▉ | 40 kB 6.2 MB/s eta 0:00:01\r\u001b[K |█ | 51 kB 5.9 MB/s eta 0:00:01\r\u001b[K |█▎ | 61 kB 7.0 MB/s eta 0:00:01\r\u001b[K |█▌ | 71 kB 7.4 MB/s eta 0:00:01\r\u001b[K |█▊ | 81 kB 8.3 MB/s eta 0:00:01\r\u001b[K |█▉ | 92 kB 8.1 MB/s eta 0:00:01\r\u001b[K |██ | 102 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██▎ | 112 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██▌ | 122 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██▊ | 133 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███ | 143 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███▏ | 153 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███▍ | 163 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███▌ | 174 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███▊ | 184 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████ | 194 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████▏ | 204 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████▍ | 215 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████▋ | 225 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████▉ | 235 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████ | 245 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████▎ | 256 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████▍ | 266 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████▋ | 276 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████▉ | 286 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████ | 296 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████▎ | 307 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████▌ | 317 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████▊ | 327 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████ | 337 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████ | 348 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████▎ | 358 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████▌ | 368 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████▊ | 378 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████ | 389 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████▏ | 399 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████▍ | 409 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████▋ | 419 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████▊ | 430 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████ | 440 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████▏ | 450 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████▍ | 460 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████▋ | 471 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████▉ | 481 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████ | 491 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████▎ | 501 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████▌ | 512 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████▋ | 522 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████▉ | 532 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████ | 542 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████▎ | 552 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████▌ | 563 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████▊ | 573 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████ | 583 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████▏ | 593 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████▎ | 604 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████▌ | 614 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████▊ | 624 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████ | 634 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████▏ | 645 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████▍ | 655 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████▋ | 665 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████▉ | 675 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████ | 686 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████▏ | 696 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████▍ | 706 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████▋ | 716 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████▉ | 727 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████ | 737 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████▎ | 747 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████▌ | 757 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████▊ | 768 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████▉ | 778 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████ | 788 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████▎ | 798 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████▌ | 808 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████▊ | 819 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████ | 829 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████▏ | 839 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████▍ | 849 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████▌ | 860 kB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████▊ | 870 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████ | 880 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████▏ | 890 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████▍ | 901 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████▋ | 911 kB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████▉ | 921 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████ | 931 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████▎ | 942 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████▍ | 952 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████▋ | 962 kB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████▉ | 972 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████ | 983 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████▎ | 993 kB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████▌ | 1.0 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████▊ | 1.0 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████ | 1.0 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████ | 1.0 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████▎ | 1.0 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████▌ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████▊ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████▏ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████▍ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████▊ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████▏ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████▍ | 1.1 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████▋ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████▉ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████▎ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████▌ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████▋ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████▉ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▎ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▌ | 1.2 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████▊ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▏ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▎ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▌ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████▊ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▏ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▍ | 1.3 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▋ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▉ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████████ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▏ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▍ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▋ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████████▉ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▎ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▌ | 1.4 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▊ | 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▉ | 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████ | 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▎ | 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▌ | 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▊ | 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████ | 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▏| 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▍| 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▌| 1.5 MB 7.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▊| 1.6 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 1.6 MB 7.3 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 1.6 MB 7.3 MB/s \n", "\u001b[?25h" ] } ] }, { "cell_type": "code", "metadata": { "id": "Jjsbi1u3QFEM", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "4cadbe15-7c8e-493b-c945-b93dcfd9d12f" }, "source": [ "!pip install -qq transformers" ], "execution_count": 6, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\u001b[K |████████████████████████████████| 5.8 MB 7.7 MB/s \n", "\u001b[K |████████████████████████████████| 7.6 MB 53.9 MB/s \n", "\u001b[K |████████████████████████████████| 182 kB 72.1 MB/s \n", "\u001b[?25h" ] } ] }, { "cell_type": "code", "metadata": { "id": "AJqoaFpVpoM8", "outputId": "da8e5343-1b6b-4165-e528-85fd0af4399b", "colab": { "base_uri": "https://localhost:8080/" } }, "source": [ "%reload_ext watermark\n", "%watermark -v -p numpy,pandas,torch,transformers" ], "execution_count": 7, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Python implementation: CPython\n", "Python version : 3.8.16\n", "IPython version : 7.9.0\n", "\n", "numpy : 1.21.6\n", "pandas : 1.3.5\n", "torch : 1.13.0+cu116\n", "transformers: 4.25.1\n", "\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "ufzPdoTtNikq" }, "source": [ "## Data Exploration\n", "\n", "We'll load the Google Play app reviews dataset, that we've put together in the previous part:" ] }, { "cell_type": "code", "metadata": { "id": "mUKLyKc7I6Qp", "outputId": "6d5dbbe7-11ca-4cd9-e152-89488182844d", "colab": { "base_uri": "https://localhost:8080/", "height": 206 } }, "source": [ "df = pd.read_csv(\"data.csv\")\n", "df = df.loc[:, ~df.columns.str.contains('^Unnamed')]\n", "df.head()" ], "execution_count": 10, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " airline_sentiment text\n", "0 positive @VirginAmerica plus you've added commercials t...\n", "1 negative @VirginAmerica it's really aggressive to blast...\n", "2 negative @VirginAmerica and it's a really big bad thing...\n", "3 negative @VirginAmerica seriously would pay $30 a fligh...\n", "4 positive @VirginAmerica yes, nearly every time I fly VX..." ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
airline_sentimenttext
0positive@VirginAmerica plus you've added commercials t...
1negative@VirginAmerica it's really aggressive to blast...
2negative@VirginAmerica and it's a really big bad thing...
3negative@VirginAmerica seriously would pay $30 a fligh...
4positive@VirginAmerica yes, nearly every time I fly VX...
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "code", "metadata": { "id": "dB2jE6am7Dpo", "outputId": "c71dbd89-4ff4-4e64-8771-4df116f1011b", "colab": { "base_uri": "https://localhost:8080/" } }, "source": [ "df.shape" ], "execution_count": 11, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(11541, 2)" ] }, "metadata": {}, "execution_count": 11 } ] }, { "cell_type": "markdown", "metadata": { "id": "TWqVNHJbn10l" }, "source": [ "We have about 16k examples. Let's check for missing values:" ] }, { "cell_type": "code", "metadata": { "id": "VA_wGSLQLKCh", "outputId": "4a479c5a-fd22-4197-a028-05938542f6cd", "colab": { "base_uri": "https://localhost:8080/" } }, "source": [ "df.info()" ], "execution_count": 12, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 11541 entries, 0 to 11540\n", "Data columns (total 2 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 airline_sentiment 11541 non-null object\n", " 1 text 11541 non-null object\n", "dtypes: object(2)\n", "memory usage: 180.5+ KB\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "H3cL_1qVn_6h" }, "source": [ "Great, no missing values in the score and review texts! Do we have class imbalance?" ] }, { "cell_type": "code", "metadata": { "id": "Wwh_rW4Efhs3", "outputId": "f2955c2f-8f3d-4ade-b70b-2a2c04f35d7a", "colab": { "base_uri": "https://localhost:8080/", "height": 506 } }, "source": [ "sns.countplot(df.airline_sentiment)\n", "plt.xlabel('review score');" ], "execution_count": 13, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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AACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAAAIACIR0AAAAAAAqEdAAAAAAAKBDSAQAAAACgQEgHAAAA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7yRJxowZUxt/44036s7t7OzM+vXrkySjR4/uMbZpjfXr16erq6vuGuvWratd11ujtIctx7dcAwAAAACAHTfgQnqlUsm+++6bJBkxYkQGDar/EUeOHFm73vSV/smTJ9fee/311+vOXbNmTe0Ymc3nbP66u7s7v/3tb+uusfn69dZ47bXX6s7ffI3dd9+9IT80CgAAAADw/7sBF9KTZNq0aUk2fiN88zPTt9Ta2lq7HjFiRJLkwAMPrP1I6PLly+vOfeaZZ2rXU6dO7TG2+esPs0ZTU1MOOOCAXtdYu3Zt1q5dW3eNTetvuQcAAAAAAPrGgAzpM2fOTLLxjPJSyP7FL36RJNl3331r54sPGzYsRxxxRJKNZ6fXO6P8Zz/7WZKNx6lseVD/jBkzat9233Tfljo6OvLII48kST7zmc9k2LBhPcaPO+642vX999/f6xorVqzIq6++miQ5/vjj63xKAAAAAAB2xIAM6UcffXQmTZqUJPnOd76T9957b6t7Fi1alJdffjnJxh8e3dxZZ52VZOMZ5rfccstWc5ctW5af//znSZLTTz89gwcP7jE+ePDgnHHGGUmSRx99NMuWLdtqjVtuuaV2Rvqm521u2rRpOeyww5IkCxYs6PHt+SSpVqv51re+lWTjj4yecsopW60BAAAAAMCO2+Waa665pr830dd22WWXTJw4MT/5yU/y2muv5Zlnnsnee++d3XbbLWvXrs3tt9+eb37zm+nu7s5ee+2Vb3zjG7XjXJKN31B/9tln88orr+Tpp59OV1dX9tprr3R0dOSBBx7IFVdckfb29kyYMCHf/OY3t/o2ebLxqJV77703bW1teeihhzJu3LiMGzcu69aty80335x58+alWq3m6KOPzpe//OVeP8f++++fxYsXp62tLUuWLMk+++yT4cOHZ/Xq1bn22mvz6KOPJkkuvvjiHHXUUX3+d3zjjTfS0dGRoUOHZty4cX2+PgAA0LvW17/T31sAAAaI0RO/0t9b2GnsSO+sVKvVaoP21e/uuOOOXHfddens7Ox1fOLEifne976X/ffff6ux9evX5/zzz697NMz48eMzf/78HHLIIXWfv2LFilxwwQVpaWnpdXz69OlZsGBB7Xz23ixatChXX3113c8wa9asfP3rX687f0esXLkybW1tGT58eKZMmdKQZwAAAFtbvXRyf28BABgg9j1i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NB3P8tRTT2XDhg3NxmfPnr3Da22vpqYmAwYMSJLMmjWr+HMBAAAAALB7OnRI37JlSyZNmpTNmzfnqquuSr9+/XZ6zyuvvJKNGzcmSY4//vhW52079uKLLzYb2/brXVlj48aNefXVV1tco1+/fjnssMNaXeO4445rcQ8AAAAAAOwdHTqkT58+PS+88EJqampywQUX7NI9ixYtaro+4ogjWp3Xv3//dOrUaYd7tv26U6dO6d+/f6trbLt+a2vs7MNRt66xdu3aLFu2rDgXAAAAAIAPrsOG9KVLl+bf/u3f0qlTp1x//fU54IADdum+lStXNl0fcsghrc7r3Llzqqqqkrx/vEtLa1RVVaVz586trlFdXd103doapT1sP779GgAAAAAA7LnK9t5AW7nxxhuzbt26nH/++Tn22GN3+b7169c3XXft2rU4d+v4unXrWlxjZ/d369at6bq1NVo7o31X1thb1qxZs8M58AAAwN73mc98pr23AAB0UPrenumQT6T/93//d2bPnp0+ffrkmmuuae/tAAAAAADwEdbhnkhfvXp1vve97yVJJk6cmB49enyg+w888MCm660fOtqareMHHXRQi2vs7P4NGzY0Xbe0RkNDQzZt2rTba+wt3bt3z+DBg9tkbQAAAACg7fk/35KFCxdmzZo1u3Vvh3si/bbbbkt9fX2GDRuWL37xix/4/t69ezddv/POO63Oa2hoyOrVq5MkvXr1anGN1atXZ/Pmza2usWLFiqbr1tYo7WH78e3XAAAAAABgz3W4J9KXLFmSJHnyySd3+hR1bW1tamtrkyQ/+MEPMnLkyAwcOHCHtVqydOnSbNmyJUma3bPt11u2bMmbb76Zj3/848W9trbG66+/nsWLFxd/hq1rHHzwwenXr19xLgAAAAAAH1yHeyJ9Tw0aNKjpQ0Lnz5/f6rx58+Y1XdfU1DQb2/brXVmja9eu+eQnP9niGsuWLcuyZctaXWPr+tvvAQAAAACAvaPDPZH+7W9/O1//+teLc77yla8kSUaMGJGrrroqSXLEEUckSbp165aTTjopc+bMySOPPJJ//Md/TJcuXXZY46GHHkry/nEq258vNHTo0FRVVWX16tV56KGH8qUvfWmH+zdt2pRZs2YlSU4++eR069at2fiIESPygx/8IEny4IMP5sILL9xhjQULFuSNN95Ikpx++unFnxkAAAAAgN3T4Z5IP/LII3PMMccU/2zVq1evpu9t+6Gk559/fpL3zzCfNm3aDq8xd+7czJkzJ0ny1a9+NZWVzf97RGVlZc4999wkyezZszN37twd1pg2bVrTGelbX29bn/rUp3LssccmSaZOnZpVq1Y1G29sbMwtt9yS5P0PGf3yl79c/sUAAAAAALBbOlxI3xtOO+20nHrqqUmSyZMnZ/LkyVm8eHHq6+tTW1ubyy+/PFu2bEm/fv0yfvz4Fte45JJL0q9fv2zZsiWXX355amtrU19fn8WLF+fWW2/N5MmTkySnnnpq02ttb+LEiamsrEx9fX3Gjh2bJ598MitWrMhLL72UK6+8Mk888USS5Iorrkh1dXUb/CYAAAAAAKhobGxsbO9NfNi2fgjp6NGjc/PNN7c4Z/Xq1Rk/fnyrZ5z36dMnU6ZMafaE+/YWLFiQSy+9NPX19S2OH3/88Zk6dWqzp+G3V1tbm0mTJqWhoaHF8TFjxuSGG25o9f49sXDhwqxZsybdu3ff6Qe3AgAAe89rdQPbewsAQAfxiZMWtfcW9hl70js73Bnpe0tVVVXuueeezJgxI/fdd18WLVqUhoaG9O/fP2eccUYuuuiinT4FPmTIkNx3332ZNm1aHnnkkSxdujSdO3fOUUcdlVGjRmXMmDE7HAuzvdGjR2fIkCG5++6785vf/Cb19fXp2bNnampqct5552XEiBF788cGAAAAAGA7++UT6ewaT6QDAED78EQ6ALC3eCL9/+xJ73RGOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFFS29wbgo+So2kXtvQUAoIP44+iB7b0FAABgF3kiHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoqGzvDbSFjRs35vHHH88TTzyR559/PosXL866devSvXv3DBo0KKeffnrOPffcdO/evbjO5s2bM2PGjNx///1ZtGhRNm3alP79+2fkyJG58MILU11dvdO9rFixInfffXd+/etfZ+nSpenSpUsGDhyYUaNGZcyYMams3PlfgoULF+ZHP/pR6urqsnz58vTs2TM1NTUZM2ZMRowYscu/FwAAAAAAPriKxsbGxvbexN72l3/5l1m7dm1xzmGHHZbvf//7OfbYY1sc//Of/5xx48Zl/vz5LY736dMnU6ZMyTHHHNPqayxYsCCXXnpp6uvrWxw//vjjM3Xq1PTo0aPVNWprazNp0qQ0NDS0OH7eeefl+uuvb/X+PbFw4cKsWbMm3bt3z+DBg9vkNT5qjqpd1N5bAAA6iD+OHtjeW2Af9lqdvz8AgL3jEyfpWVvtSe/skEe7rF27Np07d86ZZ56ZW265Jf/7v/+bZ555Jg888EAuvfTSVFZW5k9/+lPGjx+fZcuWtbjGNddck/nz56eioiITJkzIww8/nMcffzw33XRTevTokfr6+lx22WVZtWpVi/evWrUqEyZMSH19faqqqnLTTTfl8ccfz8MPP5wJEyakoqIi8+bNyzXXXNPqzzF37tx897vfTUNDQ44++ujcddddqaury8yZMzNy5Mgkyc9+9rNMmTJlz39pAAAAAAC0qEOG9PPPPz+zZ8/O5MmT88UvfjEf//jH07NnzwwaNCjXXnttbr755iTJu+++mzvuuGOH+x999NE89thjSZKrrroqV199dQYMGJC+ffvmnHPOyZ133pmKioosW7YsU6dObXEPU6ZMybJly1JRUZE77rgj55xzTvr27ZsBAwbk6quvzlVXXZUkeeyxx5pea3s333xzNm/enEMPPTTTp0/PKaeckurq6tTU1OS2227LsGHDkiS33357VqxYsce/NwAAAAAAdtQhQ/p1112XPn36tDo+atSoHH300UnSYsS+5557kiS9e/fOuHHjdhgfOnRohg8fniT5+c9/ns2bNzcb37x5c+69994kyfDhwzN06NAd1hg3blx69erV7PW29cILL+T5559PkowfPz69e/duNl5RUZFrr702SbJu3br86le/avXnBQAAAABg93XIkL4rBg0alCR5++23m31/w4YNqaurS5KcccYZ6dKlS4v3n3nmmUneP8Jl7ty5zcZ++9vfZvXq1c3mba9Lly5Nx7M89dRT2bBhQ7Px2bNn7/Ba26upqcmAAQOSJLNmzWpxDgAAAAAAe2a/DenLly9Pkh0+6POVV17Jxo0bk7z/YaCt2XbsxRdfbDa27de7ssbGjRvz6quvtrhGv379cthhh7W6xnHHHdfiHgAAAAAA2Dv2y5C+fPny/O53v0uSfPrTn242tmjR/32K7RFHHNHqGv3790+nTp12uGfbrzt16pT+/fu3usa267e2xpFHHtnq/duusXbt2lY/OBUAAAAAgN1X2d4baA+33HJLGhoakiTnr91rSAAAIABJREFUnXdes7GVK1c2XR9yyCGtrtG5c+dUVVVl1apVWbVqVYtrVFVVpXPnzq2uUV1d3XTd2hqlPWw/vmrVqvTr1684f3esWbNmh+Nr9jef+cxn2nsLAEAHtb+/z6I57zsBgLbifeee2e+eSL/vvvsyc+bMJMnpp5+ez3/+883G169f33TdtWvX4lpbx9etW9fiGju7v1u3bk3Xra3R2hntu7IGAAAAAAB7br96Iv3555/PpEmTkiQf+9jH8v/+3/9r5x19NHTv3j2DBw9u720AAHRInkAGAODD4H1nsnDhwqxZs2a37t1vnkj/4x//mEsvvTQbNmxIr169MnXq1GZHq2x14IEHNl1v/dDR1mwdP+igg1pcY2f3b9iwoem6tTU2bdq022sAAAAAALDn9ouQvnTp0lx88cVZuXJlDj744EyZMiWf/OQnW5zbu3fvput33nmn1TUbGhqyevXqJEmvXr1aXGP16tXZvHlzq2usWLGi6bq1NUp72H58+zUAAAAAANhzHT6kL1++PBdddFHeeuutdOvWLXfeeWeOPfbYVucPHDiw6XrJkiWtzlu6dGm2bNmywz3bfr1ly5a8+eabra6x7fqtrbF48eJW7992jYMPPrhNPmgUAAAAAGB/16FD+rvvvpuLLroor732Wjp37px///d/zwknnFC8Z9CgQU0fEjp//vxW582bN6/puqamptnYtl/vyhpdu3bd4Qn5rWssW7Ysy5Yta3WNretvvwcAAAAAAPaODhvS165dm/Hjx+f3v/99OnXqlH/913/NaaedttP7unXrlpNOOilJ8sgjj7R6RvlDDz2U5P3jVLY/qH/o0KGpqqpqNm97mzZtyqxZs5IkJ598crp169ZsfMSIEU3XDz74YItrLFiwIG+88UaS5PTTTy/+XAAAAAAA7J4OGdI3bdqUyy+/PM8//3yS5MYbb8xZZ521y/eff/75Sd4/w3zatGk7jM+dOzdz5sxJknz1q19NZWVls/HKysqce+65SZLZs2dn7ty5O6wxbdq0pjPSt77etj71qU81HUEzderUrFq1qtl4Y2NjbrnlliTvf8jol7/85V3++QAAAAAA2HUdLqS/9957+cY3vpGnn346SXLllVfmrLPOytq1a1v909jY2GyN0047LaeeemqSZPLkyZk8eXIWL16c+vr61NbW5vLLL8+WLVvSr1+/jB8/vsV9XHLJJenXr1+2bNmSyy+/PLW1tamvr8/ixYtz6623ZvLkyUmSU089tem1tjdx4sRUVlamvr4+Y8eOzZNPPpkVK1bkpZdeypVXXpknnngiSXLFFVekurp6r/z+AAAAAABorqJx+4r8EbdkyZKcccYZH+ieRx55JEcccUSz761evTrjx49v9YzzPn36ZMqUKTnmmGNaXXfBggW59NJLU19f3+L48ccfn6lTp6ZHjx6trlFbW5tJkyaloaGhxfExY8bkhhtuaPX+PbFw4cKsWbMm3bt3z+DBg9vkNT5qjqpd1N5bAAA6iD+OHrjzSey3Xqvz9wcAsHd84iQ9a6s96Z2VO5+yf6qqqso999yTGTNm5L777suiRYvS0NCQ/v3754wzzshFF12006fAhwwZkvvuuy/Tpk3LI488kqVLl6Zz58456qijMmrUqIwZM2aHY2G2N3r06AwZMiR33313fvOb36S+vj49e/ZMTU1NzjvvvGZnqQMAAAAAsPd1uCfS2Xs8kb4jT6QDAHuLJ9Ip8UQ6ALC3eCL9/+xJ7+xwZ6QDAAAAAMDeJKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQD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b77J6NGj+eqrrzhw4IAxFw8PD7y9venevTv9+vWzue+PiMit5FB5Ld/iRURErrOZM2eyZs0aevXqZbdepIiIiIjIf4Mff/yRESNGALB69Wq6dOlyi2ckIiLWqEa6iIiIiIiIiMgtYi7z5+LiYmxuKiIitx8F0kVEREREREREbhBbtcsB0tLS+OyzzwAYMGAALi4uN2taIiJSR6qRLiIiIiIiIiJyg7zyyiu4u7szZMgQ/P39cXd3Jzc3l4SEBBYvXsyFCxdwdnausZGoiIjcXhRIFxERERERERG5QcrLy1m/fj3r16+32u7i4sI777xDx44db/LMRESkLhRIFxERERERERG5QV544QX8/PzYv38/2dnZ5OXl4eLiQps2bQgODuapp57C29v7Vk9TRESuwqGysrLyVk9CREREREREREREROR2pc1GRURERERERERERETsUCBdRERERERERERERMQOBdJFREREREREREREROxQIF1ERERERERERERExA4F0kVERERERERERERE7FAgXURERERERERERETEDgXSRURERERERERERETsUCBdREREROS/1N69e+nYsSMdO3YkOjr6Vk9HREREROQ/lgLpIiIiIiIiIiIiIiJ2KJAuIiIiIiIiIiIiImKHQ2VlZeWtnoSIiIiIiIiIiIiIyO1KGekiIiIiIiIiIiIiInYokC4iIiIiIiIiIiIiYscdt3oCIiIiIiK3u+joaF599VUAVqxYQa9evYiLi2Pt2rWkpqZiMpnw9fVl3bp1FuMuXrzI119/zbZt2zh58iT5+fm4u7tz11130a9fP8aOHUvjxo0txpSUlBASEkJBQQE9evRg1apVV53f2LFjOXjwII0aNWLXrl00aNAAgL179/LUU08BMGfOHEaOHGnzHCaTiaioKBISEkhPT6ewsJBGjRrh6+vLoEGDGDVqFK6urjXGPfbYYxw9ehR/f3+io6NrtBcVFdGrVy9KS0sBWLJkCQ8++GCNfvPnz+fTTz/F0dGRxMREmjRpctXrvtKOHTtYs2YN//73v8nNzaW8vBxPT0/uvPNOOnfuTJ8+fQgNDcXNzc3q+IqKCuLj49m4cSNHjhzBZDJRVlZGs2bN6NixI3369GHo0KE0bdrU6vjTp0/zxRdfsGvXLs6cOUNJSQleXl50796dESNGWL1us5t5j4mIiIhI3SmQ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\n" }, "metadata": { "image/png": { "width": 745, "height": 489 } } } ] }, { "cell_type": "markdown", "metadata": { "id": "nZM0GKviobjM" }, "source": [ "That's hugely imbalanced, but it's okay. We're going to convert the dataset into negative, neutral and positive sentiment:" ] }, { "cell_type": "code", "source": [ "# convert Sentiments to 0,1\n", "def convert_Sentiment(sentiment):\n", " if sentiment == \"positive\":\n", " return 1\n", " else:\n", " return 0" ], "metadata": { "id": "XKdAuTGPyyJh" }, "execution_count": 14, "outputs": [] }, { "cell_type": "code", "source": [ "# Apply convert_Sentiment function\n", "df.airline_sentiment = df.airline_sentiment.apply(lambda x : convert_Sentiment(x))" ], "metadata": { "id": "HJINjEnGy0L0" }, "execution_count": 15, "outputs": [] }, { "cell_type": "code", "source": [ "df" ], "metadata": { "id": "fIbcNcvby5PD", "outputId": "a0c5d250-2b66-4708-cadd-bb109f7c64d4", "colab": { "base_uri": "https://localhost:8080/", "height": 424 } }, "execution_count": 16, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " airline_sentiment text\n", "0 1 @VirginAmerica plus you've added commercials t...\n", "1 0 @VirginAmerica it's really aggressive to blast...\n", "2 0 @VirginAmerica and it's a really big bad thing...\n", "3 0 @VirginAmerica seriously would pay $30 a fligh...\n", "4 1 @VirginAmerica yes, nearly every time I fly VX...\n", "... ... ...\n", "11536 0 @AmericanAir my flight was Cancelled Flightled...\n", "11537 0 @AmericanAir right on cue with the delays👌\n", "11538 1 @AmericanAir thank you we got on a different f...\n", "11539 0 @AmericanAir leaving over 20 minutes Late Flig...\n", "11540 0 @AmericanAir you have my money, you change my ...\n", "\n", "[11541 rows x 2 columns]" ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
airline_sentimenttext
01@VirginAmerica plus you've added commercials t...
10@VirginAmerica it's really aggressive to blast...
20@VirginAmerica and it's a really big bad thing...
30@VirginAmerica seriously would pay $30 a fligh...
41@VirginAmerica yes, nearly every time I fly VX...
.........
115360@AmericanAir my flight was Cancelled Flightled...
115370@AmericanAir right on cue with the delays👌
115381@AmericanAir thank you we got on a different f...
115390@AmericanAir leaving over 20 minutes Late Flig...
115400@AmericanAir you have my money, you change my ...
\n", "

11541 rows × 2 columns

\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 16 } ] }, { "cell_type": "code", "source": [ "# Remove stop words\n", "def remove_stopwords(text):\n", " text = ' '.join([word for word in text.split() if word not in (stopwords.words('english'))])\n", " return text\n", "\n", "# Remove url \n", "def remove_url(text):\n", " url = re.compile(r'https?://\\S+|www\\.\\S+')\n", " return url.sub(r'',text)\n", "\n", "# Remove punct\n", "def remove_punct(text):\n", " table = str.maketrans('', '', string.punctuation)\n", " return text.translate(table)\n", "\n", "# Remove html \n", "def remove_html(text):\n", " html=re.compile(r'<.*?>')\n", " return html.sub(r'',text)\n", "\n", "# Remove @username\n", "def remove_username(text):\n", " return re.sub('@[^\\s]+','',text)\n", "\n", "# Remove emojis\n", "def remove_emoji(text):\n", " emoji_pattern = re.compile(\"[\"\n", " u\"\\U0001F600-\\U0001F64F\" # emoticons\n", " u\"\\U0001F300-\\U0001F5FF\" # symbols & pictographs\n", " u\"\\U0001F680-\\U0001F6FF\" # transport & map symbols\n", " u\"\\U0001F1E0-\\U0001F1FF\" # flags (iOS)\n", " u\"\\U00002702-\\U000027B0\"\n", " u\"\\U000024C2-\\U0001F251\"\n", " \"]+\", flags=re.UNICODE)\n", " return emoji_pattern.sub(r'', text)\n", "\n", "\n", "# Decontraction text\n", "def decontraction(text):\n", " text = re.sub(r\"won\\'t\", \" will not\", text)\n", " text = re.sub(r\"won\\'t've\", \" will not have\", text)\n", " text = re.sub(r\"can\\'t\", \" can not\", text)\n", " text = re.sub(r\"don\\'t\", \" do not\", text)\n", " \n", " text = re.sub(r\"can\\'t've\", \" can not have\", text)\n", " text = re.sub(r\"ma\\'am\", \" madam\", text)\n", " text = re.sub(r\"let\\'s\", \" let us\", text)\n", " text = re.sub(r\"ain\\'t\", \" am not\", text)\n", " text = re.sub(r\"shan\\'t\", \" shall not\", text)\n", " text = re.sub(r\"sha\\n't\", \" shall not\", text)\n", " text = re.sub(r\"o\\'clock\", \" of the clock\", text)\n", " text = re.sub(r\"y\\'all\", \" you all\", text)\n", " text = re.sub(r\"n\\'t\", \" not\", text)\n", " text = re.sub(r\"n\\'t've\", \" not have\", text)\n", " text = re.sub(r\"\\'re\", \" are\", text)\n", " text = re.sub(r\"\\'s\", \" is\", text)\n", " text = re.sub(r\"\\'d\", \" would\", text)\n", " text = re.sub(r\"\\'d've\", \" would have\", text)\n", " text = re.sub(r\"\\'ll\", \" will\", text)\n", " text = re.sub(r\"\\'ll've\", \" will have\", text)\n", " text = re.sub(r\"\\'t\", \" not\", text)\n", " text = re.sub(r\"\\'ve\", \" have\", text)\n", " text = re.sub(r\"\\'m\", \" am\", text)\n", " text = re.sub(r\"\\'re\", \" are\", text)\n", " return text \n", "\n", "# Seperate alphanumeric\n", "def seperate_alphanumeric(text):\n", " words = text\n", " words = re.findall(r\"[^\\W\\d_]+|\\d+\", words)\n", " return \" \".join(words)\n", "\n", "def cont_rep_char(text):\n", " tchr = text.group(0) \n", " \n", " if len(tchr) > 1:\n", " return tchr[0:2] \n", "\n", "def unique_char(rep, text):\n", " substitute = re.sub(r'(\\w)\\1+', rep, text)\n", " return substitute\n", "\n", "def char(text):\n", " substitute = re.sub(r'[^a-zA-Z]',' ',text)\n", " return substitute\n", "\n", "# Apply functions on tweets\n", "df['final_text'] = df['text'].apply(lambda x : remove_username(x))\n", "df['final_text'] = df['text'].apply(lambda x : remove_url(x))\n", "df['final_text'] = df['text'].apply(lambda x : remove_emoji(x))\n", "df['final_text'] = df['text'].apply(lambda x : decontraction(x))\n", "df['final_text'] = df['text'].apply(lambda x : seperate_alphanumeric(x))\n", "df['final_text'] = df['text'].apply(lambda x : unique_char(cont_rep_char,x))\n", "df['final_text'] = df['text'].apply(lambda x : char(x))\n", "df['final_text'] = df['text'].apply(lambda x : x.lower())\n", "df['final_text'] = df['text'].apply(lambda x : remove_stopwords(x))\n", "\n", "df['final_text'] = df[\"final_text\"].str.replace(\"@VirginAmerica \",\"\")\n", "df['final_text'] = df[\"final_text\"].str.replace(\"@AmericanAir \",\"\")\n", "df['final_text'] = df[\"final_text\"].str.replace(\"@americanAir \",\"\")\n", "df['final_text'] = df[\"final_text\"].str.replace(\"@USAirways \",\"\")\n", "df[\"final_text\"] = df[\"final_text\"].str.replace(\"@uSAirways \",\"\")\n", "df[\"final_text\"] = df[\"final_text\"].str.replace(\"@JetBlue \",\"\")\n", "df[\"final_text\"] = df[\"final_text\"].str.replace(\"@jetBlue \",\"\")\n", "df[\"final_text\"] = df[\"final_text\"].str.replace(\"@SouthwestAir \",\"\")\n", "df[\"final_text\"] = df[\"final_text\"].str.replace(\"@southwestAir \",\"\")\n", "df[\"final_text\"] = df[\"final_text\"].str.replace(\"@United \",\"\")\n", "df[\"final_text\"] = df[\"final_text\"].str.replace(\"@united \",\"\")\n", "\n", "df = df.drop('text', axis=1)" ], "metadata": { "id": "YL89nYvIy7gs" }, "execution_count": 17, "outputs": [] }, { "cell_type": "code", "source": [ "df.head()" ], "metadata": { "id": "3wtnKQWxz8Se", "outputId": "c447373f-0b1a-4fb3-a578-860112d33085", "colab": { "base_uri": "https://localhost:8080/", "height": 206 } }, "execution_count": 18, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " airline_sentiment final_text\n", "0 1 plus added commercials experience... tacky.\n", "1 0 really aggressive blast obnoxious \"entertainme...\n", "2 0 really big bad thing\n", "3 0 seriously would pay $30 flight seats playing. ...\n", "4 1 yes, nearly every time I fly VX “ear worm” won..." ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
airline_sentimentfinal_text
01plus added commercials experience... tacky.
10really aggressive blast obnoxious \"entertainme...
20really big bad thing
30seriously would pay $30 flight seats playing. ...
41yes, nearly every time I fly VX “ear worm” won...
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 18 } ] }, { "cell_type": "code", "source": [ "sbs = SnowballStemmer(language='english')" ], "metadata": { "id": "yUGc4LNszUsE" }, "execution_count": 19, "outputs": [] }, { "cell_type": "code", "source": [ "def stemmer(text):\n", " text = [sbs.stem(word) for word in text.split(' ')]\n", " text = \" \".join(text)\n", " return text\n", "\n", "df.final_text = df.final_text.apply(stemmer)" ], "metadata": { "id": "FRYGYg3zzVgN" }, "execution_count": 20, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ei0xmdi1Chp0" }, "source": [ "# def to_sentiment(rating):\n", "# rating = int(rating)\n", "# if rating <= 2:\n", "# return 0\n", "# elif rating == 3:\n", "# return 1\n", "# else: \n", "# return 2\n", "\n", "# df['sentiment'] = df.score.apply(to_sentiment)" ], "execution_count": 21, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "V-155O-SFSqE" }, "source": [ "class_names = ['negative', 'positive']" ], "execution_count": 22, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "y3tY3ECJDPaz", "outputId": "db12d16e-d77d-4c5d-a7e4-5d18d758b815", "colab": { "base_uri": "https://localhost:8080/", "height": 506 } }, "source": [ "ax = sns.countplot(df.airline_sentiment)\n", "plt.xlabel('review sentiment')\n", "ax.set_xticklabels(class_names);" ], "execution_count": 23, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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yy23ZMWKFfntb3+bUaNGZdq0aZk9e3ZOOOGEXfqbAAAAAACwayrVarXa35tohKVLl+Yf/uEfsmnTprr3NDc3Z+HChTn00EO3G3vjjTcyZ86crFq1qte548aNy8KFCzN16tS6669evToXXXRRWlpaeh2fMWNGFi1alBEjRhQ/x5VXXpnOzs5ex88+++xcddVVdefviTVr1qStrS3Dhw/PlClTGvKM95rJS9f29xYAgAHi+TMm9fcWAADgD8qe9M4BebTLU089lS996UvZtGlTxowZk7//+7/PD3/4w6xYsSJ33nlnZs2alSRZt25dPve5z6Wjo2O7NS655JKsWrUqlUolc+fOzf33359HH3008+fPz4gRI9LS0pLPfvazaW1t7XUPra2tmTt3blpaWjJy5MjMnz8/jz76aO6///7MnTs3lUolTz75ZC655JK6n2PlypW54oor0tnZmcMPPzw33nhjVqxYke9973s5+eSTkyTf+c53snDhwj74qwEAAAAA0JsBGdKXLFmS7u7uDBo0KN/61rdy7rnn5pBDDsmYMWNy1FFHZf78+Zk9e3aS5KWXXsry5ct7zH/kkUdq782bNy8XX3xxJk6cmP333z+zZs3Kv/3bv6VSqWT9+vVZtGhRr3tYuHBh1q9fn0qlkhtuuCGzZs3K/vvvn4kTJ+biiy/OvHnzkiTLly/f7vlbXHvttenq6srYsWOzZMmSHHPMMRkzZkymTZuW66+/PkcffXSS5Jvf/GY2bNjQJ387AAAAAAB6GpAh/dlnn02SHHTQQTnqqKN6vef000+vXT///PM9xm677bYkyejRozNnzpzt5s6cOTPHH398kuTOO+9MV1dXj/Gurq7ccccdSZLjjz8+M2fO3G6NOXPmZL/99uvxvK09/fTTeeqpp5IkF154YUaPHt1jvFKp5Itf/GKS5K233sqyZct6/ZwAAAAAAOyZARnShw4dmmRzbK5nr732ql2/733vq123t7dnxYoVSZKTTjqptta2TjnllCSbj3BZuXJlj7Gf/exn2bhxY4/7etvjluNZHn/88bS3t/cYf/jhh7d71ramTZuWiRMnJkkeeuihXu8BAAAAAGDPDMiQPm3atCTJCy+8UPt2+rZ++MMfJtkctD/60Y/W3v/lL39Z+4HSGTNm1H3G1mPPPPNMj7GtX+/MGps2bcpzzz3X6xrjx4/P+9///rprfPCDH+x1DwAAAAAA9I0BGdIvuuiiDBs2LN3d3fnsZz+b73//+1m/fn3a29vzq1/9Ktdcc01uueWWVCqV/N3f/V0OOOCA2ty1a9fWrg888MC6z2hubs6gQYO2m7P160GDBqW5ubnuGluvX2+NCRMmFD/rljXefPPNrF+/vngvAAAAAAC7bnB/b6ARJkyYkFtuuSUXX3xx1q1bl0svvXS7e4455picf/75OeaYY3q8/9prr9Wutz7yZVtDhgzJyJEj09ramtbW1l7XGDlyZIYMGVJ3jTFjxtSu661R2sO2462trRk/fnzxfgAAAAAAds2ADOnJ5mNTFixYkEsvvTT/+7//u934b37zm7z88svbvf+73/2udt3U1FR8xpbxt956q9c1djR/2LBhtet6a9Q7o31n1ugrbW1t250D/4fmQx/6UH9vAQAYoP7Q/z0LAADeCwbk0S7d3d2ZP39+zjjjjPzf//1frrzyyjzwwAP57//+7yxbtiwXXHBB1q5dm6uuuip/+7d/m+7u7v7eMgAAAAAA71ID8hvpCxYsyOLFi9PU1JRvf/vbOfzww2tjo0aNyhFHHJHJkyfniiuuyF133ZUPfehDmT17dpJk7733rt275UdH69kyvs8++/R4f8saO5rf3t5eu+5tjc7OznR0dOz2Gn1l+PDhmTJlSkPWBgD4Q+f/fAMAgHfGmjVr0tbWtltzB9w30js6OrJ48eIkyZ/92Z/1iOhb+8QnPlH7Ic877rij9v7o0aNr16+++mrd53R2dmbjxo1Jkv3226/H2JY1Nm7cmK6urrprbNiwoXZdb43SHrYd33YNAAAAAAD23IAL6c8991ztvyoceeSRde+rVCq18V/96le19ydNmlS7fuWVV+rOX7duXe1ImK3nbP26u7s7v/71r+uusfX69dbo7Rz33tbYd999/dAoAAAAAEADDLiQvvVxKtVqtXjvlhBeqVRq7x122GG1HwldtWpV3blPPvlk7XratGk9xrZ+vTNrNDU15dBDD+11jfXr12f9+vV119iy/rZ7AAAAAACgbwy4kD5u3Lja9TPPPFP3vmq1Whtvbm6uvT9s2LB87GMfS5I8+OCDdc8o/9GPfpRk83Eq255rOXPmzIwcObLHfdvq6OjIQw89lCT5+Mc/nmHDhvUYP+GEE2rX9957b69rrF69Oi+99FKS5MQTT+z1HgAAAAAA9syAC+kHHnhgJk6cmCT5wQ9+kOeee67X+7773e/WjkX5kz/5kx5j55xzTpLNZ5jffPPN281duXJlfvzjHydJzjzzzAwe3PM3WwcPHpyzzjorSfLwww9n5cqV261x8803185I3/K8rU2fPj1HHXVUkmTRokVpbW3tMV6tVvO1r30tyeYfGT399NN7/ZwAAAAAAOyZva666qqr+nsTfW3kyJF54IEH0tXVlXvvvTd77713Ro8enUqlkhdeeCE33nhjvv71r6darWbEiBH5p3/6pwwfPrw2/+CDD85TTz2VF198MT/5yU/S1dWVAw44IB0dHbnvvvty2WWXpb29PePHj89111233bfJk81Hrdx9991pa2vLAw88kLFjx2bs2LHZsGFDbrrppixYsCDVajXHHntsvvCFL/T6OQ455JAsW7YsbW1tWb58eQ466KAMHz48L7zwQq6++uo8/PDDSZJ58+blmGOO6fO/46uvvpqOjo4MHTo0Y8eO7fP134u+8Wzrjm8CANgJ86aO3vFNAABAn9mT3lmp7ugg8feoBQsW5Prrr6+dg96bMWPG5F/+5V/y4Q9/eLuxjRs35sILL6x7xvm4ceOycOHCTJ06te76q1evzkUXXZSWlpZex2fMmJFFixZlxIgRdddYunRprrzyynR2dvY6Pnv27HzlK1+pO39PrFmzJm1tbRk+fHimTJnSkGe810xeura/twAADBDPnzFpxzcBAAB9Zk9654AN6Uny7LPP5vbbb8/KlSvzyiuvZNOmTRk+fHgmT56c4447Lp/85CczZsyYuvO7urpy++2356677sratWvT2dmZ5ubmnHTSSTn//POLc7fYcjzMgw8+mHXr1mXIkCGZPHlyTjvttMyePXu7Y2F6s2bNmixevDhPPPFEWlpaMmrUqEybNi1nn312j7PU+5qQvj0hHQDoK0I6AAC8s4R0GkJI356QDgD0FSEdAADeWXvSOwfcj40CAAAAAEBfEtIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACgb39wbeCU888USWLl2alStXpqWlJUOHDs24ceMyffr0HHfccTn11FN7ndfV1ZXbb789d999d9auXZuOjo40Nzfn5JNPzmc+85mMGTNmh8/esGFDFi9enAceeCDr1q3L0KFDM2nSpJx22mmZPXt2Bg/e8T+CNWvW5JZbbsmKFSvy29/+NqNGjcq0adMye/bsnHDCCbv89wAAAAAAYOdVqtVqtb830Sjt7e358pe/nHvuuafuPQcccEAeeuih7d5/4403MmfOnKxatarXeePGjcvChQszderUumuvXr06F110UVpaWnodnzFjRhYtWpQRI0bUXWPp0qW58sor09nZ2ev42Wefnauuuqru/D2xZs2atLW1Zfjw4ZkyZUpDnvFeM3np2v7eAgAwQDx/xqT+3gIAAPxB2ZPeOWCPdunq6spf/uVf5p577smQIUPyF3/xF7njjjuyYsWKPPbYY7n11ltzwQUXZP/99+91/iWXXJJVq1alUqlk7ty5uf/++/Poo49m/vz5GTFiRFpaWvLZz342ra2tvc5vbW3N3Llz09LSkpEjR2b+/Pl59NFHc//992fu3LmpVCp58sknc8kll9T9DCtXrswVV1yRzs7OHH744bnxxhuzYsWKfO9738vJJ5+cJPnOd76ThQsX7vkfDAAAAACAXg3Yo11uuumm/Nd//VeampqycOHC/PEf/3GP8bFjx+bDH/5wr3MfeeSRLF++PEkyb968fO5zn6uNzZo1KxMnTsx5552X9evXZ9GiRfmbv/mb7dZYuHBh1q9fn0qlkhtuuCEzZ86sjV188cUZNmxYvv71r2f58uVZvnx5jj322O3WuPbaa9PV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PfPMM1m7dm2reTvr0aNHy/EsTz75ZDZt2tRqfMGCBbu81s5qamoyZMiQJMn8+fOLPxcAAAAAAHunS4f0bdu2Zdq0adm6dWumTJmSQYMG7faeV155JZs3b06SnHLKKe3O23HsxRdfbDW249d7ssbmzZvz61//us01Bg0alKOOOqrdNU4++eQ29wAAAAAAwP7RpUP6nDlz8sILL6Smpiaf/exn9+ie5cuXt1wfc8wx7c4bPHhwunXrtss9O37drVu3DB48uN01dly/vTV29+Go29dYv3596uvri3MBAAAAAHjnumxIX7VqVf793/893bp1y9e//vUccsghe3TfG2+80XJ9xBFHtDuve/fuqaqqSvL28S5trVFVVZXu3bu3u0Z1dXXLdXtrlPaw8/jOawAAAAAAsO8qO3sDHeWmm27Khg0bcumll+akk07a4/s2btzYct2zZ8/i3O3jGzZsaHON3d3fq1evluv21mjvjPY9WWN/Wbdu3S7nwB9sPvKRj3T2FgCALupgf58FAADvBV3yifSf/exnWbBgQQYMGJDrr7++s7cDAAAAAMB7WJd7In3t2rX55je/mSSZOnVq+vTp847uP/TQQ1uut3/oaHu2jx922GFtrrG7+zdt2tRy3dYaTU1N2bJly16vsb/07t07w4YN65C1AQAOdv7PNwAAeHcsW7Ys69at26t7u9wT6bfddlsaGhoycuTIXHjhhe/4/v79+7dcv/766+3Oa2pqytq1a5Mk/fr1a3ONtWvXZuvWre2usWbNmpbr9tYo7WHn8Z3XAAAAAABg33W5J9JXrlyZJHniiSd2+xR1bW1tamtrkyTf/va3M2bMmAwdOnSXtdqyatWqbNu2LUla3bPj19u2bcsf/vCHvP/97y/utb01fv/732fFihXFn2H7GocffngGDRpUnAsAAAAAwDvX5Z5I31fHH398y4eELlmypN15ixcvbrmuqalpNbbj13uyRs+ePfPBD36wzTXq6+tTX1/f7hrb1995DwAAAAAA7B9d7on0r3zlK/nCF75QnPPpT386STJ69OhMmTIlSXLMMcckSXr16pXTTz89CxcuzMMPP5x//Md/TI8ePXZZ48EHH0zy9nEqO59rOWLEiFRVVWXt2rV58MEH88lPfnKX+7ds2ZL58+cnSc4444z06tWr1fjo0aPz7W9/O0nywAMP5LLLLttljaVLl+bVV19NkpxzzjnFnxkAAAAAgL3T5Z5IP/bYY3PiiScW/2zXr1+/lu/t+KGkl156aZK3zzCfPXv2Lq+xaNGiLFy4MEnymc98JpWVrf8+orKyMhdffHGSZMGCBVm0aNEua8yePbvljPTtr7ejD33oQznppJOSJLNmzUpjY2Or8ebm5txyyy1J3v6Q0U996lPlXwwAAAAAAHuly4X0/eHss8/OWWedlSSZMWNGZsyYkRUrVqShoSG1tbW5+uqrs23btgwaNCiTJk1qc40rrrgigwYNyrZt23L11VentrY2DQ0NWbFiRW699dbMmDEjSXLWWWe1vNbOpk6dmsrKyjQ0NGTChAl54oknsmbNmrz00ku59tpr8/jjjydJrrnmmlRXV3fAbwIAAAAAgIrm5ubmzt7Eu237h5COGzcu06dPb3PO2rVrM2nSpHbPOB8wYEBmzpzZ6gn3nS1dujRXXnllGhoa2hw/5ZRTMmvWrFZPw++strY206ZNS1NTU5vj48ePzze+8Y12798Xy5Yty7p169K7d+/dfnDrweK42uWdvQUAoIv47bihu58EAADsN/vSO7vcGen7S1VVVe69997MnTs39913X5YvX56mpqYMHjw45557bi6//PLdPgU+fPjw3HfffZk9e3YefvjhrFq1Kt27d89xxx2XsWPHZvz48bscC7OzcePGZfjw4bn77rvzi1/8Ig0NDenbt29qampyySWXZPTo0fvzxwYAAAAAYCcH5RPp7BlPpO/KE+kAwP7iiXQAAHh37UvvdEY6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAUVHb2BgAAAGjtd3VDO3sLAEAX8YHTl3f2FroET6QDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAVCOgAAAAAAFAjpAAAAAABQIKQDAAAAAECBkA4AAAAAAAWVnb2BjrB58+Y89thjefzxx/P8889nxYoV2bBhQ3r37p3jjz8+55xzTi6++OL07t27uM7WrVszd+7c3H///Vm+fHm2bNmSwYMHZ8yYMbnssstSXV29272sWbMmd999d37+859n1apV6dGjR4YOHZqxY8dm/Pjxqazc/T+CZcuW5Tvf+U7q6uqyevXq9O3bNzU1NRk/fnxGjx69x78XAAAAAADeuYrm5ubmzt7E/vaXf/mXWb9+fXHOUUcdlW9961s56aST2hz/85//nIkTJ2bJkiVtjg8YMCAzZ87MiSee2O5rLF26NFdeeWUaGhraHD/llFMya9as9OnTp901amtrM23atDQ1NbU5fskll+TrX/96u/fvi2XLlmXdunXp3bt3hg0b1iGv8V5zXO3yzt4CANBF/Hbc0M7eAgew39X59wMA2D8+cLqetd2+9M4uebTL+vXr071795x33nm55ZZb8n//9395+umn89Of/jRXXnllKisr86c//SmTJk1KfX19m2tcf/31WbJkSSoqKjJ58uQ89NBDeeyxx3LzzTenT58+aWhoyFVXXZXGxsY2729sbMzkyZPT0NCQqqqq3HzzzXnsscfy0EMPZfLkyamoqMjixYtz/fXXt/tzLFq0KF/72tfS1NSUE044IXfddVfq6uoyb968jBkzJkny/e9/PzNnztz3XxoAAAAAAG3qkiH90ksvzYIFCzJjxoxceOGFef/735++ffvm+OOPz5e+9KVMnz49SfLmm2/mjjvu2OX+Rx55JI8++miSZMqUKbnuuusyZMiQDBw4MBdddFHuvPPOVFRUpL6+PrNmzWpzDzNnzkx9fX0qKipyxx135KKLLsrAgQMzZMiQXHfddZkyZUqS5NFHH215rZ1Nnz49W7duzZFHHpk5c+bkzDPPTHV1dWpqanLbbbdl5MiRSZLbb789a9as2effGwAAAAAAu+qSIf3GG2/MgAED2h0fO3ZsTjjhhCRpM2Lfe++9SZL+/ftn4sSJu4yPGDEio0aNSpL88Ic/zNatW1uNb926NT/4wQ+SJKNGjcqIESN2WWPixInp169fq9fb0QsvvJDnn38+STJp0qT079+/1XhFRUW+9KUvJUk2bNiQn/zkJ+3+vAAAAAAA7L0uGdL3xPHHH58kee2111p9f9OmTamrq0uSnHvuuenRo0eb95933nlJ3j7CZdGiRa3Gnnnmmaxdu7bVvJ316NGj5XiWJ598Mps2bWo1vmDBgl1ea2c1NTUZMmRIkmT+/PltzgEAAAAAYN8ctCF99erVSbLLB32+8sor2bx5c5K3Pwy0PTuOvfjii63Gdvx6T9bYvHlzfv3rX7e5xqBBg3LUUUe1u8bJJ5/c5h4AAAAAANg/DsqQvnr16jz77LNJkg9/+MOtxpYv//+fYnvMMce0u8bgwYPTrVu3Xe7Z8etu3bpl8ODB7a6x4/rtrXHssce2e/+Oa6xfv77dD04FAAAAAGDvy3jVtAAAIABJREFUVXb2BjrDLbfckqampiTJJZdc0mrsjTfeaLk+4ogj2l2je/fuqaqqSmNjYxobG9tco6qqKt27d293jerq6pbr9tYo7WHn8cbGxgwaNKg4f2+sW7dul+NrDjYf+chHOnsLAEAXdbC/z6I17zsBgI7ifee+OeieSL/vvvsyb968JMk555yTj3/8463GN27c2HLds2fP4lrbxzds2NDmGru7v1evXi3X7a3R3hnte7IGAAAAAAD77qB6Iv3555/PtGnTkiTve9/78i//8i+dvKP3ht69e2fYsGGdvQ0AgC7JE8gAALwbvO9Mli1blnXr1u3VvQfNE+m//e1vc+WVV2bTpk3p169fZs2a1epole0OPfTQluvtHzranu3jhx12WJtr7O7+TZs2tVy3t8aWLVv2eg0AAAAAAPbdQRHSV61alc9//vN54403cvjhh2fmzJn54Ac/2Obc/v37t1y//vrr7a7Z1NSUtWvXJkn69evX5hpr167N1q1b211jzZo1LdftrVHaw87jO68BAAAAAMC+6/IhffXq1bn88svzxz/+Mb169cqdd96Zk046qd35Q4cObbleuXJlu/NWrVqVbdu27XLPjl9v27Ytf/jDH9pdY8f121tjxYoV7d6/4xqHH354h3zQKAAAAADAwa5Lh/Q333wzl19+eX73u9+le/fu+Y//+I+ceuqpxXuOP/74lg8JXbJkSbvzFi9e3HJdU1PTamzHr/dkjZ49e+7yhPz2Nerr61NfX9/uGtvX33kPAAAAAADsH102pK9fvz6TJk3Kr371q3Tr1i3/9m//lrPPPnu39/Xq1Sunn356kuThhx9u94zyBx98MMnbx6nsfFD/iBEjUlVV1WrezrZs2ZL58+cnSc4444z06tWr1fjo0aNbrh944IE211i6dGleffXVJMk555xT/LkAAAAAANg7XTKkb9myJVdffXWef/75JMlNN92U888/f4/vv/TSS5O8fYb57NmzdxlftGhRFi5cmCT5zGc+k8rKylbjlZWVufjii5MkCxYsyKJFi3ZZY/bs2S1npG9/vR196EMfajmCZtasWWlsbGw13tzcnFtuuSXJ2x8y+qlPfWqPfz4AAAAAAPZclwvpb731Vr74xS/mqaeeSpJce+21Of/887N+/fp2/zQ3N7da4+yzz85ZZ52VJJkxY0ZmzJiRFStWpKGhIbW1tbn66quzbdu2DBo0KJMmTWpzH1dccUUGDRqUbdu25eqrr05tbW0aGhqyYsWK3HrrrZkxY0aS5Kyzzmp5rZ1NnTo1lZWVaWhoyIQJE/LEE09kzZo1eemll3Lttdfm8ccfT5Jcc801qa6u3i+/PwAAAAAAWqto3rkiv8etXLky55577ju65+GHH84xxxzT6ntr167NpEmT2j3jfMCAAZk5c2ZOPPHEdtddunRprrzyyjQ0NLQ5fsopp2TWrFnp06dPu2vU1tZm2rRpaWpqanN8/Pjx+cY3vtHu/fti2bJlWbduXXr37p1hw4Z1yGu81xxXu7yztwAAdBG/HTd095M4aP2uzr8fAMD+8YHT9azt9qV3Vu5+ysGpqqoq9957b+bOnZv77rsvy5cvT1NTUwYPHpxzzz03l19++W6fAh8+fHjuu+++zJ49Ow8//HBWrVqV7t2757jjjsvYsWMzfvz4XY6F2dm4ceMyfPjw3H333fnFL36RhoaG9O3bNzU1NbnkkktanaUOAAAAAMD+1+WeSGf/8UT6rjyRDgDsL55Ip8QT6QDA/uKJ9P9vX3pnlzsjHQAAAAAA9ichHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIBAAAAAKBASAcAAAAAgAIhHQAAAAAACoR0AAAAAAAoENIB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mPj5+fHll18aT0sW5N4SoE+fPrRu3ZoVK1awf/9+rly5QmpqKsWKFaNy5crUq1ePl19+mfbt2xd6biIifza7nIf5L6qIiMgz7Oeff6Znz54ArF27lvr16z/hGYmIiIjIozBhwgTWrVtHs2bNbK6LIyIiYqIa6SIiIlaYHn91cnIyFjcVERERERERkf88CqSLiMh/LGu1ywGioqL44YcfAGjbti1OTk5/1rRERERERERE5C9GNdJFROQ/1kcffYSLiwtdunTBy8sLFxcX4uPj2bNnD9988w23bt3C0dHRYiFREREREREREfnPokC6iIj8x8rKymLTpk1s2rQp33YnJyemT59OnTp1/uSZiYiIiIiIiMhfiQLpIiLyH2vUqFF4enpy+PBhrl+/TlJSEk5OTlSpUgVfX1/eeust3N3dn/Q0RUREREREROQJs8vJycl50pMQEREREREREREREfmr0mKjIiIiIiIiIiIiIiI2KJAuIiIiIiIiIiIiImKDAukiIiIiIiIiIiIiIjYokC4iIiIiIiIiIiIiYoMC6SIiIiIiIiIiIiIiNiiQLiIiIiIiIiIiIiJigwLpIiIiIiIiIiIiIiI2KJAuIiIiIvKIHTx4kDp16lCnTh2CgoKe9HTkMQgKCjL+xgcPHnzS0xERERGRx0yBdBERERERERERERERGxRIFxERERERAdq2bUudOnUYOHDgk57KU08Z+yIiIvKsKfKkJyAiIiIi8qxp3rw558+ff9LTkMeoV69e9OrV60lPQ0RERET+JMpIFxERERERERERERGxQYF0EREREREREREREREb7HJycnKe9CRERERERPITFBTExIkTAVi2bBnNmjUjNDSU9evXc/78eRITE6lduzYbNmwwG3f79m1Wr17Nrl27uHTpEsnJybi4uFCjRg1at25N//79KVmypNmY9PR0WrVqRUpKCt7e3qxcufK+8+vfvz9Hjx6lRIkS7Nu3j6JFiwJw8OBB3nrrLQCmTZtmswRIYmIigYGB7Nmzh+joaFJTUylRogS1a9emQ4cO9O7dm2LFilmMe+ONNzh9+jReXl4EBQVZtKelpdGsWTMyMjIA+O6773j11Vct+s2cOZOFCxdib29PREQEpUqVuu953ys8PJx169Zx6tQp4uPjycrKws3NjdKlS1OvXj1atmxJ+/btcXZ2znd8dnY2W7ZsYcuWLZw6dYqEhASKFClClSpV8PHxYeDAgVSvXj3fsb/++ivt2rUD4L333mPUqFGcPXuWJUuWcOjQIeLj4ylRogQNGzZk0KBBNGvWzGIfAwcO5NChQ/c9z+3bt1OtWjXA8r3ZvHlzs775tQcHB/Pjjz9y8eJF7ty5Q7Vq1fDz82PgwIEUL17cGHvgwAECAgI4c+YMiYmJlC9fnnbt2jFixAhKly5933nGxsYSGBjI/v37iY2N5fbt27i5uVG3bl06d+5Mt27dKFIk/yqfEyZMYN26dQCcP3+ejIwMAgMDCQ4OJjo6moyMDKpVq0bHjh0ZNGgQrq6uZuPzvvdt6dmzJ/7+/vftJyIiIvJXoRrpIiIiIvJUSE9PZ/jw4ezatctmvwMHDvDhhx+SkJBgtj05OZnIyEgiIyNZunQp//znP2natKnR7uTkRKdOnVi5ciWRkZFER0dbDd4CxMTEcOzYMQA6depkBNEfREhICJMnT+b27dtm2xMTEzl48CAHDx5k2bJlzJ8/n9q1a5v18fHx4fTp05w9e5aUlBSLAPiRI0eMIDpAREREvoH0iIgIAOrWrfvAQfTs7GzGjx9PcHCwRVt8fDzx8fFcuHCB9evXs3z5cl566SWLfrGxsYwaNYozZ86Ybb979y4XL17k4sWLBAYGMnHiRN588837zmnVqlVMmTLF7NwTExPZuXMnu3btYvLkyfTr1++BzvNhZWVl8f777xMWFma2/eLFi8yePZvw8HC+//57ihUrxowZM1i8eLFZv9jYWJYtW8auXbsIDAykXLlyVo+1aNEivvzyS7Pzhz/+HuHh4QQEBLBgwQIqVqxoc96JiYkMHTqU06dPW8z74sWLbN26lYCAgAIF90VERESedgqki4iIiMhTYdasWZw7d45WrVrxxhtv8Nxzz5Gamsq///1vo8++ffsYNmwYmZmZuLm50a9fP+rXr0+lSpW4desWBw4c4F//+heJiYkMGzaM1atXmwWoe/ToYWSir1+/ntGjR1udz4YNGzA93Nm9e/cHPp+1a9cyadIkACpWrMiAAQPw9PSkQoUKJCUlsXv3bgIDA7ly5QrvvPMO69ato3z58sZ4Hx8fFi5cSHZ2NocOHaJDhw5m+zcFyE0OHjxoMYfU1FTOnj0LYJFRXRArV640gui1atWib9++1K5dGzc3N9LS0oiOjubo0aPs2LEj3/HXr1+nT58+xMfH4+joiJ+fHy1btqRq1ark5ORw+vRpli1bxpUrV5gyZQouLi707NnT6nz27dvHiRMnqFWrFm+//TZ16tQhMzOT8PBwFi5cSEZGBp999hk+Pj7UqFHDGPf5559z584dBg8eTFxcHPXr12fatGkW+79f4NmauXPncvz4cV5//XW6d+9OxYoVuXr1Kt9++y2nTp3i8OHDLFy4EFdXVxYvXoyvry99+vThueeeIyEhgaVLl7J3716uXLmCv78/s2bNyvc4X331FfPmzQOgRo0a9OvXjxo1alC2bFni4uLYunUr69ev58yZMwwZMoRVq1ZZfUoAYOTIkZw/f57+/fvTrl07ypQpQ0xMDAsXLuTkyZNcvHiR6dOnm2WWv/jii4SEhLB9+3bmzJljXN8XX3zRbN+FefJBRERE5ElSIF1EREREngrnzp1jyJAhjBs3zmy7r68vALdu3WLs2LFkZmbi6+vLvHnzLMpO+Pj40LNnT/r160diYiKfffYZS5YsMdq9vb3x8PAgKiqK4OBg3n//fezs7PKdjymA7O7unm+mtS0xMTH84x//AHKD8FOnTsXJycmsT6tWrejcuTP//d//TXx8PHPmzOGzzz4z2l966SUcHR3JyMggIiLCaiC9ffv2bNu2Ld/M9UOHDpGVlWVcmwe1ceNGAKpUqcLq1astrneTJk3o1asX6enpFhnSAJMmTSI+Pp7KlSuzePFiatasadbu7e3NG2+8weDBgzl27BjTpk2jQ4cOFscxiYyMpFWrVixYsMDsejZu3BgPDw/Gjx9PRkYGK1euNMquQO7fEMDR0REAZ2dnPD09H/h6WHP8+HE+/PBDhg0bZmzz8vKiRYsWdO3alatXr7JkyRLS09Pp168fn3zyidn4Fi1a0LdvX06dOsWWLVuYNGkSZcqUMetz9OhRvv76awCGDRvGmDFjsLf/Y0ksLy8v2rRpQ9u2bRk1ahQXLlxgyZIljBgxwuq8T548yffff0+LFi2MbfXq1ePVV1/ljTfe4JdffiE0NJSPPvrImI/p2uXNYq9WrdojvZ4iIiIiT4IWGxURERGRp0L16tUZM2aM1fbAwEASExMpXrw4X3zxhdVgq4eHByNHjgRyy8DExMSYtZuyy3/99VeOHDmS7z5MpV8gN4v9QS1atIi7d+9SuXJlpkyZYhFEN/H29qZ///5AbuD+999/N9qKFy9OgwYNAMvs85s3bxqZ5oMGDaJkyZJkZ2dbZKWbxjk6Oj7wlwEAN27cAHKDtNauN+SWzXFxcTHbdvLkSfbu3QvAJ598YhFEN3F2dja+dEhJSbEoj5JX0aJFmT59er7X08/Pz8joP3z4sI2zevTq169vFkQ3cXFxMd4/t27dws3NzXhKIa8iRYrQt29fADIyMoiMjLTo880335CTk0ODBg343//9X7Mgel4dOnSgY8eOAKxZs8bmvAcMGGAWRDcpVqwYAwYMMOZz/Phxm/sREREReRYokC4iIiIiT4XOnTtbXSAR4KeffgJyM9Tvzda9V94FJ011zk26d+9uZKGvX78+3/Gm7XZ2doUq67Jt2zYgN1v8frXVTXNNT0+3qFVtyiL/5ZdfjKA25GaaZ2dn4+LiQsOGDY1a8PcG3E2/169f3yLQXRCmUieHDx8mKirqgcZu3boVgBIlSuRbuz0vT09P3NzcAMu/V14tWrSwWj/c3t4eLy8vAIsvTx63rl27Wm2rW7eu8fq1116z+qVK3n6//vqrWdvt27fZv38/AF26dLH6FIWJ6T119epVfvvtN6v9/Pz8rLblLdXyZ19PERERkSdBpV1ERERE5KnwwgsvWG3LysoyFqvcsWMHderUKfB+4+PjzX6vWrUqTZs25dChQ4SFhfF///d/ZsHu9PR0Nm/eDOSWDDGVBSmoq1evGscMCAggICCg0HP18fExynlEREQYAVtTgLxp06YUKVKE5s2bs337drNAemJiIhcvXjT2Uxi9e/fm4MGDJCcn061bN9q0acPLL79Mw4YNqVWrFg4ODlbHnjx5Esit027rb3uve69BXnnrnufHVNbm1q1bBT7eo2At2x5yv0gwsTX/kiVLGq/vnf/PP/9MZmYmANOmTcu3vrs1cXFxVKpUKd82W/M2fbGR33xEREREnkXKSBcRERGRp4KtxQlTUlKMQOKDylsuxcRUbiM1NdXIHjfZtWsXKSkpZv0eREJCQiFmmeveuTZq1IhixYoB5tnmptemALnp56VLl4iLiwNyFx81LZZa2EB6t27dGDduHMWKFSM9PZ2wsDA+/vhjunXrRvPmzRk1ahQ7duwwjpNXYmJioY55584dq222Fs4EjHIn2dnZhTp2YZn+RvnJW4KlePHiVvvlzTK/d/6P8j2Vl63raWs+IiIiIs8iZaSLiIiIyFPBWs1nwFgwE3LLpYwePbrA+y1btqzFttdee40pU6Zw584dNmzYQJcuXYw2U1mXokWL0qlTpwIfJ7+59u/fn379+hV47L2Zw05OTjRu3Jj9+/cbwfOEhASLTHNPT0/Kli1LQkICERER+Pn5Gf2LFi1K48aNH/g8TIYMGULPnj3ZtGkT+/fvJzIykqSkJFJTU9m6dStbt26lWbNmzJ8/3yz72vTFR8WKFVm4cGGBj2cr2PyfKu97asyYMbRt27bAY6tVq/Y4piQiIiLyzFEgXURERESeem5ubtjZ2ZGTk0NGRgaenp4PtT9XV1fatWtHaGgo+/bt48aNG5QrV46kpCTCw8MBaNeunVlguKDurd/+sHP18fFh//79xMTEEBsbayz86ObmZpRMsbOzo1mzZmzevNkIpJsWHvX29rZal7ugypYty8CBAxk4cCCQm/m+e/duVqxYQUxMDIcOHeLTTz9l5syZxpgyZcpw+fJlUlNTqV279n3reot1ed9TRYoUeej3lIiIiIhYUmkXEREREXnqOTo6GnXRT5w4QUZGxkPv01S2JTMzk9DQUAA2bdpk7LswZV0gNwPYVF/6yJEjDz3PvGVZIiIijEzz5s2bmwWnTf0iIiK4fv06ly9fthj/qNSqVYtBgwaxdu1aY0HSsLAws/I7poU/09LSjPr2Ujh169Y1nth4FO+pR0FfjIiIiMizRoF0EREREXkmdOjQAYDk5GR+/PHHh95fixYtqFChAvBHOZcNGzYAUK5cOVq1alWo/drb2xulNy5cuGBkuBdW/fr1cXV1BcwD6fcGyE2/x8bGsmbNGovtj0OpUqVo0KABAHfv3iUtLc1o69ixo/F60aJFj20OD8JUyzw9Pf0Jz+TBuLm50bRpUwDCw8ON0j5P0r0L9IqIiIg87RRIFxEREZFnwltvvWVkevv7+7Nnzx6b/RMTEwkICLDa7uDgQLdu3QA4e/YsYWFhnDhxAshdZNPBwaHQcx0+fLhRTmXChAmcPn3aZv9r166ZBb/vnacpiLpz506uXLkCWAbIPTw8qFy5MgBLliwBwMXFhRdffLHQ57Fu3TqbQdKUlBTjmrm5uVGyZEmjrWnTpsYcN23axPz5820eKz09nTVr1nDjxo1Cz/d+TF+cREdH57tA6l/ZqFGjsLOzIysri/fee4+YmBib/S9dusTGjRsf23xM1xIgKirqsR1HRERE5M+iGukiIiIi8kwoWbIkc+fOZciQIfz+++8MHTqU9u3b06FDBzw8PHB0dCQlJYULFy4QERHBnj17KFOmjFHXOz89evQwsqU//vhjs+0Po3r16kydOpXx48eTkJBA37596dKlC61bt6Zq1arY29uTlJTE+fPn2bt3L4cOHaJhw4b07t073/35+Piwc+dOUlNTgdwFPGvWrGnRr3nz5qxfv97o99JLL1GkSOE/EkyYMAF/f3/atm1L48aNqVGjBi4uLqSkpHDu3DkCAwOJi4sDYMCAARbjZ86cyd/+9jeuXbvG3Llz2bZtG7169eKFF17AxcWF27dvc/nyZSIjI9m+fTvJycls3bqVcuXKFXrOtrz00kscOHCApKQkJk+eTI8ePShVqpTR/txzz+Ho6PhYjv2wmjZtyujRo5kzZw5RUVF069aNnj170rJlSypVqkR2djYJCQmcPXuW3bt3c/z4cbp162a2kO6jVK9ePZydnUlLS2PhwoWULVuWWrVqGe+3EiVKmAXbRURERP7qFEgXERERkWeGj48PAQEBfPjhh8TGxvLTTz/x008/We1/v8VCPT09qVevHj///DM3b94EoE6dOsYing+je/fuuLq68ve//52kpCTWr19vlJB50Lnem33evHlzq/3yHuNRlHVJTk4mKCiIoKAgq33+67/+ixEjRlhsr1ChAqtWrWLs2LEcOnSIM2fO2KyX7uTk9NALo9rSt29fAgMDuXHjBqtWrWLVqlVm7du3b6datWqP7fgP691336VMmTL4+/uTlpbGihUrWLFihdX+hVkst6CcnZ0ZPHgwX331Fb/99htjxowxa+/Zsyf+/v6P7fgiIiIij5oC6SIiIiLyTPH29iYsLIzQ0FB27NjBmTNnSExMJDMzE1dXV9zd3XnxxRdp1aoVL7/88n3316NHD37++Wez3x+Vdu3a4evrS1BQEOHh4Zw7d46kpCRycnIoVaoU1atXp2HDhrzyyitWg+OQG9wvXbo0SUlJgPUAubW66YW1ceNG9uzZw7Fjx4iKiiIxMZHk5GScnJyoXLky3t7e9OrViyZNmljdR8WKFQkICGD//v2EhoYSGRlJXFwcd+7cwdnZmcqVK1OnTh1atGhB+/btzcrDPGrlypVj7dq1LFy4kAMHDnD16lXu3LnzVJV56dOnDx07dmTNmjXs27ePS5cukZycjL29PW5ubnh4eODt7U3btm1p2LDhY53Le++9h4eHB+vWrePcuXOkpKQ8koWARURERJ4Eu5yn6a5QRERERERERERERORPpsVGRURERERERERERERsUCBdRERERERERERERMQGBdJFRERERERERERERGxQIF1ERERERERERERExAYF0kVEREREREREREREbFAgXURERERERERERETEBgXSRURERERERERERERsUCBdRERERERERERERMQGBdJFRERERERERERERGxQIF1ERERERERERERExAYF0kVEREREREREREREbFAgXURERERERERERETEBgXSRURERERERERERERsUCBdRERERERERERERMQGBdJFRERERERERERERGxQIF1ERERERERERERExAYF0kVEREREREREREREbFAgXURERERERERERETEBgXSRURERERERERERERs+H/O/pvuyC+0dwAAAABJRU5ErkJggg==\n" }, "metadata": { "image/png": { "width": 745, "height": 489 } } } ] }, { "cell_type": "code", "source": [ "df['final_text']" ], "metadata": { "id": "BcMTnN3G0aXe", "outputId": "3010d7ad-4584-4334-a7d5-58bbf3a1a6ce", "colab": { "base_uri": "https://localhost:8080/" } }, "execution_count": 24, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0 plus ad commerci experience... tacky.\n", "1 realli aggress blast obnoxi \"entertainment\" gu...\n", "2 realli big bad thing\n", "3 serious would pay $30 flight seat playing. rea...\n", "4 yes, near everi time i fli vx “ear worm” won't...\n", " ... \n", "11536 flight cancel flightled, leav tomorrow morning...\n", "11537 right cue delays👌\n", "11538 thank got differ flight chicago.\n", "11539 leav 20 minut late flight. no warn communic 15...\n", "11540 money, chang flight, answer phones! ani sugges...\n", "Name: final_text, Length: 11541, dtype: object" ] }, "metadata": {}, "execution_count": 24 } ] }, { "cell_type": "code", "source": [ "from imblearn.over_sampling import SMOTE # Handling Imbalanced" ], "metadata": { "id": "Rz14zrC10TxF" }, "execution_count": 25, "outputs": [] }, { "cell_type": "code", "source": [ "# smote = SMOTE()\n", "# x_sm,y_sm = smote.fit_resample(X_final, y)" ], "metadata": { "id": "d6PPaLK40fz7" }, "execution_count": 26, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "tOssB4CKnAX2" }, "source": [ "The balance was (mostly) restored." ] }, { "cell_type": "code", "metadata": { "id": "E7Mj-0ne--5t" }, "source": [ "PRE_TRAINED_MODEL_NAME = 'bert-base-cased'" ], "execution_count": 27, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "fMSr7C-F_sey" }, "source": [ "> You can use a cased and uncased version of BERT and tokenizer. I've experimented with both. The cased version works better. Intuitively, that makes sense, since \"BAD\" might convey more sentiment than \"bad\"." ] }, { "cell_type": "markdown", "metadata": { "id": "NiLb-ltM-ZRz" }, "source": [ "Let's load a pre-trained [BertTokenizer](https://huggingface.co/transformers/model_doc/bert.html#berttokenizer):" ] }, { "cell_type": "code", "metadata": { "id": "H3AfJSZ8NNLF", "colab": { "base_uri": "https://localhost:8080/", "height": 113, "referenced_widgets": [ "97ec0cd332334ec0babed9d67365fef4", "dd0b94325ff946648fb3d6572bcefe21", "1da3d2dd8d67470c906267db0d033eea", "66fb8e5d0514480e9c7bc6ac83ce62bb", "8e56558e9cd0430a9ffea5b045802cc7", "4b5202b98b7f4d7bbd3495ef7bd215dc", "df17bef95f9b47c38cc518d6fc6067f1", "498010aed4c44fc9bb350c537be0343a", "4f0210f7882c4cbc985a05cc2d07eb6c", "7e9ab77b6e744800aa2064867e3baaaf", "66fbc9ef81c8404cb403fbdabe29f85d", "ac7dc14bb6cd4a4db9c793a3b816b94d", "a7cd8077934941b49f9cc8d019c02080", "61d4ffc13ea44ef5b4604b04c7427c5d", "50a2d2adfeeb45f8ad0af2d4c6ec7be7", "47c729c8718f47dc82d1a4ad0b8ba507", "0c4d5e22864b4e0b973291057e84a072", "4cead8f48ae541d3a03ab96dba59dda0", "9455e5c7106d469fb5ef5c771adb5d39", "68e1b90fa71c46cf8f4736ada2c53c62", "5287164483dd43f9b13f0baeef16301f", "2d5148a6ac534f768cec7b25bc7963a8", "53b9dc8721ce4e998d3511e845feed54", "fb42909d39124bae88a7b4dc3c59f14f", "44d8f866c7414ae0b7a0ee01b1be065a", "095728c4ac944228ada0a95be25da0ca", "45f503bfcc66414ba2cdb04a7f9c14f7", "3051e41119b9472b9c575dfdd9d38323", "049a2ad3c16343989b954adb01b3cfbc", "350727a179c44dcab20d3f7fd882f772", "198f59d7cd9e4aeb84bd207f2b6b452c", "72db6f65efe94b88ae465d44fa17b571", "4cb93c7181154dd0bdea8d21d97dd131" ] }, "outputId": "f2a7fea3-588d-483a-caa5-a31906b8f61d" }, "source": [ "tokenizer = BertTokenizer.from_pretrained(PRE_TRAINED_MODEL_NAME)" ], "execution_count": 28, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Downloading: 0%| | 0.00/213k [00:00" ], "image/png": "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\n" }, "metadata": { "image/png": { "width": 740, "height": 489 } } } ] }, { "cell_type": "markdown", "metadata": { "id": "oW6ajl30t6du" }, "source": [ "Most of the reviews seem to contain less than 128 tokens, but we'll be on the safe side and choose a maximum length of 60." ] }, { "cell_type": "code", "metadata": { "id": "t7xSmJtLuoxW" }, "source": [ "MAX_LEN = 60" ], "execution_count": 43, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "XvvcoU6nurHy" }, "source": [ "We have all building blocks required to create a PyTorch dataset. Let's do it:" ] }, { "cell_type": "code", "metadata": { "id": "E2BPgRJ7YBK0" }, "source": [ "class GPReviewDataset(Dataset):\n", "\n", " def __init__(self, reviews, targets, tokenizer, max_len):\n", " self.reviews = reviews\n", " self.targets = targets\n", " self.tokenizer = tokenizer\n", " self.max_len = max_len\n", " \n", " def __len__(self):\n", " return len(self.reviews)\n", " \n", " def __getitem__(self, item):\n", " review = str(self.reviews[item])\n", " target = self.targets[item]\n", "\n", " encoding = self.tokenizer.encode_plus(\n", " review,\n", " add_special_tokens=True,\n", " max_length=self.max_len,\n", " return_token_type_ids=False,\n", " pad_to_max_length=True,\n", " return_attention_mask=True,\n", " return_tensors='pt',\n", " )\n", "\n", " return {\n", " 'review_text': review,\n", " 'input_ids': encoding['input_ids'].flatten(),\n", " 'attention_mask': encoding['attention_mask'].flatten(),\n", " 'targets': torch.tensor(target, dtype=torch.long)\n", " }" ], "execution_count": 44, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "x2uwsvCYqDJK" }, "source": [ "The tokenizer is doing most of the heavy lifting for us. We also return the review texts, so it'll be easier to evaluate the predictions from our model. Let's split the data:" ] }, { "cell_type": "code", "metadata": { "id": "B-vWzoo81dvO" }, "source": [ "df_train, df_test = train_test_split(df, test_size=0.1, random_state=RANDOM_SEED)\n", "df_val, df_test = train_test_split(df_test, test_size=0.5, random_state=RANDOM_SEED)" ], "execution_count": 45, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "xz3ZOQXVPCwh", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "6da7e72e-e763-4c40-b82f-d80055f6083d" }, "source": [ "df_train.shape, df_val.shape, df_test.shape" ], "execution_count": 46, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "((10386, 2), (577, 2), (578, 2))" ] }, "metadata": {}, "execution_count": 46 } ] }, { "cell_type": "markdown", "metadata": { "id": "J4tQ1x-vqNab" }, "source": [ "We also need to create a couple of data loaders. Here's a helper function to do it:" ] }, { "cell_type": "code", "metadata": { "id": "KEGqcvkuOuTX" }, "source": [ "def create_data_loader(df, tokenizer, max_len, batch_size):\n", " ds = GPReviewDataset(\n", " reviews=df.final_text.to_numpy(),\n", " targets=df.airline_sentiment.to_numpy(),\n", " tokenizer=tokenizer,\n", " max_len=max_len\n", " )\n", "\n", " return DataLoader(\n", " ds,\n", " batch_size=batch_size,\n", " num_workers=4\n", " )" ], "execution_count": 48, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "vODDxMKsPHqI" }, "source": [ "BATCH_SIZE = 16\n", "\n", "train_data_loader = create_data_loader(df_train, tokenizer, MAX_LEN, BATCH_SIZE)\n", "val_data_loader = create_data_loader(df_val, tokenizer, MAX_LEN, BATCH_SIZE)\n", "test_data_loader = create_data_loader(df_test, tokenizer, MAX_LEN, BATCH_SIZE)" ], "execution_count": 49, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "A6dlOptwqlhF" }, "source": [ "Let's have a look at an example batch from our training data loader:" ] }, { "cell_type": "code", "metadata": { "id": "Y93ldSN47FeT", "outputId": "1b8b2fea-cd09-4b6b-8dea-d261fc8a4a2f", "colab": { "base_uri": "https://localhost:8080/" } }, "source": [ "data = next(iter(train_data_loader))\n", "data.keys()" ], "execution_count": 50, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "dict_keys(['review_text', 'input_ids', 'attention_mask', 'targets'])" ] }, "metadata": {}, "execution_count": 50 } ] }, { "cell_type": "code", "metadata": { "id": "IdU4YVqb7N8M", "outputId": "a026fa44-86b3-41b4-a361-1ec43bd395f1", "colab": { "base_uri": "https://localhost:8080/" } }, "source": [ "print(data['input_ids'].shape)\n", "print(data['attention_mask'].shape)\n", "print(data['targets'].shape)" ], "execution_count": 51, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "torch.Size([16, 60])\n", "torch.Size([16, 60])\n", "torch.Size([16])\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "H63Y-TjyRC7S" }, "source": [ "## Sentiment Classification with BERT and Hugging Face" ] }, { "cell_type": "markdown", "metadata": { "id": "440Nd31VTHER" }, "source": [ "There are a lot of helpers that make using BERT easy with the Transformers library. Depending on the task you might want to use [BertForSequenceClassification](https://huggingface.co/transformers/model_doc/bert.html#bertforsequenceclassification), [BertForQuestionAnswering](https://huggingface.co/transformers/model_doc/bert.html#bertforquestionanswering) or something else. \n", "\n", "But who cares, right? We're *hardcore*! We'll use the basic [BertModel](https://huggingface.co/transformers/model_doc/bert.html#bertmodel) and build our sentiment classifier on top of it. Let's load the model:" ] }, { "cell_type": "code", "metadata": { "id": "0P41FayISNRI", "colab": { "base_uri": "https://localhost:8080/", "height": 121, "referenced_widgets": [ "1b584462ac5e4251ae40be84572216a1", "862f9e6a8b9d4681b94dac3300ea8c60", "ca2252e81a3741eba39508589e80a8b8", "5aeb828437eb43a6940aa66fd61d2aca", "a87edd46a25d42c1b9202565e1906aaa", "fc0b3769309e441ea5b7fb858aaac313", "e6170b4fe7a74df6bd24c2f528e0eddd", "6829493970a6428dba31f6471a9de0aa", "b4beeba096c54cd7a82eac7bc88efbe3", "4158cb4fa3ed43e5845d0bfd82c759b3", "bf7aa9240b7c4cfbb17eee03fcc1fad3" ] }, "outputId": "e9dcb731-d604-4716-c80c-ca45eadcb462" }, "source": [ "bert_model = BertModel.from_pretrained(PRE_TRAINED_MODEL_NAME)" ], "execution_count": 52, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "Downloading: 0%| | 0.00/436M [00:00)" ] }, "metadata": {}, "execution_count": 60 } ] }, { "cell_type": "markdown", "metadata": { "id": "g9xikRdtRN1N" }, "source": [ "### Training" ] }, { "cell_type": "markdown", "metadata": { "id": "76g7FV85H-T8" }, "source": [ "To reproduce the training procedure from the BERT paper, we'll use the [AdamW](https://huggingface.co/transformers/main_classes/optimizer_schedules.html#adamw) optimizer provided by Hugging Face. It corrects weight decay, so it's similar to the original paper. We'll also use a linear scheduler with no warmup steps:" ] }, { "cell_type": "code", "metadata": { "id": "5v-ArJ2fCCcU" }, "source": [ "EPOCHS = 50\n", "\n", "optimizer = AdamW(model.parameters(), lr=2e-5, correct_bias=False)\n", "total_steps = len(train_data_loader) * EPOCHS\n", "\n", "scheduler = get_linear_schedule_with_warmup(\n", " optimizer,\n", " num_warmup_steps=0,\n", " num_training_steps=total_steps\n", ")\n", "\n", "loss_fn = nn.CrossEntropyLoss().to(device)" ], "execution_count": 61, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "bzl9UhuNx1_Q" }, "source": [ "def train_epoch(\n", " model, \n", " data_loader, \n", " loss_fn, \n", " optimizer, \n", " device, \n", " scheduler, \n", " n_examples\n", "):\n", " model = model.train()\n", "\n", " losses = []\n", " correct_predictions = 0\n", " \n", " for d in data_loader:\n", " input_ids = d[\"input_ids\"].to(device)\n", " attention_mask = d[\"attention_mask\"].to(device)\n", " targets = d[\"targets\"].to(device)\n", "\n", " outputs = model(\n", " input_ids=input_ids,\n", " attention_mask=attention_mask\n", " )\n", "\n", " _, preds = torch.max(outputs, dim=1)\n", " loss = loss_fn(outputs, targets)\n", "\n", " correct_predictions += torch.sum(preds == targets)\n", " losses.append(loss.item())\n", "\n", " loss.backward()\n", " nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)\n", " optimizer.step()\n", " scheduler.step()\n", " optimizer.zero_grad()\n", "\n", " return correct_predictions.double() / n_examples, np.mean(losses)" ], "execution_count": 62, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "CXeRorVGIKre" }, "source": [ "def eval_model(model, data_loader, loss_fn, device, n_examples):\n", " model = model.eval()\n", "\n", " losses = []\n", " correct_predictions = 0\n", "\n", " with torch.no_grad():\n", " for d in data_loader:\n", " input_ids = d[\"input_ids\"].to(device)\n", " attention_mask = d[\"attention_mask\"].to(device)\n", " targets = d[\"targets\"].to(device)\n", "\n", " outputs = model(\n", " input_ids=input_ids,\n", " attention_mask=attention_mask\n", " )\n", " _, preds = torch.max(outputs, dim=1)\n", "\n", " loss = loss_fn(outputs, targets)\n", "\n", " correct_predictions += torch.sum(preds == targets)\n", " losses.append(loss.item())\n", "\n", " return correct_predictions.double() / n_examples, np.mean(losses)" ], "execution_count": 63, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "1zhHoFNsxufs", "outputId": "6eda16bb-857c-4ee9-d73c-8c7d28cba476", "colab": { "base_uri": "https://localhost:8080/" } }, "source": [ "%%time\n", "\n", "history = defaultdict(list)\n", "best_accuracy = 0\n", "\n", "for epoch in range(EPOCHS):\n", "\n", " print(f'Epoch {epoch + 1}/{EPOCHS}')\n", " print('-' * 10)\n", "\n", " train_acc, train_loss = train_epoch(\n", " model,\n", " train_data_loader, \n", " loss_fn, \n", " optimizer, \n", " device, \n", " scheduler, \n", " len(df_train)\n", " )\n", "\n", " print(f'Train loss {train_loss} accuracy {train_acc}')\n", "\n", " val_acc, val_loss = eval_model(\n", " model,\n", " val_data_loader,\n", " loss_fn, \n", " device, \n", " len(df_val)\n", " )\n", "\n", " print(f'Val loss {val_loss} accuracy {val_acc}')\n", " print()\n", "\n", " history['train_acc'].append(train_acc)\n", " history['train_loss'].append(train_loss)\n", " history['val_acc'].append(val_acc)\n", " history['val_loss'].append(val_loss)\n", "\n", " if val_acc > best_accuracy:\n", " torch.save(model.state_dict(), 'best_model_state.bin')\n", " best_accuracy = val_acc" ], "execution_count": 64, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/50\n", "----------\n", "Train loss 0.3124482896924019 accuracy 0.8817639129597535\n", "Val loss 0.23406846197070302 accuracy 0.9150779896013864\n", "\n", "Epoch 2/50\n", "----------\n", "Train loss 0.1987390323377286 accuracy 0.9376083188908145\n", "Val loss 0.2672071671805571 accuracy 0.9185441941074522\n", "\n", "Epoch 3/50\n", "----------\n", "Train loss 0.1399302137678919 accuracy 0.9617754669747737\n", "Val loss 0.284849271505467 accuracy 0.9341421143847487\n", "\n", "Epoch 4/50\n", "----------\n", "Train loss 0.10013913830948205 accuracy 0.9756402849990372\n", "Val loss 0.29284326740496514 accuracy 0.9341421143847487\n", "\n", "Epoch 5/50\n", "----------\n", "Train loss 0.07651118654202527 accuracy 0.9816098594261505\n", "Val loss 0.38020808355744323 accuracy 0.9116117850953206\n", "\n", "Epoch 6/50\n", "----------\n", "Train loss 0.05350838012509764 accuracy 0.9876757173117658\n", "Val loss 0.41392475038918675 accuracy 0.9272097053726169\n", "\n", "Epoch 7/50\n", "----------\n", "Train loss 0.03937356682852484 accuracy 0.9919121894858464\n", "Val loss 0.4252865085436497 accuracy 0.9306759098786828\n", "\n", "Epoch 8/50\n", "----------\n", "Train loss 0.032847739118330464 accuracy 0.9936452917388793\n", "Val loss 0.45024220039045465 accuracy 0.9289428076256498\n", "\n", "Epoch 9/50\n", "----------\n", "Train loss 0.024283434624600118 accuracy 0.9951858270749085\n", "Val loss 0.43943533158744685 accuracy 0.9237435008665511\n", "\n", "Epoch 10/50\n", "----------\n", "Train loss 0.023459141599697222 accuracy 0.9956672443674177\n", "Val loss 0.43906110655606845 accuracy 0.9272097053726169\n", "\n", "Epoch 11/50\n", "----------\n", "Train loss 0.023609176759290185 accuracy 0.995474677450414\n", "Val loss 0.49509579919961383 accuracy 0.9202772963604852\n", "\n", "Epoch 12/50\n", "----------\n", "Train loss 0.0163676910680862 accuracy 0.997207779703447\n", "Val loss 0.576945874026982 accuracy 0.9098786828422877\n", "\n", "Epoch 13/50\n", "----------\n", "Train loss 0.020244925396674752 accuracy 0.9957635278259195\n", "Val loss 0.5133913572023409 accuracy 0.9168110918544193\n", "\n", "Epoch 14/50\n", "----------\n", "Train loss 0.01788388556053038 accuracy 0.9965337954939342\n", "Val loss 0.5457048712019428 accuracy 0.9220103986135182\n", "\n", "Epoch 15/50\n", "----------\n", "Train loss 0.016883713421708448 accuracy 0.9970152127864432\n", "Val loss 0.5664009002082182 accuracy 0.9168110918544193\n", "\n", "Epoch 16/50\n", "----------\n", "Train loss 0.011920877422794896 accuracy 0.997689196995956\n", "Val loss 0.5845212276472012 accuracy 0.9237435008665511\n", "\n", "Epoch 17/50\n", "----------\n", "Train loss 0.015457891947931224 accuracy 0.997207779703447\n", "Val loss 0.6642184782105834 accuracy 0.9116117850953206\n", "\n", "Epoch 18/50\n", "----------\n", "Train loss 0.009225852807441978 accuracy 0.9982668977469671\n", "Val loss 0.5991765955377314 accuracy 0.9133448873483535\n", "\n", "Epoch 19/50\n", "----------\n", "Train loss 0.009642666433070329 accuracy 0.9980743308299634\n", "Val loss 0.6316917483321024 accuracy 0.9168110918544193\n", "\n", "Epoch 20/50\n", "----------\n", "Train loss 0.009601374957716102 accuracy 0.9977854804544579\n", "Val loss 0.6726592351594779 accuracy 0.9098786828422877\n", "\n", "Epoch 21/50\n", "----------\n", "Train loss 0.0068860256740915175 accuracy 0.9983631812054689\n", "Val loss 0.6701350377855773 accuracy 0.9220103986135182\n", "\n", "Epoch 22/50\n", "----------\n", "Train loss 0.005145378301867122 accuracy 0.998844598497978\n", "Val loss 0.649165301833548 accuracy 0.9202772963604852\n", "\n", "Epoch 23/50\n", "----------\n", "Train loss 0.0062990643101175706 accuracy 0.998844598497978\n", "Val loss 0.6648573791156909 accuracy 0.9185441941074522\n", "\n", "Epoch 24/50\n", "----------\n", "Train loss 0.006170636471050294 accuracy 0.9986520315809744\n", "Val loss 0.6514752306097393 accuracy 0.9220103986135182\n", "\n", "Epoch 25/50\n", "----------\n", "Train loss 0.005282152641946316 accuracy 0.998844598497978\n", "Val loss 0.6553644963759006 accuracy 0.9185441941074522\n", "\n", "Epoch 26/50\n", "----------\n", "Train loss 0.006697575787554972 accuracy 0.9984594646639707\n", "Val loss 0.5847577546726678 accuracy 0.9289428076256498\n", "\n", "Epoch 27/50\n", "----------\n", "Train loss 0.005390129850855793 accuracy 0.9985557481224725\n", "Val loss 0.6526485396489079 accuracy 0.9324090121317157\n", "\n", "Epoch 28/50\n", "----------\n", "Train loss 0.003961942444590862 accuracy 0.9990371654149817\n", "Val loss 0.5708527235646019 accuracy 0.9358752166377816\n", "\n", "Epoch 29/50\n", "----------\n", "Train loss 0.004420585524613461 accuracy 0.998844598497978\n", "Val loss 0.6695240074942327 accuracy 0.925476603119584\n", "\n", "Epoch 30/50\n", "----------\n", "Train loss 0.0007386390918246924 accuracy 0.9995185827074908\n", "Val loss 0.7752115369991365 accuracy 0.9237435008665511\n", "\n", "Epoch 31/50\n", "----------\n", "Train loss 0.005418442264519679 accuracy 0.9989408819564799\n", "Val loss 0.664634708411055 accuracy 0.9272097053726169\n", "\n", "Epoch 32/50\n", "----------\n", "Train loss 0.0013771660231780586 accuracy 0.9992297323319853\n", "Val loss 0.7118448844911274 accuracy 0.9306759098786828\n", "\n", "Epoch 33/50\n", "----------\n", "Train loss 0.0033388784223489683 accuracy 0.9991334488734835\n", "Val loss 0.7002983717610474 accuracy 0.9220103986135182\n", "\n", "Epoch 34/50\n", "----------\n", "Train loss 0.0006292673525439778 accuracy 0.9995185827074908\n", "Val loss 0.8164927445862833 accuracy 0.9272097053726169\n", "\n", "Epoch 35/50\n", "----------\n", "Train loss 0.0009758682518185406 accuracy 0.9995185827074908\n", "Val loss 0.7811418329621747 accuracy 0.9220103986135182\n", "\n", "Epoch 36/50\n", "----------\n", "Train loss 0.0024629970237989396 accuracy 0.9994222992489891\n", "Val loss 0.7407609688708529 accuracy 0.9272097053726169\n", "\n", "Epoch 37/50\n", "----------\n", "Train loss 0.0017699649174581001 accuracy 0.9991334488734835\n", "Val loss 0.7290363430651841 accuracy 0.9272097053726169\n", "\n", "Epoch 38/50\n", "----------\n", "Train loss 0.0010570444115277355 accuracy 0.9996148661659927\n", "Val loss 0.8029007259012046 accuracy 0.925476603119584\n", "\n", "Epoch 39/50\n", "----------\n", "Train loss 0.0017075326254687821 accuracy 0.9993260157904872\n", "Val loss 0.7712258108510247 accuracy 0.9289428076256498\n", "\n", "Epoch 40/50\n", "----------\n", "Train loss 0.0013674867182628357 accuracy 0.9996148661659927\n", "Val loss 0.8009461479879046 accuracy 0.9237435008665511\n", "\n", "Epoch 41/50\n", "----------\n", "Train loss 0.0005717204482588245 accuracy 0.9996148661659927\n", "Val loss 0.8238828446286991 accuracy 0.9237435008665511\n", "\n", "Epoch 42/50\n", "----------\n", "Train loss 0.0017143842269918142 accuracy 0.9996148661659927\n", "Val loss 0.7586107066035642 accuracy 0.9289428076256498\n", "\n", "Epoch 43/50\n", "----------\n", "Train loss 0.002004068477267188 accuracy 0.9994222992489891\n", "Val loss 0.7542742524905732 accuracy 0.925476603119584\n", "\n", "Epoch 44/50\n", "----------\n", "Train loss 0.0012009799538411524 accuracy 0.9995185827074908\n", "Val loss 0.7557599692095209 accuracy 0.9306759098786828\n", "\n", "Epoch 45/50\n", "----------\n", "Train loss 0.0018044745204427342 accuracy 0.9992297323319853\n", "Val loss 0.7818441829639338 accuracy 0.9306759098786828\n", "\n", "Epoch 46/50\n", "----------\n", "Train loss 0.001154846085373195 accuracy 0.9997111496244945\n", "Val loss 0.8118086541677362 accuracy 0.9306759098786828\n", "\n", "Epoch 47/50\n", "----------\n", "Train loss 0.000753694553695473 accuracy 0.9995185827074908\n", "Val loss 0.8470470073650416 accuracy 0.925476603119584\n", "\n", "Epoch 48/50\n", "----------\n", "Train loss 0.0011207379582169079 accuracy 0.9992297323319853\n", "Val loss 0.8090208934779302 accuracy 0.9306759098786828\n", "\n", "Epoch 49/50\n", "----------\n", "Train loss 0.0007217580234161967 accuracy 0.9993260157904872\n", "Val loss 0.8028674913622722 accuracy 0.9306759098786828\n", "\n", "Epoch 50/50\n", "----------\n", "Train loss 0.0004997462119387399 accuracy 0.9996148661659927\n", "Val loss 0.8093794409494237 accuracy 0.9306759098786828\n", "\n", "CPU times: user 1h 15min 29s, sys: 28min 37s, total: 1h 44min 7s\n", "Wall time: 1h 45min 25s\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "zoGUH8VZ-pPQ" }, "source": [ "model = SentimentClassifier(len(class_names))\n", "model.load_state_dict(torch.load('best_model_state.bin'))\n", "model = model.to(device)" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "U3HZb3NWFtFf" }, "source": [ "## Evaluation\n", "\n", "So how good is our model on predicting sentiment? Let's start by calculating the accuracy on the test data:" ] }, { "cell_type": "code", "metadata": { "id": "jS3gJ_qBEljD" }, "source": [ "test_acc, _ = eval_model(\n", " model,\n", " test_data_loader,\n", " loss_fn,\n", " device,\n", " len(df_test)\n", ")\n", "\n", "test_acc.item()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "EgR6MuNS8jr_" }, "source": [ "def get_predictions(model, data_loader):\n", " model = model.eval()\n", " \n", " review_texts = []\n", " predictions = []\n", " prediction_probs = []\n", " real_values = []\n", "\n", " with torch.no_grad():\n", " for d in data_loader:\n", "\n", " texts = d[\"review_text\"]\n", " input_ids = d[\"input_ids\"].to(device)\n", " attention_mask = d[\"attention_mask\"].to(device)\n", " targets = d[\"targets\"].to(device)\n", "\n", " outputs = model(\n", " input_ids=input_ids,\n", " attention_mask=attention_mask\n", " )\n", " _, preds = torch.max(outputs, dim=1)\n", "\n", " probs = F.softmax(outputs, dim=1)\n", "\n", " review_texts.extend(texts)\n", " predictions.extend(preds)\n", " prediction_probs.extend(probs)\n", " real_values.extend(targets)\n", "\n", " predictions = torch.stack(predictions).cpu()\n", " prediction_probs = torch.stack(prediction_probs).cpu()\n", " real_values = torch.stack(real_values).cpu()\n", " return review_texts, predictions, prediction_probs, real_values" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "zHdPZr60-0c_" }, "source": [ "y_review_texts, y_pred, y_pred_probs, y_test = get_predictions(\n", " model,\n", " test_data_loader\n", ")" ], "execution_count": null, "outputs": [] } ] }