{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "id": "ur8xi4C7S06n" }, "outputs": [], "source": [ "# Copyright 2024 Google LLC\n", "#\n", "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "markdown", "metadata": { "id": "JAPoU8Sm5E6e" }, "source": [ "## Toxicity classification using Gemini fine-tuned\n" ] }, { "cell_type": "markdown", "metadata": { "jupyter": { "outputs_hidden": false } }, "source": [ "## Overview\n", "\n", "This notebook shows how to classify human text toxic comments into different Responsible AI harms categories: \"toxic\", \"severe_toxic\", \"obscene\", \"threat\", \"insult\", \"identity_hate\"\n", "\n", "#### **Steps**\n", "Using Bigframes (BigQuery Dataframes),\n", "1) It reads the [```Jigsaw Multilingual Toxic Comment Classification```](https://www.kaggle.com/competitions/jigsaw-multilingual-toxic-comment-classification/data) dataset \n", "2) It preprocess the dataset and split into train and test for finetuning and metrics evaluation \n", "3) It requests the Gemini 2.5 Flash model API to classify the text comment for the different categories (multi-label classification) \n", "4) It evaluates the Precision scores and F1 scores\n", "5) It fine-tunes the Gemini 2.5 Flash model for this type of classification and evaluates the results against the test dataset again to compare the quality increase" ] }, { "cell_type": "markdown", "metadata": { "jupyter": { "outputs_hidden": false } }, "source": [ "References:\n", "- [BigQuery DataFrames](https://cloud.google.com/python/docs/reference/bigframes/latest)\n", "- [Google Gen AI SDK](https://googleapis.github.io/python-genai/)" ] }, { "cell_type": "markdown", "metadata": { "id": "aed92deeb4a0" }, "source": [ "### Costs\n", "\n", "This tutorial uses billable components of Google Cloud:\n", "\n", "* BigQuery (compute)\n", "* BigQuery ML\n", "\n", "Learn about [BigQuery compute pricing](https://cloud.google.com/bigquery/pricing#analysis_pricing_models)\n", "and [BigQuery ML pricing](https://cloud.google.com/bigquery/pricing#bqml),\n", "and use the [Pricing Calculator](https://cloud.google.com/products/calculator/)\n", "to generate a cost estimate based on your projected usage." ] }, { "cell_type": "markdown", "metadata": { "id": "i7EUnXsZhAGF" }, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "9O0Ka4W2MNF3", "pycharm": { "is_executing": true }, "tags": [] }, "outputs": [], "source": [ "!pip install --upgrade google-genai google-cloud-bigquery google-cloud-aiplatform bigframes -q" ] }, { "cell_type": "markdown", "metadata": { "id": "oDfTjfACBvJk" }, "source": [ "\n", "1. [Select or create a Google Cloud project](https://console.cloud.google.com/cloud-resource-manager). When you first create an account, you get a $300 credit towards your compute/storage costs.\n", "\n", "2. [Make sure that billing is enabled for your project](https://cloud.google.com/billing/docs/how-to/modify-project).\n", "\n", "3. [Enable the BigQuery API](https://console.cloud.google.com/flows/enableapi?apiid=bigquery.googleapis.com).\n", "\n", "4. If you are running this notebook locally, install the [Cloud SDK](https://cloud.google.com/sdk)." ] }, { "cell_type": "markdown", "metadata": { "id": "960505627ddf" }, "source": [ "### Import dependencies" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import json\n", "import time\n", "from typing import List\n", "from pydantic import BaseModel\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from google.cloud import bigquery, storage\n", "\n", "import bigframes.pandas as bpd\n", "import bigframes.bigquery as bbq\n", "from bigframes.dataframe import DataFrame\n", "from bigframes.ml.model_selection import train_test_split\n", "from bigframes.ml import metrics\n", "\n", "from google import genai\n", "from google.genai import types" ] }, { "cell_type": "markdown", "metadata": { "jupyter": { "outputs_hidden": false } }, "source": [ "### Set BigQuery DataFrames options" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "tags": [] }, "outputs": [], "source": [ "PROJECT_ID = \"\"\n", "REGION = \"US\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before running, [create a BigQuery dataset](https://cloud.google.com/bigquery/docs/datasets) and a [BigQuery connection](https://cloud.google.com/bigquery/docs/create-cloud-resource-connection) and refer them below" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "DATASET_ID = \"\"\n", "CONNECTION_ID = \"\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "tags": [] }, "outputs": [], "source": [ "bpd.options.bigquery.project = PROJECT_ID\n", "bpd.options.bigquery.location = REGION\n", "bpd.options.display.progress_bar = None" ] }, { "cell_type": "markdown", "metadata": { "id": "9EMAqR37AfLS" }, "source": [ "## Read the dataset using BigQuery Dataframes" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "EDAaIwHpQCDZ", "tags": [] }, "outputs": [], "source": [ "df = bpd.read_csv(\"gs://dataproc-metastore-public-binaries/jigsaw/jigsaw-toxic-comment-train.csv\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "classification_columns = [\"toxic\", \"severe_toxic\", \"obscene\", \"threat\", \"insult\", \"identity_hate\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize basic statistics" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "id": "_gPD0Zn1Stdb", "tags": [] }, "outputs": [ { "data": { "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", "
idcomment_texttoxicsevere_toxicobscenethreatinsultidentity_hate
00000997932d777bfExplanation\n", "Why the edits made under my userna...000000
1000103f0d9cfb60fD'aww! He matches this background colour I'm s...000000
2000113f07ec002fdHey man, I'm really not trying to edit war. It...000000
30001b41b1c6bb37e\"\n", "More\n", "I can't make any real suggestions on im...000000
40001d958c54c6e35You, sir, are my hero. Any chance you remember...000000
500025465d4725e87\"\n", "\n", "Congratulations from me as well, use the to...000000
60002bcb3da6cb337COCKSUCKER BEFORE YOU PISS AROUND ON MY WORK111010
700031b1e95af7921Your vandalism to the Matt Shirvington article...000000
800037261f536c51dSorry if the word 'nonsense' was offensive to ...000000
900040093b2687caaalignment on this subject and which are contra...000000
\n", "

10 rows \u00d7 8 columns

\n", "
[10 rows x 8 columns in total]" ], "text/plain": [ " id comment_text toxic \\\n", "0 0000997932d777bf Explanation\n", "Why the edits made under my userna... 0 \n", "1 000103f0d9cfb60f D'aww! He matches this background colour I'm s... 0 \n", "2 000113f07ec002fd Hey man, I'm really not trying to edit war. It... 0 \n", "3 0001b41b1c6bb37e \"\n", "More\n", "I can't make any real suggestions on im... 0 \n", "4 0001d958c54c6e35 You, sir, are my hero. Any chance you remember... 0 \n", "5 00025465d4725e87 \"\n", "\n", "Congratulations from me as well, use the to... 0 \n", "6 0002bcb3da6cb337 COCKSUCKER BEFORE YOU PISS AROUND ON MY WORK 1 \n", "7 00031b1e95af7921 Your vandalism to the Matt Shirvington article... 0 \n", "8 00037261f536c51d Sorry if the word 'nonsense' was offensive to ... 0 \n", "9 00040093b2687caa alignment on this subject and which are contra... 0 \n", "\n", " severe_toxic obscene threat insult identity_hate \n", "0 0 0 0 0 0 \n", "1 0 0 0 0 0 \n", "2 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "4 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "6 1 1 0 1 0 \n", "7 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", "[10 rows x 8 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(10)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total: 223549\n" ] } ], "source": [ "ids_count = df[\"id\"].count()\n", "print(f\"Total: {ids_count}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "classification_counts = df[classification_columns].sum()\n", "classification_counts" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def plot_percentages(classification_counts: DataFrame, total: int):\n", " \n", " percentages = (classification_counts / total) * 100\n", "\n", " plt.figure(figsize=(10, 5))\n", " plt.bar(percentages.index, percentages.values)\n", " plt.title('Distribution of Classifications (Percentage)')\n", " plt.xlabel('Classification Type')\n", " plt.ylabel('Percentage of Occurrences')\n", " plt.xticks(rotation=45)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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xvHx48fq1KmTkiZNKh8fH1WvXl1XrlyRxWKJdCjflStX1KxZM6VIkcL6Op86dWqk23R3d1eZMmW0fPnyf9wfAKIWPUkAolTDhg31zTffaP369WrZsuUL1/n777/10UcfKW/evBowYIA8PT11+vRp60DxHDlyaMCAAerTp49atWqlkiVLSpKKFStmvY07d+6ocuXKqlu3rho0aKAUKVK8sq7vvvtOFotF3bt3182bNzV69GiVL19eBw4csPZ4vY7Xqc2WMUbVq1fXpk2b1Lx5c7377rtat26dunXrpitXrkTqidm2bZuWLFmidu3aycfHRz/++KNq1aqlixcvKkmSJC+t6/HjxypTpoxOnz6tDh06KGPGjFq4cKGaNGmi+/fv64svvlCOHDk0a9YsdenSRWnTptWXX34pSUqWLNkLb3PNmjUKDQ39xzFLrzJ9+nQlSJBAXbt2VYIECfT777+rT58+CggI0PDhwyVJISEhqlSpkoKDg9WxY0elTJlSV65c0a+//qr79+/Lz8/vH58zL9KrVy+98847mjhxogYMGKCMGTMqc+bML12/efPmmj59uipXrqwWLVooNDRUf/zxh3bu3GntNR0/frxy5cql6tWry83NTStXrlS7du0UHh6u9u3bS5JGjx6tjh07KkGCBOrVq5ckvfL5OX36dDVt2lSFChXSkCFDdOPGDY0ZM0bbt2/X/v377XrBwsLCVKlSJRUuXFgjRozQb7/9ppEjRypz5sxq27atpGdhsl69eipXrpyGDRsmSTp27Ji2b9+uL7744qV1PH36VLt377bezus4c+aMJClJkiQKDw9X9erVtW3bNrVq1Uo5cuTQ4cOH9cMPP+jkyZNatmyZ3ba///67FixYoA4dOihp0qTKkCGDrl69qvfff1/3799Xq1atlD17dl25ckWLFi1SUFCQPDw8FBQUpNKlS+vKlStq3bq10qVLpz///FM9e/bUtWvXNHr0aLv7mTt3rh4+fKjWrVvLYrHo+++/1yeffKKzZ8/K3d1drVu31tWrV7VhwwbNmjUr0mMcM2aMqlevrvr16yskJES//PKLateurV9//VVVq1a1rtekSRMtWLBADRs2VJEiRbRlyxa75RFu3LihIkWKWINismTJtGbNGjVv3lwBAQGRfpAoUKCAli9froCAAPn6+r72vgHwHzn7eD8Ab5aIcSe7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atQoPX36VNKzD1NXV1edO3dOiRMnliSFhYVJkvXFdvbsWecUi1jh888/19q1a+3aHjx4oHPnzilFihR27RaLRSEhIdbrfJjHPjdu3NCAAQM0YMAA/fTTT2rQoIFcXV2VL18+63uAxL57U8SLF0+DBg3S3bt31bdvX+3Zs0dS5KDE/nwzjBgxQnXr1pUkZc+eXR9++KHu3bsnT09PZcyYURI/YOLFIn7I7NWrl0aNGqV69epp8ODB2rZtm7766itdvXrVyRU6ByEJry1z5syqV6+e3N3d9fjxY2t7ggQJtGPHDkmSq6urNShduXJFixYtIijFUWfPnlX27NlVrlw5u3YXFxclSZJEN27csLZFfHCvWrVKkydPlsQA8tgoKChIjx8/Vrt27XT16lW9//77+uijjzR+/HhJ0urVqyWx72KriLATsX/atGmjnj17aurUqdqzZ4++//577du3z7rOH3/8Ybc+Yjd/f38tW7ZMrVq1kiTlzZtXkyZNUu3atVWhQgX98ccfcnV1VWhoqJMrRWx0/PhxrVmzRkuWLFHdunWVKlUqHTp0SF999ZVSp05t/W4XpxjAQRs3bjRdunQxx44dM8YYs3btWuPv7286duxot1737t1Nnjx5zM2bN51RJmKRcePGmWnTplmvFy9e3OTNm9ecOHHC2vbkyRNTrVo1065dOydUiNfx4MEDU6hQITNlyhSTPn1607p1axMSEmKMMebs2bOmWrVqZvPmzU6uEi8SHh5ujDFm+/btZty4caZ3797m2LFjJjAw0BhjzNatW03mzJnNZ599ZpYuXWr69+9vLBaLuXbtmnVbxG5hYWFm2bJlJn78+KZ169bW9iNHjpj69eubJEmSmO3bt1vbV61aZf0cR9wTGhpqd/3IkSMmc+bMJigoyCxZssQkSJDAjB8/3hhjTFBQkJkzZ465cuWKM0p1GkISXovth+SECROMj4+P6datm7l48aIJDg42o0ePNunTpzclSpQwbdq0MZ9++qlJmDCh2b9/v/OKhtPYvvnevn3b1K1b12TJksXMnj3b2pYzZ06TLVs2880335jvv//elClTxuTKlcs8ffrUWWXDxou+GD948MDUrVvXxI8f39SsWdNuWffu3U2hQoXM1atXY6pEvKaIfbl48WLj5+dnPvroI5MtWzZTuHBhM3r0aPPgwQNjjDHbtm0zBQoU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9ldxc3NT48aNNW3aNE2bNk1169aNFAgPHjyox48fW6/v3LlTCRIkkL+/v3LmzClPT09dvHhRWbJksbv4+/tHS80A8LZiCnAAiEPGjh2r4sWL6/3339eAAQOUN29ehYaGasOGDRo/frzdoWQRsmbNqosXL+qXX35RoUKFtGrVKmvvjCQ9fvxY3bp106effqqMGTPq8uXL2r17t2rVqiVJ6ty5sypXrqxs2bLp3r172rRpk3LkyPGvH0Pfvn1Vrlw5Zc6cWXXr1lVoaKhWr16t7t27K126dPLw8NBPP/2kNm3a6MiRI5HOfZQ+fXpZLBb9+uuvqlKliry9vSNNJJE1a1bVqFFDLVu21M8//ywfHx/16NFDadKkUY0aNf517f+kRYsW1v/N9u3bIy0PCQlR8+bN9e233+r8+fPq27evOnToIBcXF/n4+Oirr75Sly5dFB4erhIlSujBgwfavn27fH191bhx42irGwDeNvQkAUAckilTJu3bt09ly5bVl19+qdy5c6tChQrauHGjxo8f/8Jtqlevri5duqhDhw5699139eeff1qnpZYkV1dX3blzR40aNVK2bNlUp04dVa5c2TrrWlhYmNq3b68cOXLoww8/VLZs2TRu3Lh//RjKlCmjhQsXasWKFXr33Xf1wQcf6K+//pIkJUuWTNOnT9fChQuVM2dODR06VCNGjLDbPk2aNOrfv7969OihFClSqEOHDi+8n2nTpqlAgQL66KOPVLRoURljtHr16kiH2EWlrFmzqlixYsqePbvdeKgI5cqVU9asWVWqVCl99tlnql69uvr162ddPnDgQPXu3VtDhgyx/r9XrVqljBkzRlvNAPA2spj/MpIXAABEGWOMsmbNqnbt2qlr1652y5o0aaL79+9r2bJlzikOAOIQDrcDACAWuHXrln755Rddv37d7txIAICYR0gCACAWSJ48uZImTaqJEycqUaJEzi4HAOI0DrcDAAAAABtM3AAAAAAANghJAAAAAGCDkAQAAAAANghJAAAAAGCDkAQAAAAANghJAAAAAGCDkAQAAAAANghJAAAAAGCDkAQAAAAANv4fwW9UNaDign8AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_percentages(classification_counts, ids_count)" ] }, { "cell_type": "markdown", "metadata": { "id": "rwPLjqW2Ajzh" }, "source": [ "## Preprocess dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sample the data with **at least** a sample_size for each column in classification_columns \n", "Including a sample with rows where all classification_columns are 0 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Balance dataset" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def balance_dataset(df: DataFrame, classification_columns: List, sample_size):\n", "\n", " sampled_dfs = []\n", "\n", " for col in classification_columns:\n", " temp_df = df[df[col] == 1].sample(sample_size)\n", " sampled_dfs.append(temp_df)\n", "\n", " all_zeroes_df = df[(df[classification_columns] == 0).all(axis=1)].sample(sample_size)\n", " sampled_dfs.append(all_zeroes_df)\n", "\n", " balanced_df = bpd.concat(sampled_dfs) # could create duplicates, dropping for simplicity\n", " balanced_df.drop_duplicates()\n", " \n", " return balanced_df" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "SAMPLE_SIZE = 20" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "balanced_data = balance_dataset(df, classification_columns, sample_size = SAMPLE_SIZE)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def plot_distribution(classification_counts: DataFrame):\n", "\n", " plt.figure(figsize=(10, 5))\n", " plt.bar(classification_counts.index, classification_counts.values)\n", " plt.title('Distribution of Classifications')\n", " plt.xlabel('Classification Type')\n", " plt.ylabel('Number of Occurrences')\n", " plt.xticks(rotation=45)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "balanced_data_counts = balanced_data[classification_columns].sum()\n", "balanced_data_counts" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total: 140\n" ] } ], "source": [ "total = balanced_data[\"id\"].count()\n", "print(f\"Total: {total}\")" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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+pi6Vq5cqZw5cyp58uSqUqWKLl68+Mj/w+TJkysgIMB+c3V1tdc4adIkVahQIc59ChQooP79+0uSWrRoodq1a2vw4MFKkyaNfHx81KFDB92/f9++fXR0tIYPH66goCB5eXkpf/78mjt37mOPKwDg0QhSAAC7a9euacWKFercubOSJUsWZ/2TxiF5e3srODhYBw8e1Ndff63vv/9eX331lX1948aNlSFDBu3YsUO7du1Snz595O7uLknq3LmzwsPDtXHjRh04cEAjR45U8uTJ4zxGiRIldOTIEUnSvHnzdPHiRZUoUSLOdsuWLdM777yjatWqac+ePVqzZo3eeOMN+/qIiAgNHTpU+/bt08KFC3X69Gl7WAoMDNS8efMkSUeOHNHFixf19ddfP/I5t2jRQjt37tTixYu1ZcsWGWNUrVq1WAHyzp07GjVqlGbMmKGNGzfq7Nmz+vDDDx/7//g4rVq10qFDh7Rjxw572549e7R//361bNnS3rZmzRodOnRI69ev18yZMzV//nwNHjzYvn748OGaPn26Jk6cqL/++ks9evRQkyZNtGHDBss1AUCiZgAA+D/btm0zksz8+fP/c1tJZsGCBY9d/8UXX5hChQrZl729vU1wcPAjt82bN68ZNGjQI9etW7fOSDLXr183xhhz/fp1I8msW7fOvs3UqVONr6+vfbl48eKmcePG//kcYuzYscNIMrdu3XrkY8Z46623TLdu3Ywxxhw9etRIMps3b7avv3LlivHy8jKzZ8+21yXJHD9+3L7NuHHjjL+//1PVlSlTJvPVV1/Zl6tWrWo6duxoX37//fdNmTJl7MvNmzc3KVOmNGFhYfa2CRMmmOTJk5uoqChz7949kzRpUvPHH3/EepzWrVubRo0aPVVNAIAH6JECANgZY575vrNmzVLJkiUVEBCg5MmT65NPPtHZs2ft63v27Kk2bdqoQoUKGjFihE6cOGFf17VrVw0bNkwlS5bUwIEDtX///v/peezdu1fly5d/7Ppdu3apZs2aypgxo7y9vfXWW29JUqx6/8uhQ4fk5uamokWL2ttSpUql1157TYcOHbK3JU2aVFmyZLEvp0uXzn4aoVVt27bVzJkzde/ePd2/f18///yzWrVqFWub/PnzK2nSpPbl4sWL6/bt2zp37pyOHz+uO3fuqGLFikqePLn9Nn369FjHAwDw3whSAAC7bNmyyWazWZ5QYsuWLWrcuLGqVaumpUuXas+ePerXr1+ssTmDBg3SX3/9perVq2vt2rXKlSuXFixYIElq06aNTp48qaZNm+rAgQMqXLiwvvnmm2d+Hk+aeCIsLEyVK1eWj4+PfvrpJ+3YscNex8P1xpeY0xdj2Gy2Zw6sNWvWlKenpxYsWKAlS5YoIiJC9erVe+r73759W9KDUx/37t1rvx08eJBxUgBgEUEKAGCXMmVKVa5cWePGjVNYWFic9f+eDjzGH3/8oUyZMqlfv34qXLiwsmXLpjNnzsTZLnv27OrRo4dWrVqlOnXqaOrUqfZ1gYGB6tChg+bPn68PPvhA33///TM/j3z58j12qvbDhw/r6tWrGjFihN58803lyJEjTg+Rh4eHJCkqKuqxj5EzZ05FRkZq27Zt9rarV6/qyJEjypUr1zPX/iRubm5q3ry5pk6dqqlTp6phw4ZxQuO+fft09+5d+/LWrVuVPHlyBQYGKleuXPL09NTZs2eVNWvWWLfAwMAEqRkAXlZMfw4AiGXcuHEqWbKk3njjDQ0ZMkT58uVTZGSkVq9erQkTJsQ6bS1GtmzZdPbsWf3yyy8qUqSIli1bZu/lkaS7d++qV69eqlevnoKCgvT3339rx44dqlu3riSpe/fuqlq1qrJnz67r169r3bp1ypkz5zM/h4EDB6p8+fLKkiWLGjZsqMjISP3666/q3bu3MmbMKA8PD33zzTfq0KGD/vzzzzjXhsqUKZNsNpuWLl2qatWqycvLK87kF9myZVOtWrXUtm1bfffdd/L29lafPn30yiuvqFatWs9c+39p06aN/f9m8+bNcdbfv39frVu31ieffKLTp09r4MCB6tKli1xcXOTt7a0PP/xQPXr0UHR0tEqVKqWbN29q8+bN8vHxUfPmzROsbgB42dAjBQCI5dVXX9Xu3btVtmxZffDBB8qTJ48qVqyoNWvWaMKECY+8z9tvv60ePXqoS5cuKlCggP744w/7lNyS5OrqqqtXr6pZs2bKnj273n33XVWtWtU+m1xUVJQ6d+6snDlzqkqVKsqePbvGjx//zM+hTJkymjNnjhYvXqwCBQqoXLly2r59uyQpTZo0Cg4O1pw5c5QrVy6NGDFCo0aNinX/V155RYMHD1afPn3k7++vLl26PPJxpk6dqkKFCqlGjRoqXry4jDH69ddf45zOF5+yZcumEiVKKEeOHLHGZ8UoX768smXLptKlS6tBgwZ6++23NWjQIPv6oUOHqn///ho+fLj9/3vZsmUKCgpKsJoB4GVkM//LyGIAAPBcGWOULVs2derUST179oy1rkWLFrpx44YWLlzomOIAIBHh1D4AAF4Q//zzj3755ReFhITEunYUAOD5I0gBAPCCSJs2rVKnTq1JkyYpRYoUji4HABI1Tu0DAAAAAIuYbAIAAAAALCJIAQAAAIBFBCkAAAAAsIggBQAAAAAWEaQAAAAAwCKCFAAAAABYRJACAAAAAIsIUgAAAABgEUEKAAAAACz6f6jVvBDOClPpAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_distribution(balanced_data_counts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Split dataset" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "train_df, test_df = train_test_split(balanced_data, test_size=0.2, random_state=42)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training data sample size: 112\n", "Test data sample size: 28\n" ] } ], "source": [ "print(\"Training data sample size: \", train_df[\"id\"].count())\n", "print(\"Test data sample size: \", test_df[\"id\"].count())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cache to simplify the execution graph" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "test_df.cache()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_df.cache()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Configure Gemini" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "system_instructions = [\n", " \"\"\"You are a Responsible AI specialist, and analysis harmful content with the objective of filtering such undesired content from the web via your analysis\"\"\",\n", " \"\"\"You will respond only 0s or 1s in JSON format to the following fields: \"toxic\", \"severe_toxic\", \"obscene\", \"threat\", \"insult\", \"identity_hate\" \"\"\"\n", "]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "class ResponseSchema(BaseModel):\n", " toxic: int\n", " severe_toxic: int\n", " obscene: int\n", " threat: int\n", " insult: int\n", " identity_hate: int" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "prompt = \"\"\"\n", "Your task is to analyze comments from the web and classify if the content is related to the following classifications: \"toxic\", \"severe_toxic\", \"obscene\", \"threat\", \"insult\", \"identity_hate\"\n", "Here is the comment you should analyze and generate the structured response with the classifications: \n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def predict(prompt, model_name, max_retries=5, initial_delay=2):\n", "\n", " import time\n", " from google import genai\n", " from google.genai import types\n", " from google.genai.types import HttpOptions\n", "\n", " client = genai.Client(\n", " vertexai=True,\n", " project=PROJECT_ID,\n", " location=\"us-central1\",\n", " http_options=HttpOptions(api_version=\"v1\")\n", " )\n", "\n", " model = model_name\n", "\n", " contents = [\n", " types.Part.from_text(text=prompt)\n", " ]\n", "\n", " generate_content_config = types.GenerateContentConfig(\n", " temperature = 0.5,\n", " max_output_tokens = 1024,\n", " response_mime_type = \"application/json\",\n", " response_schema = ResponseSchema,\n", " safety_settings = [types.SafetySetting(\n", " category = 'HARM_CATEGORY_UNSPECIFIED',\n", " threshold = 'BLOCK_ONLY_HIGH',\n", " )],\n", " system_instruction = system_instructions,\n", " )\n", " \n", " retries, delay = 0, initial_delay\n", " while retries <= max_retries:\n", " try:\n", " response = client.models.generate_content(model=model,\n", " contents=contents,\n", " config=generate_content_config)\n", " return response.text\n", " except Exception:\n", " if retries == max_retries:\n", " return\n", " time.sleep(delay)\n", " delay *= 2\n", " retries += 1\n", " return" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "@bpd.remote_function(\n", " [str, str],\n", " str,\n", " bigquery_connection=CONNECTION_ID,\n", " cloud_function_service_account=\"default\",\n", " packages=[\"google-genai\"]\n", ")\n", "def generate_predictions(prompt: str, model_name: str) -> str:\n", " \n", " prediction = predict(prompt, model_name)\n", " \n", " return prediction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run predictions against the test dataset using Gemini 2.5 Flash (default)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "GEMINI_MODEL = \"gemini-2.5-flash\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "test_df[\"input_prompt\"] = prompt + test_df[\"comment_text\"]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "input_remote_function = test_df[[\"input_prompt\"]].assign(model_name=GEMINI_MODEL)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "predictions = test_df.assign(pred=input_remote_function.apply(generate_predictions, axis=1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Persist this transformed data to BigQuery to simplify the execution graph" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "predictions.to_gbq(destination_table=f\"{PROJECT_ID}.{DATASET_ID}.toxicity_predictions_raw\", if_exists=\"replace\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extract attributes" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "extract_query = f\"CREATE OR REPLACE TABLE {PROJECT_ID}.{DATASET_ID}.toxicity_predictions AS (SELECT *, \" + \"\".join([f\"CAST(JSON_EXTRACT(pred, '$.{col}') AS INT64) AS predicted_{col},\" for col in classification_columns]) + f\" FROM {PROJECT_ID}.{DATASET_ID}.toxicity_predictions_raw)\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "%%bigquery\n", "$extract_query" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "toxicity_predictions = bpd.read_gbq(f\"{PROJECT_ID}.{DATASET_ID}.toxicity_predictions\", use_cache=False)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "tags": [] }, "outputs": [ { "data": { "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", "
idcomment_texttoxicsevere_toxicobscenethreatinsultidentity_hateinput_promptpredpredicted_toxicpredicted_severe_toxicpredicted_obscenepredicted_threatpredicted_insultpredicted_identity_hate
0fc84b525b96f5bc5No he really is a stinking gay rights activist...100011Your task is to analyze comments from the web...{\n", "\"identity_hate\": 1,\n", "\"insult\": 1,\n", "\"obscene\": ...110011
1e19367f9304454eb\" \n", "\n", " :There may be POV issues with showing an ...000000Your task is to analyze comments from the web...{\n", "\"identity_hate\": 0,\n", "\"insult\": 0,\n", "\"obscene\"...000000
26fe2b7e3904620a0== Fair and righteous opinion == \n", "\n", " You are a ...111011Your task is to analyze comments from the web...{\n", "\"identity_hate\": 1,\n", "\"insult\": 1,\n", "\"obscene\": ...111111
34728162570943035:Addendum: I have just returned to find my Use...101010Your task is to analyze comments from the web...{\n", "\"identity_hate\": 0,\n", "\"insult\": 1,\n", "\"obscene\": ...101010
4dc3221f167a7d3f3- I agree with the specific conditions.000000Your task is to analyze comments from the web...{\n", "\"identity_hate\": 0,\n", "\"insult\": 0,\n", "\"obscene\": ...000000
\n", "

5 rows \u00d7 16 columns

\n", "
[5 rows x 16 columns in total]" ], "text/plain": [ " id comment_text toxic \\\n", "0 fc84b525b96f5bc5 No he really is a stinking gay rights activist... 1 \n", "1 e19367f9304454eb \" \n", "\n", " :There may be POV issues with showing an ... 0 \n", "2 6fe2b7e3904620a0 == Fair and righteous opinion == \n", "\n", " You are a ... 1 \n", "3 4728162570943035 :Addendum: I have just returned to find my Use... 1 \n", "4 dc3221f167a7d3f3 - I agree with the specific conditions. 0 \n", "\n", " severe_toxic obscene threat insult identity_hate \\\n", "0 0 0 0 1 1 \n", "1 0 0 0 0 0 \n", "2 1 1 0 1 1 \n", "3 0 1 0 1 0 \n", "4 0 0 0 0 0 \n", "\n", " input_prompt \\\n", "0 \n", "Your task is to analyze comments from the web... \n", "1 \n", "Your task is to analyze comments from the web... \n", "2 \n", "Your task is to analyze comments from the web... \n", "3 \n", "Your task is to analyze comments from the web... \n", "4 \n", "Your task is to analyze comments from the web... \n", "\n", " pred predicted_toxic \\\n", "0 {\n", "\"identity_hate\": 1,\n", "\"insult\": 1,\n", "\"obscene\": ... 1 \n", "1 {\n", "\"identity_hate\": 0,\n", "\"insult\": 0,\n", "\"obscene\"... 0 \n", "2 {\n", "\"identity_hate\": 1,\n", "\"insult\": 1,\n", "\"obscene\": ... 1 \n", "3 {\n", "\"identity_hate\": 0,\n", "\"insult\": 1,\n", "\"obscene\": ... 1 \n", "4 {\n", "\"identity_hate\": 0,\n", "\"insult\": 0,\n", "\"obscene\": ... 0 \n", "\n", " predicted_severe_toxic predicted_obscene predicted_threat \\\n", "0 1 0 0 \n", "1 0 0 0 \n", "2 1 1 1 \n", "3 0 1 0 \n", "4 0 0 0 \n", "\n", " predicted_insult predicted_identity_hate \n", "0 1 1 \n", "1 0 0 \n", "2 1 1 \n", "3 1 0 \n", "4 0 0 \n", "\n", "[5 rows x 16 columns]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "toxicity_predictions.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluate results" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def compute_recall_scores(predictions: DataFrame):\n", "\n", " recall_scores = {}\n", "\n", " for col in classification_columns:\n", " \n", " y_true = predictions[col]\n", " y_pred = predictions[\"predicted_\" + col]\n", " \n", " recall_score = metrics.recall_score(y_true, y_pred, average=None)\n", " recall_scores[col] = recall_score.to_dict()\n", " \n", " return recall_scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "recall_scores = compute_recall_scores(toxicity_predictions)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "recall_scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def compute_precision_scores(predictions: DataFrame):\n", "\n", " precision_scores = {}\n", "\n", " for col in classification_columns:\n", " \n", " y_true = predictions[col]\n", " y_pred = predictions[\"predicted_\" + col]\n", " \n", " precision_score = metrics.precision_score(y_true, y_pred, average=None)\n", " precision_scores[col] = precision_score.to_dict()\n", " \n", " return precision_scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "precision_scores = compute_precision_scores(toxicity_predictions)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "precision_scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def compute_f1_scores(predictions: DataFrame):\n", "\n", " f1_scores = {}\n", "\n", " for col in classification_columns:\n", " \n", " y_true = predictions[col]\n", " y_pred = predictions[\"predicted_\" + col]\n", " \n", " f1_score = metrics.f1_score(y_true, y_pred, average=None)\n", " f1_scores[col] = f1_score.to_dict()\n", " \n", " return f1_scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "f1_scores = compute_f1_scores(toxicity_predictions)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "f1_scores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Finetune Gemini" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Generate a dataset for fine-tuning" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def generate_fine_tuning_dataset(df: DataFrame) -> pd.DataFrame:\n", " \n", " df[\"input_prompt\"] = prompt + df[\"comment_text\"]\n", " fine_tuning_dataset = df.to_pandas()\n", " fine_tuning_dataset['expected_model_output'] = fine_tuning_dataset[classification_columns].apply(lambda row: row.to_json(), axis=1) \n", " \n", " return fine_tuning_dataset" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "fine_tuning_dataset_train = generate_fine_tuning_dataset(train_df)\n", "fine_tuning_dataset_val = generate_fine_tuning_dataset(test_df)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "tags": [] }, "outputs": [ { "data": { "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", "
idcomment_texttoxicsevere_toxicobscenethreatinsultidentity_hateinput_promptexpected_model_output
097003050132a4384FUCK YOU DICK LICKS! \n", "\n", "You guys will never be ...111000Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
1d837f49721876ad9EL OH FUCKING EL. NIGGER YOU THINK YOUR FUNNY....111011Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
271231d24cd28a682Get off your fucking high horse. I'm not a new...111010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
36a6c06ac54c01f31look here \n", "\n", "your a fuckin cunt you czeckoslova...111011Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
4286bcad31c36d1d3sonek \n", "\n", "put princes saly in sonek 4 or clay al...100100Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa...
.................................
107cdbcc8d96aabb699stop grinning u idiot. What I said waz true t...101010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
1088cd53f0520fb3bdcYou are an arse! \n", "\n", "SHUTUP!100010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa...
109c9640ae6ae7bb052you have been blocked for being a pimped out f...101010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
110eca0e12c9c0311cd===Apology=== \n", " I would like to sincerely apol...111110Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
111c95aa516b5b7c177\"\n", "\n", " D\u20acATH TO NORWEGIANS AND ALL ANTI-SE\u2133ITES W...101111Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
\n", "

112 rows \u00d7 10 columns

\n", "
" ], "text/plain": [ " id comment_text \\\n", "0 97003050132a4384 FUCK YOU DICK LICKS! \n", "\n", "You guys will never be ... \n", "1 d837f49721876ad9 EL OH FUCKING EL. NIGGER YOU THINK YOUR FUNNY.... \n", "2 71231d24cd28a682 Get off your fucking high horse. I'm not a new... \n", "3 6a6c06ac54c01f31 look here \n", "\n", "your a fuckin cunt you czeckoslova... \n", "4 286bcad31c36d1d3 sonek \n", "\n", "put princes saly in sonek 4 or clay al... \n", ".. ... ... \n", "107 cdbcc8d96aabb699 stop grinning u idiot. What I said waz true t... \n", "108 8cd53f0520fb3bdc You are an arse! \n", "\n", "SHUTUP! \n", "109 c9640ae6ae7bb052 you have been blocked for being a pimped out f... \n", "110 eca0e12c9c0311cd ===Apology=== \n", " I would like to sincerely apol... \n", "111 c95aa516b5b7c177 \"\n", "\n", " D\u20acATH TO NORWEGIANS AND ALL ANTI-SE\u2133ITES W... \n", "\n", " toxic severe_toxic obscene threat insult identity_hate \\\n", "0 1 1 1 0 0 0 \n", "1 1 1 1 0 1 1 \n", "2 1 1 1 0 1 0 \n", "3 1 1 1 0 1 1 \n", "4 1 0 0 1 0 0 \n", ".. ... ... ... ... ... ... \n", "107 1 0 1 0 1 0 \n", "108 1 0 0 0 1 0 \n", "109 1 0 1 0 1 0 \n", "110 1 1 1 1 1 0 \n", "111 1 0 1 1 1 1 \n", "\n", " input_prompt \\\n", "0 \n", "Your task is to analyze comments from the web... \n", "1 \n", "Your task is to analyze comments from the web... \n", "2 \n", "Your task is to analyze comments from the web... \n", "3 \n", "Your task is to analyze comments from the web... \n", "4 \n", "Your task is to analyze comments from the web... \n", ".. ... \n", "107 \n", "Your task is to analyze comments from the web... \n", "108 \n", "Your task is to analyze comments from the web... \n", "109 \n", "Your task is to analyze comments from the web... \n", "110 \n", "Your task is to analyze comments from the web... \n", "111 \n", "Your task is to analyze comments from the web... \n", "\n", " expected_model_output \n", "0 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "1 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "2 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "3 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "4 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", ".. ... \n", "107 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "108 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "109 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "110 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "111 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "\n", "[112 rows x 10 columns]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fine_tuning_dataset_train" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "tags": [] }, "outputs": [ { "data": { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idcomment_texttoxicsevere_toxicobscenethreatinsultidentity_hateinput_promptexpected_model_output
083bda5fa72211a52:::you can't get no satisfaction and the artic...000000Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
12f784baa117cfef7\"well wat i think of halo 4 is the best game e...100000Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa...
2fc84b525b96f5bc5No he really is a stinking gay rights activist...100011Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa...
379412a691165763dfuck this motherfucker asshole \n", "\n", "This asshole ...111010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
44728162570943035:Addendum: I have just returned to find my Use...101010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
5a96dbeef4bb6b1beContd \n", "\n", "scoundrel the block on padmalskhmi was...000110Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
6779a3066bb1bf2d7Fuck you people are dumb.... Facebook IS a pub...101010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
757f9d99c423cfa09thanks for deleting my page you fucking cock s...111110Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
8faebd256d585a0eeMexican dickhead \n", "\n", " You and your family should...101111Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
92a2805dc384e9b60Also, I Ohnoitsjamie am a homosexual who likes...111001Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
108bc9704335d6e58c== STUPID SITE == \n", "\n", " THIS IS THE STUPIDEST FUC...101010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
11dc3221f167a7d3f3- I agree with the specific conditions.000000Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
12d99a8dc9ab0c7e32Just be quiet. \n", "\n", "Who the fuck are you to tell ...111000Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
132091f9acb4fe07ebSomeguy please help block/unblock, thank you. ...000000Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
14e56efae2d376b646sarah palin is a fucking bitch \n", "\n", "this stupid n...101111Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
159a6ff7868ef4563dFUCK ALL YOU CAMEL JOCKEY PUSSY LICKING DINK L...111010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
16e19367f9304454eb\" \n", "\n", " :There may be POV issues with showing an ...000000Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
17a0fad19dfafba43a\" \n", "\n", " ==Now Nawaf== \n", " A few questions, since I'...000000Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
1865f3e7fec1a650f3Dahlia Tal does die \n", "\n", "Dahlia Tal does die. If ...100000Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa...
192b0603353a747511I agree dude you should fuckin change shit. \n", " ...101011Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
206fe2b7e3904620a0== Fair and righteous opinion == \n", "\n", " You are a ...111011Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
210598e041cdc3ea2fOh, I also take 1000% responsibility. I am a w...101110Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
222fb0f7fc9c52c989Suck my dick \n", "\n", "I assure you, my semen is consi...101010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
23bf8b1e93498277afstupid sit i will behead you111110Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa...
24a97eabb625eb4f37Rklaton is faggot and loves to suck cock and g...101011Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
25435eaff72eefb45f\" 2006 (UTC)\n", "\n", "I agree with the \"\"it's like dif...000000Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
269362f7009061c7c9\" \n", " fuck you i'm pissed off that you say i sho...101010Your task is to analyze comments from the web...{\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa...
27ab10e624635246a3\"\n", " I don't want to surf to 5 different pages t...000000Your task is to analyze comments from the web...{\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa...
\n", "
" ], "text/plain": [ " id comment_text \\\n", "0 83bda5fa72211a52 :::you can't get no satisfaction and the artic... \n", "1 2f784baa117cfef7 \"well wat i think of halo 4 is the best game e... \n", "2 fc84b525b96f5bc5 No he really is a stinking gay rights activist... \n", "3 79412a691165763d fuck this motherfucker asshole \n", "\n", "This asshole ... \n", "4 4728162570943035 :Addendum: I have just returned to find my Use... \n", "5 a96dbeef4bb6b1be Contd \n", "\n", "scoundrel the block on padmalskhmi was... \n", "6 779a3066bb1bf2d7 Fuck you people are dumb.... Facebook IS a pub... \n", "7 57f9d99c423cfa09 thanks for deleting my page you fucking cock s... \n", "8 faebd256d585a0ee Mexican dickhead \n", "\n", " You and your family should... \n", "9 2a2805dc384e9b60 Also, I Ohnoitsjamie am a homosexual who likes... \n", "10 8bc9704335d6e58c == STUPID SITE == \n", "\n", " THIS IS THE STUPIDEST FUC... \n", "11 dc3221f167a7d3f3 - I agree with the specific conditions. \n", "12 d99a8dc9ab0c7e32 Just be quiet. \n", "\n", "Who the fuck are you to tell ... \n", "13 2091f9acb4fe07eb Someguy please help block/unblock, thank you. ... \n", "14 e56efae2d376b646 sarah palin is a fucking bitch \n", "\n", "this stupid n... \n", "15 9a6ff7868ef4563d FUCK ALL YOU CAMEL JOCKEY PUSSY LICKING DINK L... \n", "16 e19367f9304454eb \" \n", "\n", " :There may be POV issues with showing an ... \n", "17 a0fad19dfafba43a \" \n", "\n", " ==Now Nawaf== \n", " A few questions, since I'... \n", "18 65f3e7fec1a650f3 Dahlia Tal does die \n", "\n", "Dahlia Tal does die. If ... \n", "19 2b0603353a747511 I agree dude you should fuckin change shit. \n", " ... \n", "20 6fe2b7e3904620a0 == Fair and righteous opinion == \n", "\n", " You are a ... \n", "21 0598e041cdc3ea2f Oh, I also take 1000% responsibility. I am a w... \n", "22 2fb0f7fc9c52c989 Suck my dick \n", "\n", "I assure you, my semen is consi... \n", "23 bf8b1e93498277af stupid sit i will behead you \n", "24 a97eabb625eb4f37 Rklaton is faggot and loves to suck cock and g... \n", "25 435eaff72eefb45f \" 2006 (UTC)\n", "\n", "I agree with the \"\"it's like dif... \n", "26 9362f7009061c7c9 \" \n", " fuck you i'm pissed off that you say i sho... \n", "27 ab10e624635246a3 \"\n", " I don't want to surf to 5 different pages t... \n", "\n", " toxic severe_toxic obscene threat insult identity_hate \\\n", "0 0 0 0 0 0 0 \n", "1 1 0 0 0 0 0 \n", "2 1 0 0 0 1 1 \n", "3 1 1 1 0 1 0 \n", "4 1 0 1 0 1 0 \n", "5 0 0 0 1 1 0 \n", "6 1 0 1 0 1 0 \n", "7 1 1 1 1 1 0 \n", "8 1 0 1 1 1 1 \n", "9 1 1 1 0 0 1 \n", "10 1 0 1 0 1 0 \n", "11 0 0 0 0 0 0 \n", "12 1 1 1 0 0 0 \n", "13 0 0 0 0 0 0 \n", "14 1 0 1 1 1 1 \n", "15 1 1 1 0 1 0 \n", "16 0 0 0 0 0 0 \n", "17 0 0 0 0 0 0 \n", "18 1 0 0 0 0 0 \n", "19 1 0 1 0 1 1 \n", "20 1 1 1 0 1 1 \n", "21 1 0 1 1 1 0 \n", "22 1 0 1 0 1 0 \n", "23 1 1 1 1 1 0 \n", "24 1 0 1 0 1 1 \n", "25 0 0 0 0 0 0 \n", "26 1 0 1 0 1 0 \n", "27 0 0 0 0 0 0 \n", "\n", " input_prompt \\\n", "0 \n", "Your task is to analyze comments from the web... \n", "1 \n", "Your task is to analyze comments from the web... \n", "2 \n", "Your task is to analyze comments from the web... \n", "3 \n", "Your task is to analyze comments from the web... \n", "4 \n", "Your task is to analyze comments from the web... \n", "5 \n", "Your task is to analyze comments from the web... \n", "6 \n", "Your task is to analyze comments from the web... \n", "7 \n", "Your task is to analyze comments from the web... \n", "8 \n", "Your task is to analyze comments from the web... \n", "9 \n", "Your task is to analyze comments from the web... \n", "10 \n", "Your task is to analyze comments from the web... \n", "11 \n", "Your task is to analyze comments from the web... \n", "12 \n", "Your task is to analyze comments from the web... \n", "13 \n", "Your task is to analyze comments from the web... \n", "14 \n", "Your task is to analyze comments from the web... \n", "15 \n", "Your task is to analyze comments from the web... \n", "16 \n", "Your task is to analyze comments from the web... \n", "17 \n", "Your task is to analyze comments from the web... \n", "18 \n", "Your task is to analyze comments from the web... \n", "19 \n", "Your task is to analyze comments from the web... \n", "20 \n", "Your task is to analyze comments from the web... \n", "21 \n", "Your task is to analyze comments from the web... \n", "22 \n", "Your task is to analyze comments from the web... \n", "23 \n", "Your task is to analyze comments from the web... \n", "24 \n", "Your task is to analyze comments from the web... \n", "25 \n", "Your task is to analyze comments from the web... \n", "26 \n", "Your task is to analyze comments from the web... \n", "27 \n", "Your task is to analyze comments from the web... \n", "\n", " expected_model_output \n", "0 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "1 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "2 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "3 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "4 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "5 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "6 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "7 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "8 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "9 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "10 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "11 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "12 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "13 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "14 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "15 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "16 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "17 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "18 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "19 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "20 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "21 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "22 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "23 {\"toxic\":1,\"severe_toxic\":1,\"obscene\":1,\"threa... \n", "24 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "25 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... \n", "26 {\"toxic\":1,\"severe_toxic\":0,\"obscene\":1,\"threa... \n", "27 {\"toxic\":0,\"severe_toxic\":0,\"obscene\":0,\"threa... " ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fine_tuning_dataset_val" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def generate_records(df: pd.DataFrame, system_instructions: List) -> List:\n", " \n", " records = []\n", "\n", " for index, row in df.iterrows():\n", "\n", " input_prompt = row['input_prompt']\n", " expected_model_output = row['expected_model_output']\n", "\n", " record = {\n", " \"systemInstruction\": {\n", " \"role\": \"system\",\n", " \"parts\": [ { \"text\": system_instruction } for system_instruction in system_instructions ]\n", " },\n", " \"contents\": [\n", " { \"role\": \"user\", \"parts\": [ { \"text\": input_prompt } ] },\n", " { \"role\": \"model\", \"parts\": [ { \"text\": expected_model_output } ] } ] \n", " }\n", "\n", " records.append(record)\n", " \n", " return records" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "train_records = generate_records(fine_tuning_dataset_train, system_instructions)\n", "val_records = generate_records(fine_tuning_dataset_val, system_instructions)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fine-tuning train dataset size: 112\n", "Fine-tuning validation dataset size: 28\n" ] } ], "source": [ "print(\"Fine-tuning train dataset size: \", len(train_records))\n", "print(\"Fine-tuning validation dataset size: \", len(val_records))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Upload to GCS" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "BUCKET_NAME = \"\"\n", "\n", "TRAIN_FILE_NAME = \"fine-tuning-train-dataset.jsonl\"\n", "VAL_FILE_NAME = \"fine-tuning-val-dataset.jsonl\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def upload_gcs(records: List, file_name: str, bucket_name: str = BUCKET_NAME, project_id: str = PROJECT_ID) -> str:\n", " \n", " storage_client = storage.Client(project=project_id)\n", " bucket = storage_client.bucket(bucket_name)\n", " blob = bucket.blob(file_name)\n", "\n", " jsonl_data = \"\\n\".join(json.dumps(item) for item in records)\n", " blob.upload_from_string(jsonl_data)\n", " \n", " uri = f\"gs://{bucket_name}/{file_name}\"\n", "\n", " return uri" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "uri_train = upload_gcs(train_records, TRAIN_FILE_NAME)\n", "uri_val = upload_gcs(val_records, VAL_FILE_NAME)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Run Vertex AI Supervised Fine Tuning job" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "client = genai.Client(\n", " vertexai=True,\n", " project=PROJECT_ID,\n", " location=\"us-central1\"\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "GEMINI_MODEL = \"gemini-2.5-flash\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "tuning_job = client.tunings.tune(\n", " base_model = GEMINI_MODEL,\n", " training_dataset = types.TuningDataset(gcs_uri = uri_train),\n", " config=types.CreateTuningJobConfig(\n", " epoch_count= 8,\n", " tuned_model_display_name=\"tuned_gemini_2_5_flash\",\n", " adapter_size = \"ADAPTER_SIZE_FOUR\",\n", " learning_rate_multiplier = 0.8,\n", " validation_dataset = types.TuningDataset(gcs_uri = uri_val)\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "while not tuning_job.has_ended:\n", " time.sleep(30)\n", " tuning_job = client.tunings.get(name=tuning_job.name)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "print(tuning_job.tuned_model.model)\n", "print(tuning_job.tuned_model.endpoint)\n", "print(tuning_job.experiment)" ] }, { "cell_type": "markdown", "metadata": { "id": "Fx4lsNqMorJ-" }, "source": [ "## Run predictions against the test dataset using Gemini (fine-tuned)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "input_remote_function_tuned = test_df[[\"input_prompt\"]].assign(model_name=tuning_job.tuned_model.endpoint)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "predictions_tuned = test_df.assign(pred=input_remote_function_tuned.apply(generate_predictions, axis=1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "predictions_tuned.to_gbq(destination_table=f\"{PROJECT_ID}.{DATASET_ID}.toxicity_predictions_finetuned_raw\", if_exists=\"replace\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "extract_query = f\"CREATE OR REPLACE TABLE {PROJECT_ID}.{DATASET_ID}.toxicity_predictions_finetuned AS (SELECT *, \" + \"\".join([f\"CAST(JSON_EXTRACT(pred, '$.{col}') AS INT64) AS predicted_{col},\" for col in classification_columns]) + f\" FROM {PROJECT_ID}.{DATASET_ID}.toxicity_predictions_finetuned_raw)\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "%%bigquery\n", "$extract_query" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "toxicity_predictions_tuned = bpd.read_gbq(f\"{PROJECT_ID}.{DATASET_ID}.toxicity_predictions_finetuned\", use_cache=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluate results" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "recall_scores_tuned = compute_recall_scores(toxicity_predictions_tuned)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "recall_scores_tuned" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "precision_scores_tuned = compute_precision_scores(toxicity_predictions_tuned)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "precision_scores_tuned" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "f1_scores_tuned = compute_f1_scores(toxicity_predictions_tuned)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "f1_scores_tuned" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prediction results difference between Gemini vs Gemini Fine Tuned" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "def plot_differences(title, gemini_scores, gemini_finetuned_scores):\n", " \n", " categories = list(gemini_scores.keys())\n", " \n", " gemini_scores = [np.mean(list(v.values())) for v in gemini_scores.values()]\n", " gemini_finetuned_scores = [np.mean(list(v.values())) for v in gemini_finetuned_scores.values()]\n", "\n", " differences = [m1 - m2 for m1, m2 in zip(gemini_scores, gemini_finetuned_scores)] \n", "\n", " bar_width = 0.35\n", " index = np.arange(len(categories))\n", "\n", " fig, ax = plt.subplots()\n", " rects1 = ax.bar(index, gemini_scores, bar_width, label='Gemini 2.5 Flash')\n", " rects2 = ax.bar(index + bar_width, gemini_finetuned_scores, bar_width, label='Gemini 2.5 Flash Fine Tuned')\n", "\n", " ax.set_xlabel('Classification')\n", " ax.set_ylabel('Score value')\n", " ax.set_title(title)\n", " ax.set_xticks(index + bar_width / 2)\n", " ax.set_xticklabels(categories, rotation=45, ha='right')\n", " ax.legend()\n", "\n", " fig.tight_layout()\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Precision Score" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_differences(\"Precision score differences\", precision_scores, precision_scores_tuned)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Recall Score" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_differences(\"Recall differences\", recall_scores, recall_scores_tuned)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### F1 Score" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcXBJREFUeJzt3XlcTfn/B/DXbS+tpLKkyBqyhGTfs69jX0O2GPtgsodkrGPfsjNZG8aWsRt7IYOilGwJmaK03s/vD7/O11Xoprq6Xs/Ho8d0z/mcc973uHN63c85n3NkQggBIiIiIsr3NFRdABERERHlDAY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoLBjoiIiEhNMNgRERERqQkGOyKiHLJ582bIZDJERERI0xo1aoRGjRoptHvx4gV++uknFCpUCDKZDEuXLgUAPHjwAC1atICJiQlkMhn8/PzyrHYiUg8MdkQ/uPQwktnP5MmTpXb+/v4YNGgQKlWqBE1NTdja2iq1nXfv3mHGjBmoVKkSChQogEKFCqFq1aoYPXo0nj17lsPv6vs2duxYHD9+HFOmTMG2bdvQsmVLAED//v1x+/ZtzJ07F9u2bUONGjVUXCkR5Tdaqi6AiL4Ps2fPRsmSJRWmVapUSfp9586d8PX1RfXq1VG0aFGl1p2SkoIGDRogODgY/fv3x6hRo/Du3TvcuXMHO3fuRKdOnZReZ37h7++fYdqpU6fQoUMHTJgwQZr2/v17XLp0CR4eHhg5cmRelkhEaoTBjogAAK1atfpiD9G8efOwfv16aGtro23btvj333+zvG4/Pz/cuHEDO3bsQK9evRTmJSYmIjk5Odt1Kys+Ph4FChTIs+3p6OhkmBYdHQ1TU1OFaS9fvgSADNO/RWJiInR0dKChwZMzRD8K/t9ORFlStGhRaGtrZ2vZsLAwAEDdunUzzNPT04OxsbHCtODgYHTr1g2FCxeGvr4+ypUrBw8PD4U2N27cQKtWrWBsbAxDQ0M0bdoUly9fVmiTfpr57NmzGDFiBCwsLFC8eHFp/tGjR1G/fn0UKFAARkZGaNOmDe7cuZOl93Tnzh00adIE+vr6KF68OObMmQO5XJ6h3cfX2KXXI4TAypUrpVPeM2fOhI2NDQBg4sSJkMlkCqe6nz59ioEDB8LS0hK6urqoWLEifHx8FLZz5swZyGQy/PHHH5g6dSqKFSsGAwMDxMXFAQCuXLmCli1bwsTEBAYGBmjYsCH++ecfhXXMnDkTMpkMoaGhGDBgAExNTWFiYgJXV1ckJCRkeG/bt29HrVq1YGBgADMzMzRo0CBDD2VW9nFUVBRcXV1RvHhx6OrqokiRIujQoYPCtYpElDXssSMiAEBsbCxevXqlMM3c3DxH1p0eWrZu3YqpU6dCJpN9tm1QUBDq168PbW1tDBkyBLa2tggLC8OhQ4cwd+5cAB9CVf369WFsbIxffvkF2traWLt2LRo1aoSzZ8/CyclJYZ0jRoxA4cKFMX36dMTHxwMAtm3bhv79+8PFxQXe3t5ISEjA6tWrUa9ePdy4ceOL1xBGRUWhcePGSE1NxeTJk1GgQAGsW7cO+vr6X9wPDRo0wLZt29C3b180b94c/fr1AwA4ODjA1NQUY8eORc+ePdG6dWsYGhoC+DDQonbt2pDJZBg5ciQKFy6Mo0ePYtCgQYiLi8OYMWMUtuHp6QkdHR1MmDABSUlJ0NHRwalTp9CqVSs4OjpixowZ0NDQwKZNm9CkSROcP38etWrVUlhHt27dULJkSXh5eSEwMBAbNmyAhYUFvL29pTazZs3CzJkzUadOHcyePRs6Ojq4cuUKTp06hRYtWii1j7t06YI7d+5g1KhRsLW1RXR0NE6cOIHIyEilr+Uk+uEJIvqhbdq0SQDI9Odz2rRpI2xsbLK8jYSEBFGuXDkBQNjY2IgBAwaIjRs3ihcvXmRo26BBA2FkZCQePXqkMF0ul0u/d+zYUejo6IiwsDBp2rNnz4SRkZFo0KBBhvdWr149kZqaKk1/+/atMDU1FW5ubgrbiIqKEiYmJhmmf2rMmDECgLhy5Yo0LTo6WpiYmAgAIjw8XJresGFD0bBhQ4XlAQh3d3eFaeHh4QKA+O233xSmDxo0SBQpUkS8evVKYXqPHj2EiYmJSEhIEEIIcfr0aQFAlCpVSpomxIf9VqZMGeHi4qKwDxMSEkTJkiVF8+bNpWkzZswQAMTAgQMVttWpUydRqFAh6fWDBw+EhoaG6NSpk0hLS1Nom76NrO7jN2/eZPq+iSh7eCqWiAAAK1euxIkTJxR+coq+vj6uXLmCiRMnAvhwSnLQoEEoUqQIRo0ahaSkJAAfrjM7d+4cBg4ciBIlSiisI72XLy0tDf7+/ujYsSNKlSolzS9SpAh69eqFCxcuSKcf07m5uUFTU1N6feLECfz333/o2bMnXr16Jf1oamrCyckJp0+f/uL7OXLkCGrXrq3Q01W4cGH07t07G3vn84QQ2LdvH9q1awchhEKtLi4uiI2NRWBgoMIy/fv3V+g5vHnzJh48eIBevXrh9evX0vLx8fFo2rQpzp07l+EU8rBhwxRe169fH69fv5b2q5+fH+RyOaZPn57h+r30f6es7mN9fX3o6OjgzJkzePPmTc7sOKIfGE/FEhEAoFatWrl6ew0TExMsWLAACxYswKNHj3Dy5EksXLgQK1asgImJCebMmYOHDx8CUByN+6mXL18iISEB5cqVyzCvQoUKkMvlePz4MSpWrChN/3S074MHDwAATZo0yXQbn17z96lHjx5lON0LINOavsXLly/x33//Yd26dVi3bl2mbaKjoxVef+699u/f/7PbiY2NhZmZmfT601CdPu/NmzcwNjZGWFgYNDQ0YG9v/9l1ZnUf6+rqwtvbG+PHj4elpSVq166Ntm3bol+/frCysvrs+okocwx2RJTnbGxsMHDgQHTq1AmlSpXCjh07MGfOnFzb3qfXvqX3UG3bti3T8KCl9X0cGtPr7NOnz2eDmYODg8Lrz73X3377DVWrVs10HenX86X7uHfzY0KIr9b86Xazso/HjBmDdu3awc/PD8ePH8e0adPg5eWFU6dOoVq1alneJhEx2BGRCpmZmcHOzk66dUr6qdUv3UqlcOHCMDAwQEhISIZ5wcHB0NDQgLW19Re3a2dnBwCwsLBAs2bNlK7bxsZG6pH6WGY1fYvChQvDyMgIaWlp2aoT+N97NTY2zvY6MlunXC7H3bt3PxsWld3HdnZ2GD9+PMaPH48HDx6gatWqWLRoEbZv354jNRP9KHiNHRHlulu3bmUYcQt8OKV59+5d6RRm4cKF0aBBA/j4+CAyMlKhbXpvkaamJlq0aIE///xT4XYYL168wM6dO1GvXr2vnkp1cXGBsbEx5s2bh5SUlAzz0+8p9zmtW7fG5cuXcfXqVYVlduzY8cXllKWpqYkuXbpg3759mYbdr9UJAI6OjrCzs8PChQvx7t27bK3jUx07doSGhgZmz56d4fq89H+nrO7jhIQEJCYmKsyzs7ODkZGRdO0lEWUde+yIKEuCgoJw8OBBAEBoaChiY2Ol06dVqlRBu3btPrvsiRMnMGPGDLRv3x61a9eGoaEhHj58CB8fHyQlJWHmzJlS299//x316tVD9erVMWTIEJQsWRIRERE4fPgwbt68CQCYM2cOTpw4gXr16mHEiBHQ0tLC2rVrkZSUhAULFnz1vRgbG2P16tXo27cvqlevjh49eqBw4cKIjIzE4cOHUbduXaxYseKzy//yyy/So8BGjx4t3e7ExsYGQUFBWdibWTd//nycPn0aTk5OcHNzg729PWJiYhAYGIi///4bMTExX1xeQ0MDGzZsQKtWrVCxYkW4urqiWLFiePr0KU6fPg1jY2McOnRIqZpKly4NDw8PeHp6on79+ujcuTN0dXVx7do1FC1aFF5eXlnex/fv30fTpk3RrVs32NvbQ0tLCwcOHMCLFy/Qo0ePb9l1RD8mlY7JJSKVS78lyLVr17LULrOf/v37f3HZhw8fiunTp4vatWsLCwsLoaWlJQoXLizatGkjTp06laH9v//+Kzp16iRMTU2Fnp6eKFeunJg2bZpCm8DAQOHi4iIMDQ2FgYGBaNy4sbh48aJS7+306dPCxcVFmJiYCD09PWFnZycGDBggrl+//sX3I4QQQUFBomHDhkJPT08UK1ZMeHp6io0bN+b47U6EEOLFixfC3d1dWFtbC21tbWFlZSWaNm0q1q1bp/BeAIg9e/ZkWu+NGzdE586dRaFChYSurq6wsbER3bp1EydPnpTapN/u5OXLlwrLpu/Hj9+XEEL4+PiIatWqCV1dXWFmZiYaNmwoTpw4odDma/v41atXwt3dXZQvX14UKFBAmJiYCCcnJ7F79+5M3wcRfZlMCCWuhiUiIiKi7xavsSMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmfrgbFMvlcjx79gxGRkaQyWSqLoeIiIjoi4QQePv2LYoWLQoNjS/3yf1wwe7Zs2dffY4kERER0ffm8ePHKF68+Bfb/HDBzsjICMCHnfO150kSERERqVpcXBysra2lDPMlP1ywSz/9amxszGBHRERE+UZWLiHj4AkiIiIiNcFgR0RERKQmGOyIiIiI1MQPd40dEZG6kcvlSE5OVnUZRJRN2tra0NTUzJF1MdgREeVjycnJCA8Ph1wuV3UpRPQNTE1NYWVl9c332GWwIyLKp4QQeP78OTQ1NWFtbf3VG5cS0fdHCIGEhARER0cDAIoUKfJN62OwIyLKp1JTU5GQkICiRYvCwMBA1eUQUTbp6+sDAKKjo2FhYfFNp2X59Y6IKJ9KS0sDAOjo6Ki4EiL6VulfzlJSUr5pPQx2RET5HJ97TZT/5dT/xwx2RERERGqCwY6IiH44MpkMfn5+WW6/efNmmJqa5lo9OcnW1hZLly7NkXWdOXMGMpkM//33X46sj3IfB08QEakZ28mH83R7EfPbKL1MVFQUvLy8cPjwYTx58gQmJiYoXbo0+vTpg/79++f6YJDnz5/DzMwsy+27d++O1q1bf3Z+REQEPD09cerUKURFRaFo0aLo06cPPDw8vngNZKNGjXD27FmFaUOHDsWaNWuUWgb4cG2Wlhb/rP/o+AkgIqI89fDhQ9StWxempqaYN28eKleuDF1dXdy+fRvr1q1DsWLF0L59+1ytwcrKSqn2+vr60sjFzAQHB0Mul2Pt2rUoXbo0/v33X7i5uSE+Ph4LFy784rrd3Nwwe/Zs6XVWQu2nywBgqCMADHZE9BV53fvzsez0BNH3b8SIEdDS0sL169dRoEABaXqpUqXQoUMHCCGkaf/99x8mTJiAP//8E0lJSahRowaWLFmCKlWqAABmzpwJPz8//Pzzz5g5cyZiYmLQr18/LF++HIsWLcLixYshl8sxevRoeHh4SOuVyWQ4cOAAOnbsiIiICJQsWRL79u3D8uXLceXKFZQpUwZr1qyBs7MzgA+nYseMGfPZU5ItW7ZEy5YtFd5LSEgIVq9e/dVgZ2BgoHTQVGaZxYsXY9OmTXj48CEKFiyIdu3aYcGCBTA0NAQAPHr0CCNHjsSFCxeQnJwMW1tb/Pbbbwo9lAEBAZg0aRLu3r2LqlWrYtOmTShXrpxSNVPe4DV2RESUZ16/fg1/f3+4u7srhLqPfTw6sGvXroiOjsbRo0cREBCA6tWro2nTpoiJiZHahIWF4ejRozh27Bh27dqFjRs3ok2bNnjy5AnOnj0Lb29vTJ06FVeuXPlibR4eHpgwYQJu3ryJsmXLomfPnkhNTc32e42NjUXBggW/2m7Hjh0wNzdHpUqVMGXKFCQkJGR7m5nR0NDA77//jjt37mDLli04deoUfvnlF2m+u7s7kpKScO7cOdy+fRve3t5S6Evn4eGBRYsW4fr169DS0sLAgQNztEbKOeyxIyKiPBMaGgohRIbeHnNzcyQmJgL4EDS8vb1x4cIFXL16FdHR0dDV1QUALFy4EH5+fti7dy+GDBkC4MOzcn18fGBkZAR7e3s0btwYISEhOHLkCDQ0NFCuXDl4e3vj9OnTcHJy+mxtEyZMQJs2H3qJZ82ahYoVKyI0NBTly5fP1vtcvnz5V3vrevXqBRsbGxQtWhRBQUGYNGkSQkJCsH///i8ut2rVKmzYsEF6PXToUCxatCjTtmPGjJF+t7W1xZw5czBs2DCsWrUKABAZGYkuXbqgcuXKAD70Nn5q7ty5aNiwIQBg8uTJaNOmDRITE6Gnp/fFOinvMdgREZHKXb16FXK5HL1790ZSUhIA4NatW3j37h0KFSqk0Pb9+/cICwuTXtva2sLIyEh6bWlpCU1NTYVHrFlaWkqPbPocBwcH6ff0xzpFR0crHeyePn2Kli1bomvXrnBzc/ti2/RwCgCVK1dGkSJF0LRpU4SFhcHOzu6zy/Xu3Vvh1PKXRuz+/fff8PLyQnBwMOLi4pCamorExEQkJCTAwMAAP//8M4YPHw5/f380a9YMXbp0UdgXwOf3TYkSJb74/ijvMdgREVGeKV26NGQyGUJCQhSmp/cSfTxA4d27dyhSpAjOnDmTYT0fBxltbW2FeTKZLNNpcrn8i7V9vEz66eCvLfOpZ8+eoXHjxqhTpw7WrVun1LIApB7F0NDQLwa79FHEXxMREYG2bdti+PDhmDt3LgoWLIgLFy5g0KBBSE5OhoGBAQYPHgwXFxccPnwY/v7+8PLywqJFizBq1ChpPTmxbyhv8Bo7IiLKM4UKFULz5s2xYsUKxMfHf7Ft9erVERUVBS0tLZQuXVrhx9zcPI8qzrqnT5+iUaNGcHR0xKZNmxR6DLPq5s2bAL79QfDpAgICIJfLsWjRItSuXRtly5bFs2fPMrSztrbGsGHDsH//fowfPx7r16/Pke1T3mOwIyKiPLVq1SqkpqaiRo0a8PX1xb179xASEoLt27cjODhYegB6s2bN4OzsjI4dO8Lf3x8RERG4ePEiPDw8cP36dRW/C0Xpoa5EiRJYuHAhXr58iaioKERFRSm0KV++PK5evQrgw6APT09PBAQEICIiAgcPHkS/fv3QoEGDDKdCs6t06dJISUnB8uXL8fDhQ2zbti3DPfLGjBmD48ePIzw8HIGBgTh9+jQqVKiQI9unvMdTsURElKfs7Oxw48YNzJs3D1OmTMGTJ0+gq6sLe3t7TJgwASNGjADw4ZTfkSNH4OHhAVdXV7x8+RJWVlZo0KABLC0tVfwuFJ04cQKhoaEIDQ1F8eLFFeal374lJSUFISEh0qhXHR0d/P3331i6dCni4+NhbW2NLl26YOrUqTlWV5UqVbB48WJ4e3tjypQpaNCgAby8vNCvXz+pTVpaGtzd3fHkyRMYGxujZcuWWLJkSY7VQHlLJj6+YdAPIC4uDiYmJoiNjYWxsbGqyyH67vE+drkvu/u4mJEmZja2gEXR4pBpff7pBl/iUNw0W8sRUc5KTExEeHg4SpYsmWG0sTLZhadiiYiIiNQEgx0RERGRmuA1dkRERPTNgp78p7JtO2iEq2zbAICi1VS7/Y8w2BHR92umiQq3Hau6bRMRZRNPxRIRERGpCQY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyKiH45MJoOfn1+W22/evBmmpqa5Vk9OsrW1xdKlS3NkXWfOnIFMJsN///2XI+t7+jgSVazNEHzndo6sLz/J6X35ObzdCRGRmnHYYJO3G8zGrWGioqLg5eWFw4cP48mTJzAxMUHp0qXRp08f9O/fHwYGBrlQ6P88f/4cZmZmWW7fvXt3tG7d+rPzIyIi4OnpiVOnTiEqKgpFixZFnz594OHhAR2dzz/urVGjRjh79qzCtKFDh2LNmjVKLQN8eBatltb38We9inXGfVu1phN89hzGyYBgmBYslGvbtnVqg0dPnn92fv+u7bB56axc276qfR+fACIi+mE8fPgQdevWhampKebNm4fKlStDV1cXt2/fxrp161CsWDG0b98+V2uwsrJSqr2+vj709fU/Oz84OBhyuRxr165F6dKl8e+//8LNzQ3x8fFYuHDhF9ft5uaG2bNnS6+zEmo/XQbAdxPq0s1etBJ1GzWVXmtr60BTUxPmFpa5ut1rR7YjLS0NAHDx+i10cZuIkHMHYGxUAACgr6ebq9tXNZ6KJSKiPDVixAhoaWnh+vXr6NatGypUqIBSpUqhQ4cOOHz4MNq1aye1/e+//zB48GAULlwYxsbGaNKkCW7duiXNnzlzJqpWrQofHx+UKFEChoaGGDFiBNLS0rBgwQJYWVnBwsICc+fOVajh41OxERERkMlk2L9/Pxo3bgwDAwNUqVIFly5dktp/7VRsy5YtsWnTJrRo0QKlSpVC+/btMWHCBOzfv/+r+8PAwABWVlbSz9ce8p7ZMl8KqosXL0blypVRoEABWFtbY8SIEXj37p00/9GjR2jXrh3MzMxQoEABVKxYEUeOHFFYR0BAAGrUqAEDAwPUqVMHISEhX63RyNgE5haW0o+JmVmGU7HXLl1AFWszXLlwFj1bN4ZTmaLo17EFIsIeKKzr9PEj6N6qIWqWtkLrulWxZok3UlNTM91u4UJmsLIwh5WFOQqafrjJuYV5QVhZmOPY6YuwcWqj0N7v2GnIilWXXs9ctAZVm/fAtr1/wdapDUzKN0CP4ZPx9l281EYul8NruQ9K1m4LfTtnVKlSBXv37lVY75EjR1C2bFno6+ujcePGiIiI+Oo+ywkMdkRElGdev34Nf39/uLu7o0CBApm2kclk0u9du3ZFdHQ0jh49ioCAAFSvXh1NmzZFTEyM1CYsLAxHjx7FsWPHsGvXLmzcuBFt2rTBkydPcPbsWXh7e2Pq1Km4cuXKF2vz8PDAhAkTcPPmTZQtWxY9e/b8bHjIitjYWBQsWPCr7Xbs2AFzc3NUqlQJU6ZMQUJCQra3mRkNDQ38/vvvuHPnDrZs2YJTp07hl19+kea7u7sjKSkJ586dw+3bt+Ht7Q1DQ0OFdXh4eGDRokW4fv06tLS0MHDgwBytcfmCORg/bQ52Hj4FTU0tzJgwUpoXeOUipo4dht4Dh+HAycuY5rUEf+7ZiQ3LF+VoDR8Le/QEfsfP4K8ty/DXlqU4ezkQ81dskuZ7LffB1r1/Yc38X3Hn1B6MHTsWffr0kU6RP378GJ07d0a7du1w8+ZNDB48GJMnT861ej/2ffXbEhGRWgsNDYUQAuXKlVOYbm5ujsTERAAfgoa3tzcuXLiAq1evIjo6Grq6H06fLVy4EH5+fti7dy+GDBkC4EPviY+PD4yMjGBvb4/GjRsjJCQER44cgYaGBsqVKwdvb2+cPn0aTk5On61twoQJaNPmQ2/OrFmzULFiRYSGhqJ8+fLZep/Lly//6mnYXr16wcbGBkWLFkVQUBAmTZqEkJCQr/b0rVq1Chs2bJBeDx06FIsWZR50xowZI/1ua2uLOXPmYNiwYVi1ahUAIDIyEl26dEHlypUBAKVKlcqwjrlz56Jhw4YAgMmTJ6NNmzZITEyEnp7eZ2ucPHIwNDQ1pdfzlq1FuYqVM2076pepqOFcFwAw0H0MRvbvjqTEROjq6WHN0gUYOGIM2nftCQAobmML9wm/YuncmRg2dtJnt/8t5HI5Ni+ZBSPDD18++nZpjZMXrmIugKSkZMxb7oO//1gN5xpVAAClnNvhwoULWLt2LRo2bIjVq1fDzs5O+jcpV66cFJpzG4MdERGp3NWrVyGXy9G7d28kJSUBAG7duoV3796hUCHFC+3fv3+PsLAw6bWtrS2MjIyk15aWltDU1ISGhobCtOjo6C/W4ODgIP1epEgRAEB0dLTSwe7p06do2bIlunbtCjc3ty+2TQ+nAFC5cmUUKVIETZs2RVhYGOzs7D67XO/eveHh4SG9/tJp4r///hteXl4IDg5GXFwcUlNTkZiYiISEBBgYGODnn3/G8OHD4e/vj2bNmqFLly4K+wL4/L4pUaLEZ7c7YcZc1K7XSHptbmmJN69fZ9q2TIWK/2tn8eG0cszrlyhSzBr37/6Lm9euYP3yxVIbeVoakpIS8f59AvT1c36gja11USnUAUARC3NEv34DAAiNeIyE94lo3nPE/xaQaSA5ORnVqlUDANy7dy/DlwhnZ+ccrzMzDHZERJRnSpcuDZlMluEarfReoo8HKLx79w5FihTBmTNnMqzn4yCjra2tME8mk2U6TS6Xf7G2j5dJPx38tWU+9ezZMzRu3Bh16tTBunXrlFoWgBQGQkNDvxjs0kcRf01ERATatm2L4cOHY+7cuShYsCAuXLiAQYMGITk5GQYGBhg8eDBcXFxw+PBh+Pv7w8vLC4sWLcKoUaOk9WRn35gXtkSJkoq9f58Ldlpama1fAAAS4uMxfPxkNG3ZLsNyurqf7zHMjIaGBoRQnJaSkvF0u/YnA1E+/vy8i/9wqvzw1t9RzKrwhwaWFf+/HtUPzGCwIyKiPFOoUCE0b94cK1aswKhRoz57nR0AVK9eHVFRUdDS0oKtrW3eFZlNT58+RePGjeHo6IhNmzYp9Bhm1c2bNwH8r1fsWwUEBEAul2PRokVSPbt3787QztraGsOGDcOwYcMwZcoUrF+/XiHYqVKFyg6ICAvNEBKzo3AhM7x9F4/4hPcoYPDhS8TNO18fCPIx+7KloKurg8inz9HQ2fHDxKKKIbtChQo4ePCgwrTLly9nv3AlcPAEERHlqVWrViE1NRU1atSAr68v7t27h5CQEGzfvh3BwcHQ/P/rspo1awZnZ2d07NgR/v7+iIiIwMWLF+Hh4YHr16+r+F0oevr0KRo1aoQSJUpg4cKFePnyJaKiohAVFaXQpnz58rh69SqAD4M+PD09ERAQgIiICBw8eBD9+vVDgwYNMpwKza7SpUsjJSUFy5cvx8OHD7Ft27YM98gbM2YMjh8/jvDwcAQGBuL06dOoUKFCjmw/JwwZ/Qv+2vcH1izxRmjIPTx8EIKjf+7DigVzlF6XU7VKMNDXw6/zVyAs4jF2HjiKzXsOKbUOI8MCmDC0L8bOXIwtuw8hLOIxAgMDsXz5cmzZsgUAMGzYMDx48AATJ05ESEgIdu7cic2bNytdb3awx44ou2aaqHDbyt8Qluh7YWdnhxs3bmDevHmYMmUKnjx5Al1dXdjb22PChAkYMeLDtUsymQxHjhyBh4cHXF1d8fLlS1hZWaFBgwawtMzde6Ep68SJEwgNDUVoaCiKFy+uME/8/7m/lJQUhISESKNedXR08Pfff2Pp0qWIj4+HtbU1unTpgqlTp+ZYXVWqVMHixYvh7e2NKVOmoEGDBvDy8kK/fv2kNmlpaXB3d8eTJ09gbGyMli1bYsmSJTlWw7eq26gpft/0B9YtW4BNq5ZBS1sLtnZl0blnX6XXVdDMBNuXz8FEz6VYv+MAmtariZnjhmLIL8qFRM9fRqBwITN4rdiEh5FPYGpqhurVq+PXX38FAJQoUQL79u3D2LFjsXz5ctSqVQvz5s3L8dHEmZEJ8enZZvUWFxcHExMTxMbGZuleQUSf9YMEO9vJh/NsW5+K0Oulsm3nh31czEgTMxtbwKJocci0Pv90gy9xKG6areWIPhX05D+VbdtBI1xl2wYAFK32zatITExEeHg4SpYsmWG0sTLZhadiiYiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoKjYomIfmTPbqhu2zlwwTkRKWKPHRFRPvXhxvwCGW6lT0T5jrJPOfkc9tgREeVTb97L8TYxDQUT4qBlYAz8/6OYlJGoocJQmJioum1TjhOpySrbtko/x8A3fZaFEEhOTsbLly+hoaEBHZ3s3booHYMd5WuqvceayjZNBABITBNYff0/DK8BGOnFAVA+2OnIXuZ8YVkVr+J7j1GOin7zXmXbVunnGMiRz7KBgQFKlCiRrUfRfUzlwW7lypX47bffEBUVhSpVqkh3aP6cpUuXYvXq1YiMjIS5uTl++ukneHl5ZbiZHxHRj+BBTAp+PfkKZvoa0FA+1+Gk7oScLyqrRn5fjwWjbzN4/xmVbVuln2Pgmz/Lmpqa0NLSgiwbve6fUmmw8/X1xbhx47BmzRo4OTlh6dKlcHFxQUhICCwsLDK037lzJyZPngwfHx/UqVMH9+/fx4ABAyCTybB48WIVvAMiItVLTBN4/i4tW8vqpTzO4WqU2Ti/kKuTp2+z9xnMCSr9HAPf1WdZpYMnFi9eDDc3N7i6usLe3h5r1qyBgYEBfHx8Mm1/8eJF1K1bF7169YKtrS1atGiBnj17Sg9UJiIiIvqRqSzYJScnIyAgAM2aNftfMRoaaNasGS5dupTpMnXq1EFAQIAU5B4+fIgjR46gdevWn91OUlIS4uLiFH6IiIiI1JHKTsW+evUKaWlpsLS0VJhuaWmJ4ODgTJfp1asXXr16hXr16kEIgdTUVAwbNgy//vrrZ7fj5eWFWbNm5WjtRERERN+jfHUfuzNnzmDevHlYtWoVAgMDsX//fhw+fBienp6fXWbKlCmIjY2Vfh4/VvF5eCIiIqJcorIeO3Nzc2hqauLFixcK01+8eAErK6tMl5k2bRr69u2LwYMHAwAqV66M+Ph4DBkyBB4eHpkOEdbV1YWurm7OvwEiIiKi74zKeux0dHTg6OiIkydPStPkcjlOnjwJZ2fnTJdJSEjIEN40NTUBfLjBHxEREdGPTKW3Oxk3bhz69++PGjVqoFatWli6dCni4+Ph6uoKAOjXrx+KFSsGLy8vAEC7du2wePFiVKtWDU5OTggNDcW0adPQrl07KeB9T1R789xeKts2ZsaqbttEREQ/MJUGu+7du+Ply5eYPn06oqKiULVqVRw7dkwaUBEZGanQQzd16lTIZDJMnToVT58+ReHChdGuXTvMnTtXVW+BiIiI6Luh8idPjBw5EiNHjsx03pkzZxRea2lpYcaMGZgxY0YeVEZERESUv+SrUbFERERE9HkMdkRERERqgsGOiIiISE0w2BERERGpCQY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREakLljxQjIiLKbbaTD6ts2xF6vVS2bcyMVd22SSXYY0dERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoLBjoiIiEhNMNgRERERqQkGOyIiIiI1wWBHREREpCYY7IiIiIjUBIMdERERkZpgsCMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmGOyIiIiI1ASDHREREZGaYLAjIiIiUhMMdkRERERqgsGOiIiISE0w2BERERGpCQY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoLBjoiIiEhNMNgRERERqQkGOyIiIiI1wWBHREREpCYY7IiIiIjUBIMdERERkZpgsCMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmGOyIiIiI1ASDHREREZGaYLAjIiIiUhMqD3YrV66Era0t9PT04OTkhKtXr36x/X///Qd3d3cUKVIEurq6KFu2LI4cOZJH1RIRERF9v7RUuXFfX1+MGzcOa9asgZOTE5YuXQoXFxeEhITAwsIiQ/vk5GQ0b94cFhYW2Lt3L4oVK4ZHjx7B1NQ074snIiIi+s6oNNgtXrwYbm5ucHV1BQCsWbMGhw8fho+PDyZPnpyhvY+PD2JiYnDx4kVoa2sDAGxtbfOyZCIiIqLvVrZOxf7333/YsGEDpkyZgpiYGABAYGAgnj59muV1JCcnIyAgAM2aNftfMRoaaNasGS5dupTpMgcPHoSzszPc3d1haWmJSpUqYd68eUhLS8vO2yAiIiJSK0r32AUFBaFZs2YwMTFBREQE3NzcULBgQezfvx+RkZHYunVrltbz6tUrpKWlwdLSUmG6paUlgoODM13m4cOHOHXqFHr37o0jR44gNDQUI0aMQEpKCmbMmJHpMklJSUhKSpJex8XFZfGdEhEREeUvSvfYjRs3DgMGDMCDBw+gp6cnTW/dujXOnTuXo8V9Si6Xw8LCAuvWrYOjoyO6d+8ODw8PrFmz5rPLeHl5wcTERPqxtrbO1RqJiIiIVEXpYHft2jUMHTo0w/RixYohKioqy+sxNzeHpqYmXrx4oTD9xYsXsLKyynSZIkWKoGzZstDU1JSmVahQAVFRUUhOTs50mSlTpiA2Nlb6efz4cZZrJCIiIspPlA52urq6mZ7OvH//PgoXLpzl9ejo6MDR0REnT56Upsnlcpw8eRLOzs6ZLlO3bl2EhoZCLpcrbLdIkSLQ0dH5bL3GxsYKP0RERETqSOlg1759e8yePRspKSkAAJlMhsjISEyaNAldunRRal3jxo3D+vXrsWXLFty7dw/Dhw9HfHy8NEq2X79+mDJlitR++PDhiImJwejRo3H//n0cPnwY8+bNg7u7u7Jvg4iIiEjtKD14YtGiRfjpp59gYWGB9+/fo2HDhoiKioKzszPmzp2r1Lq6d++Oly9fYvr06YiKikLVqlVx7NgxaUBFZGQkNDT+lz2tra1x/PhxjB07Fg4ODihWrBhGjx6NSZMmKfs2iIiIiNSO0sHOxMQEJ06cwIULFxAUFIR3796hevXqCrctUcbIkSMxcuTITOedOXMmwzRnZ2dcvnw5W9siIiIiUmfZvkFxvXr1UK9evZyshYiIiIi+gdLBbvbs2V+cP3369GwXQ0RERETZp3SwO3DggMLrlJQUhIeHQ0tLC3Z2dgx2RERERCqidLC7ceNGhmlxcXEYMGAAOnXqlCNFEREREZHysvWs2E8ZGxtj1qxZmDZtWk6sjoiIiIiyIUeCHQDpyQ5EREREpBpKn4r9/fffFV4LIfD8+XNs27YNrVq1yrHCiIiIiEg5Sge7JUuWKLzW0NBA4cKF0b9/f4WnRBARERFR3lI62IWHh+dGHURERET0jXLsGjsiIiIiUq0s9dh17tw5yyvcv39/toshIiIiouzLUrAzMTHJ7TqIiIiI6BtlKdht2rQpt+sgIiIiom/Ea+yIiIiI1ITSo2IBYO/evdi9ezciIyORnJysMC8wMDBHCiMiIiIi5SjdY/f777/D1dUVlpaWuHHjBmrVqoVChQrh4cOHvEExERERkQopHexWrVqFdevWYfny5dDR0cEvv/yCEydO4Oeff+YjxYiIiIhUSOlgFxkZiTp16gAA9PX18fbtWwBA3759sWvXrpytjoiIiIiyTOlgZ2VlhZiYGABAiRIlcPnyZQAfnkghhMjZ6oiIiIgoy5QOdk2aNMHBgwcBAK6urhg7diyaN2+O7t27o1OnTjleIBERERFljdKjYtetWwe5XA4AcHd3R6FChXDx4kW0b98eQ4cOzfECiYiIiChrlA52Ghoa0ND4X0dfjx490KNHjxwtioiIiIiUp/Sp2NKlS2PmzJm4f/9+btRDRERERNmkdLBzd3fH4cOHUaFCBdSsWRPLli1DVFRUbtRGREREREpQOtiNHTsW165dw71799C6dWusXLkS1tbWaNGiBbZu3ZobNRIRERFRFmT7WbFly5bFrFmzcP/+fZw/fx4vX76Eq6trTtZGRERERErI1rNi0129ehU7d+6Er68v4uLi0LVr15yqi4iIiIiUpHSwu3//Pnbs2IFdu3YhPDwcTZo0gbe3Nzp37gxDQ8PcqJGIiIiIskDpYFe+fHnUrFkT7u7u6NGjBywtLXOjLiIiIiJSktLBLiQkBGXKlMmNWoiIiIjoGyg9eIKhjoiIiOj7lO1RsURERET0fWGwIyIiIlITDHZEREREaiLbwS45ORkhISFITU3NyXqIiIiIKJuUDnYJCQkYNGgQDAwMULFiRURGRgIARo0ahfnz5+d4gURERESUNUoHuylTpuDWrVs4c+YM9PT0pOnNmjWDr69vjhZHRERERFmn9H3s/Pz84Ovri9q1a0Mmk0nTK1asiLCwsBwtjoiIiIiyTukeu5cvX8LCwiLD9Pj4eIWgR0RERER5S+lgV6NGDRw+fFh6nR7mNmzYAGdn55yrjIiIiIiUovSp2Hnz5qFVq1a4e/cuUlNTsWzZMty9excXL17E2bNnc6NGIiIiIsoCpXvs6tWrh1u3biE1NRWVK1eGv78/LCwscOnSJTg6OuZGjURERESUBUr12KWkpGDo0KGYNm0a1q9fn1s1EREREVE2KNVjp62tjX379uVWLURERET0DZQ+FduxY0f4+fnlQilERERE9C2UHjxRpkwZzJ49G//88w8cHR1RoEABhfk///xzjhVHRERERFmndLDbuHEjTE1NERAQgICAAIV5MpmMwY6IiIhIRZQOduHh4blRBxERERF9I6WvsfuYEAJCiJyqhYiIiIi+QbaC3datW1G5cmXo6+tDX18fDg4O2LZtW07XRkRERERKUPpU7OLFizFt2jSMHDkSdevWBQBcuHABw4YNw6tXrzB27NgcL5KIiIiIvk7pYLd8+XKsXr0a/fr1k6a1b98eFStWxMyZMxnsiIiIiFRE6VOxz58/R506dTJMr1OnDp4/f54jRRERERGR8pQOdqVLl8bu3bszTPf19UWZMmVypCgiIiIiUp7Sp2JnzZqF7t2749y5c9I1dv/88w9OnjyZaeAjIiIioryhdI9dly5dcOXKFZibm8PPzw9+fn4wNzfH1atX0alTp9yokYiIiIiyIFu3O3F0dMT27dulp09s374d1apVy3YRK1euhK2tLfT09ODk5ISrV69mabk//vgDMpkMHTt2zPa2iYiIiNSF0sHuyJEjOH78eIbpx48fx9GjR5UuwNfXF+PGjcOMGTMQGBiIKlWqwMXFBdHR0V9cLiIiAhMmTED9+vWV3iYRERGROlI62E2ePBlpaWkZpgshMHnyZKULWLx4Mdzc3ODq6gp7e3usWbMGBgYG8PHx+ewyaWlp6N27N2bNmoVSpUopvU0iIiIidaR0sHvw4AHs7e0zTC9fvjxCQ0OVWldycjICAgLQrFmz/xWkoYFmzZrh0qVLn11u9uzZsLCwwKBBg766jaSkJMTFxSn8EBEREakjpYOdiYkJHj58mGF6aGgoChQooNS6Xr16hbS0NFhaWipMt7S0RFRUVKbLXLhwARs3bsT69euztA0vLy+YmJhIP9bW1krVSERERJRfKB3sOnTogDFjxiAsLEyaFhoaivHjx6N9+/Y5Wtyn3r59i759+2L9+vUwNzfP0jJTpkxBbGys9PP48eNcrZGIiIhIVZS+j92CBQvQsmVLlC9fHsWLFwcAPHnyBPXr18fChQuVWpe5uTk0NTXx4sULhekvXryAlZVVhvZhYWGIiIhAu3btpGlyufzDG9HSQkhICOzs7BSW0dXVha6urlJ1EREREeVHSgc7ExMTXLx4ESdOnMCtW7egr68PBwcHNGjQQOmN6+jowNHRESdPnpRuWSKXy3Hy5EmMHDkyQ/vy5cvj9u3bCtOmTp2Kt2/fYtmyZTzNSkRERD80pYMdAMhkMrRo0QItWrT45gLGjRuH/v37o0aNGqhVqxaWLl2K+Ph4uLq6AgD69euHYsWKwcvLC3p6eqhUqZLC8qampgCQYToRERHRjybL19hdunQJf/31l8K0rVu3omTJkrCwsMCQIUOQlJSkdAHdu3fHwoULMX36dFStWhU3b97EsWPHpAEVkZGReP78udLrJSIiIvrRZLnHbvbs2WjUqBHatm0LALh9+zYGDRqEAQMGoEKFCvjtt99QtGhRzJw5U+kiRo4cmempVwA4c+bMF5fdvHmz0tsjIiIiUkdZ7rG7efMmmjZtKr3+448/4OTkhPXr12PcuHH4/fffsXv37lwpkoiIiIi+LsvB7s2bNwr3mzt79ixatWolva5ZsyZvJUJERESkQlkOdpaWlggPDwfw4YkRgYGBqF27tjT/7du30NbWzvkKiYiIiChLshzsWrdujcmTJ+P8+fOYMmUKDAwMUL9+fWl+UFBQhnvIEREREVHeyfLgCU9PT3Tu3BkNGzaEoaEhtmzZAh0dHWm+j49Pjtz+hIiIiIiyJ8vBztzcHOfOnUNsbCwMDQ2hqampMH/Pnj0wNDTM8QKJiIiIKGuy9eSJzBQsWPCbiyEiIiKi7MvyNXZERERE9H1jsCMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmGOyIiIiI1ASDHREREZGaYLAjIiIiUhMMdkRERERqgsGOiIiISE0w2BERERGpCQY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoLBjoiIiEhNMNgRERERqQkGOyIiIiI1wWBHREREpCYY7IiIiIjUBIMdERERkZpgsCMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmGOyIiIiI1ASDHREREZGaYLAjIiIiUhMMdkRERERqgsGOiIiISE0w2BERERGpCQY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoLBjoiIiEhNMNgRERERqQkGOyIiIiI1wWBHREREpCYY7IiIiIjUxHcR7FauXAlbW1vo6enByckJV69e/Wzb9evXo379+jAzM4OZmRmaNWv2xfZEREREPwqVBztfX1+MGzcOM2bMQGBgIKpUqQIXFxdER0dn2v7MmTPo2bMnTp8+jUuXLsHa2hotWrTA06dP87hyIiIiou+LyoPd4sWL4ebmBldXV9jb22PNmjUwMDCAj49Ppu137NiBESNGoGrVqihfvjw2bNgAuVyOkydP5nHlRERERN8XlQa75ORkBAQEoFmzZtI0DQ0NNGvWDJcuXcrSOhISEpCSkoKCBQvmVplERERE+YKWKjf+6tUrpKWlwdLSUmG6paUlgoODs7SOSZMmoWjRogrh8GNJSUlISkqSXsfFxWW/YCIiIqLvmMpPxX6L+fPn448//sCBAwegp6eXaRsvLy+YmJhIP9bW1nlcJREREVHeUGmwMzc3h6amJl68eKEw/cWLF7CysvrisgsXLsT8+fPh7+8PBweHz7abMmUKYmNjpZ/Hjx/nSO1ERERE3xuVBjsdHR04OjoqDHxIHwjh7Oz82eUWLFgAT09PHDt2DDVq1PjiNnR1dWFsbKzwQ0RERKSOVHqNHQCMGzcO/fv3R40aNVCrVi0sXboU8fHxcHV1BQD069cPxYoVg5eXFwDA29sb06dPx86dO2Fra4uoqCgAgKGhIQwNDVX2PoiIiIhUTeXBrnv37nj58iWmT5+OqKgoVK1aFceOHZMGVERGRkJD438di6tXr0ZycjJ++uknhfXMmDEDM2fOzMvSiYiIiL4rKg92ADBy5EiMHDky03lnzpxReB0REZH7BRERERHlQ/l6VCwRERER/Q+DHREREZGaYLAjIiIiUhMMdkRERERqgsGOiIiISE0w2BERERGpCQY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoLBjoiIiEhNMNgRERERqQkGOyIiIiI1wWBHREREpCYY7IiIiIjUBIMdERERkZpgsCMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmGOyIiIiI1ASDHREREZGaYLAjIiIiUhMMdkRERERqgsGOiIiISE0w2BERERGpCQY7IiIiIjXBYEdERESkJhjsiIiIiNQEgx0RERGRmmCwIyIiIlITDHZEREREaoLBjoiIiEhNMNgRERERqQkGOyIiIiI1wWBHREREpCYY7IiIiIjUBIMdERERkZpgsCMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmGOyIiIiI1ASDHREREZGaYLAjIiIiUhMMdkRERERqgsGOiIiISE0w2BERERGpCQY7IiIiIjXBYEdERESkJr6LYLdy5UrY2tpCT08PTk5OuHr16hfb79mzB+XLl4eenh4qV66MI0eO5FGlRERERN8vlQc7X19fjBs3DjNmzEBgYCCqVKkCFxcXREdHZ9r+4sWL6NmzJwYNGoQbN26gY8eO6NixI/799988rpyIiIjo+6LyYLd48WK4ubnB1dUV9vb2WLNmDQwMDODj45Np+2XLlqFly5aYOHEiKlSoAE9PT1SvXh0rVqzI48qJiIiIvi9aqtx4cnIyAgICMGXKFGmahoYGmjVrhkuXLmW6zKVLlzBu3DiFaS4uLvDz88u0fVJSEpKSkqTXsbGxAIC4uLhvrP7r5EkJub6Nz4mTCZVtG3mwb9NxH+c+7uPcx32c+7iPc98Pu4+BXN/P6ZlFiK+/T5UGu1evXiEtLQ2WlpYK0y0tLREcHJzpMlFRUZm2j4qKyrS9l5cXZs2alWG6tbV1NqvOH0xUufH5Kt16nuE+zn3cx7mP+zj3cR/nPpW/yzzaz2/fvoWJyZe3pdJglxemTJmi0MMnl8sRExODQoUKQSaTqbCy3BMXFwdra2s8fvwYxsbGqi5HLXEf5z7u49zHfZz7uI9z34+wj4UQePv2LYoWLfrVtioNdubm5tDU1MSLFy8Upr948QJWVlaZLmNlZaVUe11dXejq6ipMMzU1zX7R+YixsbHafsi/F9zHuY/7OPdxH+c+7uPcp+77+Gs9delUOnhCR0cHjo6OOHnypDRNLpfj5MmTcHZ2znQZZ2dnhfYAcOLEic+2JyIiIvpRqPxU7Lhx49C/f3/UqFEDtWrVwtKlSxEfHw9XV1cAQL9+/VCsWDF4eXkBAEaPHo2GDRti0aJFaNOmDf744w9cv34d69atU+XbICIiIlI5lQe77t274+XLl5g+fTqioqJQtWpVHDt2TBogERkZCQ2N/3Us1qlTBzt37sTUqVPx66+/okyZMvDz80OlSpVU9Ra+O7q6upgxY0aGU9CUc7iPcx/3ce7jPs593Me5j/tYkUxkZewsEREREX33VH6DYiIiIiLKGQx2RERERGqCwY6IiIhITTDYEREREakJBjsiIjUjl8ulZ0pyfBzRj4XBjuj/ffoHkH8Qc8/H+5b7+dvJ5XIAQGJiIgBAQ0MD9+7dAwC1fXSiKgkhpB+i7w2DXT6RfgB58OABQkJCVFyN+pHL5dIfwLt37wLgH8TckP45Tg8iwIf9zD+Q30ZDQwMPHz6Eu7s7IiIisHfvXlSqVAlBQUGqLk2tpH9O379/D5lMBplMhoCAAClEU87hMSH7GOzyASEEZDIZ9u/fj1atWuHYsWN48uSJqstSG3K5XLoJ9syZMzFs2DDs3r1bxVWpn/TP8alTpzB8+HD07t0bY8eOBcAQnRNevnyJgwcPom/fvujTpw82b94MBwcH/oHMQTKZDM+ePUPVqlVx9+5dHD9+HI0bN0ZsbKyqS1MrH3/Rjo+Px7t37/g5VgKDXT4gk8lw4sQJ9O3bF2PHjkWvXr1QvHhxVZeV76UfKNJD3bRp07BixQpMmzaNzx7OBTKZDAcOHECHDh2gq6uLKlWq4I8//kCdOnUQExOj6vLyNSEEnJycMGXKFFy8eBFVqlRBrVq1ALBHNKfFxcWhVq1aqF+/Ptq3b4/Nmzejdu3a3Mc5RAghHZPnzZuHXr16oWLFipg4cSKOHj2q4uryBwa779Dr16+l34UQSEtLw+bNm+Hq6gp3d3cULlwYgOLpLFLex71EDx48wKFDh7Bp0yY0b94c1tbWAHg6ICe9ePECs2fPxuzZs7F8+XL06dMHmpqaqFKlCgoWLCi14z7PPgMDA8yZMwcxMTGYMWMGrl+/DiBjuOM+Vs7ChQvRo0cPAED58uXRsmVLvHnzBrq6uihZsiQAHo9zSvpx2cPDA4sXL0bPnj0xb948XLhwARMmTMCzZ89UXOH3j8HuOzNjxgwsXrwYKSkpAD58yDU1NREeHi798UtLSwPwv56mhw8fqqbYfKpXr144duyYwrTY2FiEh4dLzyhOJ5PJkJycLL3mH8TsS0hIwPv37zFixAg8e/YMtWrVQtu2bbF69WoAwJEjRwDwtKwy0j+P6fts2LBhmDJlCnx8fHD9+nUsWLAAgYGBUpvz588rtKessba2hp+fH4YMGQIAcHBwwPr169G1a1c0b94c58+fh6amJlJTU1VcqXoIDg7G0aNHsX//fvTo0QNFihRBUFAQJkyYgKJFi0p/AylzDHbfGTs7O/Ts2RPa2tp4//69NN3Q0BCXLl0CAGhqakof7KdPn2Lv3r0Md1n08OFDlC9fHk2bNlWYrqGhgUKFCuHFixfStPRv4IcPH8aGDRsA8A/ityhUqBCMjY2xY8cO1KlTB23btsXy5csBAOHh4VizZg3Onj2r4irzj/RrFi9evIjVq1dj+vTpCA4ORkJCAurXr4/NmzcjMDAQCxYsgJ+fH2bPno2GDRsiKiqKX1CU1LVrV/j6+mLnzp0YNmwYHBwcMGjQIIwbNw4tW7ZEp06dcPHiRWhpaQH48CUlODhYxVXnH58GtbS0NMTFxaFmzZrS5RuLFy+Gq6sr3r9/D19fX/bcfYmg79LJkyfF2LFjxb1794QQQhw7dkxYW1uLUaNGKbSbNGmSqFy5soiOjlZFmfnaqlWrxKZNm6TXdevWFQ4ODiIkJESalpiYKNq1aydGjBihggrzL7lcnmFabGys6NGjhyhQoIDo2LGjwrxJkyaJmjVrimfPnuVVifla+v7dt2+fMDExEW3bthVly5YVTk5OYunSpSI2NlYIIcSFCxeEo6OjqFKliihZsqS4fv26KsvOdz7+HMvlcrF//35RoEABMWjQIGn6nTt3RO/evYWZmZnYsWOHmDJliihYsKB49OiRKkrOd96/fy/97ufnJ16/fi2Cg4OFg4ODWLJkiTA1NRUrV66U2ly6dEl07dqVn+UvYLD7jnx8EFmzZo0wMjISEydOFJGRkSIpKUksXbpU2NjYiHr16olhw4aJn376SZiamoobN26oruh8JDU1Vfr91atXokePHqJ06dJi+/bt0jR7e3tRtmxZ8euvv4oFCxaIRo0aiYoVK4qUlBRVlZ3vpH+O/f39xbhx44Sbm5v4999/hRBC3Lp1S9jb2wsXFxexcuVKcejQITFixAhhYmIibt68qcqy853z58+LIkWKiI0bNwohhHjy5InQ0tISlStXFvPnzxdxcXFCCCEePXok/v33X/H8+XNVlpuvvXr1Svo9s3AXEhIihg8fLqysrISDg4O4du2aKsrMd44fPy5Kly4thBBi3LhxokyZMiIqKkoIIUT//v2FTCYTs2fPltrHx8eL1q1bi7Zt24q0tDSV1JwfMNh9Zy5duiQSExOFEEJs2rRJFC1aVIwZM0Y8f/5cpKWlicuXL4vu3buLTp06iaFDh4q7d++quOL85+HDh0IIIW7cuCGGDRsmypcvL4W71NRUMXDgQNGkSRNRv359MWjQIJGcnCzNo6w5fPiw0NfXF61btxYODg6iQIECYteuXUIIIa5evSp69OghrK2tRZUqVUTz5s3FrVu3VFxx/pKWlibWrFkjfv75ZyGEEGFhYaJUqVLC1dVV9O3bV1hYWIiFCxeK//77T8WV5n+3bt0SxsbG4q+//pKmZRbuhBAiIiJCvHz5Mq9LzLfu3bsnHBwcRLFixYSJiYl48OCBNO/Vq1eibdu2olChQmL27Nli6tSpomnTpqJixYrSMZnhLnMMdt+Rp0+fihIlSogzZ85I0zZu3CiKFi0qxo4dKyIiIhTa80OtvM2bN0vfEIUQ4vbt28LNzU2UL19ebN26VZr+/v17ER8fL71mj13WxcXFialTp4p169ZJ08aMGSN0dHTEtm3bhBBCJCcnizdv3og3b94o7GfKuocPH4q7d++KhIQE0ahRIzFw4EAhhBBv374VFhYWolSpUmLx4sWZnhYn5bRv315YWFiIY8eOSdPSw93QoUNVWFn+N2LECCGTyUSZMmWkv2np/3337p0YN26caNKkiWjZsqUYO3asdCzmMfnzGOy+I69fvxaFCxeWeo/SpYe7iRMnStfcCZH5dUz0ZUePHhWVK1eWvvEJIURQUJBwc3MTFSpUEDt37sywDPdz1t24cUOYmpqKatWqiUOHDinMSw93O3fuVNj/9HUffwY/3XcBAQHC3t5eXL58WQjxoRekTZs2YujQoRm+DNLXfXpdXboePXoIMzMzhXDn5+cnZDKZGD16dF6WqBbS9+2FCxfEn3/+KWrWrCkqVqwo3rx5I4TI+Dn/uCODoe7LOCpWhcQnI9MKFiyI2rVrS6N90kfFDhw4EHPmzMHy5cuxfft2aUg9R2h+2af7FwBsbGwQERGh8AigypUrY+TIkWjYsCHc3d3x999/KyzD/Zx1FStWROvWrXHz5k1ER0cD+N+/w5IlSzBq1Cj07t0bBw8eVGWZ+Yr4/9Gvx48fx6BBg9CwYUN4enpKo+RTUlKQlJSEBw8eIC4uDr6+vtDX18fChQthY2Oj4urzH5lMhnPnziEoKEjh/n+7du1Cy5Yt0bNnTxw/fhxCCHTo0AGHDh3CsGHDVFx1/vDpowTlcjnq1q2L9u3bY9OmTdDW1ka9evXw9u1baGtrAwB8fHwQExMj3d5LCCGNPqbPUGGoJCHEiRMnRP369cXIkSPF9u3bRY0aNUS3bt0ybbt161Zx//79PK4w/1u2bJmYOHGi2LNnj1i/fr2oW7eu1LvxsVu3bon58+fzWjolZNabKZfLRbdu3YSZmZk4e/Zshvm//vqrQs8zfZ2fn58wNDQUY8aMEatWrRKlSpUSdevWFQ8ePBDv378X7du3F7a2tsLOzk4UKlRIBAQEqLrkfCstLU3Ur19fFCpUSNy+fVsIofg5b9CggShXrpw4ePCgqkrMlz7ucdu4caMYNWqUGDBggMKlR3fv3hXVqlUTZcqUEUeOHBFNmzYVzs7OvOxISTIheEMjVZDL5ZDL5Th48CAOHTqEhIQE3L17FykpKbh//z6qVauGkiVLonz58jAyMsKAAQMy3DyXvi4xMRG9evWCEAJ3796FlpYW7t27BxsbGzRu3BilSpWCjY0NSpYsCWdnZ2hqagL4cB+l9N8pc+L/e5KuXLmCK1euICEhARUqVECHDh0AfLj316lTp3DgwAE0aNBAxdXmX1FRUWjfvj369u2LUaNGIS0tDZaWlhgwYAAWLFgADQ0NvH//Hn/99Rfev3+PunXrws7OTtVl5yvpn+W4uDgYGxsjPj4eHTt2RGhoKA4ePIjKlStLbUeMGIENGzagePHiuH37NgoUKKDCyvOfyZMnY8eOHWjQoAF0dXWxefNmbNmyBX379gUAREREYPDgwXj27BmKFi2Ko0ePQltbW/o3oixQZar8EX3peq3Y2Fixe/duUa1aNTFv3jwxZcoU4ezsLKpVq8aeuiz60je76Oho8fLlS+Hk5CRKlCghpk6dKhwdHUWJEiWEi4sLr6XLhr179wpTU1Px008/iVatWonSpUtLF5OnpKSIbt26CSsrK/H333+ruNL85ePP4uvXr0X16tVFdHS0CAsLE0WLFhVubm7S/FOnTol3796poky1kL6vjx07JoYOHSouXLgghPgwCKhx48aiZMmSIigoSLqua+LEieLSpUu8fUw2bNq0SZQoUUK6HczRo0eFTCYT2traYvny5Qpt79+/L/3b8Jo65TDY5aH0D+nFixfF3Llzhbe3t/D19VVoc+nSJaGnpyeCg4OFEEIkJSUp3MCRPu/jUHf8+HHh6+sr/vjjjwy3fJgxY4bo1auXEOJ/B4z0ZRnusi44OFiUKFFCrFq1SgjxYRCKsbGxdAuOdC1atBClSpUSCQkJqigz39qyZYvYsGGDePPmjShRooTYsWOHKF26tHBzc5MuF7h//77o3Llzpqe8Kev27t0rDAwMhJeXl8Ktd96+fSsaNWokChcuLIYMGSJ69+4tTExMpFsmUdYlJCSI3377TRotf+jQIWFsbCzWr18vZs6cKXR0dMTmzZszhDiehlUeg10e27dvnzA0NBTNmjUTjo6OQldXVwwePFj6MMfGxgp7e3v2cHyD8ePHC0tLS1G5cmWho6MjGjVqJPbs2SPNX7dunShevLh4+/atwkGEBxDl+Pv7C0dHRyHEh/t3lShRQuHWD1evXhVCfAjLT548UUmN+U36F4v79+8LPT094eXlJYT48GQODQ0N0aZNG4X2v/76q6hatSr37ze4deuWKFasmHSj53ShoaHS7+7u7qJNmzbCxcWF91zMosy+JAcHB4vw8HARHh4u7O3txdKlS4UQQly+fFloamoKmUwm9u7dm9elqh0OLclD4eHhGD16NLy8vDBy5Ei8ffsWFy5cQO/evaGhoYG1a9fC2NgYcrkcZ86cyfA8U/q6bdu2Yfv27Thy5AjKlCmDd+/eYcCAAVi1ahUKFCiAVq1aoUKFCkhJSUFKSgoMDQ2lZdNHXVHW6OnpwdzcHDdv3kT79u3RqlUrrFy5EgBw/fp1bN++HYUKFUKpUqVQrFgxFVebP8hkMly9ehXnz5/H6NGjMXnyZABAnz59EBERgXPnzmHz5s0QQuDGjRvYvHkzzp8/z/37DZ48eQJTU1MMHDgQKSkp2LFjB7Zv3467d++iSZMm2L59O1asWIG0tDSkpqZCV1dX1SV/95KTk6GjowMAiI2NhYmJCQCgXLlyAICzZ89CR0cH7dq1AwDo6+tj1KhRqFWrlnSNLmUf/5Llgo+HdKcTQiAuLg46Ojpo3bo1AMDIyAitWrXC1q1bsX37dhw8eBBCCLi4uEgXktKXfbqvg4ODUaVKFVSrVg0GBgYoUqQItmzZgvj4eKxbtw4AYGVlhZo1a8LY2FgVJedL4v/HWN24cQNBQUFITU2FpaUlbt26hZo1a6J169ZYu3atNOBk+/btCAkJgZmZmSrLzndevXqFOXPmYNq0aQoPOa9UqRImTZqEXr16YfLkyVixYgUiIiLwzz//oEqVKiqsOP8zMTFBWloaevfuDWdnZxw4cABly5bFsmXLsHPnTuzduxcAoKmpyVD3Ffv27QMAKdTNnz8fbdu2Rfv27bF27VrpeP3u3TvcunUL9+7dw/379+Hh4YEnT56gZ8+e0NLSkm7pRdmk2g5D9RUZGSmd/tu1a5dwc3OTTq8cOHBAoW10dLQoW7asWLt2rRAi440Z6evSb8Q6ZswYUbduXWl6+uPZ/v77b2FgYCAePHigcPqVtzb5uo8fOG9hYSGmT58unj17Jk2TyWTCw8NDBAYGirt374rx48cLU1NT6VYRpJw///xTtGjR4rP7MDo6WqSmpvKJHdmQ/ll+/fq19OivxMREsWrVKvHTTz+JiRMnSvs8Li5O1K1bV5w+fVpV5eYrGzduFKVKlRLz5s0TQgixfv16YWZmJry8vESLFi1E7dq1xciRI6Vj7pAhQ4RMJhOlSpUSVatW5d+9HMRglwuSk5NFjx49RJ06dcTYsWOFTCYTa9euFWlpaaJ79+6ibdu24p9//pHap6WlCWdnZ+kidF7A/3X79+8Xu3fvFkII6UHzQnwYmCKTyTKMsEp/4kR6ICHlnD59WhgaGgofHx+FB6IL8eGaRQsLC2FpaSkqVaokHBwcxI0bN1RTaD6Smpoq/b+emJgokpKSpHn+/v6iSZMmombNmuLff/9VaJ++DI8T2bN//35Ru3ZtYWNjI8aOHStCQkIybTd9+nRha2srIiMj87jC/OnZs2dizJgxwsnJScyaNUtMmjRJutdfQkKCmDdvnqhRo4Zwd3eXrmc+c+aMOHv2rBT2OPo1ZzDY5ZI3b94IJycnIZPJxPDhw6Xphw4dEo0bNxYuLi5ix44dIiAgQEyYMEEUKlRIhIWFqbDi/OPt27dixIgRQktLS3Ts2FEYGBiImzdvSvO9vLyEjo6O8PLyEmFhYeLhw4eidevWomnTphwgkU2TJk2SbpydHig+7u189OiRuHLliggKCsoQ/EjRpyNYDx06JFxcXESbNm2kwRJCfPgy0qpVK+Hk5CTu3LkjhOAAn+z4OABfu3ZNFC5cWEybNk3MnTtX2NjYiI4dO4pTp05JbQ4ePCjc3NyEubm5CAwMVEXJ+U765/LFixfi559/FvXq1RM2NjYKN4KPi4sTXl5eokaNGgo9d+l49iTnMNjlkuTkZNGkSRNRtWpV0bx5c4UHzP/111+iX79+Qk9PT5QvX16UL1+eBxAlxcTECHt7eyGTycSiRYuEEP87uLx+/VqsWLFCGBkZiWLFionSpUuLWrVqSV39/OOonNTUVNG8eXPRs2dPadrHfywjIiL4TTuLbt68KWQymfj111+FEB96QvX19cWQIUNEv379hK6urnB1dZXaHz16VLRt21aUK1eOT+tQ0h9//KGwz0JDQ8Vvv/0mPD09pWnXrl0Tjo6OCuFu7dq1ws3NTdy9ezfPa87P0o8JUVFRYuzYscLExCTDM3Tfvn0rvL29hY2NjXTcppzHYJeLEhMTxfPnz0WbNm1E48aNFcKdEEIa9s0eDuW9evVK9O7dW3Tr1k2YmJhIp2U/FhERIU6fPi1Onz7Nrn4lpB+gY2Njpf01e/ZsUb58eem0YLqnT5+KCRMmMHRkUWJioli3bp3Q09MTM2fOFAcPHpT+wKWkpIhjx44JY2Nj0b9/f2mZP//8U3Tt2lWEh4erpuh86PHjx6JevXrSadSYmBhRrFgxoa+vL0aNGqXQ9sqVK6J69eqic+fO0s2Jec/F7Ek/drx69UqMHTtWODo6ijlz5ii0iYuLE9u2bWMPXS5isMsDYWFhok2bNqJp06Ziy5YtQgghJk+eLIYNG6biyvK3tLQ0ERUVJUaOHCmMjY0zhLtHjx4pvOaB5OvSD8x//fWXcHV1FWfOnBFyuVz4+/uLmjVrCjc3NyncJScni+nTp4uSJUuKx48fq7Ls71pmPcRr1qwRenp6onDhwmLx4sUK844dOyaMjIzEwIEDpWl8soTy0sNZUFCQiImJEZcuXRIlSpQQ9erVy3AN6LVr10TJkiVFr169GOq+UfoxJDo6WowePVrUqlVLzJ07N9O2PCbnDga7PPLw4UPRqVMnUalSJVGzZk1hbGyc6YPoSXkRERFi1KhRwsTEROzcuVMIIUSHDh3EhAkTVFxZ/rRv3z5RoEABMWvWLPHgwQNpuo+Pj6hXr54oWbKkcHFxEU2bNhVmZma8jCALIiMjpS8evr6+olevXmLjxo3CxMREDB48OEN7f3//DNfnkvJiY2NF5cqVRc+ePcXr16/FpUuXhLW1tRgwYIAICgpSaBsQEMAnSuSQ9HD34sULMWbMGFGnTh0xadIkFVf142Cwy0NPnjwRGzduFLNmzZIeGUY5IyIiQowfP17IZDJRqVIlUbZsWQ6fz4Y7d+4Ia2tr4ePjI01LSUkR4eHhQi6Xi9DQULFixQrRp08fMWfOnM+OKKT/+XiU/JgxY4RMJhObNm0ScrlcbNy4UWhra4upU6dmWO7kyZM8TuSAa9euiRo1aoiBAweKmJgYceHCBSnc8ZY8yvt0NPbnRmd/3HM3YMAA4ebmxpHceYTBjtRGfHy8OH36tNi4cSOvqcumK1euCEdHRxEWFiYSEhLEypUrRcOGDYWtra1o1qwZH3yeTZ8bJf/+/XuxYcMGoaWllWm4o5wRGBgoqlatqhDuSpUqJbp06SKNOCbl3L9//6tt0oNcTEyMdEkCB6/lPj55gtSGgYEBGjVqhIEDB0JTUxOpqanQ0uJT85SRlJSEFy9eYM6cOXBwcIC/vz+cnZ0xZ84cPHr0CCdPnlR1iflSgQIFUKBAAVSpUgWhoaHYsWMHgA+PZevVqxfWrFmDRYsWYdy4cSquVD1Vq1YNPj4+CAwMxIQJE1CxYkVs3LgRISEhMDU1VXV5+c62bdswZswYAP97Kk1mZDIZUlNTYWZmBg0NDcjlcj66MQ/IxJf+VYhU4Ev/8wshIJPJlF6OFKWmpkJTUxMymQyxsbEAID3PcdeuXTh37hwKFSoEV1dX2NnZAQCcnZ0xfvx4/PTTTyqrOz9LSkrCmzdvMHjwYCQkJGDgwIHo06ePNH/JkiXw9vbG7du3UbhwYRVWqr5u3LiBIUOGoFSpUli3bh10dHSgr6+v6rLynRMnTsDFxQUnT55E48aNP9vu4+P133//jZIlS0rHE8o9/CtI35WPw9mqVaswevRotGrVCnv37sWTJ08+G+qEENJy586dw507d/Ks5vzE19cXAKClpQWZTAY/Pz80bNgQtWvXRu3atbF//3506tQJq1evxpw5c6SDcPqzS2vUqKHK8vM1XV1dWFlZ4ffff4eBgQE2b96Mbdu2AQBmzJiBW7du4e7duwx1uahatWpYtWoVoqKikJCQwFCXBenPdxUfLt2CXC5H8+bNMWDAAGzZsgUJCQmZ9tp9HOrWrFmDFi1a4PXr13la+w9LVeeAib7kl19+EYULFxaenp5i8ODBws7OTri6umb6fMyPL8hdsWKFsLCwEAEBAXlZbr7w+PFjoaurK1q0aCGEEOLGjRtCT09PTJ06VWzZskV07NhRlC9fXsybN0+8fv1aCPHh+Y+DBg0SFhYWHP2agz4eJV+jRg1hYmLCUfJ56P3796ouId+JiYlReL1ixQphbW0tXXf78XH449/XrFkjzMzMpGenU+5jsKPvzsmTJ4WdnZ24fv269FpLS0u6lcnHPj2AmJqaCl9f3zyrNb85e/asKFGihGjbtq04fPiwmDZtmsL8X375RZQvX156xuPu3bvF4MGDeQPiXMBR8vS9ksvlCveY2717t7C0tBRr165VGEns7Ows+vbtm2HZdGvWrBHGxsZi7969uV80SRjsSOU+vUnln3/+KWrXri2E+PBYICMjI7Fq1SohxIcbtZ49e1YkJiYqLMMDSNadP39eFC9eXMhkMjFgwAAhhOK/QatWrUSjRo2k1+zdIPqxvHnzRvr9r7/+Elu2bBGenp7Czs5OODk5iaFDh4qHDx+KRYsWiZ9++klEREQIITKePSlYsCCPySrAYEffjYULF4rw8HCxc+dOUb9+feHv7y+MjY3FihUrpDYHDhwQI0aMEM+ePZOmrV69WhgZGYl9+/apoux84dP7R50/f144ODiIypUri9jYWCHE/8LdkiVLRM2aNXkHfqIf0NmzZ4W5ubmIjo4W48ePF2XKlJGOt/fu3RO7du0SFSpUEE2aNBE1atQQMplM+uItxIfbmdy7d0/IZDKePVERjoollfl4oMTGjRvh5uaG27dvw9bWFtWqVUNoaCi2bNmCvn37AgASExPRpUsXmJmZYdu2bZDJZLh48SK6d++OpUuXokuXLqp8O98t8f8XMQcFBeHZs2dISkqCs7MzQkJCMGjQIJQoUQJ79+6FsbExNDQ0MHDgQISGhsLf3x96enqqLp+I8tCtW7cwffp0/PPPP5DL5QgKCkLx4sUVjtdyuRx79uzBlStXsHr1alSsWBF79uxByZIlpfVERETA1tZWRe/ix8ZgRyp3/PhxhIeHo2DBgujWrZs0bejQobC3t8eECRPw+vVrbNiwAc+ePcONGzek+9Olpqbizp07qFKliirfwndv7969GDZsGKytrXHr1i3UrVsXP/30E6pXr47BgwdDQ0MDFStWRPHixeHj44Pz589znxL9IBo0aICuXbti1KhRAIDJkydjwYIFsLS0xNWrV2FtbS3dFzQtLQ2amprSsgcPHsTPP/8MHx8fNGnSJMN8ynsMdqRSN2/eRJ06dZCcnIwtW7agd+/eAICEhARcuXIFv/zyC6Kjo2FpaYmSJUti+/bt0NbWRlpaGmQyGe9blwU3btxAixYtMH/+fHTu3BlJSUmYNGkSHj9+jM6dO6NKlSoYN24cAgICcPbsWVhbW/ObNtEPIi0tDX/99RdatmwJXV1dAMCVK1cQFRWFLVu24Nq1a/D390eFChWQnJwMHR2dDOvo3LkztLW1sWvXLh6TvwP8F6A89en3iBIlSmDp0qWwsLDAkSNHpOkGBgZo3Lgxrl27hrNnz+L48eP4448/oK2tLd1clweQrLl37x4sLCzQtWtXmJqawsrKCt7e3ihSpAj27duHatWqYcGCBahQoQJKlizJUEf0A9HU1ESHDh2gq6uLuXPnYty4cXByckKHDh3g4eGBqlWrokWLFrh//74U6jZt2oSnT59K97gDAGNj4y8+hYLyDv8yUp6Ry+XSDSuFEEhKSkLBggXRv39/zJo1C3/++SdGjhwptU9OTgYA2NrawszMDDKZDHK5nI8JU5KGhgaSkpKQkJAgPeLHysoKc+fOxdmzZ3Ht2jU0btwY169fR/HixVVdLhGpiKmpKZYuXQoPDw8AgKOjI2bNmoVq1aqhXr168PX1RfPmzbFq1SoUKVIEGhoaCAsLg5+fH4YPH85TsN8J/oWkPPHxhbeLFi3CrVu3EBgYiKFDh6JRo0Zwc3MDAEydOhUaGhr4/fffoaOjk+ExYeylU17NmjXx5MkTrFy5Ep6enlIwlslkqFixonT3fd6Fn+jHcfXqVRgaGsLe3h7jx49Ho0aNMHToUBgaGsLNzQ1yuRxeXl6oXr065s+fD29vb3h4eKBs2bK4ePGi9OxXOzs7vHnzRnokIakegx3lifRANmXKFGzcuBHTp0+Hvb09li1bJp1m7datG2QyGaZOnYr//vsPW7duZZDLAXZ2dti4cSMGDhyI1NRUDBo0CMbGxli/fj1iY2NRokQJVZdIRHkoPDwcAwcORN26dZGSkoLNmzejf//+0NLSQu/evSGXyzF06FAAgJeXF+zt7bFlyxY8efIExYoVk3r+03vojI2NVfl26BMMdpRnrl69Cj8/Pxw6dAhOTk64cOECpk+fjunTp8PQ0BAA0LdvX8THx8Pf3z9Dbx1lX69evaCpqYkhQ4Zg586d0NPTQ0JCAv78808ULVpU1eURUR4qWbIkpk2bhjFjxiAmJgZ79+6Fg4MDhBDQ0tJCnz59AADDhg2DpqYm5syZAwDSpRqfXhLzuWd4k2ow2FGu+TSYpaamQk9PD05OTti9ezcGDRqE33//Hf369UN8fDzOnj2Lpk2bYsiQIfj555+la+oY7r6dTCZDjx494OzsjODgYKSlpcHBwYHX1BH9YNKPqUWKFIGpqSlMTU3x999/o3Tp0nBwcAAAaGtro0+fPpDJZBg4cCCsra2lHjyAl8R87xjsKNek/88fFRUFKysrxMfHIzExEX/88QeGDRuG+fPnY9iwYQCAixcvYufOnShTpgzKlCkD4MMACx5AcpaNjQ1sbGxUXQYR5bH0QJd+TK1duzb+/fdf7Nq1C0uWLEFycjJGjx6NypUrA/gQ7vr374/ChQvDxcVFlaWTkvhXk3LVxo0b0bx5cwBA8+bNUbx4cfTq1Qtz586Fu7s7gA9PlFi2bBmSkpJgZ2cnLcvufSKib/fxmY/Dhw9j//79uHz5MjQ1NdGnTx8MHz4cN27cwMqVKxEUFAQA6NixI06cOIE2bdpAS0sLqampqnwLpATeoJhyVXh4OOrXrw9PT0+4uroiICAA7u7uePXqFWbOnIk3b97g0KFDePbsGW7evAktLS2efiUiyiHpjxQEgPHjx2P79u3Q0NCAubk5mjZtiqVLlwL48CV83bp10jLPnj1DeHg4tLW1VVU6ZRODHeWYjw8gwIc7mickJGD48OHQ0dGBj48PUlJScP/+fXh6euLWrVuwsLBAmTJlsHr1aunmw7xPHRFRznrw4AFcXV2xatUqaGtr4/jx41i1ahUaNGiADRs2APjweLA7d+7g9evXmD9/vtRTx2Ny/sJgRznuxYsXsLS0lF4fP34crVq1wtGjRxWu1Xj16hVMTU0VnvvKAwgRUc7y8fHB3r17YWlpiQ0bNkBTUxOxsbHYtWsXFi5ciMaNG2P9+vUZluNzX/Mnnu+iHLV27Vp069YN8+bNQ0pKClJTU+Hi4oL+/ftjw4YNePPmjfQYmkKFCklBLn2YPRER5Zx3794hODgY//77L0JDQ6WgZmJigp49e2LixIk4f/48unbtmmFZhrr8icGOvsmnHb6lS5dGgwYNsGzZMjRq1Ajz5s1DXFwc2rVrh3v37uHly5fQ0NDIcNqWAyWIiL7dx89vBQBDQ0OMGjUKgwcPRlBQEKZNmybNSw93Q4YMkZ4kQfkfT8VStn08yOHVq1fQ0tKCsbExNDQ08Pr1a3h6euL69euIiIjAzJkzMXr0aLRu3Rp79uxRceVEROrn42NyUFAQ4uLiULx4cdja2uLdu3dYuHAhfH190b17d8ycOVNaLj4+HgYGBrx3qJrguS/Klo/vMTdnzhycO3cOYWFhqF27Njp37owuXbpg8eLFePv2LRYvXoxdu3bh/fv3eP36dYbeOiIi+jYfH5M9PDywe/duaGhoICEhAR06dMAvv/wi3WIqfd706dMBAAUKFMiwDsq/2GNH32TatGlYvXo11q9fDx0dHSxatAg3b97ErVu3YG1tLbULDQ3F/fv30aJFC2hpaTHcERHlkI+Pp0uWLIG3tzd8fX3RsGFDDB06FLt378Zff/2FunXr4vnz51i/fj2WLl2KhQsXYuDAgSqunnIae+wo2yIjI/H3339j9+7daNKkCY4fP46AgAAsXLgQ1tbWCiOqSpcujdKlSwPg6Fciopzw8OFDlCpVCjKZDGlpaZDJZPjnn38wceJENGzYEH/++Sd8fX0xf/581K1bF4mJiShSpAgGDx6M4sWLo3///qp+C5QL2OdKWfbphbWJiYl49OgRKlasiEOHDuGnn36Ct7c33NzckJiYiA0bNiAiIiLDehjqiIi+zfDhwzF8+HAEBgYC+DCCNSkpCS9evECDBg3wzz//oE+fPvD29sawYcOQnJyMdevW4fz58yhatCgGDhwITU1NpKWlqfidUE5jsKMs+fiC2gMHDuDRo0coWLAgKlSogDVr1qBv37747bffpGe/hoSE4MSJE3j8+LEqyyYiUks//fQTwsLCsHDhQgQEBAAA9PX1YWdnhy5duqBFixZYtWoVhg4dCgCIi4vDgQMHpEeGpeMtTdQPgx191ccX1P76668YNWoUDh48CHNzc5QuXRqzZs3CkCFDpFAXHx+PX3/9FfHx8ahbt64qSyciUjspKSlo2rQptm/fjqtXr2LZsmW4fPkygA+PDStRogRKliyJPn36QAiBmJgY9O3bF8nJydJxmtQXz4nRV6VflOvp6Yn169fjyJEjKFu2LIAPNySOj4/H1q1b8f79e2hpaeHmzZt49eoVAgMDpXsjcaQVEdG3k8vl0vNbjYyM0L59e6xfvx6JiYmYPn06KleujJEjR2LevHkoUqQI7OzskJKSgrS0NFy+fFk6/cqeOvXFUbGUJTExMejevTsGDBiA3r174+nTp7h//z527dqFBg0a4Pjx40hLS8P79+9hb2+PWbNm8TmDRES5ZMKECdizZw+6deuGqKgo7N69G23atMHcuXNRoUIFPHv2DNu3bwcAWFlZoXfv3tDU1OQx+QfAYEdZ8ubNG1SqVAmurq7StRvh4eGQy+V4/vw5pk6dimHDhikMu+e3QiKibzd//nx07doVdnZ2AIArV66gXbt22LdvH+rXrw8AOHPmDLp16wZnZ2d4enrCwcEhw3p4TP4x8PwYZYmZmRlmz56NVatWoV27drCxscHcuXNx7do1NGrUCJcuXQKg+GgwHkCIiL7N/fv3cfPmTdja2krTtLW1oaOjAyMjIwAfAlujRo2wc+dOHD58GIsXL8b58+czrIvH5B8D+2MpywYNGoTmzZsjKSkJZcqUAfDheo+oqCjUrl1bxdUREamfsmXLYteuXZDJZDh8+DBsbGxgYWGBuLg4hISEoGrVqkhLS4OGhgZq164NW1tbbN26FaVKlZJ68+jHwlOxlC3v3r3DzZs34e3tjUePHiEwMJDXbRAR5ZKoqCg4OzujUaNG8PT0xNatW+Hp6Ql/f38pwMXGxmLSpElo06YNWrduzR66HxSDHSlNCIGzZ89i0aJFSElJwaFDh6Ctrc3rN4iIclFgYCCGDh2KatWqoUuXLjhy5AhWrFiBX3/9FWZmZjhy5Ajevn2Ly5cvS0+j4DH5x8NgR9mSlJSEu3fvokqVKtDQ0OBIKyKiPHDjxg0MGTIEjo6O6Nu3L4KDg7FixQro6OjA0tIS+/btg7a2Np/H/QNjsKNvxvvUERHlncDAQAwZMgTVq1eHp6cnLC0tkZycDG1tbchkMn7R/sEx2BEREeUzN27cgJubG2xtbeHt7S3dCoVftIn/+kRERPlMtWrVsGrVKhgbG6NkyZLSdIY6Yo8dERFRPpV+LR176igdgx0REVE+xoES9DHGeyIionyMoY4+xmBHREREpCYY7IiIiIjUBIMdERERkZpgsCMiIiJSEwx2RERERGqCwY6I8jWZTAY/P79c386ZM2cgk8nw33//SdP8/PxQunRpaGpqYsyYMdi8eTNMTU1zvZZGjRphzJgxub4dIsp/eB87IvquRUVFYe7cuTh8+DCePn0KCwsLVK1aFWPGjEHTpk0hk8lw4MABdOzYMVfrSE5ORkxMDCwtLaXbS1haWsLV1RU///wzjIyMoKWlhbdv38LCwiJHtnnmzBk0btwYb968UQiMMTEx0NbWhpGRUY5sh4jUB58STETfrYiICNStWxempqb47bffULlyZaSkpOD48eNwd3dHcHBwntWio6MDKysr6fW7d+8QHR0NFxcXFC1aVJqur6+f67UULFgw17dBRPkTT8US0XdrxIgRkMlkuHr1Krp06YKyZcuiYsWKGDduHC5fvpzpMpMmTULZsmVhYGCAUqVKYdq0aUhJSZHm37p1C40bN4aRkRGMjY3h6OiI69evAwAePXqEdu3awczMDAUKFEDFihVx5MgRAIqnYs+cOSP1ljVp0gQymQxnzpzJ9FTsoUOHULNmTejp6cHc3BydOnWS5m3btg01atSAkZERrKys0KtXL0RHRwP4EGobN24MADAzM4NMJsOAAQMAZDwV++bNG/Tr1w9mZmYwMDBAq1at8ODBA2l+el3Hjx9HhQoVYGhoiJYtW+L58+fZ+Fchou8Zgx0RfZdiYmJw7NgxuLu7o0CBAhnmf+5aNiMjI2zevBl3797FsmXLsH79eixZskSa37t3bxQvXhzXrl1DQEAAJk+eDG1tbQCAu7s7kpKScO7cOdy+fRve3t4wNDTMsI06deogJCQEALBv3z48f/4cderUydDu8OHD6NSpE1q3bo0bN27g5MmTqFWrljQ/JSUFnp6euHXrFvz8/BARESGFN2tra+zbtw8AEBISgufPn2PZsmWZvucBAwbg+vXrOHjwIC5dugQhBFq3bq0QaBMSErBw4UJs27YN586dQ2RkJCZMmJDp+ogoHxNERN+hK1euCABi//79X2wHQBw4cOCz83/77Tfh6OgovTYyMhKbN2/OtG3lypXFzJkzM513+vRpAUC8efNGCCHEmzdvBABx+vRpqc2mTZuEiYmJ9NrZ2Vn07t37i/V/7Nq1awKAePv2babbTNewYUMxevRoIYQQ9+/fFwDEP//8I81/9eqV0NfXF7t375bqAiBCQ0OlNitXrhSWlpZZro2I8gf22BHRd0lkc1yXr68v6tatCysrKxgaGmLq1KmIjIyU5o8bNw6DBw9Gs2bNMH/+fISFhUnzfv75Z8yZMwd169bFjBkzEBQU9E3v4ebNm2jatOln5wcEBKBdu3YoUaIEjIyM0LBhQwBQqPdr7t27By0tLTg5OUnTChUqhHLlyuHevXvSNAMDA9jZ2UmvixQpIp32JSL1wWBHRN+lMmXKQCaTKTVA4tKlS+jduzdat26Nv/76Czdu3ICHhweSk5OlNjNnzsSdO3fQpk0bnDp1Cvb29jhw4AAAYPDgwXj48CH69u2L27dvo0aNGli+fHm238OXBlLEx8fDxcUFxsbG2LFjB65duybV8XG9OSX9dHM6mUyW7fBMRN8vBjsi+i4VLFgQLi4uWLlyJeLj4zPM//h+cukuXrwIGxsbeHh4oEaNGihTpgwePXqUoV3ZsmUxduxY+Pv7o3Pnzti0aZM0z9raGsOGDcP+/fsxfvx4rF+/PtvvwcHBASdPnsx0XnBwMF6/fo358+ejfv36KF++fIYeNB0dHQBAWlraZ7dRoUIFpKam4sqVK9K0169fIyQkBPb29tmunYjyJwY7IvpurVy5EmlpaahVqxb27duHBw8e4N69e/j999/h7OycoX2ZMmUQGRmJP/74A2FhYfj999+lXjAAeP/+PUaOHIkzZ87g0aNH+Oeff3Dt2jVUqFABADBmzBgcP34c4eHhCAwMxOnTp6V52TFjxgzs2rULM2bMwL1796QBGQBQokQJ6OjoYPny5Xj48CEOHjwIT09PheVtbGwgk8nw119/4eXLl3j37l2m77lDhw5wc3PDhQsXcOvWLfTp0wfFihVDhw4dsl07EeVPDHZE9N0qVaoUAgMD0bhxY4wfPx6VKlVC8+bNcfLkSaxevTpD+/bt22Ps2LEYOXIkqlatiosXL2LatGnSfE1NTbx+/Rr9+vVD2bJl0a1bN7Rq1QqzZs0C8KFnzN3dHRUqVEDLli1RtmxZrFq1Ktv1N2rUCHv27MHBgwdRtWpVNGnSBFevXgUAFC5cGJs3b8aePXtgb2+P+fPnY+HChQrLFytWDLNmzcLkyZNhaWmJkSNHZrqdTZs2wdHREW3btoWzszOEEDhy5EiG069EpP745AkiIiIiNcEeOyIiIiI1wWBHREREpCYY7IiIiIjUBIMdERERkZpgsCMiIiJSEwx2RERERGqCwY6IiIhITTDYEREREakJBjsiIiIiNcFgR0RERKQmGOyIiIiI1ASDHREREZGa+D8FNvK7mcASawAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_differences(\"F1 Score differences\", f1_scores, f1_scores_tuned)" ] } ], "metadata": { "colab": { "provenance": [], "toc_visible": true }, "environment": { "kernel": "conda-base-py", "name": "workbench-notebooks.m126", "type": "gcloud", "uri": "us-docker.pkg.dev/deeplearning-platform-release/gcr.io/workbench-notebooks:m126" }, "kernelspec": { "display_name": "Python 3 (ipykernel) (Local)", "language": "python", "name": "conda-base-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.15" } }, "nbformat": 4, "nbformat_minor": 4 }