{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"datalore":{"computation_mode":"JUPYTER","package_manager":"pip","base_environment":"default","packages":[],"report_row_ids":[],"version":3},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":61542,"databundleVersionId":7516023,"sourceType":"competition"},{"sourceId":2468672,"sourceType":"datasetVersion","datasetId":1455358},{"sourceId":6977472,"sourceType":"datasetVersion","datasetId":4005256}],"dockerImageVersionId":30648,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# LLM - Detect AI Generated Text","metadata":{"datalore":{"node_id":"Pa2yxouvTjqcDsgCYUzPjr","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"markdown","source":"This competition challenges participants to develop a machine learning model that can accurately detect whether an essay was written by a student or an LLM. The competition dataset comprises a mix of student-written essays and essays generated by a variety of LLMs.","metadata":{}},{"cell_type":"markdown","source":"**Evaluation:**\nSubmissions are evaluated on area under the ROC curve between the predicted probability and the observed target.","metadata":{}},{"cell_type":"markdown","source":"## 1. Import libraries","metadata":{"datalore":{"node_id":"ek6n1GGlnkNFGIJ0DB0C1g","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"code","source":"!pip install datasets==2.15","metadata":{"datalore":{"node_id":"gLJbvMXVqhcKYPln9YBRIq","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:12:50.593215Z","iopub.execute_input":"2024-02-07T16:12:50.593867Z","iopub.status.idle":"2024-02-07T16:13:03.047070Z","shell.execute_reply.started":"2024-02-07T16:12:50.593836Z","shell.execute_reply":"2024-02-07T16:13:03.045794Z"},"trusted":true},"execution_count":44,"outputs":[{"name":"stderr","text":"huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\nTo disable this warning, you can either:\n\t- Avoid using `tokenizers` before the fork if possible\n\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n","output_type":"stream"},{"name":"stdout","text":"Requirement already satisfied: datasets==2.15 in /opt/conda/lib/python3.10/site-packages (2.15.0)\nRequirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (1.24.4)\nRequirement already satisfied: pyarrow>=8.0.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (11.0.0)\nRequirement already satisfied: pyarrow-hotfix in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (0.6)\nRequirement already satisfied: dill<0.3.8,>=0.3.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (0.3.7)\nRequirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (2.1.4)\nRequirement already satisfied: requests>=2.19.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (2.31.0)\nRequirement already satisfied: tqdm>=4.62.1 in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (4.66.1)\nRequirement already satisfied: xxhash in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (3.4.1)\nRequirement already satisfied: multiprocess in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (0.70.15)\nRequirement already satisfied: fsspec<=2023.10.0,>=2023.1.0 in /opt/conda/lib/python3.10/site-packages (from fsspec[http]<=2023.10.0,>=2023.1.0->datasets==2.15) (2023.10.0)\nRequirement already satisfied: aiohttp in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (3.9.1)\nRequirement already satisfied: huggingface-hub>=0.18.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (0.20.3)\nRequirement already satisfied: packaging in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (21.3)\nRequirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from datasets==2.15) (6.0.1)\nRequirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.15) (23.2.0)\nRequirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.15) (6.0.4)\nRequirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.15) (1.9.3)\nRequirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.15) (1.4.1)\nRequirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.15) (1.3.1)\nRequirement already satisfied: async-timeout<5.0,>=4.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.15) (4.0.3)\nRequirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.18.0->datasets==2.15) (3.13.1)\nRequirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.18.0->datasets==2.15) (4.9.0)\nRequirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.10/site-packages (from packaging->datasets==2.15) (3.1.1)\nRequirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.15) (3.3.2)\nRequirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.15) (3.6)\nRequirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.15) (1.26.18)\nRequirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.15) (2023.11.17)\nRequirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets==2.15) (2.8.2)\nRequirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets==2.15) (2023.3.post1)\nRequirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets==2.15) (2023.4)\nRequirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas->datasets==2.15) (1.16.0)\n","output_type":"stream"}]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport re\n\nfrom transformers import PushToHubCallback\nfrom transformers import AutoTokenizer, DataCollatorWithPadding\nfrom transformers import TFAutoModelForSequenceClassification\nfrom tensorflow.keras.optimizers.schedules import PolynomialDecay\nfrom tensorflow.keras.optimizers import Adam\nimport tensorflow as tf\nfrom keras.callbacks import EarlyStopping\nimport datasets\n\nfrom sklearn.metrics import ConfusionMatrixDisplay\nfrom sklearn.metrics import classification_report, f1_score\n","metadata":{"datalore":{"node_id":"0tAJiErffFXiL5lrISxce7","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:03.049654Z","iopub.execute_input":"2024-02-07T16:13:03.049987Z","iopub.status.idle":"2024-02-07T16:13:03.059305Z","shell.execute_reply.started":"2024-02-07T16:13:03.049953Z","shell.execute_reply":"2024-02-07T16:13:03.058441Z"},"trusted":true},"execution_count":45,"outputs":[]},{"cell_type":"code","source":"from huggingface_hub import notebook_login\n\nnotebook_login()","metadata":{"execution":{"iopub.status.busy":"2024-02-07T16:13:03.060453Z","iopub.execute_input":"2024-02-07T16:13:03.060739Z","iopub.status.idle":"2024-02-07T16:13:03.097365Z","shell.execute_reply.started":"2024-02-07T16:13:03.060718Z","shell.execute_reply":"2024-02-07T16:13:03.096453Z"},"trusted":true},"execution_count":46,"outputs":[{"output_type":"display_data","data":{"text/plain":"VBox(children=(HTML(value='
","image/png":"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zaswknTdddfJ399f33333R/OExISorvvvttsq1Onjh566CGdPn1aGzdurIbV/MowDH3wwQcaMGCADMPQiRMnzC0mJkYFBQXasWOHOX7SpElq166d4uPj9cADD6h79+6Vvh6/JzAwUEVFRUpLS6u2+gFXQCACLOD06dMO4eNc//M//6Obb75ZI0aMUHBwsAYPHqx33333ksJRkyZNLukG6pYtWzrs22w2XX311b97/0x1OXTokOx2e6WvR5s2bcz+32rWrFmlc9SvX18nT578w3latmwpNzfHH7O/N8+fcfz4ceXn52v+/Plq3Lixw3Y2pObm5prjPT09tWDBAh08eFCnTp3SwoULL/p9qR544AFdc801io2NVdOmTXXvvfde9D1VgCvjHiLgCvfDDz+ooKBAV1999e+O8fHxUXp6utavX69PPvlEq1at0pIlS9SrVy+tWbNG7u7ufzjPpdz3c7F+75d0eXn5RdVUHX5vHsOFHkc/G1zvuecexcfHn3fMb992QZJWr14tSTpz5oz279+v8PDwi5orKChIWVlZWr16tVauXKmVK1dq4cKFGjp0qMMN48DlhitEwBXu7E2xMTExFxzn5uam3r17a8aMGfr66681ZcoUrVu3TuvXr5f0++Gkqvbv3++wbxiGDhw44PBEWP369ZWfn1/p2HOvrlxKbc2bN9fRo0crvYS4d+9es786NG/eXPv37690le3PznO+tTZu3Fj16tVTeXm5oqOjz7sFBQWZ47/66itNnjxZw4cPV6dOnTRixAgVFBT84TxneXp6asCAAXr55Zf17bff6r777tMbb7yhAwcOVGlNgCsgEAFXsHXr1unpp59WeHi44uLifndcXl5epbaOHTtKkoqLiyVJvr6+knTegFIVb7zxhkMoef/993Xs2DHFxsaabVdddZU2b95svrmjJK1YsaLS4/mXUlu/fv1UXl6ul156yaF95syZstlsDvP/Gf369VN2draWLFlitpWVlWnOnDny8/NT9+7dq3ReX1/fSut0d3fXwIED9cEHH2jXrl2Vjjl+/Lj536WlpRo2bJjsdrtmzZql1NRU5eTk6JFHHqk0j1T5a/rTTz857Lu5uZlXn87+WwEuR7xkBlwhVq5cqb1796qsrEw5OTlat26d0tLS1Lx5cy1fvvyC70o9efJkpaenq3///mrevLlyc3P18ssvq2nTpurataukX8NJYGCg5s2bp3r16snX11eRkZEX/VLLuRo0aKCuXbtq+PDhysnJUUpKiq6++mqHtwYYMWKE3n//ffXt21d33XWXvv32W7311lsONzlfam0DBgxQz5499c9//lPff/+9OnTooDVr1mjZsmUaPXp0pXNX1ahRo/Tqq69q2LBhyszMVIsWLfT+++9r06ZNSklJueA9XRcSERGhTz/9VDNmzJDdbld4eLgiIyP13HPPaf369YqMjNTIkSPVtm1b5eXlaceOHfr000/N0PvMM88oKytLa9euVb169XTddddp4sSJeuKJJzRo0CD169fPnEeSHnroIcXExMjd3V2DBw/WiBEjlJeXp169eqlp06Y6dOiQ5syZo44dO5r3RwGXJac+4wbgTzv72P3ZzdPT0wgJCTH++te/GrNmzXJ4vPuscx+7X7t2rXH77bcbdrvd8PT0NOx2u3H33Xcb33zzjcNxy5YtM9q2bWt4eHg4PObevXt3o127duet7/ceu//3v/9tJCcnG0FBQYaPj4/Rv39/49ChQ5WOf/HFF40mTZoYXl5exs0332xs37690jkvVNu5j90bhmGcOnXKeOSRRwy73W7UqVPHaNmypTF9+nSjoqLCYZwkIzExsVJNv/d2AOfKyckxhg8fbjRq1Mjw9PQ02rdvf963BriUx+737t1rdOvWzfDx8TEkOdSRk5NjJCYmGmFhYUadOnWMkJAQo3fv3sb8+fMNwzCMzMxMw8PDw3jwwQcdzllWVmZ06dLFsNvtxsmTJ822Bx980GjcuLFhs9nMfy/vv/++0adPHyMoKMjw9PQ0mjVrZtx3333GsWPHLqp+wFXxWWYAAMDyuIcIAABYHoEIAABYHoEIAABYHoEIAABYHoEIAABYHoEIAABYHm/MeBEqKip09OhR1atXr9o/vgAAANQMwzB06tQp2e32Sh+0fC4C0UU4evSowsLCnF0GAACogiNHjqhp06YXHEMgughn32L/yJEj8vf3d3I1AADgYhQWFiosLOyiPiqHQHQRzr5M5u/vTyACAOAyczG3u3BTNQAAsDwCEQAAsDwCEa5I6enpGjBggOx2u2w2m5YuXerQP2nSJLVu3Vq+vr6qX7++oqOjtWXLFrN/w4YNstls5922bdsmSfr+++/P27958+baXCoAoBoQiHBFKioqUocOHTR37tzz9l9zzTV66aWXtHPnTn3++edq0aKF+vTpo+PHj0uSbrrpJh07dsxhGzFihMLDw9W5c2eHc3366acO4yIiImp8fQCA6uXUQPRHf8X/1v/+7//KZrMpJSXFoT0vL09xcXHy9/dXYGCgEhISdPr0aYcxX331lW655RZ5e3srLCxM06ZNq4HVwJXExsbqmWee0f/7f//vvP1///vfFR0drb/85S9q166dZsyYocLCQn311VeSJE9PT4WEhJhbw4YNtWzZMg0fPrzSzXkNGzZ0GFunTp0aXx8AoHo5NRD90V/xZ3300UfavHmz7HZ7pb64uDjt3r1baWlpWrFihdLT0zVq1Cizv7CwUH369FHz5s2VmZmp6dOna9KkSZo/f361rweXp5KSEs2fP18BAQHq0KHDeccsX75cP/30k4YPH16p77bbblNQUJC6du2q5cuX13S5AICaYLgIScZHH31Uqf2HH34wmjRpYuzatcto3ry5MXPmTLPv66+/NiQZ27ZtM9tWrlxp2Gw248cffzQMwzBefvllo379+kZxcbE5Zvz48UarVq0uuraCggJDklFQUHDpC4PT/d6/rY8//tjw9fU1bDabYbfbja1bt/7uOWJjY43Y2FiHtuPHjxsvvviisXnzZmPr1q3G+PHjDZvNZixbtqy6lwAAqIJL+f3t0vcQVVRUaMiQIRo3bpzatWtXqT8jI0OBgYEO93RER0fLzc3NvEE2IyND3bp1k6enpzkmJiZG+/bt08mTJ887b3FxsQoLCx02XHl69uyprKwsffHFF+rbt6/uuusu5ebmVhr3ww8/aPXq1UpISHBob9SokcaMGaPIyEh16dJFzz33nO655x5Nnz69tpYAAKgmLh2Inn/+eXl4eOihhx46b392draCgoIc2jw8PNSgQQNlZ2ebY4KDgx3GnN0/O+ZcU6dOVUBAgLnxsR1XJl9fX1199dW68cYb9frrr8vDw0Ovv/56pXELFy5Uw4YNddttt/3hOSMjI3XgwIGaKBcAUINcNhBlZmZq1qxZSk1NrfUPVE1OTlZBQYG5HTlypFbnh3NUVFSouLjYoc0wDC1cuFBDhw69qJuls7KyFBoaWlMlAgBqiMt+dMdnn32m3NxcNWvWzGwrLy/X2LFjlZKSou+//14hISGVXuIoKytTXl6eQkJCJEkhISHKyclxGHN2/+yYc3l5ecnLy6s6l4Nadvr0aYcrNQcPHlRWVpYaNGighg0basqUKbrtttsUGhqqEydOaO7cufrxxx915513Opxn3bp1OnjwoEaMGFFpjkWLFsnT01OdOnWSJH344YdasGCB/vWvf9Xs4gAA1c5lA9GQIUMUHR3t0BYTE6MhQ4aYT/pERUUpPz9fmZmZ5nu/rFu3ThUVFYqMjDTH/POf/1Rpaan5F35aWppatWql+vXr1+KKUJu2b9+unj17mvtjxoyRJMXHx2vevHnau3evFi1apBMnTqhhw4bq0qWLPvvss0r3qr3++uu66aab1Lp16/PO8/TTT+vQoUPy8PBQ69attWTJEg0aNKjmFgYAqBE2wzAMZ03+27/iO3XqpBkzZqhnz55q0KCBw5Whs1q0aKHRo0dr9OjRZltsbKxycnI0b948lZaWavjw4ercubPefvttSVJBQYFatWqlPn36aPz48dq1a5fuvfdezZw50+Hx/AspLCxUQECACgoK+HBXAAAuE5fy+9upV4gu9Fd8amrqRZ1j8eLFSkpKUu/eveXm5qaBAwdq9uzZZn9AQIDWrFmjxMRERUREqFGjRpo4ceJFhyEAAHDlc+oVossFV4gAALj8XDZXiOAoYtwbzi4BcEmZ04c6uwQAVziXfeweAACgthCIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5Tk1EKWnp2vAgAGy2+2y2WxaunSp2VdaWqrx48erffv28vX1ld1u19ChQ3X06FGHc+Tl5SkuLk7+/v4KDAxUQkKCTp8+7TDmq6++0i233CJvb2+FhYVp2rRptbE8AABwmXBqICoqKlKHDh00d+7cSn0///yzduzYoQkTJmjHjh368MMPtW/fPt12220O4+Li4rR7926lpaVpxYoVSk9P16hRo8z+wsJC9enTR82bN1dmZqamT5+u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zpanp6cCAwMd2oODg5WdnW2O+W0YOtt/tu98pk6dqqeeeqoaqgcAAJcDl75CdOTIET388MNavHixvL29a23e5ORkFRQUmNuRI0dqbW4AAFD7XDoQZWZmKjc3V9dff708PDzk4eGhjRs3avbs2fLw8FBwcLBKSkqUn5/vcFxOTo5CQkIkSSEhIZWeOju7f3bMuby8vOTv7++wAQCAK5dLB6LevXtr586dysrKMrfOnTsrLi7O/O86depo7dq15jH79u3T4cOHFRUVJUmKiorSzp07lZuba45JS0uTv7+/2rZtW+trAgAArsel7yGqV6+err32Woc2X19fNWzY0GxPSEjQmDFj1KBBA/n7++vBBx9UVFSUbrzxRklSnz591LZtWw0ZMkTTpk1Tdna2nnjiCSUmJsrLy6vW1wQAAFyPSweiizFz5ky5ublp4MCBKi4uVkxMjF5++WWz393dXStWrND999+vqKgo+fr6Kj4+XpMnT3Zi1QAAwJXYDMMwnF2EqyssLFRAQIAKCgpq9H6iiHFv1Ni5gctZ5vShzi4BwGXoUn5/u/Q9RAAAALWBQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACyPQAQAACzPpQPR1KlT1aVLF9WrV09BQUG64447tG/fPocxZ86cUWJioho2bCg/Pz8NHDhQOTk5DmMOHz6s/v37q27dugoKCtK4ceNUVlZWm0sBAAAuzKUD0caNG5WYmKjNmzcrLS1NpaWl6tOnj4qKiswxjzzyiD7++GO999572rhxo44ePaq//e1vZn95ebn69++vkpISffHFF1q0aJFSU1M1ceJEZywJAAC4IJthGIazi7hYx48fV1BQkDZu3Khu3bqpoKBAjRs31ttvv61BgwZJkvbu3as2bdooIyNDN954o1auXKlbb71VR48eVXBwsCRp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"},"metadata":{}}]},{"cell_type":"code","source":"generated_essays = train_essays[train_essays['generated'] == 1]\ngenerated_essays","metadata":{"datalore":{"node_id":"PoYwJW5KtkraGRQiCmLFge","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:03.414733Z","iopub.execute_input":"2024-02-07T16:13:03.415006Z","iopub.status.idle":"2024-02-07T16:13:03.425880Z","shell.execute_reply.started":"2024-02-07T16:13:03.414982Z","shell.execute_reply":"2024-02-07T16:13:03.424958Z"},"trusted":true},"execution_count":52,"outputs":[{"execution_count":52,"output_type":"execute_result","data":{"text/plain":" id prompt_id text \\\n704 82131f68 1 This essay will analyze, discuss and prove one... \n740 86fe4f18 1 I strongly believe that the Electoral College ... \n1262 eafb8a56 0 Limiting car use causes pollution, increases c... \n\n generated text_len \n704 1 1356 \n740 1 1500 \n1262 1 1797 ","text/html":"
\n\n
\n \n
\n
\n
id
\n
prompt_id
\n
text
\n
generated
\n
text_len
\n
\n \n \n
\n
704
\n
82131f68
\n
1
\n
This essay will analyze, discuss and prove one...
\n
1
\n
1356
\n
\n
\n
740
\n
86fe4f18
\n
1
\n
I strongly believe that the Electoral College ...
\n
1
\n
1500
\n
\n
\n
1262
\n
eafb8a56
\n
0
\n
Limiting car use causes pollution, increases c...
\n
1
\n
1797
\n
\n \n
\n
"},"metadata":{}}]},{"cell_type":"code","source":"ax2 = sns.countplot(data=train_essays, x='prompt_id')\nax2.bar_label(ax2.containers[0])\nplt.title('Distribution of prompts');","metadata":{"datalore":{"node_id":"ylPh4tN2nxXxzTwLkufmz4","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:03.430932Z","iopub.execute_input":"2024-02-07T16:13:03.431331Z","iopub.status.idle":"2024-02-07T16:13:03.627755Z","shell.execute_reply.started":"2024-02-07T16:13:03.431287Z","shell.execute_reply":"2024-02-07T16:13:03.626923Z"},"trusted":true},"execution_count":53,"outputs":[{"output_type":"display_data","data":{"text/plain":"
"},"metadata":{}}]},{"cell_type":"markdown","source":"There is only dummy data in test_essays, after submission the text will be replaced with real text.","metadata":{"datalore":{"node_id":"eCoBMveMWE8eAs95Z2g9oA","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"markdown","source":"### Exploring Train Prompts data","metadata":{"datalore":{"node_id":"urZA7FLe9NfAUqNoKjObON","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"code","source":"train_prompts","metadata":{"datalore":{"node_id":"jUDH4BTi5z6rvr59VFk343","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:03.639476Z","iopub.execute_input":"2024-02-07T16:13:03.639753Z","iopub.status.idle":"2024-02-07T16:13:03.654284Z","shell.execute_reply.started":"2024-02-07T16:13:03.639730Z","shell.execute_reply":"2024-02-07T16:13:03.653356Z"},"trusted":true},"execution_count":55,"outputs":[{"execution_count":55,"output_type":"execute_result","data":{"text/plain":" prompt_id prompt_name \\\n0 0 Car-free cities \n1 1 Does the electoral college work? \n\n instructions \\\n0 Write an explanatory essay to inform fellow ci... \n1 Write a letter to your state senator in which ... \n\n source_text \n0 # In German Suburb, Life Goes On Without Cars ... \n1 # What Is the Electoral College? by the Office... ","text/html":"
\n\n
\n \n
\n
\n
prompt_id
\n
prompt_name
\n
instructions
\n
source_text
\n
\n \n \n
\n
0
\n
0
\n
Car-free cities
\n
Write an explanatory essay to inform fellow ci...
\n
# In German Suburb, Life Goes On Without Cars ...
\n
\n
\n
1
\n
1
\n
Does the electoral college work?
\n
Write a letter to your state senator in which ...
\n
# What Is the Electoral College? by the Office...
\n
\n \n
\n
"},"metadata":{}}]},{"cell_type":"code","source":"train_prompts.iloc[0]['instructions']","metadata":{"datalore":{"node_id":"IhBtxcZceIE7zNVgxyRZml","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:03.655312Z","iopub.execute_input":"2024-02-07T16:13:03.655624Z","iopub.status.idle":"2024-02-07T16:13:03.665807Z","shell.execute_reply.started":"2024-02-07T16:13:03.655594Z","shell.execute_reply":"2024-02-07T16:13:03.664903Z"},"trusted":true},"execution_count":56,"outputs":[{"execution_count":56,"output_type":"execute_result","data":{"text/plain":"'Write an explanatory essay to inform fellow citizens about the advantages of limiting car usage. Your essay must be based on ideas and information that can be found in the passage set. Manage your time carefully so that you can read the passages; plan your response; write your response; and revise and edit your response. Be sure to use evidence from multiple sources; and avoid overly relying on one source. Your response should be in the form of a multiparagraph essay. Write your essay in the space provided.'"},"metadata":{}}]},{"cell_type":"markdown","source":"**Prompt_id = 0**\\\n**prompt_name = Car-free cities**\\\n'Write an explanatory essay to inform fellow citizens about the advantages of limiting car usage. Your essay must be based on ideas and information that can be found in the passage set. Manage your time carefully so that you can read the passages; plan your response; write your response; and revise and edit your response. Be sure to use evidence from multiple sources; and avoid overly relying on one source. Your response should be in the form of a multiparagraph essay. Write your essay in the space provided.'","metadata":{"datalore":{"node_id":"YBADwMdIO4pNpI8MUskJT7","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"code","source":"train_prompts.iloc[1]['instructions']","metadata":{"datalore":{"node_id":"slJneLtnk2LCqrwBUMShys","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:03.666700Z","iopub.execute_input":"2024-02-07T16:13:03.666924Z","iopub.status.idle":"2024-02-07T16:13:03.676438Z","shell.execute_reply.started":"2024-02-07T16:13:03.666904Z","shell.execute_reply":"2024-02-07T16:13:03.675611Z"},"trusted":true},"execution_count":57,"outputs":[{"execution_count":57,"output_type":"execute_result","data":{"text/plain":"'Write a letter to your state senator in which you argue in favor of keeping the Electoral College or changing to election by popular vote for the president of the United States. Use the information from the texts in your essay. Manage your time carefully so that you can read the passages; plan your response; write your response; and revise and edit your response. Be sure to include a claim; address counterclaims; use evidence from multiple sources; and avoid overly relying on one source. Your response should be in the form of a multiparagraph essay. Write your response in the space provided.'"},"metadata":{}}]},{"cell_type":"markdown","source":"**Prompt_id = 1**\\\n**prompt_name = Does the electoral college work?**\\\n'Write a letter to your state senator in which you argue in favor of keeping the Electoral College or changing to election by popular vote for the president of the United States. Use the information from the texts in your essay. Manage your time carefully so that you can read the passages; plan your response; write your response; and revise and edit your response. Be sure to include a claim; address counterclaims; use evidence from multiple sources; and avoid overly relying on one source. Your response should be in the form of a multiparagraph essay. Write your response in the space provided.'","metadata":{"datalore":{"node_id":"KFNcrRCeP8O0rBaXUUMvFi","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"markdown","source":"## 3. Loading external dataset","metadata":{"datalore":{"node_id":"jD4ZTKf0EQNPKEX9ic8a5l","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"markdown","source":"Since there are only 3 AI generated essays, I need extra dataset with AI generated text.\\\nLuckily there is such data on Kaggle.","metadata":{"datalore":{"node_id":"Yy2tKqV4xjtf2WiwpLJNx5","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"code","source":"external_essays = pd.read_csv('/kaggle/input/daigt-v2-train-dataset/train_v2_drcat_02.csv')","metadata":{"datalore":{"node_id":"IoEuwVB0cfQC5DSC41JG0V","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:03.677497Z","iopub.execute_input":"2024-02-07T16:13:03.677760Z","iopub.status.idle":"2024-02-07T16:13:04.747705Z","shell.execute_reply.started":"2024-02-07T16:13:03.677738Z","shell.execute_reply":"2024-02-07T16:13:04.746628Z"},"trusted":true},"execution_count":58,"outputs":[]},{"cell_type":"code","source":"external_essays.head(10)","metadata":{"datalore":{"node_id":"ZNPA0op16zbCTzBLwFuwmD","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:04.748974Z","iopub.execute_input":"2024-02-07T16:13:04.749308Z","iopub.status.idle":"2024-02-07T16:13:04.761456Z","shell.execute_reply.started":"2024-02-07T16:13:04.749281Z","shell.execute_reply":"2024-02-07T16:13:04.760478Z"},"trusted":true},"execution_count":59,"outputs":[{"execution_count":59,"output_type":"execute_result","data":{"text/plain":" text label \\\n0 Phones\\n\\nModern humans today are always on th... 0 \n1 This essay will explain if drivers should or s... 0 \n2 Driving while the use of cellular devices\\n\\nT... 0 \n3 Phones & Driving\\n\\nDrivers should not be able... 0 \n4 Cell Phone Operation While Driving\\n\\nThe abil... 0 \n5 Cell phone use should not be legal while drivi... 0 \n6 Phones and Driving\\n\\nDriving is a good way to... 0 \n7 PHONES AND DRIVING\\n\\nIn this world in which w... 0 \n8 People are debating whether if drivers should ... 0 \n9 Texting and driving\\n\\nOver half of drivers in... 0 \n\n prompt_name source RDizzl3_seven \n0 Phones and driving persuade_corpus False \n1 Phones and driving persuade_corpus False \n2 Phones and driving persuade_corpus False \n3 Phones and driving persuade_corpus False \n4 Phones and driving persuade_corpus False \n5 Phones and driving persuade_corpus False \n6 Phones and driving persuade_corpus False \n7 Phones and driving persuade_corpus False \n8 Phones and driving persuade_corpus False \n9 Phones and driving persuade_corpus False ","text/html":"
\n\n
\n \n
\n
\n
text
\n
label
\n
prompt_name
\n
source
\n
RDizzl3_seven
\n
\n \n \n
\n
0
\n
Phones\\n\\nModern humans today are always on th...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
1
\n
This essay will explain if drivers should or s...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
2
\n
Driving while the use of cellular devices\\n\\nT...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
3
\n
Phones & Driving\\n\\nDrivers should not be able...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
4
\n
Cell Phone Operation While Driving\\n\\nThe abil...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
5
\n
Cell phone use should not be legal while drivi...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
6
\n
Phones and Driving\\n\\nDriving is a good way to...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
7
\n
PHONES AND DRIVING\\n\\nIn this world in which w...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
8
\n
People are debating whether if drivers should ...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n
\n
9
\n
Texting and driving\\n\\nOver half of drivers in...
\n
0
\n
Phones and driving
\n
persuade_corpus
\n
False
\n
\n \n
\n
"},"metadata":{}}]},{"cell_type":"code","source":"external_essays['text_len'] = external_essays['text'].apply(len)\nexternal_essays = external_essays.sort_values('text_len')\nexternal_essays","metadata":{"datalore":{"node_id":"HUEkPkK7SPKGYXJXY3XqOc","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:04.762834Z","iopub.execute_input":"2024-02-07T16:13:04.763088Z","iopub.status.idle":"2024-02-07T16:13:04.815853Z","shell.execute_reply.started":"2024-02-07T16:13:04.763066Z","shell.execute_reply":"2024-02-07T16:13:04.814908Z"},"trusted":true},"execution_count":60,"outputs":[{"execution_count":60,"output_type":"execute_result","data":{"text/plain":" text label \\\n41204 In recent years, there has been a growing trend 1 \n40767 Dear Senator,\\n\\nI am writing in support of k... 1 \n41168 Car usage has long been a significant factor ... 1 \n41167 Limiting car usage is a concept that has gain... 1 \n34960 Passage 1:\\n\\nPassage 2:\\n\\nPassage 3:\\n\\nPass... 1 \n... ... ... \n8895 The author did not do a good job at supporting... 0 \n19290 Dear Senator,\\n\\nI favoring of keeping the Ele... 0 \n1772 This passage is about a germany mom from the s... 0 \n2549 Imagen the streets with no cars empty with onl... 0 \n1517 if we look back at time in the united states y... 0 \n\n prompt_name source \\\n41204 Distance learning mistralai/Mistral-7B-Instruct-v0.1 \n40767 Does the electoral college work? mistralai/Mistral-7B-Instruct-v0.1 \n41168 Car-free cities mistralai/Mistral-7B-Instruct-v0.1 \n41167 Car-free cities mistralai/Mistral-7B-Instruct-v0.1 \n34960 Seeking multiple opinions falcon_180b_v1 \n... ... ... \n8895 Exploring Venus persuade_corpus \n19290 Does the electoral college work? persuade_corpus \n1772 Car-free cities persuade_corpus \n2549 Car-free cities persuade_corpus \n1517 Car-free cities persuade_corpus \n\n RDizzl3_seven text_len \n41204 False 48 \n40767 True 272 \n41168 True 273 \n41167 True 304 \n34960 False 314 \n... ... ... \n8895 True 9980 \n19290 True 10309 \n1772 True 11641 \n2549 True 18125 \n1517 True 18322 \n\n[44868 rows x 6 columns]","text/html":"
\n\n
\n \n
\n
\n
text
\n
label
\n
prompt_name
\n
source
\n
RDizzl3_seven
\n
text_len
\n
\n \n \n
\n
41204
\n
In recent years, there has been a growing trend
\n
1
\n
Distance learning
\n
mistralai/Mistral-7B-Instruct-v0.1
\n
False
\n
48
\n
\n
\n
40767
\n
Dear Senator,\\n\\nI am writing in support of k...
","image/png":"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w263Gw0bNjR69uxpBibDMIwTJ04Yf/nLX4y6desaPj4+xh/+8Afj8OHDDtv49ttvjT59+hje3t5GgwYNjLFjxxqlpaUONevXrzc6depk2O1245prrjEWLFhQqZfZs2cbTZs2Nex2u3HjjTcan3766QUdC6GpZsnLyzMkGenp6eZY7dq1jbfeesuhrl69esY///nPs26jpKTEaNiwoTFt2rRKc+PHjzf+/Oc/GwsWLKgUmubNm2dcc801RklJycUfCADgolzI72+bYfzfZ+VxUQoLC+Xv76+CggI+PVcD7Nu3T61bt9b27dvVoUMHSVKvXr1kt9v11ltvKSAgQEuXLlVcXJy++uor8767073//vu6//779d1336lJkybm+Lp16zR06FBlZWXpP//5j0aPHq38/Hxzvm/fvqpXr558fHy0YsUKNWzYUA899JAmTJggd3f3S37sAID/70J+fzv9RnDgcisvL9fo0aN1yy23mIFJkpYuXaoHHnhA9evXV61ateTj46MPPvjgrIFJkv71r38pOjraITD9/PPPGjx4sN55551z/vAdOHBA69at08CBA7V69Wrt27dPf/nLX1RaWqopU6ZU78ECAKoNoQlXnfj4eO3YsUOffPKJw/jTTz+t/Px8ffTRR2rQoIGWL1+u+++/Xx9//LHCwsIcar///nutWbNGS5cudRgfNmyYHnroIXXr1u2c+y8vL1dgYKBef/11ubu7Kzw8XD/88INmzJhBaAIAF8bluWrC5bmaISEhQStWrNDGjRvVokULc3z//v1q1aqVduzYofbt25vjUVFRatWqlebPn++wnWeffVazZ8/WDz/8IA8PD3M8ICBAx48fN9cNw1B5ebnc3d31+uuv65FHHlH37t3l4eGhjz76yKz78MMP1bdvXxUXF8tut1+KQwcAnAWX54AzGIahkSNH6oMPPtCGDRscApMk/frrr5JU6csa3d3dVV5eXmlbCxYsML8c+nQZGRkqKysz11esWKEXXnhBmzdvVuPGjSVJt9xyixYvXqzy8nJzf998840aNWpEYAIAF0ZowlUhPj5eixcv1ooVK1SnTh3za3b8/f3l7e2tNm3aqFWrVnr00Uf14osvqn79+lq+fLlSU1O1cuVKh22tW7dO2dnZGjp0aKX9tG3b1mF969atcnNzc7h3asSIEZozZ45GjRqlkSNHau/e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88svv2jgwIHy8/NTQECA4uLidPz4cYeabdu26bbbbpOXl5dCQ0M1ffr0Sr0sW7ZMbdq0kZeXl8LCwrR69epqP14AAFBzVelM0yOPPPK782+++aal7RQVFaljx4565JFHdN999521pnfv3lqwYIG57unp6TA/cOBAHT58WKmpqSotLdWQIUM0fPhwLV68WJJUWFioXr16KSoqSvPnz9f27dv1yCOPKCAgQMOHD5ckbd68WQMGDFBSUpLuuusuLV68WP369dMXX3yhDh06WDoWAABwZatSaDp69KjDemlpqXbs2KH8/PyzfpHvufTp00d9+vT53RpPT08FBwefdW7Xrl1KSUnR559/ri5dukiSZs+erb59++rFF19USEiIFi1apJKSEr355puy2+1q3769srKy9PLLL5uhadasWerdu7fGjRsnSXr22WeVmpqqOXPmaP78+ZaPBwAAXLmqFJo++OCDSmPl5eUaMWKEWrZsedFNnW7Dhg0KDAxU3bp1dccdd+i5555T/fr1JUkZGRkKCAgwA5MkRUVFyc3NTZ999pn+8Ic/KCMjQ926dZPdbjdroqOj9cILL+jo0aOqW7euMjIylJiY6LDf6OjoSpcLT1dcXKzi4mJzvbCwsJqOGAAAuKJqu6fJzc1NiYmJeuWVV6prk+rdu7feeustpaWl6YUXXlB6err69OmjsrIySVJOTo4CAwMdXlOrVi3Vq1dPOTk5Zk1QUJBDTcX6+Woq5s8mKSlJ/v7+5hIaGnpxBwsAAFxalb+w92z279+vU6dOVdv2HnzwQfPPYWFhuv7669WyZUtt2LBBPXv2rLb9VMWkSZMczk4VFhYSnAAAuIJVKTSdeSnLMAwdPnxYq1atUmxsbLU0djbXXHONGjRooH379qlnz54KDg5WXl6eQ82pU6f0yy+/mPdBBQcHKzc316GmYv18Nee6l0r67V6rM29KBwAAV64qXZ778ssvHZZt27ZJkl566SXNnDmzOvtz8P333+vnn39Wo0aNJEmRkZHKz89XZmamWbNu3TqVl5crIiLCrNm4caNKS0vNmtTUVF133XWqW7euWZOWluawr9TUVEVGRl6yYwEAADVLlc40rV+/vlp2fvz4ce3bt89cz87OVlZWlurVq6d69erpmWeeUf/+/RUcHKz9+/dr/PjxatWqlaKjoyVJbdu2Ve/evTVs2DDNnz9fpaWlSkhI0IMPPqiQkBBJ0kMPPaRnnnlGcXFxmjBhgnbs2KFZs2Y53Hs1atQode/eXS+99JJiYmL07rvvauvWrXr99der5TgBAEDNd1E3gh85ckSffPKJPvnkEx05cuSCX79161Z17txZnTt3lvTbZb/OnTtr8uTJcnd317Zt23TPPffo2muvVVxcnMLDw/Xxxx87XBZbtGiR2rRpo549e6pv37669dZbHcKOv7+/1q5dq+zsbIWHh2vs2LGaPHmy+bgBSbr55pu1ePFivf766+rYsaPee+89LV++nGc0AQAAk80wDONCX1RUVKSRI0fqrbfeUnl5uSTJ3d1dgwYN0uzZs+Xj41Ptjbq6wsJC+fv7q6CgQH5+fpdsP+Hj3rpk2wZqqswZg5zdQrU4OC3M2S0ALqfp5O2XdPsX8vu7SmeaEhMTlZ6erv/973/Kz89Xfn6+VqxYofT0dI0dO7ZKTQMAALiyKt3T9P777+u9995Tjx49zLG+ffvK29tb999/v+bNm1dd/QEAALiEKp1p+vXXXys9DFKSAgMD9euvv150UwAAAK6mSqEpMjJSU6ZM0cmTJ82xEydO6JlnnuFj+gAA4IpUpctzM2fOVO/evdWkSRN17NhRkvTVV1/J09NTa9eurdYGAQAAXEGVQlNYWJj27t2rRYsWaffu3ZKkAQMGaODAgfL29q7WBgEAAFxBlUJTUlKSgoKCNGzYMIfxN998U0eOHNGECROqpTkAAABXUaV7mv7xj3+oTZs2lcbbt2+v+fPnX3RTAAAArqZKoSknJ8f8/rfTNWzYUIcPH77opgAAAFxNlUJTaGioNm3aVGl806ZN5ne+AQAAXEmqdE/TsGHDNHr0aJWWluqOO+6QJKWlpWn8+PE8ERwAAFyRqhSaxo0bp59//ll/+ctfVFJSIkny8vLShAkTNGnSpGptEAAAwBVUKTTZbDa98MILevrpp7Vr1y55e3urdevW8vT0rO7+AAAAXEKVQlMFX19fde3atbp6AQAAcFlVuhEcAADgakNoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACp4amjRs36u6771ZISIhsNpuWL1/uMG8YhiZPnqxGjRrJ29tbUVFR2rt3r0PNL7/8ooEDB8rPz08BAQGKi4vT8ePHHWq2bdum2267TV5eXgoNDdX06dMr9bJs2TK1adNGXl5eCgsL0+rVq6v9eAEAQM3l1NBUVFSkjh07au7cuWednz59ul599VXNnz9fn332mWrXrq3o6GidPHnSrBk4cKB27typ1NRUrVy5Uhs3btTw4cPN+cLCQvXq1UvNmjVTZmamZsyYoalTp+r11183azZv3qwBAwYoLi5OX375pfr166d+/fppx44dl+7gAQBAjWIzDMNwdhOSZLPZ9MEHH6hfv36SfjvLFBISorFjx+qJJ56QJBUUFCgoKEjJycl68MEHtWvXLrVr106ff/65unTpIklKSUlR37599f333yskJETz5s3TX//6V+Xk5Mhut0uSJk6cqOXLl2v37t2SpAceeEBFRUVauXKl2c9NN92kTp06af78+Zb6LywslL+/vwoKCuTn51ddb0sl4ePeumTbBmqqzBmDnN1CtTg4LczZLQAup+nk7Zd0+xfy+9tl72nKzs5WTk6OoqKizDF/f39FREQoIyNDkpSRkaGAgAAzMElSVFSU3Nzc9Nlnn5k13bp1MwOTJEVHR2vPnj06evSoWXP6fipqKvZzNsXFxSosLHRYAADAlctlQ1NOTo4kKSgoyGE8KCjInMvJyVFgYKDDfK1atVSvXj2HmrNt4/R9nKumYv5skpKS5O/vby6hoaEXeogAAKAGcdnQ5OomTZqkgoICczl06JCzWwIAAJeQy4am4OBgSVJubq7DeG5urjkXHBysvLw8h/lTp07pl19+cag52zZO38e5airmz8bT01N+fn4OCwAAuHK5bGhq0aKFgoODlZaWZo4VFhbqs88+U2RkpCQpMjJS+fn5yszMNGvWrVun8vJyRUREmDUbN25UaWmpWZOamqrrrrtOdevWNWtO309FTcV+AAAAnBqajh8/rqysLGVlZUn67ebvrKwsHTx4UDabTaNHj9Zzzz2n//73v9q+fbsGDRqkkJAQ8xN2bdu2Ve/e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JgA11vHjx+Xu7q7MzEy5u7s7zJ0eSDw8PBzmbDabDMMwtyFJ//znPx1CiqRK26xdu7bD+owZMzRr1izNnDlTYWFhql27tkaPHq2SkpLz9n333XfrhRdeqDTXqFEj7du373dfD8A5CE0AXNY111wjDw8Pff7552ratKkkqaCgQN988426deumzp07q6ysTHl5ebrtttuqtI+goCCFhITowIEDGjhw4AW9dtOmTbr33nv15z//WZJUXl6ub775Ru3atTNr7Ha7ysrKHF53ww036P3331fz5s1Vq1bl/4ZbtmwpDw8PffbZZ+ZxHz16VN988426d+9+oYcIoJpwIzgAl1WnTh3FxsZq3LhxWr9+vXbu3Km4uDi5ubnJZrPp2muv1cCBAzVo0CD95z//UXZ2trZs2aKkpCStWrXK8n6eeeYZJSUl6dVXX9U333yj7du3a8GCBXr55Zd/93WtW7dWamqqNm/erF27dunRRx9Vbm6uQ03z5s312Wef6dtvv9VPP/2k8vJyxcfH65dfftGAAQP0+eefa//+/VqzZo2GDBmisrIy+fr6Ki4uTuPGjdO6deu0Y8cODR48WG5u/JcNOBM/gQBc2ssvv6zIyEjdddddioqK0i233GI+GkCSFixYoEGDBmns2LG67rrr1K9fP4czU1YMHTpUb7zxhhYsWKCwsDB1795dycnJatGixe++7qmnntINN9yg6Oho9ejRQ8HBwerXr59DzRNPPCF3d3e1a9dODRs21MGDBxUSEqJNmzaprKxMvXr1UlhYmEaPHq2AgAAzGM2YMUO33Xab7r77bkVFRenWW29VeHj4hb15AKqVzai4sA8ANUBRUZEaN26sl156SXFxcc5uB8BVhHuaALi0L7/8Urt379aNN96ogoICTZs2TZJ07733OrkzAFcbQhMAl/fiiy9qz549stvtCg8P18cff6wGDRo4uy0AVxkuzwEAAFjAjeAAAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFvw/yISOaixCfmEAAAAASUVORK5CYII="},"metadata":{}}]},{"cell_type":"code","source":"df.head()","metadata":{"datalore":{"node_id":"ItJikExfedJp3LE8X7Srha","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:05.254735Z","iopub.execute_input":"2024-02-07T16:13:05.255590Z","iopub.status.idle":"2024-02-07T16:13:05.265677Z","shell.execute_reply.started":"2024-02-07T16:13:05.255533Z","shell.execute_reply":"2024-02-07T16:13:05.264692Z"},"trusted":true},"execution_count":67,"outputs":[{"execution_count":67,"output_type":"execute_result","data":{"text/plain":" text generated\n0 In recent years, there has been a growing trend 1\n1 Dear Senator,\\n\\nI am writing in support of k... 1\n2 Car usage has long been a significant factor ... 1\n3 Limiting car usage is a concept that has gain... 1\n4 Passage 1:\\n\\nPassage 2:\\n\\nPassage 3:\\n\\nPass... 1","text/html":"
\n\n
\n \n
\n
\n
text
\n
generated
\n
\n \n \n
\n
0
\n
In recent years, there has been a growing trend
\n
1
\n
\n
\n
1
\n
Dear Senator,\\n\\nI am writing in support of k...
"},"metadata":{}}]},{"cell_type":"markdown","source":"**Clean text**","metadata":{"datalore":{"node_id":"8978uMqZOlfcnT3mHvQZp1","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"code","source":"df.iloc[7][['text','generated']]","metadata":{"datalore":{"node_id":"3b3ir2r9QMkiwmxPnJ0E5l","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:05.267026Z","iopub.execute_input":"2024-02-07T16:13:05.267368Z","iopub.status.idle":"2024-02-07T16:13:05.279580Z","shell.execute_reply.started":"2024-02-07T16:13:05.267338Z","shell.execute_reply":"2024-02-07T16:13:05.278553Z"},"trusted":true},"execution_count":68,"outputs":[{"execution_count":68,"output_type":"execute_result","data":{"text/plain":"text After researching extensively into different p...\ngenerated 1\nName: 7, dtype: object"},"metadata":{}}]},{"cell_type":"code","source":"def clean_text(text):\n #delete non-alphanumeric characters\n text = re.sub(r\"[^A-Za-z0-9\\s]\", \"\", text)\n #delete extra whitespaces\n text = re.sub(r\"\\s+\", \" \", text)\n #convert to lowercase\n text = text.lower()\n\n return text","metadata":{"datalore":{"node_id":"N1DjNMEJW5CsHvDCHngtmn","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:05.280640Z","iopub.execute_input":"2024-02-07T16:13:05.280937Z","iopub.status.idle":"2024-02-07T16:13:05.289950Z","shell.execute_reply.started":"2024-02-07T16:13:05.280914Z","shell.execute_reply":"2024-02-07T16:13:05.289146Z"},"trusted":true},"execution_count":69,"outputs":[]},{"cell_type":"code","source":"df['text'] = df['text'].map(clean_text)","metadata":{"datalore":{"node_id":"qjp0S2zUgdmaJANVSOwwXv","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:05.291016Z","iopub.execute_input":"2024-02-07T16:13:05.291337Z","iopub.status.idle":"2024-02-07T16:13:16.672977Z","shell.execute_reply.started":"2024-02-07T16:13:05.291313Z","shell.execute_reply":"2024-02-07T16:13:16.672155Z"},"trusted":true},"execution_count":70,"outputs":[]},{"cell_type":"code","source":"df.iloc[7]['text']","metadata":{"execution":{"iopub.status.busy":"2024-02-07T16:13:16.678991Z","iopub.execute_input":"2024-02-07T16:13:16.679353Z","iopub.status.idle":"2024-02-07T16:13:16.685339Z","shell.execute_reply.started":"2024-02-07T16:13:16.679328Z","shell.execute_reply":"2024-02-07T16:13:16.684457Z"},"trusted":true},"execution_count":71,"outputs":[{"execution_count":71,"output_type":"execute_result","data":{"text/plain":"'after researching extensively into different potential career paths i have shortlisted my top 5 options i have read up on the various qualifications responsibilities and other important aspects of each one and weighed them up against my skills and experience now i am planning to discuss my top 5 with my parents and teachers to get their opinions on which one could potentially benefit me the best'"},"metadata":{}}]},{"cell_type":"markdown","source":"## 4. Tokenizing","metadata":{"datalore":{"node_id":"2Tt8LbIyZKzdQgMtl7VNhK","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"code","source":"# checkpoint = '../input/transformers/distilbert-base-uncased'\ncheckpoint = 'distilbert/distilbert-base-uncased-finetuned-sst-2-english'","metadata":{"datalore":{"node_id":"SrkC7QpLgPn1I0cIx9UaA0","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:16.686480Z","iopub.execute_input":"2024-02-07T16:13:16.686807Z","iopub.status.idle":"2024-02-07T16:13:16.698985Z","shell.execute_reply.started":"2024-02-07T16:13:16.686776Z","shell.execute_reply":"2024-02-07T16:13:16.698299Z"},"trusted":true},"execution_count":72,"outputs":[]},{"cell_type":"code","source":"batch_size = 25","metadata":{"execution":{"iopub.status.busy":"2024-02-07T16:13:16.700077Z","iopub.execute_input":"2024-02-07T16:13:16.700702Z","iopub.status.idle":"2024-02-07T16:13:16.711065Z","shell.execute_reply.started":"2024-02-07T16:13:16.700670Z","shell.execute_reply":"2024-02-07T16:13:16.710157Z"},"trusted":true},"execution_count":73,"outputs":[]},{"cell_type":"code","source":"tokenizer = AutoTokenizer.from_pretrained(checkpoint)","metadata":{"datalore":{"node_id":"2X59C8t23MfaAuhJcGqTAB","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:16.712051Z","iopub.execute_input":"2024-02-07T16:13:16.712349Z","iopub.status.idle":"2024-02-07T16:13:16.874897Z","shell.execute_reply.started":"2024-02-07T16:13:16.712325Z","shell.execute_reply":"2024-02-07T16:13:16.874159Z"},"trusted":true},"execution_count":74,"outputs":[]},{"cell_type":"code","source":"def tokenize_and_split(text):\n encoding = tokenizer(\n text[\"text\"],\n truncation=True,\n padding=True,\n max_length=512,\n return_overflowing_tokens=True,\n )\n # Extract mapping between new and old indices\n sample_map = encoding.pop(\"overflow_to_sample_mapping\")\n for key, values in text.items():\n encoding[key] = [values[i] for i in sample_map]\n return encoding","metadata":{"datalore":{"node_id":"Np01F6IxXptsTFbJEtQcVi","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:16.875924Z","iopub.execute_input":"2024-02-07T16:13:16.876226Z","iopub.status.idle":"2024-02-07T16:13:16.881595Z","shell.execute_reply.started":"2024-02-07T16:13:16.876202Z","shell.execute_reply":"2024-02-07T16:13:16.880686Z"},"trusted":true},"execution_count":75,"outputs":[]},{"cell_type":"code","source":"raw_ds = datasets.Dataset.from_pandas(df)\nraw_ds = raw_ds.train_test_split(test_size=0.2)\nraw_ds","metadata":{"datalore":{"node_id":"ok2iNWqKhS3Xr6BgnS8XKL","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:16.882783Z","iopub.execute_input":"2024-02-07T16:13:16.883139Z","iopub.status.idle":"2024-02-07T16:13:17.133386Z","shell.execute_reply.started":"2024-02-07T16:13:16.883084Z","shell.execute_reply":"2024-02-07T16:13:17.132340Z"},"trusted":true},"execution_count":76,"outputs":[{"execution_count":76,"output_type":"execute_result","data":{"text/plain":"DatasetDict({\n train: Dataset({\n features: ['text', 'generated'],\n num_rows: 36996\n })\n test: Dataset({\n features: ['text', 'generated'],\n num_rows: 9250\n })\n})"},"metadata":{}}]},{"cell_type":"code","source":"tokenized_ds = raw_ds.map(tokenize_and_split, batched=True)","metadata":{"datalore":{"node_id":"MDZBrC9YPCTvp51uU2TETh","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:17.134367Z","iopub.execute_input":"2024-02-07T16:13:17.136441Z","iopub.status.idle":"2024-02-07T16:13:57.609413Z","shell.execute_reply.started":"2024-02-07T16:13:17.136406Z","shell.execute_reply":"2024-02-07T16:13:57.608495Z"},"trusted":true},"execution_count":77,"outputs":[{"output_type":"display_data","data":{"text/plain":"Map: 0%| | 0/36996 [00:00, ? examples/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f76e65463f8941b9b07cb4edde985210"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Map: 0%| | 0/9250 [00:00, ? examples/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"1caf000576754e73b46a2b4837aad091"}},"metadata":{}}]},{"cell_type":"code","source":"tokenized_ds","metadata":{"datalore":{"node_id":"Kogb1E8iCGSyKM1a5tqNKr","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:57.610798Z","iopub.execute_input":"2024-02-07T16:13:57.611188Z","iopub.status.idle":"2024-02-07T16:13:57.619303Z","shell.execute_reply.started":"2024-02-07T16:13:57.611153Z","shell.execute_reply":"2024-02-07T16:13:57.618451Z"},"trusted":true},"execution_count":78,"outputs":[{"execution_count":78,"output_type":"execute_result","data":{"text/plain":"DatasetDict({\n train: Dataset({\n features: ['text', 'generated', 'input_ids', 'attention_mask'],\n num_rows: 45367\n })\n test: Dataset({\n features: ['text', 'generated', 'input_ids', 'attention_mask'],\n num_rows: 11267\n })\n})"},"metadata":{}}]},{"cell_type":"code","source":"data_collator = DataCollatorWithPadding(tokenizer=tokenizer, return_tensors=\"tf\")","metadata":{"datalore":{"node_id":"ZiedoYlNkJO38MDwbBtk1D","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:57.620367Z","iopub.execute_input":"2024-02-07T16:13:57.620634Z","iopub.status.idle":"2024-02-07T16:13:57.634232Z","shell.execute_reply.started":"2024-02-07T16:13:57.620611Z","shell.execute_reply":"2024-02-07T16:13:57.633273Z"},"trusted":true},"execution_count":79,"outputs":[]},{"cell_type":"markdown","source":"## 5. Modelling","metadata":{"datalore":{"node_id":"PNCf05cZxmkj4mYnNrH1e6","type":"MD","hide_input_from_viewers":true,"hide_output_from_viewers":true}}},{"cell_type":"code","source":"tf_train_dataset = tokenized_ds['train'].to_tf_dataset(\n columns=[\"attention_mask\", \"input_ids\"],\n label_cols=[\"generated\"],\n shuffle=True,\n collate_fn=data_collator,\n batch_size=batch_size,\n)\n\ntf_test_dataset = tokenized_ds['test'].to_tf_dataset(\n columns=[\"attention_mask\", \"input_ids\"],\n label_cols=[\"generated\"],\n shuffle=False,\n collate_fn=data_collator,\n batch_size=batch_size,\n)","metadata":{"datalore":{"node_id":"59cwxcIVF1G0FQQI583weB","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:57.635235Z","iopub.execute_input":"2024-02-07T16:13:57.635464Z","iopub.status.idle":"2024-02-07T16:13:57.782092Z","shell.execute_reply.started":"2024-02-07T16:13:57.635444Z","shell.execute_reply":"2024-02-07T16:13:57.781228Z"},"trusted":true},"execution_count":80,"outputs":[{"name":"stderr","text":"/opt/conda/lib/python3.10/site-packages/datasets/arrow_dataset.py:399: FutureWarning: The output of `to_tf_dataset` will change when a passing single element list for `labels` or `columns` in the next datasets version. To return a tuple structure rather than dict, pass a single string.\nOld behaviour: columns=['a'], labels=['labels'] -> (tf.Tensor, tf.Tensor) \n : columns='a', labels='labels' -> (tf.Tensor, tf.Tensor) \nNew behaviour: columns=['a'],labels=['labels'] -> ({'a': tf.Tensor}, {'labels': tf.Tensor}) \n : columns='a', labels='labels' -> (tf.Tensor, tf.Tensor) \n warnings.warn(\n","output_type":"stream"}]},{"cell_type":"code","source":"num_epochs = 2","metadata":{"execution":{"iopub.status.busy":"2024-02-07T16:13:57.783312Z","iopub.execute_input":"2024-02-07T16:13:57.783569Z","iopub.status.idle":"2024-02-07T16:13:57.787307Z","shell.execute_reply.started":"2024-02-07T16:13:57.783547Z","shell.execute_reply":"2024-02-07T16:13:57.786339Z"},"trusted":true},"execution_count":81,"outputs":[]},{"cell_type":"code","source":"model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2, from_pt=True)","metadata":{"datalore":{"node_id":"N0KmKqUgQAhDA3T22hXvH0","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:57.788362Z","iopub.execute_input":"2024-02-07T16:13:57.788638Z","iopub.status.idle":"2024-02-07T16:13:58.918881Z","shell.execute_reply.started":"2024-02-07T16:13:57.788614Z","shell.execute_reply":"2024-02-07T16:13:58.917823Z"},"trusted":true},"execution_count":82,"outputs":[{"name":"stderr","text":"All PyTorch model weights were used when initializing TFDistilBertForSequenceClassification.\n\nAll the weights of TFDistilBertForSequenceClassification were initialized from the PyTorch model.\nIf your task is similar to the task the model of the checkpoint was trained on, you can already use TFDistilBertForSequenceClassification for predictions without further training.\n","output_type":"stream"}]},{"cell_type":"code","source":"# The number of training steps is the number of samples in the dataset, divided by the batch size then multiplied\n# by the total number of epochs. Note that the tf_train_dataset here is a batched tf.data.Dataset,\n# not the original Hugging Face Dataset, so its len() is already num_samples // batch_size.\nnum_train_steps = len(tf_train_dataset) * num_epochs\nlr_scheduler = PolynomialDecay(\n initial_learning_rate=5e-5, end_learning_rate=0.0, decay_steps=num_train_steps\n)\n\nopt = Adam(learning_rate=lr_scheduler)\n\nloss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)\n\nes = EarlyStopping(monitor='val_loss', patience=1, verbose=1, mode='auto', restore_best_weights=True)\n\ncallback = PushToHubCallback(\n \"LLM_generated_text_detector\", save_strategy=\"no\", tokenizer=tokenizer\n)","metadata":{"datalore":{"node_id":"KgCP6HcT4sIzhVUP361LJt","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:58.920321Z","iopub.execute_input":"2024-02-07T16:13:58.920593Z","iopub.status.idle":"2024-02-07T16:13:59.156543Z","shell.execute_reply.started":"2024-02-07T16:13:58.920568Z","shell.execute_reply":"2024-02-07T16:13:59.155652Z"},"trusted":true},"execution_count":83,"outputs":[{"name":"stderr","text":"/opt/conda/lib/python3.10/site-packages/huggingface_hub/utils/_deprecation.py:131: FutureWarning: 'Repository' (from 'huggingface_hub.repository') is deprecated and will be removed from version '1.0'. Please prefer the http-based alternatives instead. Given its large adoption in legacy code, the complete removal is only planned on next major release.\nFor more details, please read https://huggingface.co/docs/huggingface_hub/concepts/git_vs_http.\n warnings.warn(warning_message, FutureWarning)\n/kaggle/working/LLM_generated_text_detector is already a clone of https://huggingface.co/Wintersmith/LLM_generated_text_detector. Make sure you pull the latest changes with `repo.git_pull()`.\n","output_type":"stream"}]},{"cell_type":"code","source":"model.compile(optimizer=opt, loss=loss, metrics=[\"accuracy\"])","metadata":{"datalore":{"node_id":"FWsaXd4PpT0LElBgYMitIc","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:59.157601Z","iopub.execute_input":"2024-02-07T16:13:59.157864Z","iopub.status.idle":"2024-02-07T16:13:59.169580Z","shell.execute_reply.started":"2024-02-07T16:13:59.157840Z","shell.execute_reply":"2024-02-07T16:13:59.168698Z"},"trusted":true},"execution_count":84,"outputs":[]},{"cell_type":"code","source":"model.fit(tf_train_dataset, validation_data=tf_test_dataset, epochs=num_epochs, callbacks=[es, callback])","metadata":{"datalore":{"node_id":"Q57EJS3MbWm5NXRe9pHyM6","type":"CODE","hide_input_from_viewers":true,"hide_output_from_viewers":true},"execution":{"iopub.status.busy":"2024-02-07T16:13:59.170764Z","iopub.execute_input":"2024-02-07T16:13:59.171079Z","iopub.status.idle":"2024-02-07T17:47:39.001846Z","shell.execute_reply.started":"2024-02-07T16:13:59.171049Z","shell.execute_reply":"2024-02-07T17:47:39.000824Z"},"trusted":true},"execution_count":85,"outputs":[{"name":"stdout","text":"Epoch 1/2\n1815/1815 [==============================] - 2812s 2s/step - loss: 0.0579 - accuracy: 0.9809 - val_loss: 0.0272 - val_accuracy: 0.9920\nEpoch 2/2\n1815/1815 [==============================] - 2790s 2s/step - loss: 0.0082 - accuracy: 0.9974 - val_loss: 0.0191 - val_accuracy: 0.9941\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"Upload file tf_model.h5: 0%| | 1.00/256M [00:00, ?B/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"8131a47329644fd8a4adaeb6488e0e43"}},"metadata":{}},{"name":"stderr","text":"To https://huggingface.co/Wintersmith/LLM_generated_text_detector\n 9aa28a0..f4838f7 main -> main\n\n","output_type":"stream"},{"execution_count":85,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}}]},{"cell_type":"code","source":"#model.save_pretrained(\"/kaggle/working/model_trained\", saved_model=True)\n","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:47:39.003003Z","iopub.execute_input":"2024-02-07T17:47:39.003387Z","iopub.status.idle":"2024-02-07T17:47:39.007252Z","shell.execute_reply.started":"2024-02-07T17:47:39.003360Z","shell.execute_reply":"2024-02-07T17:47:39.006371Z"},"trusted":true},"execution_count":86,"outputs":[]},{"cell_type":"markdown","source":"## 6. Evaluation","metadata":{}},{"cell_type":"code","source":"preds = model.predict(tf_test_dataset)[\"logits\"]\n\ny_pred = np.argmax(preds, axis=1)\nprint(preds.shape, y_pred.shape)\n\ny_pred\n\n#y_true = np.concatenate([y for x, y in tf_test_dataset], axis=0)\n# https://stackoverflow.com/questions/56226621/how-to-extract-data-labels-back-from-tensorflow-dataset","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:47:39.008525Z","iopub.execute_input":"2024-02-07T17:47:39.009205Z","iopub.status.idle":"2024-02-07T17:51:20.348390Z","shell.execute_reply.started":"2024-02-07T17:47:39.009171Z","shell.execute_reply":"2024-02-07T17:51:20.347443Z"},"trusted":true},"execution_count":87,"outputs":[{"name":"stdout","text":"451/451 [==============================] - 221s 486ms/step\n(11267, 2) (11267,)\n","output_type":"stream"},{"execution_count":87,"output_type":"execute_result","data":{"text/plain":"array([1, 0, 0, ..., 1, 1, 0])"},"metadata":{}}]},{"cell_type":"code","source":"def get_probabilities(input_text):\n logits_pred = model.predict(input_text)['logits']\n probs = tf.nn.sigmoid(logits_pred)\n class_1_probability = probs[:, 1].numpy()\n return class_1_probability","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:51:20.349613Z","iopub.execute_input":"2024-02-07T17:51:20.349921Z","iopub.status.idle":"2024-02-07T17:51:20.355158Z","shell.execute_reply.started":"2024-02-07T17:51:20.349892Z","shell.execute_reply":"2024-02-07T17:51:20.354154Z"},"trusted":true},"execution_count":88,"outputs":[]},{"cell_type":"code","source":"y_prob = get_probabilities(tf_test_dataset)\ny_prob","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:51:20.356452Z","iopub.execute_input":"2024-02-07T17:51:20.356843Z","iopub.status.idle":"2024-02-07T17:54:59.830689Z","shell.execute_reply.started":"2024-02-07T17:51:20.356797Z","shell.execute_reply":"2024-02-07T17:54:59.829525Z"},"trusted":true},"execution_count":89,"outputs":[{"name":"stdout","text":"451/451 [==============================] - 219s 486ms/step\n","output_type":"stream"},{"execution_count":89,"output_type":"execute_result","data":{"text/plain":"array([0.9966794 , 0.01150257, 0.01455727, ..., 0.99643433, 0.99624926,\n 0.03235682], dtype=float32)"},"metadata":{}}]},{"cell_type":"code","source":"y_true = np.concatenate([y for x, y in tf_test_dataset], axis=0)","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:54:59.831848Z","iopub.execute_input":"2024-02-07T17:54:59.832147Z","iopub.status.idle":"2024-02-07T17:55:02.179651Z","shell.execute_reply.started":"2024-02-07T17:54:59.832104Z","shell.execute_reply":"2024-02-07T17:55:02.178681Z"},"trusted":true},"execution_count":90,"outputs":[]},{"cell_type":"code","source":"def evaluate_model(y_true, y_pred):\n print(ConfusionMatrixDisplay.from_predictions(y_true, y_pred))\n print(classification_report(y_true, y_pred))\n print('F1 score:', f1_score(y_true, y_pred))","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.181096Z","iopub.execute_input":"2024-02-07T17:55:02.181519Z","iopub.status.idle":"2024-02-07T17:55:02.186565Z","shell.execute_reply.started":"2024-02-07T17:55:02.181485Z","shell.execute_reply":"2024-02-07T17:55:02.185529Z"},"trusted":true},"execution_count":91,"outputs":[]},{"cell_type":"code","source":"evaluate_model(y_true=y_true, y_pred=y_pred)","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.187803Z","iopub.execute_input":"2024-02-07T17:55:02.188185Z","iopub.status.idle":"2024-02-07T17:55:02.500352Z","shell.execute_reply.started":"2024-02-07T17:55:02.188150Z","shell.execute_reply":"2024-02-07T17:55:02.499174Z"},"trusted":true},"execution_count":92,"outputs":[{"name":"stdout","text":"\n precision recall f1-score support\n\n 0 1.00 0.99 1.00 7613\n 1 0.99 0.99 0.99 3654\n\n accuracy 0.99 11267\n macro avg 0.99 0.99 0.99 11267\nweighted avg 0.99 0.99 0.99 11267\n\nF1 score: 0.9908457439540921\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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"},"metadata":{}}]},{"cell_type":"markdown","source":"## 7. Submitting predictions on test set","metadata":{}},{"cell_type":"code","source":"test_essays\n","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.501599Z","iopub.execute_input":"2024-02-07T17:55:02.501910Z","iopub.status.idle":"2024-02-07T17:55:02.513693Z","shell.execute_reply.started":"2024-02-07T17:55:02.501884Z","shell.execute_reply":"2024-02-07T17:55:02.512625Z"},"trusted":true},"execution_count":93,"outputs":[{"execution_count":93,"output_type":"execute_result","data":{"text/plain":" id prompt_id text\n0 0000aaaa 2 Aaa bbb ccc.\n1 1111bbbb 3 Bbb ccc ddd.\n2 2222cccc 4 CCC ddd eee.","text/html":"
\n\n
\n \n
\n
\n
id
\n
prompt_id
\n
text
\n
\n \n \n
\n
0
\n
0000aaaa
\n
2
\n
Aaa bbb ccc.
\n
\n
\n
1
\n
1111bbbb
\n
3
\n
Bbb ccc ddd.
\n
\n
\n
2
\n
2222cccc
\n
4
\n
CCC ddd eee.
\n
\n \n
\n
"},"metadata":{}}]},{"cell_type":"code","source":"test_essays['text'] = test_essays['text'].map(clean_text)\n","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.516021Z","iopub.execute_input":"2024-02-07T17:55:02.516980Z","iopub.status.idle":"2024-02-07T17:55:02.537197Z","shell.execute_reply.started":"2024-02-07T17:55:02.516927Z","shell.execute_reply":"2024-02-07T17:55:02.535910Z"},"trusted":true},"execution_count":94,"outputs":[]},{"cell_type":"code","source":"raw_final_ds = datasets.Dataset.from_pandas(test_essays)\nraw_final_ds","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.538476Z","iopub.execute_input":"2024-02-07T17:55:02.538853Z","iopub.status.idle":"2024-02-07T17:55:02.556050Z","shell.execute_reply.started":"2024-02-07T17:55:02.538825Z","shell.execute_reply":"2024-02-07T17:55:02.554954Z"},"trusted":true},"execution_count":95,"outputs":[{"execution_count":95,"output_type":"execute_result","data":{"text/plain":"Dataset({\n features: ['id', 'prompt_id', 'text'],\n num_rows: 3\n})"},"metadata":{}}]},{"cell_type":"code","source":"tokenized_test_dataset = raw_final_ds.map(tokenize_and_split, batched=True)\ntokenized_test_dataset","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.557634Z","iopub.execute_input":"2024-02-07T17:55:02.558575Z","iopub.status.idle":"2024-02-07T17:55:02.611994Z","shell.execute_reply.started":"2024-02-07T17:55:02.558522Z","shell.execute_reply":"2024-02-07T17:55:02.610964Z"},"trusted":true},"execution_count":96,"outputs":[{"output_type":"display_data","data":{"text/plain":"Map: 0%| | 0/3 [00:00, ? examples/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"2935bcca138c4ede9876e51cb63fd1d5"}},"metadata":{}},{"execution_count":96,"output_type":"execute_result","data":{"text/plain":"Dataset({\n features: ['id', 'prompt_id', 'text', 'input_ids', 'attention_mask'],\n num_rows: 3\n})"},"metadata":{}}]},{"cell_type":"code","source":"tf_final_dataset = tokenized_test_dataset.to_tf_dataset(\n columns=[\"attention_mask\", \"input_ids\"],\n #label_cols=[\"target\"],\n shuffle=False,\n collate_fn=data_collator,\n batch_size=batch_size,\n)","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.613469Z","iopub.execute_input":"2024-02-07T17:55:02.613883Z","iopub.status.idle":"2024-02-07T17:55:02.683005Z","shell.execute_reply.started":"2024-02-07T17:55:02.613845Z","shell.execute_reply":"2024-02-07T17:55:02.682161Z"},"trusted":true},"execution_count":97,"outputs":[]},{"cell_type":"code","source":"class_1_final_probability = get_probabilities(tf_final_dataset)","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:02.684201Z","iopub.execute_input":"2024-02-07T17:55:02.684505Z","iopub.status.idle":"2024-02-07T17:55:04.305151Z","shell.execute_reply.started":"2024-02-07T17:55:02.684479Z","shell.execute_reply":"2024-02-07T17:55:04.304117Z"},"trusted":true},"execution_count":98,"outputs":[{"name":"stdout","text":"1/1 [==============================] - 2s 2s/step\n","output_type":"stream"}]},{"cell_type":"code","source":"sample_submission[\"generated\"] = class_1_final_probability","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:04.306598Z","iopub.execute_input":"2024-02-07T17:55:04.306963Z","iopub.status.idle":"2024-02-07T17:55:04.311697Z","shell.execute_reply.started":"2024-02-07T17:55:04.306929Z","shell.execute_reply":"2024-02-07T17:55:04.310770Z"},"trusted":true},"execution_count":99,"outputs":[]},{"cell_type":"code","source":"sample_submission.to_csv(\"/kaggle/working/submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:04.313079Z","iopub.execute_input":"2024-02-07T17:55:04.313775Z","iopub.status.idle":"2024-02-07T17:55:04.334285Z","shell.execute_reply.started":"2024-02-07T17:55:04.313692Z","shell.execute_reply":"2024-02-07T17:55:04.333453Z"},"trusted":true},"execution_count":100,"outputs":[]},{"cell_type":"markdown","source":"## 8. Predict one sentence","metadata":{}},{"cell_type":"code","source":"# sequence_text = input your own text\nsequence_text = raw_ds['test']['text'][15]\nprint(f\"Label: {raw_ds['test']['generated'][15]}\")\nprint(f\"Text:\\n {sequence_text}\")","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:04.335269Z","iopub.execute_input":"2024-02-07T17:55:04.335504Z","iopub.status.idle":"2024-02-07T17:55:04.471992Z","shell.execute_reply.started":"2024-02-07T17:55:04.335477Z","shell.execute_reply":"2024-02-07T17:55:04.471135Z"},"trusted":true},"execution_count":101,"outputs":[{"name":"stdout","text":"Label: 0\nText:\n to principal students should not be able to have or do community service if they where not convicted of a crime they committed in school of on school grounds community service is understandable to me but its not fair to have students help out others if they werent convicted of bad behavior an example to that u cant order a student to do community service for himher for picking up trash another student dropped in the hallway in addition to that students have the rite to do community service if not given to himher but if community service is given then heshe should be punished for there actions but what did they do to deserve community service some students should be punished for bad behavior talking back even just being plan out disrespectful to one another but what they shouldnt have community service for is helping out another person when they are caught in the act of someone else being mean to himher also being a good character to the school classmates teachers staff and custodians if someone is not so you can show that person how to be respectful an how some should act at all times maybe staff and teachers like to punish us because of a ruff past they had growing up as a child thats not rite so they want to give us community service make us there little pets but that shouldnt be the answer to none of there problems sencirley studentname\n","output_type":"stream"}]},{"cell_type":"code","source":"sequence = sequence_text\nmodel_input = tokenizer(sequence, max_length=512, padding=True, truncation=True, return_tensors='tf')\nmodel_input = dict(model_input)","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:04.473129Z","iopub.execute_input":"2024-02-07T17:55:04.473403Z","iopub.status.idle":"2024-02-07T17:55:04.478948Z","shell.execute_reply.started":"2024-02-07T17:55:04.473379Z","shell.execute_reply":"2024-02-07T17:55:04.478053Z"},"trusted":true},"execution_count":102,"outputs":[]},{"cell_type":"code","source":"get_probabilities(model_input)","metadata":{"execution":{"iopub.status.busy":"2024-02-07T17:55:04.479877Z","iopub.execute_input":"2024-02-07T17:55:04.480184Z","iopub.status.idle":"2024-02-07T17:55:06.157918Z","shell.execute_reply.started":"2024-02-07T17:55:04.480160Z","shell.execute_reply":"2024-02-07T17:55:06.157147Z"},"trusted":true},"execution_count":103,"outputs":[{"name":"stdout","text":"1/1 [==============================] - 2s 2s/step\n","output_type":"stream"},{"execution_count":103,"output_type":"execute_result","data":{"text/plain":"array([0.01741369], dtype=float32)"},"metadata":{}}]}]}