{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "cbb531606f1a4e81a25b4c2dccaf7992": {
          "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_3b112f90096548f4b8f3960a5683bf44",
              "IPY_MODEL_5ede615ec51543d5b15f4e675f81ce73",
              "IPY_MODEL_6e9da60362d745788b3f6aebb8136224"
            ],
            "layout": "IPY_MODEL_9319a74abb9f43a2889d7cc1afc9f2d7"
          }
        },
        "3b112f90096548f4b8f3960a5683bf44": {
          "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_38a9ca3a92754923b09b16d6b160657b",
            "placeholder": "​",
            "style": "IPY_MODEL_a4a252de4ef0466294c27da2b87057ec",
            "value": "Map: 100%"
          }
        },
        "5ede615ec51543d5b15f4e675f81ce73": {
          "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_c5450d346fa4489f91a6aba327658178",
            "max": 17048,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_7a021a312f564fc3b31635e81381b89d",
            "value": 17048
          }
        },
        "6e9da60362d745788b3f6aebb8136224": {
          "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_3b4aeb2c0b9a434cbfd9c7afc4d443bd",
            "placeholder": "​",
            "style": "IPY_MODEL_dc4eacee159d40a791482981d0d958ec",
            "value": " 17048/17048 [00:07&lt;00:00, 3182.03 examples/s]"
          }
        },
        "9319a74abb9f43a2889d7cc1afc9f2d7": {
          "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
          }
        },
        "38a9ca3a92754923b09b16d6b160657b": {
          "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
          }
        },
        "a4a252de4ef0466294c27da2b87057ec": {
          "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": ""
          }
        },
        "c5450d346fa4489f91a6aba327658178": {
          "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
          }
        },
        "7a021a312f564fc3b31635e81381b89d": {
          "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": ""
          }
        },
        "3b4aeb2c0b9a434cbfd9c7afc4d443bd": {
          "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
          }
        },
        "dc4eacee159d40a791482981d0d958ec": {
          "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": ""
          }
        },
        "a7be574e11824986a4544dd506700bc7": {
          "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_39aff67cd60543fc84426d97ab7e8cd3",
              "IPY_MODEL_9b27034bbdb74205aeddb71e609a418a",
              "IPY_MODEL_8db3d3b1d2fe48bcb0088770f7f063e1"
            ],
            "layout": "IPY_MODEL_83ea58ae1ec747b5959ab9e49994d9cb"
          }
        },
        "39aff67cd60543fc84426d97ab7e8cd3": {
          "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_2c3c4aa1126b4e5c9dc5c2f140418726",
            "placeholder": "​",
            "style": "IPY_MODEL_ca919b636bd34612a5e9f75a68988f9a",
            "value": "Map: 100%"
          }
        },
        "9b27034bbdb74205aeddb71e609a418a": {
          "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_ecf323c7b36e46de8625a507af1fb515",
            "max": 4263,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_6b38fe22b74142f5978bb5bea96f816f",
            "value": 4263
          }
        },
        "8db3d3b1d2fe48bcb0088770f7f063e1": {
          "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_dac42aeabfa34a8e972c9ae1cc35cd34",
            "placeholder": "​",
            "style": "IPY_MODEL_804ca0f068d94bbb8e8fa280820cd589",
            "value": " 4263/4263 [00:01&lt;00:00, 4109.71 examples/s]"
          }
        },
        "83ea58ae1ec747b5959ab9e49994d9cb": {
          "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
          }
        },
        "2c3c4aa1126b4e5c9dc5c2f140418726": {
          "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
          }
        },
        "ca919b636bd34612a5e9f75a68988f9a": {
          "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": ""
          }
        },
        "ecf323c7b36e46de8625a507af1fb515": {
          "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
          }
        },
        "6b38fe22b74142f5978bb5bea96f816f": {
          "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": ""
          }
        },
        "dac42aeabfa34a8e972c9ae1cc35cd34": {
          "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
          }
        },
        "804ca0f068d94bbb8e8fa280820cd589": {
          "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": ""
          }
        },
        "97c8705768604740bd31e7e63219d74d": {
          "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_7198e1157e6f426ba97c9f1ba432e4e0",
              "IPY_MODEL_a5dd212e1d6f435ea3e283fed5b08a55",
              "IPY_MODEL_3b685795d2534415bf7c1cc66d57baf0"
            ],
            "layout": "IPY_MODEL_bec98857b1a6480a95aa2b68b98ec94d"
          }
        },
        "7198e1157e6f426ba97c9f1ba432e4e0": {
          "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_7afeaa2b494549dda6cb5e4ef5483662",
            "placeholder": "​",
            "style": "IPY_MODEL_f5e370ce6c344a5b8318bfe51c6da7f2",
            "value": "pytorch_model.bin: 100%"
          }
        },
        "a5dd212e1d6f435ea3e283fed5b08a55": {
          "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_5e0fc0c3bade4a2abd1057014c9f5a59",
            "max": 267967963,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_ec816b104e434b268dac526e7b6a49b7",
            "value": 267967963
          }
        },
        "3b685795d2534415bf7c1cc66d57baf0": {
          "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_7b5ecb740ef54cc7a4333f2b4111a759",
            "placeholder": "​",
            "style": "IPY_MODEL_f18629beae0545ef971a62617b2b6119",
            "value": " 268M/268M [00:05&lt;00:00, 40.2MB/s]"
          }
        },
        "bec98857b1a6480a95aa2b68b98ec94d": {
          "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
          }
        },
        "7afeaa2b494549dda6cb5e4ef5483662": {
          "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
          }
        },
        "f5e370ce6c344a5b8318bfe51c6da7f2": {
          "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": ""
          }
        },
        "5e0fc0c3bade4a2abd1057014c9f5a59": {
          "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
          }
        },
        "ec816b104e434b268dac526e7b6a49b7": {
          "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": ""
          }
        },
        "7b5ecb740ef54cc7a4333f2b4111a759": {
          "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
          }
        },
        "f18629beae0545ef971a62617b2b6119": {
          "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": "markdown",
      "source": [
        "## Dataset description & details"
      ],
      "metadata": {
        "id": "H2qZ36rb5jnX"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install -q transformers datasets sentencepiece tensorflow_text==2.14.0\n",
        "!pip install -q nltk spacy textblob emoji wordfreq\n",
        "!python -m spacy download en_core_web_sm"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "UxtZpL4BHu-l",
        "outputId": "8aa65503-6944-4980-c4e0-ad06644e828a"
      },
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\u001b[31mERROR: Could not find a version that satisfies the requirement tensorflow_text==2.14.0 (from versions: 2.18.1, 2.19.0rc0, 2.19.0)\u001b[0m\u001b[31m\n",
            "\u001b[0m\u001b[31mERROR: No matching distribution found for tensorflow_text==2.14.0\u001b[0m\u001b[31m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m608.4/608.4 kB\u001b[0m \u001b[31m14.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.8/56.8 MB\u001b[0m \u001b[31m11.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.8/44.8 kB\u001b[0m \u001b[31m1.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m183.0/183.0 kB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.4/5.4 MB\u001b[0m \u001b[31m48.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m40.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hCollecting en-core-web-sm==3.8.0\n",
            "  Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl (12.8 MB)\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.8/12.8 MB\u001b[0m \u001b[31m69.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h\u001b[38;5;2m✔ Download and installation successful\u001b[0m\n",
            "You can now load the package via spacy.load('en_core_web_sm')\n",
            "\u001b[38;5;3m⚠ Restart to reload dependencies\u001b[0m\n",
            "If you are in a Jupyter or Colab notebook, you may need to restart Python in\n",
            "order to load all the package's dependencies. You can do this by selecting the\n",
            "'Restart kernel' or 'Restart runtime' option.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "import random\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "from pprint import pprint\n",
        "from datetime import datetime\n",
        "import re\n",
        "import joblib\n",
        "import warnings\n",
        "warnings.filterwarnings('ignore')\n",
        "SEED = 42\n",
        "random.seed(SEED)\n",
        "np.random.seed(SEED)\n",
        "import tensorflow as tf\n",
        "tf.random.set_seed(SEED)\n",
        "from sklearn.model_selection import train_test_split, GridSearchCV\n",
        "from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.svm import SVC\n",
        "from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score, roc_curve, accuracy_score, precision_score, recall_score, f1_score\n",
        "import nltk\n",
        "nltk.download('stopwords')\n",
        "nltk.download('punkt')\n",
        "nltk.download('wordnet')\n",
        "from nltk.corpus import stopwords\n",
        "from nltk.stem import WordNetLemmatizer\n",
        "import spacy\n",
        "nlp = spacy.load(\"en_core_web_sm\")\n",
        "from textblob import TextBlob\n",
        "from transformers import DistilBertTokenizerFast, TFDistilBertForSequenceClassification, create_optimizer\n",
        "from datasets import Dataset, DatasetDict\n",
        "import torch\n",
        "import torch.nn as nn\n",
        "import torch.nn.functional as F\n",
        "import torch.optim as optim\n",
        "from torch.utils.data import Dataset, DataLoader\n",
        "from tensorflow.keras.preprocessing.text import Tokenizer\n",
        "from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
        "from tensorflow.keras.models import Sequential\n",
        "from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout, Bidirectional\n",
        "from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint\n",
        "\n",
        "print(\"Environment ready\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Gv4DjgC5NePm",
        "outputId": "f45ad334-a011-496d-9709-1d3fd17ae2f2"
      },
      "execution_count": 88,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
            "[nltk_data]   Package stopwords is already up-to-date!\n",
            "[nltk_data] Downloading package punkt to /root/nltk_data...\n",
            "[nltk_data]   Package punkt is already up-to-date!\n",
            "[nltk_data] Downloading package wordnet to /root/nltk_data...\n",
            "[nltk_data]   Package wordnet is already up-to-date!\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Environment ready\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Loading dataset"
      ],
      "metadata": {
        "id": "gE3J526DN3mt"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "DATA_PATH = \"/content/all_2019.csv\"\n",
        "df = pd.read_csv(DATA_PATH, encoding='utf-8', low_memory=False)\n",
        "print(\"Loaded dataset shape:\", df.shape)\n",
        "display(df.head(3))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 367
        },
        "id": "W1knjQ1uNzru",
        "outputId": "64f65181-6a61-496a-da6c-ec05e84e5b4b"
      },
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Loaded dataset shape: (21311, 25)\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "   Unnamed: 0                 tweet_date  \\\n",
              "0           0  2019-12-12 23:59:59+00:00   \n",
              "1           1  2019-12-12 23:59:59+00:00   \n",
              "2           2  2019-12-12 23:59:59+00:00   \n",
              "\n",
              "                                       tweet_content      tweet_id  \\\n",
              "0  English voters hanging themselves on their own...  1.210000e+18   \n",
              "1  I just don\\xe2\\x80\\x99t understand why someone...  1.210000e+18   \n",
              "2  Le #elezioni di oggi segnano un importante pas...  1.210000e+18   \n",
              "\n",
              "   tweet_likes  tweet_replies  tweet_retweets  tweet_quotes  user_username  \\\n",
              "0            2              0               0             0  ManxFreeState   \n",
              "1            2              0               0             0     alicerayb0   \n",
              "2           13              0               3             0      DiEM25_IT   \n",
              "\n",
              "        user_id  ...                                          tweet_url  \\\n",
              "0  1.007035e+09  ...  https://twitter.com/ManxFreeState/status/12052...   \n",
              "1  1.050000e+18  ...  https://twitter.com/alicerayb0/status/12052761...   \n",
              "2  4.867112e+09  ...  https://twitter.com/DiEM25_IT/status/120527614...   \n",
              "\n",
              "   quotedTweet_id                                quotedTweet_content  \\\n",
              "0    1.210000e+18  b\"Here is the story. Labour will probably win ...   \n",
              "1             NaN                                                NaN   \n",
              "2    1.210000e+18  b\"\\xf0\\x9f\\x94\\xb4 The #Tories are set to win ...   \n",
              "\n",
              "   quotedTweet_username quotedTweet_userID  \\\n",
              "0                Peston       1.415713e+07   \n",
              "1                   NaN                NaN   \n",
              "2           EuThink_Org       1.200000e+18   \n",
              "\n",
              "                                            hashtags  \\\n",
              "0                                         ['Brexit']   \n",
              "1  ['GeneralElection', 'UKElection', 'IVotedLabour']   \n",
              "2  ['elezioni', 'Tories', 'molti', 'Labour', 'Gen...   \n",
              "\n",
              "                                 clean_tweet_content     mentioned_users  \\\n",
              "0  ['english', 'voters', 'hanging', 'brexit', 'pe...                 NaN   \n",
              "1  ['donxe', '2x80x99t', 'understand', 'someone',...                 NaN   \n",
              "2  ['le', 'elezioni', 'di', 'oggi', 'segnano', 'u...  [['jeremycorbyn']]   \n",
              "\n",
              "  quotedTweet_mentionedUsers  \\\n",
              "0                        NaN   \n",
              "1                        NaN   \n",
              "2                        NaN   \n",
              "\n",
              "                             clean_sentiment_content  \n",
              "0  english voters hanging themselves on their own...  \n",
              "1  i just donxe2x80x99t understand why someone wo...  \n",
              "2  le elezioni di oggi segnano un importante pass...  \n",
              "\n",
              "[3 rows x 25 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-d1d5a190-d513-4c72-82d3-3b1f404c2132\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Unnamed: 0</th>\n",
              "      <th>tweet_date</th>\n",
              "      <th>tweet_content</th>\n",
              "      <th>tweet_id</th>\n",
              "      <th>tweet_likes</th>\n",
              "      <th>tweet_replies</th>\n",
              "      <th>tweet_retweets</th>\n",
              "      <th>tweet_quotes</th>\n",
              "      <th>user_username</th>\n",
              "      <th>user_id</th>\n",
              "      <th>...</th>\n",
              "      <th>tweet_url</th>\n",
              "      <th>quotedTweet_id</th>\n",
              "      <th>quotedTweet_content</th>\n",
              "      <th>quotedTweet_username</th>\n",
              "      <th>quotedTweet_userID</th>\n",
              "      <th>hashtags</th>\n",
              "      <th>clean_tweet_content</th>\n",
              "      <th>mentioned_users</th>\n",
              "      <th>quotedTweet_mentionedUsers</th>\n",
              "      <th>clean_sentiment_content</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0</td>\n",
              "      <td>2019-12-12 23:59:59+00:00</td>\n",
              "      <td>English voters hanging themselves on their own...</td>\n",
              "      <td>1.210000e+18</td>\n",
              "      <td>2</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>ManxFreeState</td>\n",
              "      <td>1.007035e+09</td>\n",
              "      <td>...</td>\n",
              "      <td>https://twitter.com/ManxFreeState/status/12052...</td>\n",
              "      <td>1.210000e+18</td>\n",
              "      <td>b\"Here is the story. Labour will probably win ...</td>\n",
              "      <td>Peston</td>\n",
              "      <td>1.415713e+07</td>\n",
              "      <td>['Brexit']</td>\n",
              "      <td>['english', 'voters', 'hanging', 'brexit', 'pe...</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>english voters hanging themselves on their own...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>1</td>\n",
              "      <td>2019-12-12 23:59:59+00:00</td>\n",
              "      <td>I just don\\xe2\\x80\\x99t understand why someone...</td>\n",
              "      <td>1.210000e+18</td>\n",
              "      <td>2</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>alicerayb0</td>\n",
              "      <td>1.050000e+18</td>\n",
              "      <td>...</td>\n",
              "      <td>https://twitter.com/alicerayb0/status/12052761...</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>['GeneralElection', 'UKElection', 'IVotedLabour']</td>\n",
              "      <td>['donxe', '2x80x99t', 'understand', 'someone',...</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>i just donxe2x80x99t understand why someone wo...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>2</td>\n",
              "      <td>2019-12-12 23:59:59+00:00</td>\n",
              "      <td>Le #elezioni di oggi segnano un importante pas...</td>\n",
              "      <td>1.210000e+18</td>\n",
              "      <td>13</td>\n",
              "      <td>0</td>\n",
              "      <td>3</td>\n",
              "      <td>0</td>\n",
              "      <td>DiEM25_IT</td>\n",
              "      <td>4.867112e+09</td>\n",
              "      <td>...</td>\n",
              "      <td>https://twitter.com/DiEM25_IT/status/120527614...</td>\n",
              "      <td>1.210000e+18</td>\n",
              "      <td>b\"\\xf0\\x9f\\x94\\xb4 The #Tories are set to win ...</td>\n",
              "      <td>EuThink_Org</td>\n",
              "      <td>1.200000e+18</td>\n",
              "      <td>['elezioni', 'Tories', 'molti', 'Labour', 'Gen...</td>\n",
              "      <td>['le', 'elezioni', 'di', 'oggi', 'segnano', 'u...</td>\n",
              "      <td>[['jeremycorbyn']]</td>\n",
              "      <td>NaN</td>\n",
              "      <td>le elezioni di oggi segnano un importante pass...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3 rows × 25 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d1d5a190-d513-4c72-82d3-3b1f404c2132')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-d1d5a190-d513-4c72-82d3-3b1f404c2132 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-d1d5a190-d513-4c72-82d3-3b1f404c2132');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-ae1f8c95-e05c-4fbc-8dc7-fe50fff5988b\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-ae1f8c95-e05c-4fbc-8dc7-fe50fff5988b')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-ae1f8c95-e05c-4fbc-8dc7-fe50fff5988b button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe"
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "#  Dataset description & details"
      ],
      "metadata": {
        "id": "_7KbpTW5Omf0"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\n--- Dataset info ---\")\n",
        "print(df.info())"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "frgD7zNUNzu4",
        "outputId": "53bdfacc-619d-4f5d-81b1-532b0465f1a9"
      },
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "--- Dataset info ---\n",
            "<class 'pandas.core.frame.DataFrame'>\n",
            "RangeIndex: 21311 entries, 0 to 21310\n",
            "Data columns (total 25 columns):\n",
            " #   Column                      Non-Null Count  Dtype  \n",
            "---  ------                      --------------  -----  \n",
            " 0   Unnamed: 0                  21311 non-null  int64  \n",
            " 1   tweet_date                  21311 non-null  object \n",
            " 2   tweet_content               21311 non-null  object \n",
            " 3   tweet_id                    21311 non-null  float64\n",
            " 4   tweet_likes                 21311 non-null  int64  \n",
            " 5   tweet_replies               21311 non-null  int64  \n",
            " 6   tweet_retweets              21311 non-null  int64  \n",
            " 7   tweet_quotes                21311 non-null  int64  \n",
            " 8   user_username               21311 non-null  object \n",
            " 9   user_id                     21311 non-null  float64\n",
            " 10  user_followers              21311 non-null  int64  \n",
            " 11  user_friends                21311 non-null  int64  \n",
            " 12  user_statuses               21311 non-null  int64  \n",
            " 13  user_verified               21311 non-null  bool   \n",
            " 14  user_url                    21311 non-null  object \n",
            " 15  tweet_url                   21311 non-null  object \n",
            " 16  quotedTweet_id              1637 non-null   float64\n",
            " 17  quotedTweet_content         1637 non-null   object \n",
            " 18  quotedTweet_username        1637 non-null   object \n",
            " 19  quotedTweet_userID          1637 non-null   float64\n",
            " 20  hashtags                    21311 non-null  object \n",
            " 21  clean_tweet_content         21311 non-null  object \n",
            " 22  mentioned_users             3592 non-null   object \n",
            " 23  quotedTweet_mentionedUsers  236 non-null    object \n",
            " 24  clean_sentiment_content     21310 non-null  object \n",
            "dtypes: bool(1), float64(4), int64(8), object(12)\n",
            "memory usage: 3.9+ MB\n",
            "None\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\n--- Columns ---\")\n",
        "print(df.columns.tolist())"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "TFjMqlMdNzxW",
        "outputId": "dc559d45-3587-4728-e0e2-3810fea0a352"
      },
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "--- Columns ---\n",
            "['Unnamed: 0', 'tweet_date', 'tweet_content', 'tweet_id', 'tweet_likes', 'tweet_replies', 'tweet_retweets', 'tweet_quotes', 'user_username', 'user_id', 'user_followers', 'user_friends', 'user_statuses', 'user_verified', 'user_url', 'tweet_url', 'quotedTweet_id', 'quotedTweet_content', 'quotedTweet_username', 'quotedTweet_userID', 'hashtags', 'clean_tweet_content', 'mentioned_users', 'quotedTweet_mentionedUsers', 'clean_sentiment_content']\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Count nulls\n",
        "print(\"\\nNull counts per column:\")\n",
        "display(df.isnull().sum().sort_values(ascending=False).head(30))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 904
        },
        "id": "ESma3xRwO5Ju",
        "outputId": "af7680c0-f674-4a91-8d25-a2c73dbd74bb"
      },
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Null counts per column:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "quotedTweet_mentionedUsers    21075\n",
              "quotedTweet_userID            19674\n",
              "quotedTweet_content           19674\n",
              "quotedTweet_id                19674\n",
              "quotedTweet_username          19674\n",
              "mentioned_users               17719\n",
              "clean_sentiment_content           1\n",
              "tweet_date                        0\n",
              "Unnamed: 0                        0\n",
              "user_username                     0\n",
              "tweet_quotes                      0\n",
              "tweet_retweets                    0\n",
              "tweet_replies                     0\n",
              "tweet_likes                       0\n",
              "tweet_id                          0\n",
              "tweet_content                     0\n",
              "user_id                           0\n",
              "tweet_url                         0\n",
              "user_url                          0\n",
              "user_verified                     0\n",
              "user_statuses                     0\n",
              "user_followers                    0\n",
              "user_friends                      0\n",
              "hashtags                          0\n",
              "clean_tweet_content               0\n",
              "dtype: int64"
            ],
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>0</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>quotedTweet_mentionedUsers</th>\n",
              "      <td>21075</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>quotedTweet_userID</th>\n",
              "      <td>19674</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>quotedTweet_content</th>\n",
              "      <td>19674</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>quotedTweet_id</th>\n",
              "      <td>19674</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>quotedTweet_username</th>\n",
              "      <td>19674</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mentioned_users</th>\n",
              "      <td>17719</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>clean_sentiment_content</th>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_date</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>Unnamed: 0</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>user_username</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_quotes</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_retweets</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_replies</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_likes</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_id</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_content</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>user_id</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>tweet_url</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>user_url</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>user_verified</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>user_statuses</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>user_followers</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>user_friends</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>hashtags</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>clean_tweet_content</th>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div><br><label><b>dtype:</b> int64</label>"
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "TEXT_COL = None\n",
        "possible_text_cols = ['clean_tweet_content', 'tweet_content', 'cleaned_text', 'text']\n",
        "for c in possible_text_cols:\n",
        "    if c in df.columns:\n",
        "        TEXT_COL = c\n",
        "        break\n",
        "if TEXT_COL is None:\n",
        "    # fallback: choose first string-like column\n",
        "    for c in df.columns:\n",
        "        if df[c].dtype == 'object':\n",
        "            TEXT_COL = c\n",
        "            break\n",
        "print(f\"Using text column: {TEXT_COL}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "e3O_L9eGO7V-",
        "outputId": "3548c932-fcdb-43a2-b45d-1142901902d8"
      },
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Using text column: clean_tweet_content\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Label handling"
      ],
      "metadata": {
        "id": "EQV_x3oEPEqN"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Looking for common label names\n",
        "label_candidates = ['label','is_fake','fake','target','class','y']\n",
        "label_col = None\n",
        "for c in label_candidates:\n",
        "    if c in df.columns:\n",
        "        label_col = c\n",
        "        break\n",
        "\n",
        "if label_col:\n",
        "    print(\"Found label column:\", label_col)\n",
        "else:\n",
        "\n",
        "    print(\"No label column found. Creating synthetic weak labels (heuristic).\")\n",
        "    def weak_label(row):\n",
        "        text = str(row.get(TEXT_COL, \"\")).lower()\n",
        "        r = 0\n",
        "        keywords = ['fake', 'hoax', 'not true', 'lies', 'liar', 'untrue', 'misinformation', 'disinfo', 'shocking', 'exposed']\n",
        "        if any(k in text for k in keywords):\n",
        "            return 1  # label=1 -> fake\n",
        "        # behavioral heuristic:\n",
        "        try:\n",
        "            followers = float(row.get('user_followers', 0) or 0)\n",
        "            retweets = float(row.get('tweet_retweets', 0) or 0)\n",
        "            quotes = float(row.get('tweet_quotes', 0) or 0)\n",
        "            if followers < 100 and (retweets + quotes) > 50:\n",
        "                return 1\n",
        "        except:\n",
        "            pass\n",
        "        # default real (0)\n",
        "        return 0\n",
        "\n",
        "    df['label'] = df.apply(weak_label, axis=1)\n",
        "    label_col = 'label'\n",
        "    print(\"Synthetic labels created. Distribution:\")\n",
        "    display(df[label_col].value_counts(normalize=True))\n",
        "    print(\"**Replace 'label' with real human-labeled column when available.**\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "hcTYaS2FO7ZA",
        "outputId": "be7bd383-5fe4-4748-8f0c-ef7d18e44eb2"
      },
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Found label column: label\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Convert label to int if necessary\n",
        "df[label_col] = df[label_col].astype(int)"
      ],
      "metadata": {
        "id": "2-mWyFSPPVxd"
      },
      "execution_count": 25,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "#  Preprocessing functions"
      ],
      "metadata": {
        "id": "3KbvWV99PbD9"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "stop_words = set(stopwords.words('english'))\n",
        "lemmatizer = WordNetLemmatizer()\n",
        "\n",
        "def clean_text(text):\n",
        "    if pd.isnull(text):\n",
        "        return \"\"\n",
        "    text = str(text)\n",
        "    # remove URLs\n",
        "    text = re.sub(r'http\\S+|www\\.\\S+', '', text)\n",
        "    # remove mentions and RT markers\n",
        "    text = re.sub(r'@\\w+', '', text)\n",
        "    text = text.replace(\"RT\", \" \")\n",
        "    # remove punctuation except hashtags (we keep hashtags as tokens)\n",
        "    text = re.sub(r'[^A-Za-z0-9#\\'\\s]', ' ', text)\n",
        "    # collapse whitespace\n",
        "    text = re.sub(r'\\s+', ' ', text).strip()\n",
        "    return text.lower()\n",
        "\n",
        "def tokenize_and_lemmatize(text):\n",
        "    doc = nlp(text)\n",
        "    tokens = []\n",
        "    for token in doc:\n",
        "        if token.is_stop or token.is_punct or token.is_space:\n",
        "            continue\n",
        "        lemma = token.lemma_.lower().strip()\n",
        "        # filter tiny tokens and stop words\n",
        "        if lemma and lemma not in stop_words and len(lemma) > 1:\n",
        "            tokens.append(lemma)\n",
        "    return tokens"
      ],
      "metadata": {
        "id": "D-z1Bla0PYF1"
      },
      "execution_count": 26,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# apply cleaning\n",
        "df['text_clean'] = df[TEXT_COL].astype(str).apply(clean_text)\n",
        "# optionally store tokens\n",
        "df['tokens'] = df['text_clean'].apply(tokenize_and_lemmatize)\n",
        "# a joined processed string for vectorizers\n",
        "df['text_processed'] = df['tokens'].apply(lambda toks: \" \".join(toks))"
      ],
      "metadata": {
        "id": "w3bxttzRPYI1"
      },
      "execution_count": 27,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# sentiment features (TextBlob polarity & subjectivity)\n",
        "def sentiment_scores(text):\n",
        "    try:\n",
        "        tb = TextBlob(str(text))\n",
        "        return pd.Series([tb.sentiment.polarity, tb.sentiment.subjectivity])\n",
        "    except:\n",
        "        return pd.Series([0.0, 0.0])\n",
        "\n",
        "df[['sent_polarity', 'sent_subjectivity']] = df['text_clean'].apply(sentiment_scores)"
      ],
      "metadata": {
        "id": "ESAzn2dDPlS2"
      },
      "execution_count": 28,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# behavioral features\n",
        "df['tweet_length'] = df['text_clean'].apply(lambda x: len(str(x)))\n",
        "df['num_hashtags'] = df['hashtags'].apply(lambda x: len(eval(x)) if pd.notnull(x) and str(x).startswith('[') else (0 if pd.isnull(x) else len(str(x).split())))\n",
        "df['num_mentions'] = df['mentioned_users'].apply(lambda x: len(eval(x)) if pd.notnull(x) and str(x).startswith('[') else (0 if pd.isnull(x) else str(x).count('@')))\n"
      ],
      "metadata": {
        "id": "awPIeNAVPq_H"
      },
      "execution_count": 29,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# account credibility hint\n",
        "df['user_verified_bool'] = df.get('user_verified', False).apply(lambda v: 1 if str(v).lower() in ['true','1','t','yes'] else 0) if 'user_verified' in df.columns else 0\n",
        "\n",
        "# fill NaNs in numeric columns used\n",
        "for col in ['tweet_likes','tweet_replies','tweet_retweets','tweet_quotes','user_followers','user_friends','user_statuses']:\n",
        "    if col in df.columns:\n",
        "        df[col] = pd.to_numeric(df[col], errors='coerce').fillna(0)\n",
        "    else:\n",
        "        df[col] = 0\n",
        "\n",
        "# Quick EDA visuals\n",
        "print(\"\\nLabel distribution:\")\n",
        "display(df[label_col].value_counts())\n",
        "\n",
        "plt.figure(figsize=(6,4))\n",
        "sns.countplot(x=label_col, data=df)\n",
        "plt.title(\"Label Distribution\")\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 607
        },
        "id": "6EA5JfNNPyQl",
        "outputId": "de8f1a3e-581b-49d1-d7ba-b455c2c33711"
      },
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Label distribution:\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "label\n",
              "0    20968\n",
              "1      343\n",
              "Name: count, dtype: int64"
            ],
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>count</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>label</th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>20968</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>343</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div><br><label><b>dtype:</b> int64</label>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 600x400 with 1 Axes>"
            ],
            "image/png": "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SwSX0tJS3X333TIMQ4sXL3abS0xMNH/u0qWLfHx89Pvf/16pqamy2+011lNycrLbsV0ul0JDQ2vseAAAwALBpTy0fPPNN1q/fr3b1ZbKREVF6cyZMzp48KDat2+v4OBgFRQUuNWU75ffF3OhmgvdNyNJdru9RoMRAACoqFbf41IeWvbt26d169apSZMml3xNTk6OvLy8FBgYKEmKjo7W5s2bVVpaatZkZGSoffv2atSokVmTmZnptk5GRoaio6Or8WwAAMDVqlJwGTBggE6cOFFh3OVyacCAAZe9zqlTp5STk6OcnBxJUl5ennJycpSfn6/S0lLdeeed2rFjh5YtW6azZ8/K6XTK6XSqpKRE0v9uqp0/f7527typr7/+WsuWLdOkSZN0//33m6Hkvvvuk4+Pj+Lj47Vnzx4tX75cCxYscPuY57HHHtOaNWs0d+5c5ebmKiUlRTt27NCECROq8vYAAIAaYjMMw7jSF3l5ecnpdJpXNcodOXJELVq0cLu6cTEbN25U//79K4yPGjVKKSkpFW6qLbdhwwb169dPn376qf7whz8oNzdXxcXFCg8P1wMPPKDExES3j3F27dqlhIQEffLJJ2ratKkeeeQRJSUlua25cuVKTZkyRQcPHlS7du00e/Zs3XbbbZd1HtL/QltAQIAKCwsv+XFWVUROfq3a1wRqm+w5Iz3dAgAPuJLfoVd0j8uuXbvMn7/44gu3p27Onj2rNWvWqEWLFpe9Xr9+/XSx3HSpTNWjRw9t27btksfp0qWL/vOf/1y05q677tJdd911ybUAAIDnXFFw6datm/m1+pV9JOTn56fnn3++2poDAAA41xUFl7y8PBmGodatW2v79u1q1qyZOefj46PAwEB5e3tXe5MAAADSFQaXsLAwSVJZWVmNNAMAAHAxVf4el3379mnDhg06cuRIhSAzderUq24MAADgfFUKLn//+9/18MMPq2nTpgoODpbNZjPnbDYbwQUAANSIKgWXP/3pT/rzn/9c4ZFiAACAmlSlL6A7fvw4jw4DAIBrrkrB5a677tLatWuruxcAAICLqtJHRW3bttUzzzyjbdu2KSIiQtddd53b/KOPPlotzQEAAJyrSsHlxRdfVP369bVp0yZt2rTJbc5msxFcAABAjahScMnLy6vuPgAAAC6pSve4AAAAeEKVrrg8+OCDF51funRplZoBAAC4mCoFl+PHj7vtl5aWavfu3Tpx4kSlf3wRAACgOlQpuLzzzjsVxsrKyvTwww+rTZs2V90UAABAZartHhcvLy8lJiZq3rx51bUkAACAm2q9OffAgQM6c+ZMdS4JAABgqtJHRYmJiW77hmHo8OHDWr16tUaNGlUtjQEAAJyvSsHls88+c9v38vJSs2bNNHfu3Es+cQQAAFBVVQouGzZsqO4+AAAALqlKwaXc0aNHtXfvXklS+/bt1axZs2ppCgAAoDJVujm3qKhIDz74oJo3b64+ffqoT58+CgkJUXx8vH788cfq7hEAAEBSFYNLYmKiNm3apPfff18nTpzQiRMn9O6772rTpk16/PHHq7tHAAAASVX8qOhf//qX3nrrLfXr188cu+222+Tn56e7775bixcvrq7+AAAATFW64vLjjz8qKCiownhgYOAVfVS0efNmDR06VCEhIbLZbEpPT3ebNwxDU6dOVfPmzeXn56eYmBjt27fPrebYsWMaMWKE/P391bBhQ8XHx+vUqVNuNbt27VLv3r3l6+ur0NBQzZ49u0IvK1euVIcOHeTr66uIiAh98MEHl30eAADg2qhScImOjta0adP0008/mWOnT5/W9OnTFR0dfdnrFBUVqWvXrlq0aFGl87Nnz9Zzzz2nJUuW6OOPP1a9evXkcDjcjjtixAjt2bNHGRkZWrVqlTZv3qxx48aZ8y6XS4MGDVJYWJiys7M1Z84cpaSk6MUXXzRrtm7dquHDhys+Pl6fffaZ4uLiFBcXp927d1/J2wIAAGqYzTAM40pf9Pnnn2vw4MEqLi5W165dJUk7d+6U3W7X2rVrdcMNN1x5Izab3nnnHcXFxUn639WWkJAQPf744/rjH/8oSSosLFRQUJDS0tJ077336ssvv1SnTp30ySefqGfPnpKkNWvW6LbbbtN3332nkJAQLV68WE8//bScTqd8fHwkSU8++aTS09OVm5srSbrnnntUVFSkVatWmf3cfPPN6tatm5YsWXJZ/btcLgUEBKiwsFD+/v5XfP6XEjn5tWpfE6htsueM9HQLADzgSn6HVumKS0REhPbt26fU1FR169ZN3bp106xZs7R///4qhZbK5OXlyel0KiYmxhwLCAhQVFSUsrKyJElZWVlq2LChGVokKSYmRl5eXvr444/Nmj59+pihRZIcDof27t1r/pXrrKwst+OU15QfpzLFxcVyuVxuGwAAqFlVujk3NTVVQUFBGjt2rNv40qVLdfToUSUlJV11Y06nU5Iq3EsTFBRkzjmdTgUGBrrN16lTR40bN3arCQ8Pr7BG+VyjRo3kdDovepzKpKamavr06VU4MwAAUFVVuuLyt7/9TR06dKgwfsMNN1z2RytWl5ycrMLCQnP79ttvPd0SAAA/e1UKLk6nU82bN68w3qxZMx0+fPiqm5Kk4OBgSVJBQYHbeEFBgTkXHBysI0eOuM2fOXNGx44dc6upbI1zj3GhmvL5ytjtdvn7+7ttAACgZlUpuISGhuqjjz6qMP7RRx8pJCTkqpuSpPDwcAUHByszM9Mcc7lc+vjjj80nl6Kjo3XixAllZ2ebNevXr1dZWZmioqLMms2bN6u0tNSsycjIUPv27dWoUSOz5tzjlNdcyRNSAACg5lXpHpexY8dq4sSJKi0t1YABAyRJmZmZeuKJJ67om3NPnTql/fv3m/t5eXnKyclR48aN1bJlS02cOFF/+tOf1K5dO4WHh+uZZ55RSEiI+eRRx44dNXjwYI0dO1ZLlixRaWmpJkyYoHvvvdcMUPfdd5+mT5+u+Ph4JSUlaffu3VqwYIHmzZtnHvexxx5T3759NXfuXMXGxurNN9/Ujh073B6ZBgAAnlel4DJ58mT98MMP+sMf/qCSkhJJkq+vr5KSkpScnHzZ6+zYsUP9+/c39xMTEyVJo0aNUlpamp544gkVFRVp3LhxOnHihHr16qU1a9bI19fXfM2yZcs0YcIEDRw4UF5eXho2bJiee+45cz4gIEBr165VQkKCIiMj1bRpU02dOtXtu15uueUWvfHGG5oyZYqeeuoptWvXTunp6ercuXNV3h4AAFBDqvQ9LuVOnTqlL7/8Un5+fmrXrp3sdnt19mYpfI8LcPX4Hhfgl+lKfodW6YpLufr16+vGG2+8miUAAAAuW5VuzgUAAPAEggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALAMggsAALCMWh9cWrVqJZvNVmFLSEiQJPXr16/C3Pjx493WyM/PV2xsrOrWravAwEBN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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Feature matrix construction for ML"
      ],
      "metadata": {
        "id": "J0SFc_UCWGCt"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Use TF-IDF on processed text + sentiment + behavioral features + account features\n",
        "tfidf = TfidfVectorizer(max_features=10000, ngram_range=(1,2))\n",
        "X_text_tfidf = tfidf.fit_transform(df['text_processed'].fillna(''))\n",
        "\n",
        "# pick behavioral features\n",
        "behavioral_cols = ['tweet_length','num_hashtags','num_mentions','tweet_likes','tweet_replies','tweet_retweets','tweet_quotes','user_followers','user_friends','user_statuses','user_verified_bool','sent_polarity','sent_subjectivity']\n",
        "for c in behavioral_cols:\n",
        "    if c not in df.columns:\n",
        "        df[c] = 0\n",
        "\n",
        "X_beh = df[behavioral_cols].fillna(0).astype(float).values\n",
        "\n",
        "from scipy.sparse import hstack\n",
        "X_ml = hstack([X_text_tfidf, X_beh])\n",
        "y = df[label_col].values"
      ],
      "metadata": {
        "id": "wbmn2DliWFdN"
      },
      "execution_count": 31,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# train-test split\n",
        "X_train_ml, X_test_ml, y_train, y_test = train_test_split(X_ml, y, test_size=0.2, random_state=SEED, stratify=y)\n",
        "\n",
        "print(\"ML feature matrix shape:\", X_ml.shape)\n",
        "print(\"Train/test sizes:\", X_train_ml.shape, X_test_ml.shape)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gTybM5sVWFgV",
        "outputId": "d3837663-027b-40d5-93d3-6d85a71e5401"
      },
      "execution_count": 32,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "ML feature matrix shape: (21311, 10013)\n",
            "Train/test sizes: (17048, 10013) (4263, 10013)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Standard scaler for behavioral numeric part (we'll fit on dense slice)\n",
        "scaler = StandardScaler()\n",
        "# find how many tfidf columns:\n",
        "n_tfidf = X_text_tfidf.shape[1]\n",
        "# scale behavioral columns in sparse matrix\n",
        "X_beh_train = X_train_ml[:, n_tfidf:].toarray()\n",
        "X_beh_test = X_test_ml[:, n_tfidf:].toarray()\n",
        "X_beh_train_scaled = scaler.fit_transform(X_beh_train)\n",
        "X_beh_test_scaled = scaler.transform(X_beh_test)"
      ],
      "metadata": {
        "id": "u_Y1JsBMWFjW"
      },
      "execution_count": 34,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "from scipy.sparse import csr_matrix\n",
        "X_train_ml = hstack([X_train_ml[:, :n_tfidf], csr_matrix(X_beh_train_scaled)])\n",
        "X_test_ml = hstack([X_test_ml[:, :n_tfidf], csr_matrix(X_beh_test_scaled)])"
      ],
      "metadata": {
        "id": "x7aFi2r0W5xe"
      },
      "execution_count": 35,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Train Random Forest"
      ],
      "metadata": {
        "id": "xFLSyMZ6XBFl"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\n--- Training Random Forest ---\")\n",
        "rf = RandomForestClassifier(n_estimators=200, random_state=SEED, n_jobs=-1)\n",
        "rf.fit(X_train_ml, y_train)\n",
        "y_pred_rf = rf.predict(X_test_ml)\n",
        "y_proba_rf = rf.predict_proba(X_test_ml)[:,1]"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "X_I87zZGW501",
        "outputId": "1bf86542-af60-4122-ebe4-a5e940e23b37"
      },
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "--- Training Random Forest ---\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"Random Forest Classification report:\")\n",
        "print(classification_report(y_test, y_pred_rf, digits=4))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "1sV8WU4-XHPE",
        "outputId": "22b4f603-bf16-4b55-ee68-47d09031a9c2"
      },
      "execution_count": 37,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Random Forest Classification report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0     0.9882    1.0000    0.9941      4194\n",
            "           1     1.0000    0.2754    0.4318        69\n",
            "\n",
            "    accuracy                         0.9883      4263\n",
            "   macro avg     0.9941    0.6377    0.7129      4263\n",
            "weighted avg     0.9884    0.9883    0.9850      4263\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "rf_auc = roc_auc_score(y_test, y_proba_rf)\n",
        "print(\"Random Forest ROC AUC:\", rf_auc)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "kKHiD7K0XHnV",
        "outputId": "de2c7102-5df8-42e9-a496-f46f5b56f2cc"
      },
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Random Forest ROC AUC: 0.911958422314832\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Confusion matrix\n",
        "cm = confusion_matrix(y_test, y_pred_rf)\n",
        "plt.figure(figsize=(5,4))\n",
        "sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')\n",
        "plt.xlabel(\"Predicted\"); plt.ylabel(\"True\"); plt.title(\"RF Confusion Matrix\"); plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 410
        },
        "id": "PxMyX0USXWRU",
        "outputId": "58edfe35-6a4d-42a4-dc56-922098607e6a"
      },
      "execution_count": 39,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Train SVM"
      ],
      "metadata": {
        "id": "bU6f6QygXfz8"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\n--- Training SVM (linear kernel) ---\")\n",
        "svm = SVC(kernel='linear', probability=True, random_state=SEED)\n",
        "svm.fit(X_train_ml, y_train)\n",
        "y_pred_svm = svm.predict(X_test_ml)\n",
        "y_proba_svm = svm.predict_proba(X_test_ml)[:,1]"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "xkesv7AHXcim",
        "outputId": "7fcde7c8-dffd-4fc1-ea8f-a0df51384067"
      },
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "--- Training SVM (linear kernel) ---\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"SVM Classification report:\")\n",
        "print(classification_report(y_test, y_pred_svm, digits=4))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "p27BMjseXclt",
        "outputId": "b2b4816c-27f5-4083-a591-434e7b671cea"
      },
      "execution_count": 41,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "SVM Classification report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0     0.9887    0.9995    0.9941      4194\n",
            "           1     0.9130    0.3043    0.4565        69\n",
            "\n",
            "    accuracy                         0.9883      4263\n",
            "   macro avg     0.9509    0.6519    0.7253      4263\n",
            "weighted avg     0.9875    0.9883    0.9854      4263\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "svm_auc = roc_auc_score(y_test, y_proba_svm)\n",
        "print(\"SVM ROC AUC:\", svm_auc)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "haFqFdr4Xco1",
        "outputId": "a2bbcce6-f383-4d03-fe9a-e7c0790c4ca8"
      },
      "execution_count": 42,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "SVM ROC AUC: 0.9150027990296697\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "cm = confusion_matrix(y_test, y_pred_svm)\n",
        "plt.figure(figsize=(5,4))\n",
        "sns.heatmap(cm, annot=True, fmt='d', cmap='Greens')\n",
        "plt.xlabel(\"Predicted\"); plt.ylabel(\"True\"); plt.title(\"SVM Confusion Matrix\"); plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 410
        },
        "id": "08fULBxVYQft",
        "outputId": "ca588a5c-0b0d-4452-d68b-58baf00e7f2e"
      },
      "execution_count": 43,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcQAAAGJCAYAAAAUmUOtAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARQxJREFUeJzt3X9cTvf/P/DHVbou/bpK9FNY00h+ToxrI7ylEPMj7zG/Mj+2LI0aWu8Zhsmyzc/JNiYzzY8Zo5AWZaZhWUajjWXZJ1f5lRSufp3vH76duZzo6oei87i7nRvXOa9zzvO6uHn0ep3XOZdCEAQBREREMmdU1wUQERE9CRiIREREYCASEREBYCASEREBYCASEREBYCASEREBYCASEREBYCASEREBYCASEREBYCASYenSpXj22WdhbGyMTp061fjxJ0yYgGeeeabGj/u0SkxMhEKhQGJiYl2XQqSHgViPnT59GiNGjECLFi3QsGFDNG3aFP369cOqVasAACdPnoRCocCcOXMeeow///wTCoUCISEhAID58+dDoVDAyMgIly5dkrTPy8uDqakpFAoFpk2bZlCdJSUl2LBhA3r37g0bGxuoVCo888wzeO211/DLL79U4Z0b7sCBA5g9ezZeeuklbNiwAYsXL36s56tNFy9ehEKhgEKhwKJFi8ptM2bMGCgUClhYWFTpHNHR0Vi+fHk1qiR6cjAQ66mjR4+iS5cuOHXqFKZMmYLVq1dj8uTJMDIywooVKwAAnTt3hpubG7755puHHic6OhoAMHbsWL31KpWq3P2+++67StV5584dDBo0CBMnToQgCPjf//6HyMhIjB8/HsnJyXjhhRfwzz//VOqYlXHw4EEYGRlh/fr1GD9+PAYOHFjj5/jiiy+Qnp5e48c1VMOGDcv9uyooKMD333+Phg0bVvnYVQlET09P3LlzB56enlU+L9FjIVC9NHDgQMHW1la4ceOGZFt2drb454ULFwoAhOTk5HKP07p1a8HNzU18PW/ePAGAMHz4cKFTp06S9v369RP8/PwEAEJgYGCFdQYGBgoAhGXLlkm2FRcXC0uXLhUuXbpU4XGq6rXXXhPMzc0f2/HrUkZGhvh3BUBITU3V275582bBxMREGDx4cJU/A19fX6FFixYGtb1z545QUlJSpfMQ1Qb2EOupCxcuoG3btrC2tpZss7OzE/88ZswYAP/2BO+XkpKC9PR0sc39Ro8ejdTUVJw7d05cp9VqcfDgQYwePdqgGv/55x989tln6NevH2bMmCHZbmxsjJkzZ8LZ2Vlc9+uvv2LAgAFQq9WwsLBA37598fPPP+vtFxUVBYVCgZ9++gkhISGwtbWFubk5hg0bhitXrojtFAoFNmzYgIKCAnFoMSoqShxqjIqKktSkUCgwf/588fWtW7cwY8YMPPPMM1CpVLCzs0O/fv1w8uRJsU151xALCgrw9ttvo1mzZlCpVGjdujU++ugjCA98+UzZ0POuXbvQrl07qFQqtG3bFvv37zfgE75Ho9HAxcVF8ne8efNm9O/fHzY2NpJ9vv/+e/j6+sLJyQkqlQotW7bEwoULUVJSIrbp3bs3YmNj8ffff4ufX9n7LLtOuGXLFsyZMwdNmzaFmZkZ8vLyJNcQz549C1NTU4wfP16vhiNHjsDY2BihoaEGv1ei6mAg1lMtWrRASkoKzpw588h2Li4uePHFF7Ft2za9/+yAf0OyvIDz9PSEs7Oz3n+yW7duhYWFBXx9fQ2qcd++fSguLsa4ceMMap+WloaePXvi1KlTmD17Nt577z1kZGSgd+/eOHbsmKR9UFAQTp06hXnz5mHq1KnYs2eP3nXNTZs2oWfPnlCpVNi0aRM2bdpU6WG8gIAAREZGws/PD2vWrMHMmTNhamqKs2fPPnQfQRDw8ssvY9myZejfvz8++eQTtG7dGrNmzRKv1d7vyJEjePPNNzFq1ChERETg7t278PPzw7Vr1wyu89VXX8WWLVvEwL169SoOHDjw0B9eoqKiYGFhgZCQEKxYsQIeHh6YO3cu3nnnHbHNu+++i06dOqFJkybi5/fg8OnChQsRGxuLmTNnYvHixVAqlZJztWnTBgsXLsSmTZuwe/duAPd+YJgwYQLc3NywYMECg98nUbXUcQ+VHpMDBw4IxsbGgrGxsaDRaITZs2cLcXFxQmFhoaTtp59+KgAQ4uLixHUlJSVC06ZNBY1Go9e2bMj0ypUrwsyZMwVXV1dxW9euXYXXXntNEATBoCHT4OBgAYDw66+/GvSehg4dKiiVSuHChQviuqysLMHS0lLw9PQU123YsEEAIHh5eQmlpaV65zM2NhZyc3PFdf7+/pLhwrKhxg0bNkhqACDMmzdPfG1lZVXh+/T399cbVty1a5cAQFi0aJFeuxEjRggKhUI4f/683vmUSqXeulOnTgkAhFWrVj3yvGXvY+nSpcKZM2cEAMKPP/4oCMK9v3MLCwuhoKCg3M/g9u3bkuO98cYbgpmZmXD37l1x3cOGTA8dOiQAEJ599lnJscq2HTp0SFxXUlIi9OjRQ7C3txeuXr0qBAYGCg0aNBBOnDjxyPdIVJPYQ6yn+vXrh+TkZLz88ss4deoUIiIi4OPjg6ZNm4o/hZcZOXIkTExM9Hp7SUlJ+L//+79yh0vLjB49GufPn8eJEyfE3w0dLgXuzUgFAEtLywrblpSU4MCBAxg6dCieffZZcb2joyNGjx6NI0eOiMcr8/rrr0OhUIive/bsiZKSEvz9998G11gRa2trHDt2DFlZWQbvs3fvXhgbG+Ott97SW//2229DEATs27dPb72Xlxdatmwpvu7QoQPUajX++usvg8/Ztm1bdOjQQZxcEx0djSFDhsDMzKzc9qampuKfb926hatXr6Jnz564ffu23jB5Rfz9/fWO9TBGRkaIiopCfn4+BgwYgDVr1iAsLAxdunQx+FxE1cVArMe6du2K7777Djdu3MDx48cRFhaGW7duYcSIEfj999/Fdo0bN4aPjw927tyJu3fvArj3H2aDBg3wyiuvPPT4zz//PNzc3BAdHY3NmzfDwcEB//nPfwyuT61WA7j3H25Frly5gtu3b6N169aSbW3atEFpaankNpDmzZvrvW7UqBEA4MaNGwbXWJGIiAicOXMGzZo1wwsvvID58+dXGFR///03nJycJD8ItGnTRtx+vwffB3DvvVT2fYwePRrbt2/H+fPncfTo0Uf+8JKWloZhw4bBysoKarUatra24kzjmzdvGnxOFxcXg9u2bNkS8+fPx4kTJ9C2bVu89957Bu9LVBMYiDKgVCrRtWtXLF68GJGRkSgqKsL27dv12owdOxZ5eXmIiYlBYWEhduzYAW9vb9ja2j7y2KNHj8bWrVsRHR2NkSNHwsjI8H9Sbm5uAO7dL/k4GBsbl7teeGDiyoPu71Xe78FrrADwyiuv4K+//sKqVavg5OSEpUuXom3btpJeXnVU9X086NVXX8XVq1cxZcoUNG7cGN7e3uW2y83NRa9evXDq1CksWLAAe/bsQXx8PD788EMAQGlpqcHnNKR3eL8DBw4AALKysip1jZSoJjAQZaZsCOry5ct6619++WVYWloiOjoa+/btw40bNx45XFpm9OjRuHz5Mv74449KDZcCwIABA2BsbIyvv/66wra2trYwMzMr936+c+fOwcjICM2aNavU+R+mrCeZm5urt/5hQ62Ojo548803sWvXLmRkZKBx48b44IMPHnr8Fi1aICsrS9IzLhuKbNGiRTWqf7jmzZvjpZdeQmJiIv773/+iQYMG5bZLTEzEtWvXEBUVhenTp2PQoEHw8vISP5f7PeyHh6pYu3Yt4uPj8cEHH6CwsBBvvPFGjR2byBAMxHrq0KFD5fYg9u7dCwCSoUdTU1MMGzYMe/fuRWRkJMzNzTFkyJAKz9OyZUssX74c4eHheOGFFypVY7NmzTBlyhQcOHBAfHrO/UpLS/Hxxx/jn3/+gbGxMby9vfH999/j4sWLYpvs7GxER0ejR48e4hBsdanVajRp0gSHDx/WW79mzRq91yUlJZLhQzs7Ozg5OUGn0z30+AMHDkRJSQlWr16tt37ZsmVQKBQYMGBANd/Bwy1atAjz5s1DUFDQQ9uU9Ujv//dTWFgoef8AYG5uXqkh1IfJyMjArFmz4Ofnh//973/46KOPsHv3bnz11VfVPjaRocr/EZGeekFBQbh9+zaGDRsGNzc3FBYW4ujRo9i6dav4WLQHjR07Fl999RXi4uIwZswYmJubG3Su6dOnV7nOjz/+GBcuXMBbb72F7777DoMGDUKjRo2QmZmJ7du349y5cxg1ahSAe/+Zx8fHo0ePHnjzzTfRoEEDfPbZZ9DpdIiIiKhyDeWZPHkylixZgsmTJ6NLly44fPgw/vjjD702t27dgrOzM0aMGIGOHTvCwsICP/zwA06cOIGPP/74occePHgw+vTpg3fffRcXL15Ex44dceDAAXz//feYMWOG3gSamtarVy/06tXrkW1efPFFNGrUCP7+/njrrbegUCiwadOmcn/A8vDwwNatWxESEoKuXbvCwsICgwcPrlRNgiBg4sSJMDU1RWRkJADgjTfewI4dOzB9+nR4eXnBycmpUsckqpI6nOFKj9G+ffuEiRMnCm5uboKFhYWgVCoFV1dXISgoSO9JNfcrLi4WHB0dBQDC3r17y21z/20XjwIDn1RTdt5169YJPXv2FKysrAQTExOhRYsWwmuvvSa5JePkyZOCj4+PYGFhIZiZmQl9+vQRjh49qtem7LaLB6fslzfdv7xbDgTh3m0HkyZNEqysrARLS0vhlVdeEXJycvRuu9DpdMKsWbOEjh07CpaWloK5ubnQsWNHYc2aNXrHevC2C0EQhFu3bgnBwcGCk5OTYGJiIjz33HPC0qVL9W4TEYSHf44tWrQQ/P39y/k0/3X/bRePUt5n8NNPPwndu3cXTE1NBScnJ/G2nQc/v/z8fGH06NGCtbW1AEB8n2Wf9fbt2yXne/DvYcWKFQIAYceOHXrtMjMzBbVaLQwcOPCR9RPVFIUgVPLKPBERUT3Ea4hERERgIBIREQFgIBIREQFgIBIREQFgIBIREQFgIBIREQFgIBIREQGop0+qUfRzrrgRUQ24s/+PihsR1YCGxuV/VVdVVef/SSH+nxqs5MlRLwORiIgqUIMPZq8vGIhERHLEC2YSDEQiIjliD1GCPyMQERGBPUQiInliB1GCgUhEJEccMpVgIBIRyREvmEkwEImI5Ig9RAkGIhGRHDEPJdhpJiKiWrFkyRIoFArMmDFDXHf37l0EBgaicePGsLCwgJ+fH7Kzs/X2y8zMhK+vL8zMzGBnZ4dZs2ahuLhYr01iYiI6d+4MlUoFV1dXREVFVbo+BiIRkRwZKaq+VMGJEyfw2WefoUOHDnrrg4ODsWfPHmzfvh1JSUnIysrC8OHDxe0lJSXw9fVFYWEhjh49io0bNyIqKgpz584V22RkZMDX1xd9+vRBamoqZsyYgcmTJyMuLq5SNSoEQRCq9O6eYHyWKdUWPsuUakuNP8t0uEuV9xW+y6hU+/z8fHTu3Blr1qzBokWL0KlTJyxfvhw3b96Era0toqOjMWLECADAuXPn0KZNGyQnJ6N79+7Yt28fBg0ahKysLNjb2wMA1q5di9DQUFy5cgVKpRKhoaGIjY3FmTNnxHOOGjUKubm52L9/v8F1sodIRCRHCkWVF51Oh7y8PL1Fp9M99FSBgYHw9fWFl5eX3vqUlBQUFRXprXdzc0Pz5s2RnJwMAEhOTkb79u3FMAQAHx8f5OXlIS0tTWzz4LF9fHzEYxiKgUhEJEeKqi/h4eGwsrLSW8LDw8s9zZYtW3Dy5Mlyt2u1WiiVSlhbW+utt7e3h1arFdvcH4Zl28u2PapNXl4e7ty5Y+AHwlmmRETyVMVrgQAQFhaGkJAQvXUqlUrS7tKlS5g+fTri4+PRsGHDKp+vtrCHSERElaJSqaBWq/WW8gIxJSUFOTk56Ny5Mxo0aIAGDRogKSkJK1euRIMGDWBvb4/CwkLk5ubq7ZednQ0HBwcAgIODg2TWadnritqo1WqYmpoa/L4YiEREclSNIVND9e3bF6dPn0Zqaqq4dOnSBWPGjBH/bGJigoSEBHGf9PR0ZGZmQqPRAAA0Gg1Onz6NnJwcsU18fDzUajXc3d3FNvcfo6xN2TEMxSFTIiI5qoUn1VhaWqJdu3Z668zNzdG4cWNx/aRJkxASEgIbGxuo1WoEBQVBo9Gge/fuAABvb2+4u7tj3LhxiIiIgFarxZw5cxAYGCj2SgMCArB69WrMnj0bEydOxMGDB7Ft2zbExsZWql4GIhGRHFXjGmJNWrZsGYyMjODn5wedTgcfHx+sWbNG3G5sbIyYmBhMnToVGo0G5ubm8Pf3x4IFC8Q2Li4uiI2NRXBwMFasWAFnZ2esW7cOPj4+laqF9yESVQPvQ6TaUuP3IY55rsr7Cpv/rMFKnhzsIRIRyREf7i3BSTVERERgD5GISJ7YQZRgIBIRydETMqnmScJAJCKSI+ahBAORiEiOOKlGgoFIRCRHnFIpwY+EiIgI7CESEckTh0wlGIhERHLEPJRgIBIRyRF7iBIMRCIiOeIMEgkGIhGRHLGHKMGfEYiIiMAeIhGRPLGDKMFAJCKSIz7LVIKBSEQkR7yGKMFAJCKSI+ahBAORiEiGFOwhSnCWKREREdhDJCKSJfYQpRiIREQyxDyUYiASEcmQERNRgoFIRCRDHDKVYiASEckQA1GKs0yJiIjAQCQikiWFQlHlpTIiIyPRoUMHqNVqqNVqaDQa7Nu3T9zeu3dvyfEDAgL0jpGZmQlfX1+YmZnBzs4Os2bNQnFxsV6bxMREdO7cGSqVCq6uroiKiqr0Z8IhUyIiGaqtEVNnZ2csWbIEzz33HARBwMaNGzFkyBD8+uuvaNu2LQBgypQpWLBggbiPmZmZ+OeSkhL4+vrCwcEBR48exeXLlzF+/HiYmJhg8eLFAICMjAz4+voiICAAmzdvRkJCAiZPngxHR0f4+PgYXKtCEAShht73E0PRz7muSyCZuLP/j7ougWSiobFZxY0qwTy0S5X3Lfjwl2qd28bGBkuXLsWkSZPQu3dvdOrUCcuXLy+37b59+zBo0CBkZWXB3t4eALB27VqEhobiypUrUCqVCA0NRWxsLM6cOSPuN2rUKOTm5mL//v0G18UhUyIiGarOkKlOp0NeXp7eotPpKjxnSUkJtmzZgoKCAmg0GnH95s2b0aRJE7Rr1w5hYWG4ffu2uC05ORnt27cXwxAAfHx8kJeXh7S0NLGNl5eX3rl8fHyQnJxcqc+EgUhEJEOKavwKDw+HlZWV3hIeHv7Qc50+fRoWFhZQqVQICAjAzp074e7uDgAYPXo0vv76axw6dAhhYWHYtGkTxo4dK+6r1Wr1whCA+Fqr1T6yTV5eHu7cuWPwZ8JriEREVClhYWEICQnRW6dSqR7avnXr1khNTcXNmzfx7bffwt/fH0lJSXB3d8frr78utmvfvj0cHR3Rt29fXLhwAS1btnxs76E8DEQiIhmqzn2IKpXqkQH4IKVSCVdXVwCAh4cHTpw4gRUrVuCzzz6TtO3WrRsA4Pz582jZsiUcHBxw/PhxvTbZ2dkAAAcHB/H3snX3t1Gr1TA1NTW4Tg6ZEhHJkEJR9aW6SktLH3rNMTU1FQDg6OgIANBoNDh9+jRycnLENvHx8VCr1eKwq0ajQUJCgt5x4uPj9a5TGoI9RCIiGaqtZ5mGhYVhwIABaN68OW7duoXo6GgkJiYiLi4OFy5cQHR0NAYOHIjGjRvjt99+Q3BwMDw9PdGhQwcAgLe3N9zd3TFu3DhERERAq9Vizpw5CAwMFHupAQEBWL16NWbPno2JEyfi4MGD2LZtG2JjYytVKwORiEiGauvRbTk5ORg/fjwuX74MKysrdOjQAXFxcejXrx8uXbqEH374AcuXL0dBQQGaNWsGPz8/zJkzR9zf2NgYMTExmDp1KjQaDczNzeHv769336KLiwtiY2MRHByMFStWwNnZGevWravUPYgA70Mkqhbeh0i1pabvQ2z83otV3vfawqM1WMmTg9cQiYiIwCFTIiJZ4pddSDEQiYhkiF//JMVAJCKSIQaiFAORiEiGGIhSDEQiIhliIEpxlikRERHYQyQikiV2EKUYiEREMsQhUykGIhGRDDEQpRiIREQyVFsP936acFINERER2EMkIpIldhCl2EOsp0JHBkKI/wfLps4X100ZOAaHPtqOm7vOQoj/B1bmasl+z7u2w4El0bixMw1Xd5zGZzM+hHnDf5+y3+HZNoj+32pkbj6O2zHn8fv6Q3hr2KTaeEv0FFv/+XqMfmUMNF1eQu8e/8GMacG4mHGxrsuSNYVCUeWlvmIg1kNdWnXEG75jcOrC73rrzVQNsf9EIhZ/s7rc/Rwb2+OHD7fgfNZFdAsajP5hY9H2mVaImrVMbOPxXAfk5F7D2A/fQtvJ/8EH0asQPvEdBA6Z8DjfEj3lfvnlJEa+OhKbvvkKn62LRHFxMQImT8Xt23fqujTZUlTjV33FIdN6xryhGTaHrcKUZbMxZ8x0vW0rdq4HAPTqoCl330HdvFBUUoTAVe+i7GsyA5aH4fQXP6Cl0zO4kHURG+K26u2Toc2Exr0zhr80AJ9+H1Xzb4jqhcjPP9V7vWDx++jToy/O/v47PLp41FFV8lafe3pVxR5iPfNp0AeIPZaAhF+PVHpflYkShUVFuP87o+8U3gUA9GjX9aH7WZmpcf1WbqXPR/KVfysfAKC2sqrjSuSLQ6ZSdRqIV69eRUREBIYNGwaNRgONRoNhw4Zh6dKluHLlSl2W9lQa2ftldH6uPcLWL6nS/gdTf4KDjS1m/jcAJg1MYG1hhSWTwgAAjjZ25e6jcffAyN6D8fnezVWum+SltLQUEUs+QqfOnfDcc651XQ6RqM4C8cSJE2jVqhVWrlwJKysreHp6wtPTE1ZWVli5ciXc3Nzwyy+/VHgcnU6HvLw8vQWlQoX71TfOto5Y8eb7GBMeBF2RrkrH+P3vP+AfEYy3R7yO2zF/Qrv1JDK0l6C9noNSQfqZtn2mNb5//0u8v2kZ4lMOV/ctkEwsXhiOC3+eR8RHVfvBjWqGQlH1pb6qs2uIQUFB+O9//4u1a9dKuuCCICAgIABBQUFITk5+5HHCw8Px/vvv6690sQRaSmdQ1mcez3WAfSNbnIzcJ65rYNwAnu27YdqQCVANfBalpaUVHuebQ7vwzaFdsLNugoK7tyFAQIjfFPx1+W+9dm2aP4eEiC34fO9mfBC9ssbfD9VPixctweGkH/HlV+th72Bf1+XIWn0e+qyqOgvEU6dOISoqqty/FIVCgeDgYDz//PMVHicsLAwhISF666yGtamxOp8WCb8eQbspffXWbZj5Mc5duoAPt64xKAzvl5N7FQDwms9I3C3UIT7lR3Gbe4tWOLh0KzYe+BZzNkRUv3iq9wRBQPgHH+LgDwexPuoLODs3reuSZI+BKFVngejg4IDjx4/Dzc2t3O3Hjx+HvX3FP0GqVCqoVCr9lUby+4vOv1OAtIvpeusK7t7Btbwb4nr7RrZwsLGFa9NnAADtXdxw604+MnOycOP/T4oJHDIBR9N+Qf6dAvTz8MTSKXPwzvpw3CzIA3BvmPRgxFbEpSThkx2fw76RLQCgpLQEV29er503S0+dxQvDsS92H5avXgZzc3NcvXLvBy4LSws0bNiwjquTJwaiVJ0F4syZM/H6668jJSUFffv2FcMvOzsbCQkJ+OKLL/DRRx/VVXn1UsCgcZg//t/e9I/LvgMATFgajI0HtgMAXmjdCe+PfxsWDc1w7tIFvLHiHXz9ww5xnxE9fWHXqAnGeflhnJefuP6i9hJcxpV/OwfRti33/n1N8p+it37BB+9jyLCX66Ik2WMeSikEoZzZErVk69atWLZsGVJSUlBSUgIAMDY2hoeHB0JCQvDKK69U6biKfs41WSbRQ93Z/0ddl0Ay0dDYrOJGldB6Wf8q75sevL8GK3ly1OmN+SNHjsTIkSNRVFSEq1fvDaE0adIEJiYmdVkWEVG9xyFTqSfixnwTExM4OjrC0dGRYUhEVAtq68b8yMhIdOjQAWq1Gmq1GhqNBvv2/Tsb/u7duwgMDETjxo1hYWEBPz8/ZGdn6x0jMzMTvr6+MDMzg52dHWbNmoXi4mK9NomJiejcuTNUKhVcXV0RFRVV6c/kiQhEIiKqXbUViM7OzliyZAlSUlLwyy+/4D//+Q+GDBmCtLQ0AEBwcDD27NmD7du3IykpCVlZWRg+fLi4f0lJCXx9fVFYWIijR49i48aNiIqKwty5c8U2GRkZ8PX1RZ8+fZCamooZM2Zg8uTJiIuLq9xnUpfXEB8XXkOk2sJriFRbavoaYttVvlXeNy0otlrntrGxwdKlSzFixAjY2toiOjoaI0aMAACcO3cObdq0QXJyMrp37459+/Zh0KBByMrKEidfrl27FqGhobhy5QqUSiVCQ0MRGxuLM2fOiOcYNWoUcnNzsX+/4dc72UMkIpKh6vQQy3tCmE5X8ROySkpKsGXLFhQUFECj0SAlJQVFRUXw8vIS27i5uaF58+biQ1mSk5PRvn17vdvwfHx8kJeXJ/Yyk5OT9Y5R1qaiB7s8iIFIRESVEh4eDisrK70lPDz8oe1Pnz4NCwsLqFQqBAQEYOfOnXB3d4dWq4VSqYS1tbVee3t7e2i1WgCAVquV3JNe9rqiNnl5ebhzx/CvGOPXPxERyVB1ZpmW94QwyQNS7tO6dWukpqbi5s2b+Pbbb+Hv74+kpKQqn/9xYSASEclQdQKx3CeEPYJSqYSr671vNvHw8MCJEyewYsUKjBw5EoWFhcjNzdXrJWZnZ8PBwQHAv081u1/ZLNT72zw4MzU7OxtqtRqmpqYG18khUyIiGarLb7soLS2FTqeDh4cHTExMkJCQIG5LT09HZmYmNJp7T77SaDQ4ffo0cnJyxDbx8fFQq9Vwd3cX29x/jLI2ZccwFHuIREQyVFs35oeFhWHAgAFo3rw5bt26hejoaCQmJiIuLg5WVlaYNGkSQkJCYGNjA7VajaCgIGg0GnTv3h0A4O3tDXd3d4wbNw4RERHQarWYM2cOAgMDxV5qQEAAVq9ejdmzZ2PixIk4ePAgtm3bhtjYys2GZSASEclRLQViTk4Oxo8fj8uXL8PKygodOnRAXFwc+vXrBwBYtmwZjIyM4OfnB51OBx8fH6xZs0bc39jYGDExMZg6dSo0Gg3Mzc3h7++PBQsWiG1cXFwQGxuL4OBgrFixAs7Ozli3bh18fHwqVSvvQySqBt6HSLWlpu9D7PTZ0Crvm/rGrhqr40nCHiIRkQzxWaZSDEQiIhliHkoxEImIZIg9RCkGIhGRDDEQpRiIREQyxECU4o35REREYA+RiEiW2EGUYiASEckQh0ylGIhERDLEQJRiIBIRyRADUYqBSEQkQwxEKc4yJSIiAnuIRESyxA6iFAORiEiGOGQqxUAkIpIhBqIUA5GISIYYiFIMRCIiGWIeSnGWKREREdhDJCKSJQ6ZSjEQiYjkiIEowUAkIpIh9hClGIhERDJkxDyUYCASEckQe4hSnGVKREQE9hCJiGTJiD1ECQYiEZEMcchUikOmREQyZFSNpTLCw8PRtWtXWFpaws7ODkOHDkV6erpem969e0OhUOgtAQEBem0yMzPh6+sLMzMz2NnZYdasWSguLtZrk5iYiM6dO0OlUsHV1RVRUVGVqpWBSEQkQ0YKRZWXykhKSkJgYCB+/vlnxMfHo6ioCN7e3igoKNBrN2XKFFy+fFlcIiIixG0lJSXw9fVFYWEhjh49io0bNyIqKgpz584V22RkZMDX1xd9+vRBamoqZsyYgcmTJyMuLs7gWhWCIAiVendPAUU/57ougWTizv4/6roEkomGxmY1erxB30+q8r4xQ9ZXed8rV67Azs4OSUlJ8PT0BHCvh9ipUycsX7683H327duHQYMGISsrC/b29gCAtWvXIjQ0FFeuXIFSqURoaChiY2Nx5swZcb9Ro0YhNzcX+/fvN6g29hCJiKhSdDod8vLy9BadTmfQvjdv3gQA2NjY6K3fvHkzmjRpgnbt2iEsLAy3b98WtyUnJ6N9+/ZiGAKAj48P8vLykJaWJrbx8vLSO6aPjw+Sk5MNfl8MRCIiGarOkGl4eDisrKz0lvDw8ArPWVpaihkzZuCll15Cu3btxPWjR4/G119/jUOHDiEsLAybNm3C2LFjxe1arVYvDAGIr7Va7SPb5OXl4c6dOwZ9JpxlSkQkQ9WZZRoWFoaQkBC9dSqVqsL9AgMDcebMGRw5ckRv/euvvy7+uX379nB0dETfvn1x4cIFtGzZssp1VhYDkYhIhqozPKhSqQwKwPtNmzYNMTExOHz4MJydHz3Po1u3bgCA8+fPo2XLlnBwcMDx48f12mRnZwMAHBwcxN/L1t3fRq1Ww9TU1KAaOWRKRCRDtTXLVBAETJs2DTt37sTBgwfh4uJS4T6pqakAAEdHRwCARqPB6dOnkZOTI7aJj4+HWq2Gu7u72CYhIUHvOPHx8dBoNAbXykAkIpKhB+/7q8xSGYGBgfj6668RHR0NS0tLaLVaaLVa8brehQsXsHDhQqSkpODixYvYvXs3xo8fD09PT3To0AEA4O3tDXd3d4wbNw6nTp1CXFwc5syZg8DAQLGnGhAQgL/++guzZ8/GuXPnsGbNGmzbtg3BwcEG18pAJCKixyYyMhI3b95E79694ejoKC5bt24FACiVSvzwww/w9vaGm5sb3n77bfj5+WHPnj3iMYyNjRETEwNjY2NoNBqMHTsW48ePx4IFC8Q2Li4uiI2NRXx8PDp27IiPP/4Y69atg4+Pj8G18j5EomrgfYhUW2r6PsRX9gZU3Oghtg1cW4OVPDk4qYaISIb4JFMpBiIRkQzx2y6kGIhERDLEQJRiIBIRyRC//kmKs0yJiIjAHiIRkSxxyFSKgUhEJEOMQykGIhGRDLGHKMVAJCKSIQaiFAORiEiGOMtUqkqzTH/88UeMHTsWGo0G//d//wcA2LRpk+Q7roiIiJ4WlQ7EHTt2wMfHB6ampvj111+h0+kAADdv3sTixYtrvEAiIqp5tfX1T0+TSgfiokWLsHbtWnzxxRcwMTER17/00ks4efJkjRZHRESPh6IaS31V6WuI6enp8PT0lKy3srJCbm5uTdRERESPWX3u6VVVpXuIDg4OOH/+vGT9kSNH8Oyzz9ZIUURE9HhxyFSq0oE4ZcoUTJ8+HceOHYNCoUBWVhY2b96MmTNnYurUqY+jRiIioseu0kOm77zzDkpLS9G3b1/cvn0bnp6eUKlUmDlzJoKCgh5HjUREVMN424VUpQNRoVDg3XffxaxZs3D+/Hnk5+fD3d0dFhYWj6M+IiJ6DPjNDlJVvjFfqVTC3d29JmshIqJawh6iVKUDsU+fPo/8IA8ePFitgoiI6PGrz5NjqqrSgdipUye910VFRUhNTcWZM2fg7+9fU3UREdFjxECUqnQgLlu2rNz18+fPR35+frULIiIiqgs1dl117Nix+PLLL2vqcERE9BgpFIoqL/VVjX3bRXJyMho2bFhTh6uW2/vT67oEkgkBQl2XQFQlRvX6IWxVU+lAHD58uN5rQRBw+fJl/PLLL3jvvfdqrDAiInp86nNPr6oqHYhWVlZ6r42MjNC6dWssWLAA3t7eNVYYERE9PpxUI1Wpa4glJSV47bXX8Mknn2DDhg3YsGED1q9fjyVLljAMiYieIopq/KqM8PBwdO3aFZaWlrCzs8PQoUORnq5/Wevu3bsIDAxE48aNYWFhAT8/P2RnZ+u1yczMhK+vL8zMzGBnZ4dZs2ahuLhYr01iYiI6d+4MlUoFV1dXREVFVarWSgWisbExvL29+a0WRERkkKSkJAQGBuLnn39GfHw8ioqK4O3tjYKCArFNcHAw9uzZg+3btyMpKQlZWVl6l+dKSkrg6+uLwsJCHD16FBs3bkRUVBTmzp0rtsnIyICvry/69OmD1NRUzJgxA5MnT0ZcXJzBtSoEQajUrIAuXbrgww8/RN++fSuzW626U1JQcSMioqeIqbF5jR7v3Z/nVHnfD7ovqvK+V65cgZ2dHZKSkuDp6YmbN2/C1tYW0dHRGDFiBADg3LlzaNOmDZKTk9G9e3fs27cPgwYNQlZWFuzt7QEAa9euRWhoKK5cuQKlUonQ0FDExsbizJkz4rlGjRqF3Nxc7N+/36DaqvQFwTNnzkRMTAwuX76MvLw8vYWIiJ581fn6J51OJ/m/X6fTGXTemzdvAgBsbGwAACkpKSgqKoKXl5fYxs3NDc2bN0dycjKAe3cxtG/fXgxDAPDx8UFeXh7S0tLENvcfo6xN2TEM+kwMbbhgwQIUFBRg4MCBOHXqFF5++WU4OzujUaNGaNSoEaytrdGoUSODT0xERHVHAaMqL+Hh4bCystJbwsPDKzxnaWkpZsyYgZdeegnt2rUDAGi1WiiVSlhbW+u1tbe3h1arFdvcH4Zl28u2PapNXl4e7ty5Y9BnYvAs0/fffx8BAQE4dOiQobsQEdETqjqzTMPCwhASEqK3TqVSVbhfYGAgzpw5gyNHjlT53I+TwYFYdqmxV69ej60YIiKqHdW5D1GlUhkUgPebNm0aYmJicPjwYTg7O4vrHRwcUFhYiNzcXL1eYnZ2NhwcHMQ2x48f1zte2SzU+9s8ODM1OzsbarUapqamBtVYqWuIvJGTiIgqQxAETJs2DTt37sTBgwfh4uKit93DwwMmJiZISEgQ16WnpyMzMxMajQYAoNFocPr0aeTk5Iht4uPjoVarxa8h1Gg0escoa1N2DENU6sb8Vq1aVRiK169fr8whiYioDlT2fsKqCgwMRHR0NL7//ntYWlqK1/ysrKxgamoKKysrTJo0CSEhIbCxsYFarUZQUBA0Gg26d+8OAPD29oa7uzvGjRuHiIgIaLVazJkzB4GBgWJPNSAgAKtXr8bs2bMxceJEHDx4ENu2bUNsbKzBtVYqEN9//33Jk2qIiOjpU1tPqomMjAQA9O7dW2/9hg0bMGHCBAD3vkXJyMgIfn5+0Ol08PHxwZo1a8S2xsbGiImJwdSpU6HRaGBubg5/f38sWLBAbOPi4oLY2FgEBwdjxYoVcHZ2xrp16+Dj42NwrQbfh2hkZAStVgs7OzuDD15XeB8iEdU3NX0f4gcpVb+X8F2Pqt/D+CQzuIfI64dERPWHUc19+1+9UelZpkRE9PRjJ0fK4EAsLS19nHUQERHVqRr7gmAiInp6sIcoxUAkIpIho1q67eJpwkAkIpIh9hClGIhERDJUW/chPk0YiEREMlRbT6p5mvBGFCIiIrCHSEQkS0YK9ocexEAkIpIhTqqRYiASEckQryFKMRCJiGSIs0ylGIhERDLEHqIUr6oSERGBPUQiIlnikKkUA5GISIYUvO1CgoFIRCRDvIYoxUAkIpIhDplKMRCJiGSIN+ZLcRCZiIgI7CESEckSvyBYioFIRCRDHDKVYiASEckQb7uQYiASEckQh0ylGIhERDLEIVMp9pmJiOixOXz4MAYPHgwnJycoFArs2rVLb/uECROgUCj0lv79++u1uX79OsaMGQO1Wg1ra2tMmjQJ+fn5em1+++039OzZEw0bNkSzZs0QERFR6VoZiEREMqSoxq/KKCgoQMeOHfHpp58+tE3//v1x+fJlcfnmm2/0to8ZMwZpaWmIj49HTEwMDh8+jNdff13cnpeXB29vb7Ro0QIpKSlYunQp5s+fj88//7xStXLIlIhIhmpryHTAgAEYMGDAI9uoVCo4ODiUu+3s2bPYv38/Tpw4gS5dugAAVq1ahYEDB+Kjjz6Ck5MTNm/ejMLCQnz55ZdQKpVo27YtUlNT8cknn+gFZ0XYQyQikiEjKKq86HQ65OXl6S06na7KtSQmJsLOzg6tW7fG1KlTce3aNXFbcnIyrK2txTAEAC8vLxgZGeHYsWNiG09PTyiVSrGNj48P0tPTcePGjUp8JkREJDsKhVGVl/DwcFhZWekt4eHhVaqjf//++Oqrr5CQkIAPP/wQSUlJGDBgAEpKSgAAWq0WdnZ2evs0aNAANjY20Gq1Yht7e3u9NmWvy9oYgkOmREQyVJ1vuwgLC0NISIjeOpVKVaVjjRo1Svxz+/bt0aFDB7Rs2RKJiYno27dvlWusCvYQiYioUlQqFdRqtd5S1UB80LPPPosmTZrg/PnzAAAHBwfk5OTotSkuLsb169fF644ODg7Izs7Wa1P2+mHXJsvDQCQikqEHb3WozPI4/fPPP7h27RocHR0BABqNBrm5uUhJSRHbHDx4EKWlpejWrZvY5vDhwygqKhLbxMfHo3Xr1mjUqJHB52YgEhHJUG3ddpGfn4/U1FSkpqYCADIyMpCamorMzEzk5+dj1qxZ+Pnnn3Hx4kUkJCRgyJAhcHV1hY+PDwCgTZs26N+/P6ZMmYLjx4/jp59+wrRp0zBq1Cg4OTkBAEaPHg2lUolJkyYhLS0NW7duxYoVKyTDuhV+JoIgCJXa4ylwp6SgrksgIqpRpsbmNXq8HRnfVNzoIfxcXjW4bWJiIvr06SNZ7+/vj8jISAwdOhS//vorcnNz4eTkBG9vbyxcuFBvksz169cxbdo07NmzB0ZGRvDz88PKlSthYWEhtvntt98QGBiIEydOoEmTJggKCkJoaGil3hcDkYjoKVDTgbgzY0uV9x3mMqriRk8hzjIlIpIhPstUitcQiYiIwB4iEZEsKdgfkmAgEhHJEIdMpRiIREQyVJ0n1dRXDEQiIhkyYg9RgoFIRCRD7CFK8aoqERER2EMkIpIlTqqRYiASEckQb7uQYiASEckQe4hSDEQiIhky4qQaCQYiEZEMsYcoxUFkIiIisIdIRCRLvA9RioFIRCRDHDKVYiASEckQb7uQYiASEckQn2UqxR8RiIiIwB4iEZEscVKNFHuIMvblFxvQyb0zIsKXiuuuXrmKd0PnoG/Pfuju8SJG+Y3GDwcS6rBKehqt//xLjH5lLF7s0gN9evTFjGkhuJhxUa/Nt9t2YJL/FLzUtSc6uXdGXt6tuilWphQKRZWX+oqBKFNnTqfh22070Kr1c3rr54TNxcWLf2P5p8vw7a5t6NvvP5gdEopzv5+ro0rpaZTySwpGvvoKvvpmI9aui0RxcTGmTn4Td27fEdvcvXsXL/V4EZNen1iHlcqXohq/6isGogzdLriN/81+F3Pffw+WarXetlO/nsKrY0aifYd2cG7mjCkBk2FpaYnffz9bR9XS02jN559iyLCX4fpcS7R2a4UFi9/H5cta/P7772KbsePHYOKU19C+Y/s6rFS+2EOUYiDK0OJFS9CzVw90f7GbZFvH5zsibt8B3My9idLSUuzfGwddoQ5dunrUQaVUX+TfujccamVlVceVUBmjavyqrzipRmb2743Dud/PYfO2TeVuj/jkQ4S+HYpeL/ZBgwYN0LBhQ3yy8mM0b9G8liul+qK0tBRLl3yETp07wfU517ouh+ihnuiov3TpEiZOfPT1BZ1Oh7y8PL1Fp9PVUoVPF+1lLSLCl2JxxCKoVKpy26xZuQa38vLx2fpIbN72Ncb6j8HskFD8+ceftVwt1RfhC5fg/J8X8OFH4XVdCt2ntoZMDx8+jMGDB8PJyQkKhQK7du3S2y4IAubOnQtHR0eYmprCy8sLf/6p///N9evXMWbMGKjValhbW2PSpEnIz8/Xa/Pbb7+hZ8+eaNiwIZo1a4aIiIhKfyZPdCBev34dGzdufGSb8PBwWFlZ6S1Ll3xUSxU+XX5PO4vr167j1RFj4NG+Kzzad0XKiRR88/UWeLTvikuZl7AleivmL5qHbppuaO3WCgGBb6BtW3dsjd5W1+XTUyh80RIcTvoR66I+h72DfV2XQ/eprUk1BQUF6NixIz799NNyt0dERGDlypVYu3Ytjh07BnNzc/j4+ODu3btimzFjxiAtLQ3x8fGIiYnB4cOH8frrr4vb8/Ly4O3tjRYtWiAlJQVLly7F/Pnz8fnnn1eq1jodMt29e/cjt//1118VHiMsLAwhISF660obFFerrvqqm+YFfPu9frDNfXc+XFyewWuTJ4j/AI2M9P/BGxkboVQorbU66eknCAKWfPAhDv5wCOuivkBT56Z1XRI9oLYmxwwYMAADBgwod5sgCFi+fDnmzJmDIUOGAAC++uor2NvbY9euXRg1ahTOnj2L/fv348SJE+jSpQsAYNWqVRg4cCA++ugjODk5YfPmzSgsLMSXX34JpVKJtm3bIjU1FZ988olecFakTgNx6NChUCgUEAThoW0q+ktTqVSS4b87JQU1Ul99Y25uLrmGY2pqCitrK7g+54qioiI0a94Mi+Z/gOBZwbC2tsKhhET8fPQYVq5ZUUdV09No8cIl2Be7D8tXL4O5uRmuXrkKALCwtEDDhg0B3Lvn9erVa7iUeQkAcP6PP2Fmbg5HRwdYWXPyzeNWndsndDqd5NJUef8XVyQjIwNarRZeXl7iOisrK3Tr1g3JyckYNWoUkpOTYW1tLYYhAHh5ecHIyAjHjh3DsGHDkJycDE9PTyiVSrGNj48PPvzwQ9y4cQONGjUyqJ46HTJ1dHTEd999h9LS0nKXkydP1mV5smNiYoLVa1ehkU0jTA+cgf8OG4mY3TFYGP4+evbqUdfl0VNk+5btyL+Vj8n+U+DVy1tc4vYd+LfN1m8xyu9VLJi7EAAwcfxkjPJ7FYmHkuqqbFmpzpBpeZeqwsMrf41Yq9UCAOzt9YfT7e3txW1arRZ2dnZ62xs0aAAbGxu9NuUd4/5zGKJOe4geHh5ISUkRu8oPqqj3SNW3fuMXeq9bPNMcH6/gNViqntTfK/5hduq0AEydFlAL1VBNK+9SVWV7h0+iOg3EWbNmoaDg4cObrq6uOHToUC1WREQkE9W4hliV4dHyODg4AACys7Ph6Ogors/OzkanTp3ENjk5OXr7FRcX4/r16+L+Dg4OyM7O1mtT9rqsjSHqdMi0Z8+e6N+//0O3m5ubo1evXrVYERGRPDwJj25zcXGBg4MDEhL+fV5yXl4ejh07Bo1GAwDQaDTIzc1FSkqK2ObgwYMoLS1Ft27dxDaHDx9GUVGR2CY+Ph6tW7c2+Poh8ITfdkFERI9Hbd2HmJ+fj9TUVKSmpgK4N5EmNTUVmZmZUCgUmDFjBhYtWoTdu3fj9OnTGD9+PJycnDB06FAAQJs2bdC/f39MmTIFx48fx08//YRp06Zh1KhRcHJyAgCMHj0aSqUSkyZNQlpaGrZu3YoVK1ZIhnUr/EyEeniRjrNMiai+MTU2r9Hj/XrtWJX3fb6x9LGPD5OYmIg+ffpI1vv7+yMqKgqCIGDevHn4/PPPkZubix49emDNmjVo1aqV2Pb69euYNm0a9uzZAyMjI/j5+WHlypWwsLAQ2/z2228IDAzEiRMn0KRJEwQFBSE0NLRS74uBSET0FKjpQEy9drzK+3Zq/EINVvLk4JApERER+HBvIiJZqs9f41RVDEQiIhmqydmi9QUDkYhIhhiIUgxEIiIZ4pCpFAORiEiG2EOU4ixTIiIisIdIRCRLHDKVYiASEckQh0ylGIhERDLEQJRiIBIRyRCHTKUYiEREMsQeohRnmRIREYE9RCIiWWIPUYqBSEQkQ7yGKMVAJCKSJQbigxiIREQyxB6iFAORiEiGeA1RirNMiYiIwB4iEZEssYcoxUAkIpIhXkOUYiASEckQe4hSDEQiIhliIEoxEImIZIhDplKcZUpERAT2EImIZIlDplLsIRIRyZBCoajyUhnz58+X7O/m5iZuv3v3LgIDA9G4cWNYWFjAz88P2dnZesfIzMyEr68vzMzMYGdnh1mzZqG4uLhGPof7sYdIRCRDtdlDbNu2LX744QfxdYMG/0ZPcHAwYmNjsX37dlhZWWHatGkYPnw4fvrpJwBASUkJfH194eDggKNHj+Ly5csYP348TExMsHjx4hqtUyEIglCjR3wC3CkpqOsSiIhqlKmxeY0eL+t2ZpX3dTJrbnDb+fPnY9euXUhNTZVsu3nzJmxtbREdHY0RI0YAAM6dO4c2bdogOTkZ3bt3x759+zBo0CBkZWXB3t4eALB27VqEhobiypUrUCqVVX4fD+KQKRGRDCmqseh0OuTl5ektOp3uoef6888/4eTkhGeffRZjxoxBZua9ME5JSUFRURG8vLzEtm5ubmjevDmSk5MBAMnJyWjfvr0YhgDg4+ODvLw8pKWl1dTHAYCBSERElRQeHg4rKyu9JTw8vNy23bp1Q1RUFPbv34/IyEhkZGSgZ8+euHXrFrRaLZRKJaytrfX2sbe3h1arBQBotVq9MCzbXratJvEaIhGRDFXnPsSwsDCEhITorVOpVOW2HTBggPjnDh06oFu3bmjRogW2bdsGU1PTKtfwOLCHSEQkS1UfNFWpVFCr1XrLwwLxQdbW1mjVqhXOnz8PBwcHFBYWIjc3V69NdnY2HBwcAAAODg6SWadlr8va1BQGIhGRDFXnGmJ15Ofn48KFC3B0dISHhwdMTEyQkJAgbk9PT0dmZiY0Gg0AQKPR4PTp08jJyRHbxMfHQ61Ww93dvZrV6OMsUyKip0BNzzLNvvN/Vd7X3rSpwW1nzpyJwYMHo0WLFsjKysK8efOQmpqK33//Hba2tpg6dSr27t2LqKgoqNVqBAUFAQCOHj0K4N5tF506dYKTkxMiIiKg1Woxbtw4TJ48ucZvu+A1RCIiGaqtZ5n+888/ePXVV3Ht2jXY2tqiR48e+Pnnn2FrawsAWLZsGYyMjODn5wedTgcfHx+sWbNG3N/Y2BgxMTGYOnUqNBoNzM3N4e/vjwULFtR4rewhEhE9BWq6h5hzN6vK+9o1dKrBSp4cvIZIREQEDpkSEckSH+4txUAkIpIhBqIUh0yJiIjAHiIRkSzV1izTpwl7iERERGAgEhERAeCQKRGRLHFSjRQDkYhIlhiID2IgEhHJEONQioFIRCRDnGUqxUk1REREYA+RiEim2EN8EAORiEiGGIdSDEQiIlliJD6IgUhEJEOcVCPFSTVERERgIBIREQHgkCkRkSzx0W1SDEQiIlliID6IgUhEJEOMQykGIhGRDHGWqRQn1RAREYE9RCIimWIP8UEMRCIiGWIcSjEQiYhkiZH4IAYiEZEMcVKNFCfVEBERgYFIREQEgEOmRESyxEe3SSkEQRDqugiqezqdDuHh4QgLC4NKparrcqge4781elIxEAkAkJeXBysrK9y8eRNqtbquy6F6jP/W6EnFa4hERERgIBIREQFgIBIREQFgINL/p1KpMG/ePE5yoMeO/9boScVJNURERGAPkYiICAADkYiICAADkYiICAADkYiICAADkQB8+umneOaZZ9CwYUN069YNx48fr+uSqB46fPgwBg8eDCcnJygUCuzatauuSyLSw0CUua1btyIkJATz5s3DyZMn0bFjR/j4+CAnJ6euS6N6pqCgAB07dsSnn35a16UQlYu3Xchct27d0LVrV6xevRoAUFpaimbNmiEoKAjvvPNOHVdH9ZVCocDOnTsxdOjQui6FSMQeoowVFhYiJSUFXl5e4jojIyN4eXkhOTm5DisjIqp9DEQZu3r1KkpKSmBvb6+33t7eHlqtto6qIiKqGwxEIiIiMBBlrUmTJjA2NkZ2drbe+uzsbDg4ONRRVUREdYOBKGNKpRIeHh5ISEgQ15WWliIhIQEajaYOKyMiqn0N6roAqlshISHw9/dHly5d8MILL2D58uUoKCjAa6+9VtelUT2Tn5+P8+fPi68zMjKQmpoKGxsbNG/evA4rI7qHt10QVq9ejaVLl0Kr1aJTp05YuXIlunXrVtdlUT2TmJiIPn36SNb7+/sjKiqq9gsiegADkYiICLyGSEREBICBSEREBICBSEREBICBSEREBICBSEREBICBSEREBICBSEREBICBSEREBICBSGSwCRMm6H2hbe/evTFjxoxaryMxMREKhQK5ubm1fm6i+oyBSE+9CRMmQKFQQKFQQKlUwtXVFQsWLEBxcfFjPe93332HhQsXGtSWIUb05OPDvale6N+/PzZs2ACdToe9e/ciMDAQJiYmCAsL02tXWFgIpVJZI+e0sbGpkeMQ0ZOBPUSqF1QqFRwcHNCiRQtMnToVXl5e2L17tzjM+cEHH8DJyQmtW7cGAFy6dAmvvPIKrK2tYWNjgyFDhuDixYvi8UpKShASEgJra2s0btwYs2fPxoOP/X1wyFSn0yE0NBTNmjWDSqWCq6sr1q9fj4sXL4oPtW7UqBEUCgUmTJgA4N7XbYWHh8PFxQWmpqbo2LEjvv32W73z7N27F61atYKpqSn69OmjVycR1RwGItVLpqamKCwsBAAkJCQgPT0d8fHxiImJQVFREXx8fGBpaYkff/wRP/30EywsLNC/f39xn48//hhRUVH48ssvceTIEVy/fh07d+585DnHjx+Pb775BitXrsTZs2fx2WefwcLCAs2aNcOOHTsAAOnp6bh8+TJWrFgBAAgPD8dXX32FtWvXIi0tDcHBwRg7diySkpIA3Avu4cOHY/DgwUhNTcXkyZPxzjvvPK6PjUjeBKKnnL+/vzBkyBBBEAShtLRUiI+PF1QqlTBz5kzB399fsLe3F3Q6ndh+06ZNQuvWrYXS0lJxnU6nE0xNTYW4uDhBEATB0dFRiIiIELcXFRUJzs7O4nkEQRB69eolTJ8+XRAEQUhPTxcACPHx8eXWeOjQIQGAcOPGDXHd3bt3BTMzM+Ho0aN6bSdNmiS8+uqrgiAIQlhYmODu7q63PTQ0VHIsIqo+XkOkeiEmJgYWFhYoKipCaWkpRo8ejfnz5yMwMBDt27fXu2546tQpnD9/HpaWlnrHuHv3Li5cuICbN2/i8uXLet8J2aBBA3Tp0kUybFomNTUVxsbG6NWrl8E1nz9/Hrdv30a/fv301hcWFuL5558HAJw9e1by3ZQajcbgcxCR4RiIVC/06dMHkZGRUCqVcHJyQoMG//7TNjc312ubn58PDw8PbN68WXIcW1vbKp3f1NS00vvk5+cDAGJjY9G0aVO9bSqVqkp1EFHVMRCpXjA3N4erq6tBbTt37oytW7fCzs4OarW63DaOjo44duwYPD09AQDFxcVISUlB586dy23fvn17lJaWIikpCV5eXpLtZT3UkpIScZ27uztUKhUyMzMf2rNs06YNdu/erbfu559/rvhNElGlcVINyc6YMWPQpEkTDBkyBD/++CMyMjKQmJiIt956C//88w8AYPr06ViyZAl27dqFc+fO4c0333zkPYTPPPMM/P39MXHiROzatUs85rZt2wAALVq0gEKhQExMDK5cuYL8/HxYWlpi5syZCA4OxsaNG3HhwgWcPHkSq1atwsaNGwEAAQEB+PPPPzFr1iykp6cjOjoaUVFRj/sjIpIlBiLJjpmZGQ4fPozmzZtj+PDhaNOmDSZNmoS7d++KPca3334b48aNg7+/PzQaDSwtLTFs2LBHHjcyMhIjRozAm2++CTc3N0yZMgUFBQUAgKZNm+L999/HO++8A3t7e0ybNg0AsHDhQrz33nsIDw9HmzZt0L9/f8TGxsLFxQUA0Lx5c+zYsQO7du1Cx44dsXbtWixevPgxfjpE8qUQHjZLgIiISEbYQyQiIgIDkYiICAADkYiICAADkYiICAADkYiICAADkYiICAADkYiICAADkYiICAADkYiICAADkYiICAADkYiICADw/wCJU3qfWCgPoQAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Plot combined ROC for RF & SVM\n",
        "fpr_rf, tpr_rf, _ = roc_curve(y_test, y_proba_rf)\n",
        "fpr_svm, tpr_svm, _ = roc_curve(y_test, y_proba_svm)\n",
        "plt.figure(figsize=(6,5))\n",
        "plt.plot(fpr_rf, tpr_rf, label=f'RandomForest (AUC={rf_auc:.3f})')\n",
        "plt.plot(fpr_svm, tpr_svm, label=f'SVM (AUC={svm_auc:.3f})')\n",
        "plt.plot([0,1],[0,1],'k--',alpha=0.5)\n",
        "plt.xlabel(\"False Positive Rate\"); plt.ylabel(\"True Positive Rate\"); plt.title(\"ROC Curves\")\n",
        "plt.legend(); plt.grid(True); plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 487
        },
        "id": "R1w8dD54YVON",
        "outputId": "66674537-5a4a-4852-c4a9-efbdc2fc4b64"
      },
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 600x500 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Training LSTM model"
      ],
      "metadata": {
        "id": "WXi76ide1v_S"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#  LSTM model using Keras\n",
        "print(\"\\n--- Preparing data for LSTM ---\")\n",
        "MAX_NUM_WORDS = 20000\n",
        "MAX_SEQ_LEN = 120\n",
        "tokenizer = Tokenizer(num_words=MAX_NUM_WORDS, oov_token='<OOV>')\n",
        "tokenizer.fit_on_texts(df['text_processed'].astype(str).tolist())\n",
        "sequences = tokenizer.texts_to_sequences(df['text_processed'].astype(str).tolist())\n",
        "padded = pad_sequences(sequences, maxlen=MAX_SEQ_LEN, padding='post', truncating='post')"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "502SsbrGYZ_2",
        "outputId": "275080eb-ff3e-4262-dcfa-05adf0320d59"
      },
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "--- Preparing data for LSTM ---\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# train-test split for LSTM\n",
        "X_train_seq, X_test_seq, y_train_seq, y_test_seq = train_test_split(padded, y, test_size=0.2, random_state=SEED, stratify=y)"
      ],
      "metadata": {
        "id": "mxRO2jOSYgGW"
      },
      "execution_count": 46,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Build LSTM\n",
        "EMBEDDING_DIM = 100\n",
        "model_lstm = Sequential([\n",
        "    Embedding(input_dim=MAX_NUM_WORDS, output_dim=EMBEDDING_DIM, input_length=MAX_SEQ_LEN),\n",
        "    Bidirectional(LSTM(64, return_sequences=False)),\n",
        "    Dropout(0.5),\n",
        "    Dense(64, activation='relu'),\n",
        "    Dropout(0.3),\n",
        "    Dense(1, activation='sigmoid')\n",
        "])\n",
        "model_lstm.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n",
        "model_lstm.summary()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 321
        },
        "id": "fn9QXqjhYhRG",
        "outputId": "75f2a4d6-cf29-4595-b6d6-6b099f0ed41c"
      },
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "\u001b[1mModel: \"sequential\"\u001b[0m\n"
            ],
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
              "</pre>\n"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
              "┃\u001b[1m \u001b[0m\u001b[1mLayer (type)                   \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape          \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
              "│ embedding (\u001b[38;5;33mEmbedding\u001b[0m)           │ ?                      │   \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ bidirectional (\u001b[38;5;33mBidirectional\u001b[0m)   │ ?                      │   \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dropout (\u001b[38;5;33mDropout\u001b[0m)               │ ?                      │             \u001b[38;5;34m0\u001b[0m │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense (\u001b[38;5;33mDense\u001b[0m)                   │ ?                      │   \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m)             │ ?                      │             \u001b[38;5;34m0\u001b[0m │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense_1 (\u001b[38;5;33mDense\u001b[0m)                 │ ?                      │   \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
            ],
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
              "┃<span style=\"font-weight: bold\"> Layer (type)                    </span>┃<span style=\"font-weight: bold\"> Output Shape           </span>┃<span style=\"font-weight: bold\">       Param # </span>┃\n",
              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
              "│ embedding (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Embedding</span>)           │ ?                      │   <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (unbuilt) │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ bidirectional (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Bidirectional</span>)   │ ?                      │   <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (unbuilt) │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dropout (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>)               │ ?                      │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                   │ ?                      │   <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (unbuilt) │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dropout_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>)             │ ?                      │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                 │ ?                      │   <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (unbuilt) │\n",
              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
              "</pre>\n"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
            ],
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
              "</pre>\n"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
            ],
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
              "</pre>\n"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
            ],
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
              "</pre>\n"
            ]
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# callbacks\n",
        "es = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)\n",
        "history = model_lstm.fit(X_train_seq, y_train_seq, validation_split=0.1, epochs=10, batch_size=64, callbacks=[es], verbose=2)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Qj6WEnudYhUc",
        "outputId": "ac6286ad-bd19-495b-ec46-fc33076e4582"
      },
      "execution_count": 48,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/10\n",
            "240/240 - 25s - 104ms/step - accuracy: 0.9797 - loss: 0.1037 - val_accuracy: 0.9830 - val_loss: 0.0820\n",
            "Epoch 2/10\n",
            "240/240 - 11s - 47ms/step - accuracy: 0.9874 - loss: 0.0490 - val_accuracy: 0.9824 - val_loss: 0.0612\n",
            "Epoch 3/10\n",
            "240/240 - 7s - 29ms/step - accuracy: 0.9953 - loss: 0.0164 - val_accuracy: 0.9777 - val_loss: 0.0798\n",
            "Epoch 4/10\n",
            "240/240 - 9s - 38ms/step - accuracy: 0.9986 - loss: 0.0059 - val_accuracy: 0.9830 - val_loss: 0.0838\n",
            "Epoch 5/10\n",
            "240/240 - 7s - 27ms/step - accuracy: 0.9990 - loss: 0.0040 - val_accuracy: 0.9824 - val_loss: 0.0960\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "### Evaluating LSTM"
      ],
      "metadata": {
        "id": "XbbNfkG1YrU9"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "y_proba_lstm = model_lstm.predict(X_test_seq).ravel()\n",
        "y_pred_lstm = (y_proba_lstm >= 0.5).astype(int)\n",
        "print(\"\\nLSTM Classification report:\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "yoiiBuyPYqCs",
        "outputId": "f22d3180-b1c2-4a37-9b92-1f9083df2f5b"
      },
      "execution_count": 49,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\u001b[1m134/134\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 14ms/step\n",
            "\n",
            "LSTM Classification report:\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(classification_report(y_test_seq, y_pred_lstm, digits=4))\n",
        "lstm_auc = roc_auc_score(y_test_seq, y_proba_lstm)\n",
        "print(\"LSTM ROC AUC:\", lstm_auc)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gQU7ByDTYw0U",
        "outputId": "05fff9c5-8d87-429e-ad5f-bc5d84165dc4"
      },
      "execution_count": 50,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0     0.9893    0.9945    0.9919      4194\n",
            "           1     0.5106    0.3478    0.4138        69\n",
            "\n",
            "    accuracy                         0.9840      4263\n",
            "   macro avg     0.7500    0.6712    0.7029      4263\n",
            "weighted avg     0.9816    0.9840    0.9826      4263\n",
            "\n",
            "LSTM ROC AUC: 0.8292211786333823\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "cm = confusion_matrix(y_test_seq, y_pred_lstm)\n",
        "plt.figure(figsize=(5,4))\n",
        "sns.heatmap(cm, annot=True, fmt='d')\n",
        "plt.title(\"LSTM Confusion Matrix\"); plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 391
        },
        "id": "aE26mLolYxxt",
        "outputId": "9dcd2abe-883f-421c-ff82-65fd573d3ad9"
      },
      "execution_count": 51,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Plot LSTM training curves\n",
        "plt.figure(figsize=(12,4))\n",
        "plt.subplot(1,2,1)\n",
        "plt.plot(history.history['loss'], label='train_loss')\n",
        "plt.plot(history.history['val_loss'], label='val_loss')\n",
        "plt.title('LSTM Loss'); plt.legend()\n",
        "plt.subplot(1,2,2)\n",
        "plt.plot(history.history['accuracy'], label='train_acc')\n",
        "plt.plot(history.history['val_accuracy'], label='val_acc')\n",
        "plt.title('LSTM Accuracy'); plt.legend()\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 391
        },
        "id": "SJkgT8aZY1p2",
        "outputId": "490058dc-6ba0-406d-ba2e-dd18b36c47bd"
      },
      "execution_count": 52,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1200x400 with 2 Axes>"
            ],
            "image/png": "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yZO88cYbiefYm24+7vLly6xdu5YePXpQvHjxZMfcj4YNG1KpUqXbtnt4eCT+fv36dcLCwnj00UfZsWNH4vbFixdjt9sZMmRIks8W/47JarXywgsvsGTJEm7cuJF4/7x586hfvz6lSpW679hFHpQSb5FMqEiRIkycOJHg4GAOHz7M2LFjKViwIEOGDGHatGkPtO+CBQvSuHFj5s+fz08//YTNZqNdu3ZpFLnD6dOnAW67lsrV1ZXSpUsn3l+qVCkGDBjA1KlTKVCgAE2aNGHChAlJru/u0KEDDz/8MC+99BK+vr507NiRBQsWKAkXEZEMldnPzX/88QeXL18mMDCQY8eOcezYMU6ePMnjjz/Od999l3jePH78OMBd24KeOHHinmPux50S399++426devi7u5Ovnz5KFiwIBMnTkzyeeD48eNYrdZkE/d/69KlC9HR0fz8888AHD58mO3bt9O5c+e0OxCR+6DEWyQTs1gslC9fnv79+7N27VqsVmuy12ql1vPPP8///vc/Jk2aRLNmzW77xjsjjRgxgj179vD+++8THR3Na6+9RuXKlTl37hzg+BZ87dq1/Pnnn3Tu3Jk9e/bQoUMHnnzySWw2m2lxi4hIzpRZz803Y3juuecoV65c4s8PP/zA+fPnWbNmzQPH+F93mv2+0/n53zPbN/399988/fTTuLu788033/D777+zYsUKnn/++ftaSVCpUiVq1arF3LlzAUcxNldXV5577rlU70skLSnxFskiSpcuTd68eQkODn7gfbVp0war1cqmTZvSpZp5iRIlAMe3zP8WFxfHyZMnE++/qWrVqnz44YesXbuWv//+m/PnzzNp0qTE+61WK40aNWLkyJEcOHCAzz77jFWrVvHXX3+leewiIiIplVnOzZGRkfzyyy906NCBhQsX3vZTpEiRxMS8TJkyAOzbt++O+ytduvQ9xwDkzZv3tm4lcGvlW0osWrQId3d3li9fTo8ePWjWrBmNGze+bVyZMmWw2+0cOHDgnvvs0qULq1atIjg4mPnz59OiRQvy5s2b4phE0oMSb5FMZvPmzURGRt62fcuWLVy9ejVNWmHkypWLiRMnMnToUFq1avXA+/uvxo0b4+rqytixY5N8Wz1t2jTCwsJo0aIF4Oh9mpCQkOSxVatWxWq1EhsbC8C1a9du239AQABA4hgREZH0lNnPzT//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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Fine-tune DistilBERT using HuggingFace (TF)"
      ],
      "metadata": {
        "id": "EuTvTuhKistL"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\n--- Preparing data & training DistilBERT (lightweight BERT) ---\")\n",
        "\n",
        "from transformers import DistilBertTokenizerFast, TFDistilBertForSequenceClassification, create_optimizer, DefaultDataCollator\n",
        "from datasets import Dataset\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score, accuracy_score, f1_score\n",
        "import tensorflow as tf\n",
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "import os"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "IneLOz_uipzV",
        "outputId": "5ed1a4f9-f7b3-4392-cadc-5fbce35612b7"
      },
      "execution_count": 59,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "--- Preparing data & training DistilBERT (lightweight BERT) ---\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Preparing Hugging Face datasets\n",
        "hf_df = pd.DataFrame({\n",
        "    'text': df['text_clean'].astype(str).tolist(),\n",
        "    'label': df[label_col].astype(int).values\n",
        "})\n",
        "\n",
        "train_df, test_df = train_test_split(\n",
        "    hf_df, test_size=0.2, random_state=SEED, stratify=hf_df['label']\n",
        ")\n",
        "\n",
        "tokenizer_bert = DistilBertTokenizerFast.from_pretrained('distilbert-base-uncased')\n",
        "\n",
        "def tokenize_batch(batch):\n",
        "    return tokenizer_bert(batch['text'], truncation=True, padding='max_length', max_length=128)\n",
        "\n",
        "train_ds = Dataset.from_pandas(train_df.reset_index(drop=True))\n",
        "test_ds = Dataset.from_pandas(test_df.reset_index(drop=True))\n",
        "\n",
        "train_ds = train_ds.map(tokenize_batch, batched=True)\n",
        "test_ds = test_ds.map(tokenize_batch, batched=True)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 81,
          "referenced_widgets": [
            "cbb531606f1a4e81a25b4c2dccaf7992",
            "3b112f90096548f4b8f3960a5683bf44",
            "5ede615ec51543d5b15f4e675f81ce73",
            "6e9da60362d745788b3f6aebb8136224",
            "9319a74abb9f43a2889d7cc1afc9f2d7",
            "38a9ca3a92754923b09b16d6b160657b",
            "a4a252de4ef0466294c27da2b87057ec",
            "c5450d346fa4489f91a6aba327658178",
            "7a021a312f564fc3b31635e81381b89d",
            "3b4aeb2c0b9a434cbfd9c7afc4d443bd",
            "dc4eacee159d40a791482981d0d958ec",
            "a7be574e11824986a4544dd506700bc7",
            "39aff67cd60543fc84426d97ab7e8cd3",
            "9b27034bbdb74205aeddb71e609a418a",
            "8db3d3b1d2fe48bcb0088770f7f063e1",
            "83ea58ae1ec747b5959ab9e49994d9cb",
            "2c3c4aa1126b4e5c9dc5c2f140418726",
            "ca919b636bd34612a5e9f75a68988f9a",
            "ecf323c7b36e46de8625a507af1fb515",
            "6b38fe22b74142f5978bb5bea96f816f",
            "dac42aeabfa34a8e972c9ae1cc35cd34",
            "804ca0f068d94bbb8e8fa280820cd589"
          ]
        },
        "id": "aArFdXgSip2V",
        "outputId": "742e602b-f4e9-420f-cdcc-5b0ae9256bd4"
      },
      "execution_count": 60,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Map:   0%|          | 0/17048 [00:00<?, ? examples/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "cbb531606f1a4e81a25b4c2dccaf7992"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Map:   0%|          | 0/4263 [00:00<?, ? examples/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "a7be574e11824986a4544dd506700bc7"
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Removing unnecessary columns\n",
        "train_ds = train_ds.remove_columns([c for c in train_ds.column_names if c not in ['input_ids','attention_mask','label']])\n",
        "test_ds = test_ds.remove_columns([c for c in test_ds.column_names if c not in ['input_ids','attention_mask','label']])"
      ],
      "metadata": {
        "id": "5THhAJdTip5L"
      },
      "execution_count": 62,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Converting to tf.data.Dataset properly\n",
        "data_collator = DefaultDataCollator(return_tensors=\"tf\")\n",
        "batch_size = 16\n",
        "\n",
        "train_tf = train_ds.to_tf_dataset(\n",
        "    columns=[\"input_ids\", \"attention_mask\"],\n",
        "    label_cols=[\"label\"],\n",
        "    shuffle=True,\n",
        "    collate_fn=data_collator,\n",
        "    batch_size=batch_size\n",
        ")\n",
        "test_tf = test_ds.to_tf_dataset(\n",
        "    columns=[\"input_ids\", \"attention_mask\"],\n",
        "    label_cols=[\"label\"],\n",
        "    shuffle=False,\n",
        "    collate_fn=data_collator,\n",
        "    batch_size=batch_size\n",
        ")\n"
      ],
      "metadata": {
        "id": "s99dbWVtHvEN"
      },
      "execution_count": 63,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "from transformers import DistilBertTokenizerFast, TFDistilBertForSequenceClassification\n",
        "\n",
        "MODEL_NAME = \"distilbert-base-uncased\"\n",
        "\n",
        "# Loading tokenizer\n",
        "tokenizer = DistilBertTokenizerFast.from_pretrained(MODEL_NAME)\n",
        "\n",
        "# Loading model safely for TensorFlow\n",
        "bert_model = TFDistilBertForSequenceClassification.from_pretrained(\n",
        "    MODEL_NAME,\n",
        "    num_labels=2,\n",
        "    from_pt=True\n",
        ")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 160,
          "referenced_widgets": [
            "97c8705768604740bd31e7e63219d74d",
            "7198e1157e6f426ba97c9f1ba432e4e0",
            "a5dd212e1d6f435ea3e283fed5b08a55",
            "3b685795d2534415bf7c1cc66d57baf0",
            "bec98857b1a6480a95aa2b68b98ec94d",
            "7afeaa2b494549dda6cb5e4ef5483662",
            "f5e370ce6c344a5b8318bfe51c6da7f2",
            "5e0fc0c3bade4a2abd1057014c9f5a59",
            "ec816b104e434b268dac526e7b6a49b7",
            "7b5ecb740ef54cc7a4333f2b4111a759",
            "f18629beae0545ef971a62617b2b6119"
          ]
        },
        "id": "vhbHVLXhjfGM",
        "outputId": "8d4b7453-034f-4d86-ad32-d9fc1e064412"
      },
      "execution_count": 65,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "pytorch_model.bin:   0%|          | 0.00/268M [00:00<?, ?B/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "97c8705768604740bd31e7e63219d74d"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "Some weights of the PyTorch model were not used when initializing the TF 2.0 model TFDistilBertForSequenceClassification: ['vocab_transform.bias', 'vocab_projector.bias', 'vocab_transform.weight', 'vocab_projector.weight', 'vocab_layer_norm.bias', 'vocab_layer_norm.weight']\n",
            "- This IS expected if you are initializing TFDistilBertForSequenceClassification from a PyTorch model trained on another task or with another architecture (e.g. initializing a TFBertForSequenceClassification model from a BertForPreTraining model).\n",
            "- This IS NOT expected if you are initializing TFDistilBertForSequenceClassification from a PyTorch model that you expect to be exactly identical (e.g. initializing a TFBertForSequenceClassification model from a BertForSequenceClassification model).\n",
            "Some weights or buffers of the TF 2.0 model TFDistilBertForSequenceClassification were not initialized from the PyTorch model and are newly initialized: ['pre_classifier.weight', 'pre_classifier.bias', 'classifier.weight', 'classifier.bias']\n",
            "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Optimizer\n",
        "steps_per_epoch = len(train_df) // batch_size\n",
        "num_train_steps = steps_per_epoch * 3\n",
        "optimizer, schedule = create_optimizer(init_lr=2e-5, num_train_steps=num_train_steps, num_warmup_steps=100)\n",
        "bert_model.compile(\n",
        "    optimizer=optimizer,\n",
        "    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n",
        "    metrics=['accuracy']\n",
        ")\n"
      ],
      "metadata": {
        "id": "ksyV4qM7jRqd"
      },
      "execution_count": 66,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Train BERT\n",
        "bert_history = bert_model.fit(train_tf, validation_data=test_tf, epochs=3)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3y_wS28ljRts",
        "outputId": "9da78404-7d23-4c7f-ea3f-34d4cbd0d2d1"
      },
      "execution_count": 67,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/3\n",
            "1066/1066 [==============================] - 314s 241ms/step - loss: 0.0851 - accuracy: 0.9744 - val_loss: 0.0293 - val_accuracy: 0.9948\n",
            "Epoch 2/3\n",
            "1066/1066 [==============================] - 240s 225ms/step - loss: 0.0214 - accuracy: 0.9961 - val_loss: 0.0154 - val_accuracy: 0.9958\n",
            "Epoch 3/3\n",
            "1066/1066 [==============================] - 241s 226ms/step - loss: 0.0108 - accuracy: 0.9981 - val_loss: 0.0136 - val_accuracy: 0.9977\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Evaluation\n",
        "preds = bert_model.predict(test_tf)\n",
        "probs = tf.nn.softmax(preds.logits, axis=1).numpy()[:,1]\n",
        "y_true_bert = np.concatenate([y for _, y in test_tf], axis=0)\n",
        "y_pred_bert = (probs >= 0.5).astype(int)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "H21uCWBZjwQj",
        "outputId": "9f2c1257-4f71-47df-91f1-1d22b0a8a7ba"
      },
      "execution_count": 68,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "267/267 [==============================] - 21s 73ms/step\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\nDistilBERT Classification report:\")\n",
        "print(classification_report(y_true_bert, y_pred_bert, digits=4))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "7TJZRJ0ij0FE",
        "outputId": "4907ee45-01ac-41d1-e8e7-8e92a6908db8"
      },
      "execution_count": 69,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "DistilBERT Classification report:\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0     0.9981    0.9995    0.9988      4194\n",
            "           1     0.9683    0.8841    0.9242        69\n",
            "\n",
            "    accuracy                         0.9977      4263\n",
            "   macro avg     0.9832    0.9418    0.9615      4263\n",
            "weighted avg     0.9976    0.9977    0.9976      4263\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "bert_auc = roc_auc_score(y_true_bert, probs)\n",
        "print(\"DistilBERT ROC AUC:\", bert_auc)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Kw7EyWsOj0J8",
        "outputId": "a21af41b-0040-4bcd-8573-6e136b033c34"
      },
      "execution_count": 70,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "DistilBERT ROC AUC: 0.9738619007139253\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Confusion matrix\n",
        "cm = confusion_matrix(y_true_bert, y_pred_bert)\n",
        "plt.figure(figsize=(5,4))\n",
        "sns.heatmap(cm, annot=True, fmt='d', cmap='Purples')\n",
        "plt.title(\"DistilBERT Confusion Matrix\"); plt.xlabel(\"Predicted\"); plt.ylabel(\"True\")\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 410
        },
        "id": "hobmzuT3j3T8",
        "outputId": "a36f90dc-5627-4e86-fd77-2653cecd11cd"
      },
      "execution_count": 71,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x400 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Training curves\n",
        "plt.figure(figsize=(10,4))\n",
        "plt.subplot(1,2,1)\n",
        "plt.plot(bert_history.history['loss'], label='train_loss')\n",
        "plt.plot(bert_history.history['val_loss'], label='val_loss')\n",
        "plt.title('BERT Loss'); plt.legend()\n",
        "plt.subplot(1,2,2)\n",
        "plt.plot(bert_history.history['accuracy'], label='train_acc')\n",
        "plt.plot(bert_history.history.get('val_accuracy', []), label='val_acc')\n",
        "plt.title('BERT Accuracy'); plt.legend()\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 391
        },
        "id": "Ylatn_Donrx8",
        "outputId": "506f6079-ac1d-42b9-f807-245d26bacca1"
      },
      "execution_count": 72,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x400 with 2 Axes>"
            ],
            "image/png": "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27aNo0eP8vnnn1s/F667vt/Zs2f5888/6dGjB2XKlMmwzf1o2LAhVapUuWW9q6ur9e8XL14kLS2NJ598kh9++MG6fuHChZjNZgYOHHjL59f1mOzs7Hj55Zf54osvuHz5MgULFgRg5syZ1K9fH39///uOXXInJUOSb9SpU4datWpZX3fo0IFHHnmE7t2707x583TlCqVKlSIkJOSux3RxceHXX38F4OTJk3z22WfExMSku2lnt+PHjwPcUufs5OREuXLlrNv9/f0JDw9n3LhxzJw5kyeffJKWLVvyyiuvWBOl9u3b89///pc33niDPn360KhRI9q0aUPbtm2VGImIXJNbP0+WL1/O2bNnqVOnDocOHbKuf/rpp/nhhx8YNWoUdnZ2HD58GOCO0zpcf44pq6d+uF0ysmjRIoYPH8727dtJSkqyrr858Tp8+DB2dnYZJlM369ixI6NGjWLBggV07NiR/fv3s2XLFqZMmZI1FyG5ir7dSL5lZ2fH008/zZkzZzh48OB9HcPe3p6QkBBCQkLo3LkzERERREVF8dZbb2VxtFlj7Nix7Nixg379+pGQkMD7779P1apVOXnyJGD55e3PP/9k5cqVvPrqq+zYsYP27dvz7LPPkpaWZuPoRURyptzyeTJz5kwAXnjhBQIDA63L7NmzOXXqFKtXr86yc113u16i232mZJT8rVmzhpYtW+Li4sKXX37JkiVLWLFiBS+99BKGYWQ6pipVqlCzZk1mzJgBWAZccHJy4oUXXsj0sST3UzIk+VpqaipAurkbHkSJEiX44IMP+PXXX/n777+z5Jh3U7ZsWQD279+fbn1ycjJHjx61br+uevXq9O/fnz///JM1a9Zw6tSpdL+G2dnZ0ahRI8aNG8eePXsYMWIEv//+O3/88Uf2X4yISC6V0z9P4uPj+fnnn2nfvj1z5sy5ZSlRooQ1WQoICABg165dtz1euXLl7toGLIM//HtkU7hR1XAv5s2bh4uLC8uWLeO1116jSZMmGfa2BQQEYDab2bNnz12P2bFjR37//XfOnDnDrFmzaNas2UMd+EhyDiVDkm+lpKSwfPlynJycqFy5cpYd97333sPNzY1PP/00y455JyEhITg5OfHFF1+k+4Xsf//7H7GxsdZRduLi4qwf1tdVr14dOzs7a8nBhQsXbjn+9Rrym8sSRETkhtzwebJgwQLi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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "#  Model Comparison"
      ],
      "metadata": {
        "id": "5k37BzB3nxci"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "models_summary = {\n",
        "    'RandomForest': {\n",
        "        'accuracy': accuracy_score(y_test, y_pred_rf),\n",
        "        'roc_auc': rf_auc,\n",
        "        'f1': f1_score(y_test, y_pred_rf)\n",
        "    },\n",
        "    'SVM': {\n",
        "        'accuracy': accuracy_score(y_test, y_pred_svm),\n",
        "        'roc_auc': svm_auc,\n",
        "        'f1': f1_score(y_test, y_pred_svm)\n",
        "    },\n",
        "    'LSTM': {\n",
        "        'accuracy': accuracy_score(y_test_seq, y_pred_lstm),\n",
        "        'roc_auc': lstm_auc,\n",
        "        'f1': f1_score(y_test_seq, y_pred_lstm)\n",
        "    },\n",
        "    'DistilBERT': {\n",
        "        'accuracy': accuracy_score(y_true_bert, y_pred_bert),\n",
        "        'roc_auc': bert_auc,\n",
        "        'f1': f1_score(y_true_bert, y_pred_bert)\n",
        "    }\n",
        "}\n",
        "\n",
        "summary_df = pd.DataFrame(models_summary).T\n",
        "print(\"\\n=== Model Performance Summary ===\")\n",
        "display(summary_df.sort_values('roc_auc', ascending=False))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 211
        },
        "id": "_MmVRNAjnw47",
        "outputId": "6ef19b7d-7359-42cd-f8b6-e6449db10ca3"
      },
      "execution_count": 73,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "=== Model Performance Summary ===\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "              accuracy   roc_auc        f1\n",
              "DistilBERT    0.997654  0.973862  0.924242\n",
              "SVM           0.988271  0.915003  0.456522\n",
              "RandomForest  0.988271  0.911958  0.431818\n",
              "LSTM          0.984049  0.829221  0.413793"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-d44a9282-0a8e-45db-94c2-3ed113706a07\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>accuracy</th>\n",
              "      <th>roc_auc</th>\n",
              "      <th>f1</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>DistilBERT</th>\n",
              "      <td>0.997654</td>\n",
              "      <td>0.973862</td>\n",
              "      <td>0.924242</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>SVM</th>\n",
              "      <td>0.988271</td>\n",
              "      <td>0.915003</td>\n",
              "      <td>0.456522</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>RandomForest</th>\n",
              "      <td>0.988271</td>\n",
              "      <td>0.911958</td>\n",
              "      <td>0.431818</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>LSTM</th>\n",
              "      <td>0.984049</td>\n",
              "      <td>0.829221</td>\n",
              "      <td>0.413793</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d44a9282-0a8e-45db-94c2-3ed113706a07')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-d44a9282-0a8e-45db-94c2-3ed113706a07 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-d44a9282-0a8e-45db-94c2-3ed113706a07');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-4b81717f-7bc7-475f-be71-88f09ee3e3d1\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-4b81717f-7bc7-475f-be71-88f09ee3e3d1')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-4b81717f-7bc7-475f-be71-88f09ee3e3d1 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"display(summary_df\",\n  \"rows\": 4,\n  \"fields\": [\n    {\n      \"column\": \"accuracy\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.005750715773929714,\n        \"min\": 0.9840487919305654,\n        \"max\": 0.997654234107436,\n        \"num_unique_values\": 3,\n        \"samples\": [\n          0.997654234107436,\n          0.9882711705371804,\n          0.9840487919305654\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"roc_auc\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.05946327934978277,\n        \"min\": 0.8292211786333823,\n        \"max\": 0.9738619007139253,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.9150027990296697,\n          0.8292211786333823,\n          0.9738619007139253\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"f1\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.24572404719001775,\n        \"min\": 0.41379310344827586,\n        \"max\": 0.9242424242424242,\n        \"num_unique_values\": 4,\n        \"samples\": [\n          0.45652173913043476,\n          0.41379310344827586,\n          0.9242424242424242\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Save All Models"
      ],
      "metadata": {
        "id": "4FrWQvJTn9Da"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "print(\"\\nSaving all models to /content/models/\")\n",
        "os.makedirs('/content/models', exist_ok=True)\n",
        "\n",
        "joblib.dump(rf, '/content/models/rf_model.joblib')\n",
        "joblib.dump(svm, '/content/models/svm_model.joblib')\n",
        "joblib.dump(tfidf, '/content/models/tfidf_vectorizer.joblib')\n",
        "joblib.dump(scaler, '/content/models/feature_scaler.joblib')\n",
        "model_lstm.save('/content/models/lstm_model.h5')\n",
        "bert_model.save_pretrained('/content/models/distilbert_model')\n",
        "tokenizer_bert.save_pretrained('/content/models/distilbert_tokenizer')\n",
        "joblib.dump(tokenizer, '/content/models/keras_tokenizer.joblib')\n",
        "\n",
        "print(\" All models saved successfully.\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Ph_vLUcFnw78",
        "outputId": "3e18fc0c-cc93-4db2-db56-5a85ea2b69e3"
      },
      "execution_count": 74,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Saving all models to /content/models/\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " All models saved successfully.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Prediction"
      ],
      "metadata": {
        "id": "nYa0pV6b8C1t"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from transformers import DistilBertTokenizerFast, TFDistilBertForSequenceClassification\n",
        "import tensorflow as tf\n",
        "import numpy as np\n",
        "\n",
        "model_path = \"/content/models/distilbert_model\"\n",
        "tokenizer_path = \"/content/models/distilbert_tokenizer\"\n",
        "\n",
        "print(\"Loading fine-tuned DistilBERT model...\")\n",
        "tokenizer = DistilBertTokenizerFast.from_pretrained(tokenizer_path)\n",
        "best_model = TFDistilBertForSequenceClassification.from_pretrained(model_path)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "BNgy2seM4TC7",
        "outputId": "c558bc81-3531-49f2-f1cc-1f5f0c0c00ee"
      },
      "execution_count": 93,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Loading fine-tuned DistilBERT model...\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "Some layers from the model checkpoint at /content/models/distilbert_model were not used when initializing TFDistilBertForSequenceClassification: ['dropout_79']\n",
            "- This IS expected if you are initializing TFDistilBertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
            "- This IS NOT expected if you are initializing TFDistilBertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
            "Some layers of TFDistilBertForSequenceClassification were not initialized from the model checkpoint at /content/models/distilbert_model and are newly initialized: ['dropout_179']\n",
            "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "def predict_fake_news(news_text):\n",
        "    enc = tokenizer(\n",
        "        news_text,\n",
        "        truncation=True,\n",
        "        padding=True,\n",
        "        max_length=128,\n",
        "        return_tensors=\"tf\"\n",
        "    )\n",
        "    out = best_model(enc)\n",
        "    probs = tf.nn.softmax(out.logits, axis=1).numpy()[0]\n",
        "    pred_label = np.argmax(probs)\n",
        "    confidence = probs[pred_label]\n",
        "\n",
        "    print(\"\\n Input Text:\")\n",
        "    print(news_text)\n",
        "    if pred_label == 1:\n",
        "        print(f\"\\n Prediction: FAKE NEWS  (Confidence: {confidence:.2f})\")\n",
        "    else:\n",
        "        print(f\"\\n Prediction: REAL NEWS  (Confidence: {confidence:.2f})\")\n",
        "\n",
        "print(\"\\n Best Model Based on ROC-AUC: DistilBERT\\n\")\n",
        "user_input = input(\"Enter a news text for prediction:\\n> \")\n",
        "predict_fake_news(user_input)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "M6vCK-bP8Ac2",
        "outputId": "bf95c2ff-9c1d-427f-f434-5510abfa973b"
      },
      "execution_count": 112,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            " Best Model Based on ROC-AUC: DistilBERT\n",
            "\n",
            "Enter a news text for prediction:\n",
            "> Election results show Labour gaining ground in northern constituencies. #UKElection\n",
            "\n",
            " Input Text:\n",
            "Election results show Labour gaining ground in northern constituencies. #UKElection\n",
            "\n",
            " Prediction: REAL NEWS  (Confidence: 0.99)\n"
          ]
        }
      ]
    }
  ]
}