diff --git a/Transformers_2.ipynb b/Transformers_2.ipynb new file mode 100644 index 0000000..36c2a81 --- /dev/null +++ b/Transformers_2.ipynb @@ -0,0 +1,4001 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4", + "authorship_tag": "ABX9TyOt90/WyRyyOQaNP2+agQaA", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "0ad112e40250417e85f106bffa14df8f": { + "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_7ab245d570624afba3926b35cc875b8e", + "IPY_MODEL_da6859c90d2745c88632291a4ccd3d9e", + "IPY_MODEL_327ed7c84f3346eca8af68188dcdf365" + ], + "layout": "IPY_MODEL_3cf0fd0b5af147fb8a99132a155513ea" + } + }, + "7ab245d570624afba3926b35cc875b8e": { + "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_d1374a3155744320b7f7f3ba961706fa", + "placeholder": "​", + "style": "IPY_MODEL_327bc27bfb1648c69f92721827768bc1", + "value": "Downloading (…)solve/main/vocab.txt: 100%" + } + }, + "da6859c90d2745c88632291a4ccd3d9e": { + "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_a6d43b466c844c9eae33583736916af2", + "max": 231508, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_c501c3a920174a2ea2c9a5bfcb6b7a3b", + "value": 231508 + } + }, + "327ed7c84f3346eca8af68188dcdf365": { + "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_b1cd42c159864367a1853ef3d1a49d13", + "placeholder": "​", + "style": "IPY_MODEL_d137a213a2164e928a6d28c9e71d6e1a", + "value": " 232k/232k [00:00<00:00, 4.93MB/s]" + } + }, + "3cf0fd0b5af147fb8a99132a155513ea": { + "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 + } + }, + "d1374a3155744320b7f7f3ba961706fa": { + "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 + } + }, + "327bc27bfb1648c69f92721827768bc1": { + "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": "" + } + }, + "a6d43b466c844c9eae33583736916af2": { + "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 + } + }, + "c501c3a920174a2ea2c9a5bfcb6b7a3b": { + "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": "" + } + }, + "b1cd42c159864367a1853ef3d1a49d13": { + "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 + } + }, + "d137a213a2164e928a6d28c9e71d6e1a": { + "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": "" + } + }, + "3f323bc887d8491c9c27cb51141e1f37": { + "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_2b7f6d4e6e2a4c10b294ebcf1e713091", + "IPY_MODEL_07c73767acfb41378ae4ad9521f1b12e", + "IPY_MODEL_a0275bf80859495aa4c930dda180fcd8" + ], + "layout": "IPY_MODEL_14c595fa8fa74d5097595c26e679601d" + } + }, + "2b7f6d4e6e2a4c10b294ebcf1e713091": { + "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_016ca35dedbd4058adccee79b6d85c48", + "placeholder": "​", + "style": "IPY_MODEL_9a2412467f9942ec931d5c9a5f4d1a1f", + "value": "Downloading (…)okenizer_config.json: 100%" + } + }, + "07c73767acfb41378ae4ad9521f1b12e": { + "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_e66c88b720934062af8813019e7a6a97", + "max": 28, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_f2f938ef23c747789bfe4e3f06430f15", + "value": 28 + } + }, + "a0275bf80859495aa4c930dda180fcd8": { + "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_c8530a14813e4283bb08e764cc27cfff", + "placeholder": "​", + "style": "IPY_MODEL_c5821978dab8402a83286767f2d7b616", + "value": " 28.0/28.0 [00:00<00:00, 1.73kB/s]" + } + }, + "14c595fa8fa74d5097595c26e679601d": { + "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 + } + }, + "016ca35dedbd4058adccee79b6d85c48": { + "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 + } + }, + "9a2412467f9942ec931d5c9a5f4d1a1f": { + "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": "" + } + }, + "e66c88b720934062af8813019e7a6a97": { + "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 + } + }, + "f2f938ef23c747789bfe4e3f06430f15": { + "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": "" + } + }, + "c8530a14813e4283bb08e764cc27cfff": { + "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 + } + }, + "c5821978dab8402a83286767f2d7b616": { + "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": "" + } + }, + "2a4fc261dd2744be80de392346b77a13": { + "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_904a8a6cdf7242a4b55d0f1440212275", + "IPY_MODEL_b5ece9f04eab43d592afa62f96cb2c63", + "IPY_MODEL_d777dbb81ace4eca97a21fb16d554b7b" + ], + "layout": "IPY_MODEL_32c19886fff849529aaf960cac7efb1a" + } + }, + "904a8a6cdf7242a4b55d0f1440212275": { + "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_2742b24a126743a5ac88260b1e102124", + "placeholder": "​", + "style": "IPY_MODEL_874129ba70634c40aeb1588d2e6224be", + "value": "Downloading (…)lve/main/config.json: 100%" + } + }, + "b5ece9f04eab43d592afa62f96cb2c63": { + "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_4d690563273a4eaa8bce398a9bd8dcb0", + "max": 483, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_73adbaf455914f20bc4f6ac8529554ac", + "value": 483 + } + }, + "d777dbb81ace4eca97a21fb16d554b7b": { + "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_196c83b6729b4f2287fdec3e9946ceef", + "placeholder": "​", + "style": "IPY_MODEL_f56709e754e841b2bd064ad57b9d7d94", + "value": " 483/483 [00:00<00:00, 32.2kB/s]" + } + }, + "32c19886fff849529aaf960cac7efb1a": { + "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 + } + }, + "2742b24a126743a5ac88260b1e102124": { + "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 + } + }, + "874129ba70634c40aeb1588d2e6224be": { + "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": "" + } + }, + "4d690563273a4eaa8bce398a9bd8dcb0": { + "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 + } + }, + "73adbaf455914f20bc4f6ac8529554ac": { + "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": "" + } + }, + "196c83b6729b4f2287fdec3e9946ceef": { + "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 + } + }, + "f56709e754e841b2bd064ad57b9d7d94": { + "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": "" + } + }, + "cf1b0f77ef2b453a8f76ae1119745524": { + "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_a46d242751a44eccb1437dda335d28ed", + "IPY_MODEL_05ea026dde10494fb1226c5d6c3f46df", + "IPY_MODEL_66711c0ed00d425a89506ec809328673" + ], + "layout": "IPY_MODEL_10f4b09c00334451adc198d1dd2259e2" + } + }, + "a46d242751a44eccb1437dda335d28ed": { + "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_e1c5e918e422440191a2c3686bc36127", + "placeholder": "​", + "style": "IPY_MODEL_62c96581fb2c44a1b11ba5894e3ee209", + "value": "Downloading model.safetensors: 100%" + } + }, + "05ea026dde10494fb1226c5d6c3f46df": { + "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_2f31bd12b4d544119a9253aa4af77433", + "max": 267954768, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_83720b19c7754f7ba71f165a5f6dcc3a", + "value": 267954768 + } + }, + "66711c0ed00d425a89506ec809328673": { + "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_1a1e4affd3f94008b10e888fc0c8624a", + "placeholder": "​", + "style": "IPY_MODEL_3356c02482b04a4abc17e604f0853624", + "value": " 268M/268M [00:01<00:00, 200MB/s]" + } + }, + "10f4b09c00334451adc198d1dd2259e2": { + "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 + } + }, + "e1c5e918e422440191a2c3686bc36127": { + "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 + } + }, + "62c96581fb2c44a1b11ba5894e3ee209": { + "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": "" + } + }, + "2f31bd12b4d544119a9253aa4af77433": { + "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 + } + }, + "83720b19c7754f7ba71f165a5f6dcc3a": { + "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": "" + } + }, + "1a1e4affd3f94008b10e888fc0c8624a": { + "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 + } + }, + "3356c02482b04a4abc17e604f0853624": { + "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", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sM-JvLYHo8m1", + "outputId": "9bcd2467-cd51-4474-8622-da5baeed937d" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting git+https://github.com/huggingface/transformers.git\n", + " Cloning https://github.com/huggingface/transformers.git to /tmp/pip-req-build-l73f6ika\n", + " Running command git clone --filter=blob:none --quiet https://github.com/huggingface/transformers.git /tmp/pip-req-build-l73f6ika\n", + " Resolved https://github.com/huggingface/transformers.git to commit d8e13b3e04da9e61c6f16df43815656f59688abd\n", + " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers==4.34.0.dev0) (3.12.2)\n", + "Collecting huggingface-hub<1.0,>=0.15.1 (from transformers==4.34.0.dev0)\n", + " Downloading huggingface_hub-0.16.4-py3-none-any.whl (268 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m268.8/268.8 kB\u001b[0m \u001b[31m2.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers==4.34.0.dev0) (1.23.5)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers==4.34.0.dev0) (23.1)\n", + "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers==4.34.0.dev0) (6.0.1)\n", + "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers==4.34.0.dev0) (2023.6.3)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers==4.34.0.dev0) (2.31.0)\n", + "Collecting tokenizers!=0.11.3,<0.14,>=0.11.1 (from transformers==4.34.0.dev0)\n", + " Downloading tokenizers-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m16.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting safetensors>=0.3.1 (from transformers==4.34.0.dev0)\n", + " Downloading safetensors-0.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m35.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers==4.34.0.dev0) (4.66.1)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.15.1->transformers==4.34.0.dev0) (2023.6.0)\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.15.1->transformers==4.34.0.dev0) (4.7.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.34.0.dev0) (3.2.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.34.0.dev0) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.34.0.dev0) (2.0.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers==4.34.0.dev0) (2023.7.22)\n", + "Building wheels for collected packages: transformers\n", + " Building wheel for transformers (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for transformers: filename=transformers-4.34.0.dev0-py3-none-any.whl size=7636963 sha256=598e414880f7fba25c31ca8276e5cc6c8784c2176b24d95c42b240c776e1bb98\n", + " Stored in directory: /tmp/pip-ephem-wheel-cache-yvj1k71d/wheels/e7/9c/5b/e1a9c8007c343041e61cc484433d512ea9274272e3fcbe7c16\n", + "Successfully built transformers\n", + "Installing collected packages: tokenizers, safetensors, huggingface-hub, transformers\n", + "Successfully installed huggingface-hub-0.16.4 safetensors-0.3.3 tokenizers-0.13.3 transformers-4.34.0.dev0\n" + ] + } + ], + "source": [ + "!pip install git+https://github.com/huggingface/transformers.git" + ] + }, + { + "cell_type": "code", + "source": [ + "from transformers import DistilBertTokenizer\n", + "from transformers import TFDistilBertForSequenceClassification\n", + "import tensorflow as tf\n", + "import pandas as pd\n", + "import json\n", + "import gc" + ], + "metadata": { + "id": "okhDX1H4pO-z" + }, + "execution_count": 43, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive/')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7IMpFSAGpSOh", + "outputId": "315c2ba5-2b2f-4281-b0eb-929e018d1783" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive/\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "#Navigate to the file directory and read the pokemon file in your Google Drive\n", + "\n", + "inventory_df = pd.read_excel(\"/content/drive/MyDrive/Inventory/data_test.xlsx\")\n", + "inventory_df.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "id": "fk4YppMspc0L", + "outputId": "bb70faed-eed9-40b3-da02-6c0ebfed8853" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Task Plan Description Category\n", + "0 ADM-EOP-0001 Seplat Soccer Tournament Service\n", + "1 ADM-EOP-0002 Seplat Decluttering Exercise Service\n", + "2 AST-FFE-0001 Independent Fire Water Systems Material\n", + "3 AST-FFE-0002 Fire Extinguishers Material\n", + "4 AST-FFE-0003 Mobilisation Unlabelled" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Task PlanDescriptionCategory
0ADM-EOP-0001Seplat Soccer TournamentService
1ADM-EOP-0002Seplat Decluttering ExerciseService
2AST-FFE-0001Independent Fire Water SystemsMaterial
3AST-FFE-0002Fire ExtinguishersMaterial
4AST-FFE-0003MobilisationUnlabelled
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "code", + "source": [ + "#Filter Out the Unlabelled Values\n", + "inventory_df = inventory_df[(inventory_df['Category'] == 'Material') | (inventory_df['Category'] == 'Service')]" + ], + "metadata": { + "id": "TRiBW7e5pfjY" + }, + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "inventory_df['Category'].unique()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eVm9vvT6pmsK", + "outputId": "55bfcdff-d2ed-4cfb-bd5b-da537978a1e3" + }, + "execution_count": 44, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array(['Service', 'Material'], dtype=object)" + ] + }, + "metadata": {}, + "execution_count": 44 + } + ] + }, + { + "cell_type": "code", + "source": [ + "inventory_df['encoded_cat'] = inventory_df['Category'].astype('category').cat.codes\n", + "inventory_df.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "id": "Qkh_AKS7pswh", + "outputId": "fea41077-bf17-4520-ae77-eb52bcdd08f3" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Task Plan Description Category encoded_cat\n", + "0 ADM-EOP-0001 Seplat Soccer Tournament Service 1\n", + "1 ADM-EOP-0002 Seplat Decluttering Exercise Service 1\n", + "2 AST-FFE-0001 Independent Fire Water Systems Material 0\n", + "3 AST-FFE-0002 Fire Extinguishers Material 0\n", + "5 AST-FFE-0004 Engineering Design Service 1" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Task PlanDescriptionCategoryencoded_cat
0ADM-EOP-0001Seplat Soccer TournamentService1
1ADM-EOP-0002Seplat Decluttering ExerciseService1
2AST-FFE-0001Independent Fire Water SystemsMaterial0
3AST-FFE-0002Fire ExtinguishersMaterial0
5AST-FFE-0004Engineering DesignService1
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "code", + "source": [ + "#inventory_df.drop(['Task Plan'], 1, inplace=True) XXX\n", + "inventory_df = inventory_df.drop(columns='Task Plan') # Pandas official way of dropping columns\n", + "inventory_df.head(20)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 676 + }, + "id": "ge0oIK1Qp680", + "outputId": "64eae5d3-989d-48d0-bafe-01b86c511b88" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Description Category encoded_cat\n", + "0 Seplat Soccer Tournament Service 1\n", + "1 Seplat Decluttering Exercise Service 1\n", + "2 Independent Fire Water Systems Material 0\n", + "3 Fire Extinguishers Material 0\n", + "5 Engineering Design Service 1\n", + "7 Supply and installation of Braithwaite Pitched... Service 1\n", + "8 Foundation & Structural Works Service 1\n", + "9 Borehole Drilling & Pipe Works Service 1\n", + "10 Procurement & Installation - Submersible Pump Service 1\n", + "11 Procurement & Installation - Booster Pump Service 1\n", + "12 Performance & Quality Testing Service 1\n", + "14 Shield, Citadel Fencing, Gates & Barb wires Material 0\n", + "15 Pre-Commissioning & Commissioning Service 1\n", + "16 Cashes Material 0\n", + "17 Demobilisation Service 1\n", + "18 Materials Material 0\n", + "19 Fire Fighting Equipment/Facilities Material 0\n", + "20 Purchase of fire truck Service 1\n", + "21 Purchase of water tanker Service 1\n", + "22 Fire Truck Material 0" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DescriptionCategoryencoded_cat
0Seplat Soccer TournamentService1
1Seplat Decluttering ExerciseService1
2Independent Fire Water SystemsMaterial0
3Fire ExtinguishersMaterial0
5Engineering DesignService1
7Supply and installation of Braithwaite Pitched...Service1
8Foundation & Structural WorksService1
9Borehole Drilling & Pipe WorksService1
10Procurement & Installation - Submersible PumpService1
11Procurement & Installation - Booster PumpService1
12Performance & Quality TestingService1
14Shield, Citadel Fencing, Gates & Barb wiresMaterial0
15Pre-Commissioning & CommissioningService1
16CashesMaterial0
17DemobilisationService1
18MaterialsMaterial0
19Fire Fighting Equipment/FacilitiesMaterial0
20Purchase of fire truckService1
21Purchase of water tankerService1
22Fire TruckMaterial0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "source": [ + "data_texts = inventory_df[\"Description\"].to_list() # Features (not-tokenized yet)\n", + "data_labels = inventory_df[\"encoded_cat\"].to_list() # Lables" + ], + "metadata": { + "id": "tosKqNrXqFuo" + }, + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Split Train and Validation data\n", + "train_texts, val_texts, train_labels, val_labels = train_test_split(data_texts, data_labels, test_size=0.2, random_state=0, shuffle=True)\n", + "\n", + "# Keep some data for inference (testing)\n", + "train_texts, test_texts, train_labels, test_labels = train_test_split(train_texts, train_labels, test_size=0.01, random_state=0, shuffle=True)" + ], + "metadata": { + "id": "uKO-tVvjqPMw" + }, + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')\n", + "train_encodings = tokenizer(train_texts, truncation=True, padding=True)\n", + "val_encodings = tokenizer(val_texts, truncation=True, padding=True)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 113, + "referenced_widgets": [ + "0ad112e40250417e85f106bffa14df8f", + "7ab245d570624afba3926b35cc875b8e", + "da6859c90d2745c88632291a4ccd3d9e", + "327ed7c84f3346eca8af68188dcdf365", + "3cf0fd0b5af147fb8a99132a155513ea", + "d1374a3155744320b7f7f3ba961706fa", + "327bc27bfb1648c69f92721827768bc1", + "a6d43b466c844c9eae33583736916af2", + "c501c3a920174a2ea2c9a5bfcb6b7a3b", + "b1cd42c159864367a1853ef3d1a49d13", + "d137a213a2164e928a6d28c9e71d6e1a", + "3f323bc887d8491c9c27cb51141e1f37", + "2b7f6d4e6e2a4c10b294ebcf1e713091", + "07c73767acfb41378ae4ad9521f1b12e", + "a0275bf80859495aa4c930dda180fcd8", + "14c595fa8fa74d5097595c26e679601d", + "016ca35dedbd4058adccee79b6d85c48", + "9a2412467f9942ec931d5c9a5f4d1a1f", + "e66c88b720934062af8813019e7a6a97", + "f2f938ef23c747789bfe4e3f06430f15", + "c8530a14813e4283bb08e764cc27cfff", + "c5821978dab8402a83286767f2d7b616", + "2a4fc261dd2744be80de392346b77a13", + "904a8a6cdf7242a4b55d0f1440212275", + "b5ece9f04eab43d592afa62f96cb2c63", + "d777dbb81ace4eca97a21fb16d554b7b", + "32c19886fff849529aaf960cac7efb1a", + "2742b24a126743a5ac88260b1e102124", + "874129ba70634c40aeb1588d2e6224be", + "4d690563273a4eaa8bce398a9bd8dcb0", + "73adbaf455914f20bc4f6ac8529554ac", + "196c83b6729b4f2287fdec3e9946ceef", + "f56709e754e841b2bd064ad57b9d7d94" + ] + }, + "id": "5mer7B1ZqWAz", + "outputId": "53fe23ee-c27e-4f4a-924c-1a94a05c018c" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/232k [00:00" + ] + }, + "metadata": {}, + "execution_count": 40 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.callbacks import EarlyStopping\n", + "\n", + "early_stopping = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)\n", + "\n", + "model.fit(train_dataset.shuffle(1000).batch(16),\n", + " epochs=3,\n", + " batch_size=16,\n", + " validation_data=val_dataset.shuffle(1000).batch(16),\n", + " callbacks=[early_stopping])\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-xPU5Hqo6BmG", + "outputId": "a851c373-cbb3-41ea-d4a1-448f3f2d3ec1" + }, + "execution_count": 46, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1/3\n", + "1468/1468 [==============================] - 160s 109ms/step - loss: 0.0285 - accuracy: 0.9908 - val_loss: 0.1021 - val_accuracy: 0.9764\n", + "Epoch 2/3\n", + "1468/1468 [==============================] - 160s 109ms/step - loss: 0.0254 - accuracy: 0.9915 - val_loss: 0.0947 - val_accuracy: 0.9757\n", + "Epoch 3/3\n", + "1468/1468 [==============================] - 161s 110ms/step - loss: 0.0221 - accuracy: 0.9924 - val_loss: 0.1318 - val_accuracy: 0.9755\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 46 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Display the model's architecture\n", + "model.summary()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Rv2UrAcczgQn", + "outputId": "a07b4512-2ed2-4dc5-b0b4-85142736424a" + }, + "execution_count": 47, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Model: \"tf_distil_bert_for_sequence_classification\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " distilbert (TFDistilBertMai multiple 66362880 \n", + " nLayer) \n", + " \n", + " pre_classifier (Dense) multiple 590592 \n", + " \n", + " classifier (Dense) multiple 3845 \n", + " \n", + " dropout_19 (Dropout) multiple 0 \n", + " \n", + "=================================================================\n", + "Total params: 66,957,317\n", + "Trainable params: 66,957,317\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.models import load_model" + ], + "metadata": { + "id": "7RZZH0Rh0dfM" + }, + "execution_count": 48, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "save_directory = \"/content/drive/MyDrive/Inventory/tensorflow_model_3\" # change this to your preferred location\n", + "\n", + "model.save_pretrained(save_directory)\n", + "tokenizer.save_pretrained(save_directory)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "lVtrG2kp0qPA", + "outputId": "f3b1a00e-314b-4892-cca1-23dda0c86cfc" + }, + "execution_count": 49, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "('/content/drive/MyDrive/Inventory/tensorflow_model_3/tokenizer_config.json',\n", + " '/content/drive/MyDrive/Inventory/tensorflow_model_3/special_tokens_map.json',\n", + " '/content/drive/MyDrive/Inventory/tensorflow_model_3/vocab.txt',\n", + " '/content/drive/MyDrive/Inventory/tensorflow_model_3/added_tokens.json')" + ] + }, + "metadata": {}, + "execution_count": 49 + } + ] + }, + { + "cell_type": "code", + "source": [ + "loaded_tokenizer = DistilBertTokenizer.from_pretrained(save_directory)\n", + "loaded_model = TFDistilBertForSequenceClassification.from_pretrained(save_directory)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "aU3bCMwJ07Qt", + "outputId": "08ae763b-4557-4023-de26-fb145d9eec02" + }, + "execution_count": 50, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Some layers from the model checkpoint at /content/drive/MyDrive/Inventory/tensorflow_model_3 were not used when initializing TFDistilBertForSequenceClassification: ['dropout_19']\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/drive/MyDrive/Inventory/tensorflow_model_3 and are newly initialized: ['dropout_59']\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": [ + "test_text = test_texts[10]\n", + "test_text" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "id": "-lSXb0Z31Xgm", + "outputId": "36b6e1b6-0a4e-4d20-ee28-1e3aafa6de99" + }, + "execution_count": 51, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'Provide, Mix, Place And Compact Grade 40 Concrete Pile'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 51 + } + ] + }, + { + "cell_type": "code", + "source": [ + "test_text = ['Fire Truck']" + ], + "metadata": { + "id": "jxF2ph_v6jcd" + }, + "execution_count": 60, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "predict_input = loaded_tokenizer.encode(test_text,\n", + " truncation=True,\n", + " padding=True,\n", + " return_tensors=\"tf\")\n", + "\n", + "output = loaded_model(predict_input)[0]\n", + "\n", + "prediction_value = tf.argmax(output, axis=1).numpy()[0]\n", + "prediction_value" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "lxDdupZ41rO5", + "outputId": "59fd370b-2ca2-4093-ee26-eda44cdbe91c" + }, + "execution_count": 61, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "1" + ] + }, + "metadata": {}, + "execution_count": 61 + } + ] + }, + { + "cell_type": "code", + "source": [ + "predict_input = loaded_tokenizer.encode(test_text,\n", + " truncation=True,\n", + " padding=True,\n", + " return_tensors=\"tf\")\n", + "\n", + "output = loaded_model(predict_input)[0]\n", + "\n", + "prediction_value = tf.argmax(output, axis=1).numpy()[0]\n", + "\n", + "# Convert numeric prediction to category label\n", + "if prediction_value == 0:\n", + " prediction_label = \"Material\"\n", + "else:\n", + " prediction_label = \"Service\" # Handle unexpected values if necessary\n", + "\n", + "print(\"Predicted Category:\", prediction_label)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QeTzY6Dr3CoQ", + "outputId": "a0b7bdca-1734-489f-8d42-d77b577eed2c" + }, + "execution_count": 62, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Predicted Category: Service\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "def predict_category(text):\n", + "\n", + " predict_input = loaded_tokenizer.encode(text,\n", + " truncation=True,\n", + " padding=True,\n", + " return_tensors=\"tf\")\n", + "\n", + " output = loaded_model(predict_input)[0]\n", + "\n", + " prediction_value = tf.argmax(output, axis=1).numpy()[0]\n", + "\n", + " return prediction_value\n", + "# -----------------------------------------------------\n", + "y_pred = []\n", + "for texts in test_texts:\n", + " y_pred.append(predict_category(texts))\n", + "# -------------------------------------------\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.metrics import classification_report\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "confusion = confusion_matrix(test_labels, y_pred)\n", + "\n", + "plt.figure(figsize=(8, 6))\n", + "sns.set(font_scale=1.2)\n", + "sns.heatmap(confusion, annot=True, fmt=\"d\", cmap=\"Blues\", cbar=False, square=True,\n", + " xticklabels=[\"Material\", \"Service\"], yticklabels=[\"Material\", \"Service\"])\n", + "plt.xlabel('Predicted')\n", + "plt.ylabel('True')\n", + "plt.title('Confusion Matrix')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 578 + }, + "id": "i1YHMGYpAnjj", + "outputId": "b5ebd2f8-a567-4dcb-9ae6-8bb42d5646a5" + }, + "execution_count": 63, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhkAAAIxCAYAAADg5arQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFJklEQVR4nO3deXxN1/7/8feRiCCGxJwQgp4TxBjzkBKqVTTmWyrodKsVbsdbWh1uJ7+2OhFVbl0zrSnGltZQU81cQ1FKDYmpSUwhkWn//nBzvj1yEJGdc1Kv5+PRR5211t77cyLkba2197EYhmEIAAAgjxVydQEAAOCviZABAABMQcgAAACmIGQAAABTEDIAAIApCBkAAMAUhAwAAGAKQgYAADAFIQMAAJiCkAHcg6ZNm6aHH35Y9erVk81m05QpU0y/Znh4uMLDw02/zr3AZrMpMjLS1WUAt0XIAEx05MgRvfvuu+rSpYtCQ0MVEhKi1q1b6+9//7vmzp2r1NTUfK9p2bJlev/991WkSBENHDhQUVFRatCgQb7X4Q7Cw8Nls9lks9m0adOmm44bMWKEfdzYsWPv6ppbtmzJk/MABYGnqwsA/qqio6M1btw4ZWZmqmHDhurevbuKFSum+Ph4bd26VSNHjtTs2bO1YMGCfK1rzZo1kqSvvvpKFSpUyLfr5sdsSW55enpq3rx5atGiRba+pKQkff/99/L09FR6eroLqsvuu+++U9GiRV1dBnBbhAzABF999ZXGjh2rSpUq6YsvvlD9+vWzjVmzZo3+85//5Htt586dk6R8DRiSFBgYmK/XuxNt27bVDz/8oPPnz8vX19ehb/HixUpOTtYDDzygH3/80UUVOqpRo4arSwByhOUSII/FxsYqOjpahQsX1sSJE50GDElq166dJk2alK39u+++02OPPabQ0FDVq1dPXbt21YQJE5wurWTtc7h69ao+/PBDtW3bViEhIXrggQc0ceJE/flDlseOHSubzaYtW7ZIkn3632az2eu22WwaPny403ojIyPtY7MYhqGYmBg9+uijat68uerWrav7779fTz75pL777juntd4oNTVVEydOVNeuXVW/fn01atRI/fr1y3b8jTXGxsbqhRdeULNmzVS3bl316NHDPktzp/r06aPU1FQtWrQoW9/cuXNVqVIltWnTxumxv//+u0aPHq0ePXqoefPm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/R48eFB///vf1aRJE4WGhkq6+Z6MWbNm6cknn1RYWJhCQkLUokULDR06VIcOHcr9Fw3IJ8eOHZMktWjRwml/uXLlHF6fOHFCw4cPV+vWrRUSEqKwsDC9/fbbSkxMdBg3duxY2Ww2/fbbb/roo4/Url071a1bV99//7369u2r0NBQpaSkZLve6dOnVatWLb3yyiv2tpvtyTh48KBefPFFey1t2rTRs88+q3379uWqZuQPZjKQ53r37q3XXntNv/76q2w2myRp0aJFysjIUM+ePbV161aH8Vu3btWWLVvUtm1bVa5cWampqVq7dq0++ugjnTx5Um+//bak67Mk6enp+uqrr/S3v/3NHgjKli1rP9eYMWM0btw4NWvWTFFRUSpSpIg2bNigkSNH6vjx43r55Zcdrn369GlFRkaqQ4cOevHFFxUfH3/L9/b111+rfv36euyxx+Tr66tjx45p3rx52rhxoxYuXKjAwMC7/fIBpsn6/lywYIFefvlleXre/EfAgQMHFBkZKW9vb/Xs2VMBAQE6duyYZs+erU2bNmnevHkqUaKEwzEvv/yyPDw81K9fPxUrVkxBQUHq0aOHRo4cqR9++EGPPPKIw/iYmBhlZmaqR48et6x77dq1ioqKUuHChdWrVy9Vr15dFy5c0LZt27Rr1y6FhITkumaYzADywObNmw2r1WqMGzfOuHLlitGwYUPjvffes/c//PDDxhNPPGEYhmH079/fqFWrlr3vypUrTs/54osvGrVq1TLOnTuX7Trz58/PNv6XX34xbDab8e6772bre+edd4zg4GDjxIkT9rZ27doZVqvVmDVrVrbxJ0+eNKxWqzFmzBiHdme1Hjp0yKhTp47x9ttvO7T379/faNeundP3BrjCiRMnjNDQUMNqtRotWrQwhg4dakycONHYvn27kZGR4TA2IiLCCA8PN86fP+/Qvnv3bqNWrVrG2LFj7W1jxowxrFar0bdvXyM1NdVh/OXLl4369esbgwYNylbPAw88YLRr187IzMy0t7Vr187o37+//fXVq1eN5s2bG6GhoQ5/frP8ue47qRn5g+US5LlixYqpc+fOWrx4sVJTU7Vz50799ttv6tWr103HZ0lNTdWFCxeUmJioNm3aKCMjI9t06M0sWbJEhmGoV69eSkxMdPgvPDxcmZmZ+vnnnx2OKV26tPr06XNH7026fqdM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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "print(classification_report(test_labels, y_pred))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "JsW6r9DnCrfV", + "outputId": "fea175c7-4c8e-4b47-abbb-5305c7762067" + }, + "execution_count": 66, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.98 0.99 95\n", + " 1 0.99 1.00 0.99 143\n", + "\n", + " accuracy 0.99 238\n", + " macro avg 0.99 0.99 0.99 238\n", + "weighted avg 0.99 0.99 0.99 238\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Create a new column in the original DataFrame\n", + "inventory_df['Predictions'] = prediction_value" + ], + "metadata": { + "id": "7-0ABls45jfC" + }, + "execution_count": 67, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "inventory_df.head(50)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "ZXxMG3rxEriH", + "outputId": "802b6258-93d6-42ef-dc20-52db3046d192" + }, + "execution_count": 69, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Description Category encoded_cat \\\n", + "0 Seplat Soccer Tournament Service 1 \n", + "1 Seplat Decluttering Exercise Service 1 \n", + "2 Independent Fire Water Systems Material 0 \n", + "3 Fire Extinguishers Material 0 \n", + "5 Engineering Design Service 1 \n", + "7 Supply and installation of Braithwaite Pitched... Service 1 \n", + "8 Foundation & Structural Works Service 1 \n", + "9 Borehole Drilling & Pipe Works Service 1 \n", + "10 Procurement & Installation - Submersible Pump Service 1 \n", + "11 Procurement & Installation - Booster Pump Service 1 \n", + "12 Performance & Quality Testing Service 1 \n", + "14 Shield, Citadel Fencing, Gates & Barb wires Material 0 \n", + "15 Pre-Commissioning & Commissioning Service 1 \n", + "16 Cashes Material 0 \n", + "17 Demobilisation Service 1 \n", + "18 Materials Material 0 \n", + "19 Fire Fighting Equipment/Facilities Material 0 \n", + "20 Purchase of fire truck Service 1 \n", + "21 Purchase of water tanker Service 1 \n", + "22 Fire Truck Material 0 \n", + "23 Rapid Intervention Vehicle Material 0 \n", + "24 Water tanker Material 0 \n", + "25 Custom & Excise duties (if applicable) Service 1 \n", + "26 Frieighting/Shipping Cost (if applicable) Service 1 \n", + "27 Factory Acceptance Test Service 1 \n", + "28 Location Acceptance Test Service 1 \n", + "29 Two years maintenance spares (note 1) Service 1 \n", + "30 Other Taxes (if applicable) Service 1 \n", + "31 Fire Hose Material 0 \n", + "32 Diffuser branch pipe Material 0 \n", + "33 Foam making branch pipe Material 0 \n", + "34 Fire Bat Material 0 \n", + "35 Procure – 6kg DCP Fire Extinguisher Service 1 \n", + "36 Procure – 9kg DCP Fire Extinguisher Service 1 \n", + "37 Procure – 50kg DCP Fire Extinguisher Service 1 \n", + "38 Procure – 75kg DCP Fire Extinguisher Service 1 \n", + "39 Procure – 5kg CO2 Fire Extinguisher Service 1 \n", + "40 Procure – 12kg DCP Fire Extinguisher Service 1 \n", + "41 Uninterrupted Power Supply (UPS) Material 0 \n", + "42 Conventional smoke detector Material 0 \n", + "43 Conventional heat detector Material 0 \n", + "44 Conventional MCP ( Manual Call Point ) Material 0 \n", + "45 Conventional sounder strobe/ bell Material 0 \n", + "46 Fire resistant cable for the installation/ int... Material 0 \n", + "48 Screw nails for fixing of trucking Material 0 \n", + "49 Fishing peg for fixing of trucking Material 0 \n", + "50 Termination boxes for alarm connection Material 0 \n", + "51 Conventional 4 zone GST fire alarm panel Material 0 \n", + "52 Purchase of new manual winding alarm siring bl... Service 1 \n", + "54 25 meters Automatic retractable Fire hose reel Material 0 \n", + "\n", + " Predictions \n", + "0 1 \n", + "1 1 \n", + "2 1 \n", + "3 1 \n", + "5 1 \n", + "7 1 \n", + "8 1 \n", + "9 1 \n", + "10 1 \n", + "11 1 \n", + "12 1 \n", + "14 1 \n", + "15 1 \n", + "16 1 \n", + "17 1 \n", + "18 1 \n", + "19 1 \n", + "20 1 \n", + "21 1 \n", + "22 1 \n", + "23 1 \n", + "24 1 \n", + "25 1 \n", + "26 1 \n", + "27 1 \n", + "28 1 \n", + "29 1 \n", + "30 1 \n", + "31 1 \n", + "32 1 \n", + "33 1 \n", + "34 1 \n", + "35 1 \n", + "36 1 \n", + "37 1 \n", + "38 1 \n", + "39 1 \n", + "40 1 \n", + "41 1 \n", + "42 1 \n", + "43 1 \n", + "44 1 \n", + "45 1 \n", + "46 1 \n", + "48 1 \n", + "49 1 \n", + "50 1 \n", + "51 1 \n", + "52 1 \n", + "54 1 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DescriptionCategoryencoded_catPredictions
0Seplat Soccer TournamentService11
1Seplat Decluttering ExerciseService11
2Independent Fire Water SystemsMaterial01
3Fire ExtinguishersMaterial01
5Engineering DesignService11
7Supply and installation of Braithwaite Pitched...Service11
8Foundation & Structural WorksService11
9Borehole Drilling & Pipe WorksService11
10Procurement & Installation - Submersible PumpService11
11Procurement & Installation - Booster PumpService11
12Performance & Quality TestingService11
14Shield, Citadel Fencing, Gates & Barb wiresMaterial01
15Pre-Commissioning & CommissioningService11
16CashesMaterial01
17DemobilisationService11
18MaterialsMaterial01
19Fire Fighting Equipment/FacilitiesMaterial01
20Purchase of fire truckService11
21Purchase of water tankerService11
22Fire TruckMaterial01
23Rapid Intervention VehicleMaterial01
24Water tankerMaterial01
25Custom & Excise duties (if applicable)Service11
26Frieighting/Shipping Cost (if applicable)Service11
27Factory Acceptance TestService11
28Location Acceptance TestService11
29Two years maintenance spares (note 1)Service11
30Other Taxes (if applicable)Service11
31Fire HoseMaterial01
32Diffuser branch pipeMaterial01
33Foam making branch pipeMaterial01
34Fire BatMaterial01
35Procure – 6kg DCP Fire ExtinguisherService11
36Procure – 9kg DCP Fire ExtinguisherService11
37Procure – 50kg DCP Fire ExtinguisherService11
38Procure – 75kg DCP Fire ExtinguisherService11
39Procure – 5kg CO2 Fire ExtinguisherService11
40Procure – 12kg DCP Fire ExtinguisherService11
41Uninterrupted Power Supply (UPS)Material01
42Conventional smoke detectorMaterial01
43Conventional heat detectorMaterial01
44Conventional MCP ( Manual Call Point )Material01
45Conventional sounder strobe/ bellMaterial01
46Fire resistant cable for the installation/ int...Material01
48Screw nails for fixing of truckingMaterial01
49Fishing peg for fixing of truckingMaterial01
50Termination boxes for alarm connectionMaterial01
51Conventional 4 zone GST fire alarm panelMaterial01
52Purchase of new manual winding alarm siring bl...Service11
5425 meters Automatic retractable Fire hose reelMaterial01
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 69 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from transformers import TFDistilBertForSequenceClassification, TFTrainer, TFTrainingArguments\n", + "\n", + "training_args = TFTrainingArguments(\n", + " output_dir='./results', # output directory\n", + " num_train_epochs=3, # total number of training epochs\n", + " per_device_train_batch_size=16, # batch size per device during training\n", + " per_device_eval_batch_size=64, # batch size for evaluation\n", + " warmup_steps=500, # number of warmup steps for learning rate scheduler\n", + " weight_decay=0.01, # strength of weight decay\n", + " eval_steps = 10,\n", + " logging_dir='./logs', # directory for storing logs\n", + ")\n", + "\n", + "with training_args.strategy.scope():\n", + " trainer_model = TFDistilBertForSequenceClassification.from_pretrained(\"distilbert-base-uncased\", num_labels=2)\n", + "\n", + "trainer = TFTrainer(\n", + " model=trainer_model, # the instantiated 🤗 Transformers model to be trained\n", + " args=training_args, # training arguments, defined above\n", + " train_dataset=train_dataset, # training dataset\n", + " eval_dataset=val_dataset, # evaluation dataset\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zs8uB4PpF-_F", + "outputId": "13e5614d-32bf-4f31-987c-9cc386fcf248" + }, + "execution_count": 74, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Some weights of the PyTorch model were not used when initializing the TF 2.0 model TFDistilBertForSequenceClassification: ['vocab_projector.bias', 'vocab_layer_norm.bias', 'vocab_transform.weight', 'vocab_transform.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": [ + "trainer.train()" + ], + "metadata": { + "id": "4HzbWwdLF_r8" + }, + "execution_count": 75, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "trainer.evaluate()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zzlYOo3DIoSi", + "outputId": "22167e9f-b636-4c2d-8c66-4bb80054a8e4" + }, + "execution_count": 76, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'eval_loss': 0.06668269249700731}" + ] + }, + "metadata": {}, + "execution_count": 76 + } + ] + }, + { + "cell_type": "code", + "source": [ + "save_directory = \"/content/drive/MyDrive/Inventory/transformers_model_1\" # change this to your preferred location\n", + "\n", + "model.save_pretrained(save_directory)\n", + "tokenizer.save_pretrained(save_directory)" + ], + "metadata": { + "id": "_U5tIDqVIu9E" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "loaded_tokenizer = DistilBertTokenizer.from_pretrained(save_directory)\n", + "loaded_model = TFDistilBertForSequenceClassification.from_pretrained(save_directory)" + ], + "metadata": { + "id": "P9v0bRnuIxnP" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file