diff --git a/intents/intents.ipynb b/intents/intents.ipynb
index 993b285..6c022b7 100644
--- a/intents/intents.ipynb
+++ b/intents/intents.ipynb
@@ -8,7 +8,7 @@
"source": [
"# Isidro Intent Classification (BERT-Based Transfer Learning)\n",
"\n",
- "This notebook fine-tunes BERT to perform intent classification for Isidro.\n",
+ "This notebook fine-tunes BERT to perform intent classification for Isidro, and compares that model performance to AutoML and BQML models.\n",
"\n",
"Adapted from Prof. Dr. Johannes Maucher's [Intent Classification with BERT](https://hannibunny.github.io/mlbook/transformer/intent_classification_with_bert.html)"
]
@@ -32,7 +32,21 @@
"id": "SCjmX4zTCkRK"
},
"source": [
- "## Setup\n"
+ "## Setup"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### __Configuration__"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The notebook depends on pre-configured authentication to Google Cloud Platform. For example, you could use a Vertex AI Workbench notebook, with a sufficiently-credentialed service account. Otherwise, Google Cloud authentication needs to be added."
]
},
{
@@ -41,12 +55,55 @@
"metadata": {},
"outputs": [],
"source": [
- "DATA_FILE = \"quality.csv\""
+ "# CHANGE THESE\n",
+ "\n",
+ "# The project should already exist and have Vertex/GCS/BigQuery APIs enabled\n",
+ "# A \"playground\" project is recommended for isolation and easy teardown\n",
+ "GCP_PROJECT = \"example\"\n",
+ "\n",
+ "# Name only - bucket will be created in the notebook\n",
+ "GCP_BUCKET = \"isidro_intent_classification\""
]
},
{
"cell_type": "code",
"execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# OPTIONALLY, CHANGE THESE\n",
+ "DATA_FILE = \"quality.csv\"\n",
+ "GCP_REGION = \"us-central1\"\n",
+ "VERTEX_MODEL_NAME_PREFIX = \"isidro_intents\"\n",
+ "VERTEX_MODEL_ROUND = \"r1\" # suffix for differentiating separate models (e.g., when running this notebook multiple times)\n",
+ "VERTEX_MODEL_DESCRIPTION = \"Isidro intent classification model\"\n",
+ "EXPERIMENT_NAME = \"isidro-intents-compare-custom-automl-bqml\"\n",
+ "BQ_DATASET = \"isidro_intents\" # name only - dataset will be created in the notebook"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# TUNE THESE ON LATER ITERATIONS\n",
+ "EPOCHS = 8 # custom tensorflow model epochs\n",
+ "LEARNING_RATE = 1e-5 # custom tensorflow model learning rate (Adam optimizer)\n",
+ "BATCH_SIZE = 32 # custom tensorflow model batch size\n",
+ "BERT_MODEL_NAME = 'small_bert/bert_en_uncased_L-8_H-512_A-8' # base model for transfer learning"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### __Dependencies__"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
"metadata": {
"id": "q-YbjCkzw0yU",
"tags": []
@@ -57,55 +114,70 @@
"output_type": "stream",
"text": [
"Requirement already satisfied: flask==2.2.2 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 1)) (2.2.2)\n",
- "Requirement already satisfied: gunicorn==20.1.0 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 2)) (20.1.0)\n",
- "Requirement already satisfied: tensorflow==2.8.4 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 3)) (2.8.4)\n",
- "Requirement already satisfied: tensorflow_hub==0.12.0 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 4)) (0.12.0)\n",
- "Requirement already satisfied: tensorflow_text==2.8.2 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 5)) (2.8.2)\n",
- "Requirement already satisfied: Jinja2>=3.0 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (3.1.2)\n",
- "Requirement already satisfied: itsdangerous>=2.0 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (2.1.2)\n",
+ "Requirement already satisfied: google-cloud-aiplatform==1.18.3 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 2)) (1.18.3)\n",
+ "Requirement already satisfied: gunicorn==20.1.0 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 3)) (20.1.0)\n",
+ "Requirement already satisfied: tensorflow==2.8.4 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 4)) (2.8.4)\n",
+ "Requirement already satisfied: tensorflow_hub==0.12.0 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 5)) (0.12.0)\n",
+ "Requirement already satisfied: tensorflow_text==2.8.2 in /opt/conda/lib/python3.7/site-packages (from -r service/requirements.txt (line 6)) (2.8.2)\n",
"Requirement already satisfied: importlib-metadata>=3.6.0 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (5.1.0)\n",
- "Requirement already satisfied: click>=8.0 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (8.1.3)\n",
"Requirement already satisfied: Werkzeug>=2.2.2 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (2.2.2)\n",
- "Requirement already satisfied: setuptools>=3.0 in /opt/conda/lib/python3.7/site-packages (from gunicorn==20.1.0->-r service/requirements.txt (line 2)) (65.5.1)\n",
- "Requirement already satisfied: numpy>=1.20 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.21.6)\n",
- "Requirement already satisfied: typing-extensions>=3.6.6 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (4.4.0)\n",
- "Requirement already satisfied: wrapt>=1.11.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.14.1)\n",
- "Requirement already satisfied: keras<2.9,>=2.8.0rc0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2.8.0)\n",
- "Requirement already satisfied: flatbuffers>=1.12 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (22.12.6)\n",
- "Requirement already satisfied: gast>=0.2.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.5.3)\n",
- "Requirement already satisfied: termcolor>=1.1.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2.1.1)\n",
- "Requirement already satisfied: tensorflow-estimator<2.9,>=2.8 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2.8.0)\n",
- "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.51.1)\n",
- "Requirement already satisfied: tensorboard<2.9,>=2.8 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2.8.0)\n",
- "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.28.0)\n",
- "Requirement already satisfied: google-pasta>=0.1.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.2.0)\n",
- "Requirement already satisfied: h5py>=2.9.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (3.7.0)\n",
- "Requirement already satisfied: keras-preprocessing>=1.1.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.1.2)\n",
- "Requirement already satisfied: astunparse>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.6.3)\n",
- "Requirement already satisfied: absl-py>=0.4.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.3.0)\n",
- "Requirement already satisfied: libclang>=9.0.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (14.0.6)\n",
- "Requirement already satisfied: opt-einsum>=2.3.2 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (3.3.0)\n",
- "Requirement already satisfied: six>=1.12.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.16.0)\n",
- "Requirement already satisfied: protobuf<3.20,>=3.9.2 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 3)) (3.19.6)\n",
- "Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.7/site-packages (from astunparse>=1.6.0->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.38.4)\n",
+ "Requirement already satisfied: click>=8.0 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (8.1.3)\n",
+ "Requirement already satisfied: itsdangerous>=2.0 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (2.1.2)\n",
+ "Requirement already satisfied: Jinja2>=3.0 in /opt/conda/lib/python3.7/site-packages (from flask==2.2.2->-r service/requirements.txt (line 1)) (3.1.2)\n",
+ "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.19.5 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (3.19.6)\n",
+ "Requirement already satisfied: google-cloud-storage<3.0.0dev,>=1.32.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.7.0)\n",
+ "Requirement already satisfied: packaging<22.0.0dev,>=14.3 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (21.3)\n",
+ "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (1.22.1)\n",
+ "Requirement already satisfied: google-cloud-resource-manager<3.0.0dev,>=1.3.3 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (1.8.0)\n",
+ "Requirement already satisfied: google-cloud-bigquery<3.0.0dev,>=1.15.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.34.4)\n",
+ "Requirement already satisfied: google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (1.34.0)\n",
+ "Requirement already satisfied: setuptools>=3.0 in /opt/conda/lib/python3.7/site-packages (from gunicorn==20.1.0->-r service/requirements.txt (line 3)) (65.5.1)\n",
+ "Requirement already satisfied: libclang>=9.0.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (14.0.6)\n",
+ "Requirement already satisfied: flatbuffers>=1.12 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (22.12.6)\n",
+ "Requirement already satisfied: termcolor>=1.1.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (2.1.1)\n",
+ "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (0.28.0)\n",
+ "Requirement already satisfied: opt-einsum>=2.3.2 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (3.3.0)\n",
+ "Requirement already satisfied: astunparse>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.6.3)\n",
+ "Requirement already satisfied: six>=1.12.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.16.0)\n",
+ "Requirement already satisfied: typing-extensions>=3.6.6 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (4.4.0)\n",
+ "Requirement already satisfied: tensorboard<2.9,>=2.8 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (2.8.0)\n",
+ "Requirement already satisfied: absl-py>=0.4.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.3.0)\n",
+ "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.51.1)\n",
+ "Requirement already satisfied: keras<2.9,>=2.8.0rc0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (2.8.0)\n",
+ "Requirement already satisfied: numpy>=1.20 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.21.6)\n",
+ "Requirement already satisfied: google-pasta>=0.1.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (0.2.0)\n",
+ "Requirement already satisfied: wrapt>=1.11.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.14.1)\n",
+ "Requirement already satisfied: gast>=0.2.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (0.5.3)\n",
+ "Requirement already satisfied: keras-preprocessing>=1.1.1 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.1.2)\n",
+ "Requirement already satisfied: tensorflow-estimator<2.9,>=2.8 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (2.8.0)\n",
+ "Requirement already satisfied: h5py>=2.9.0 in /opt/conda/lib/python3.7/site-packages (from tensorflow==2.8.4->-r service/requirements.txt (line 4)) (3.7.0)\n",
+ "Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.7/site-packages (from astunparse>=1.6.0->tensorflow==2.8.4->-r service/requirements.txt (line 4)) (0.38.4)\n",
+ "Requirement already satisfied: requests<3.0.0dev,>=2.18.0 in /opt/conda/lib/python3.7/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.28.1)\n",
+ "Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.56.2 in /opt/conda/lib/python3.7/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (1.57.0)\n",
+ "Requirement already satisfied: google-auth<3.0dev,>=1.25.0 in /opt/conda/lib/python3.7/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.15.0)\n",
+ "Requirement already satisfied: grpcio-status<2.0dev,>=1.33.2 in /opt/conda/lib/python3.7/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (1.48.2)\n",
+ "Requirement already satisfied: google-resumable-media<3.0dev,>=0.6.0 in /opt/conda/lib/python3.7/site-packages (from google-cloud-bigquery<3.0.0dev,>=1.15.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.4.0)\n",
+ "Requirement already satisfied: python-dateutil<3.0dev,>=2.7.2 in /opt/conda/lib/python3.7/site-packages (from google-cloud-bigquery<3.0.0dev,>=1.15.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.8.2)\n",
+ "Requirement already satisfied: google-cloud-core<3.0.0dev,>=1.4.1 in /opt/conda/lib/python3.7/site-packages (from google-cloud-bigquery<3.0.0dev,>=1.15.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.3.2)\n",
+ "Requirement already satisfied: grpc-google-iam-v1<1.0.0dev,>=0.12.4 in /opt/conda/lib/python3.7/site-packages (from google-cloud-resource-manager<3.0.0dev,>=1.3.3->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (0.12.4)\n",
"Requirement already satisfied: zipp>=0.5 in /opt/conda/lib/python3.7/site-packages (from importlib-metadata>=3.6.0->flask==2.2.2->-r service/requirements.txt (line 1)) (3.11.0)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.7/site-packages (from Jinja2>=3.0->flask==2.2.2->-r service/requirements.txt (line 1)) (2.1.1)\n",
- "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.4.6)\n",
- "Requirement already satisfied: google-auth<3,>=1.6.3 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2.15.0)\n",
- "Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.8.1)\n",
- "Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (3.4.1)\n",
- "Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.6.1)\n",
- "Requirement already satisfied: requests<3,>=2.21.0 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2.28.1)\n",
- "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.7/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (4.9)\n",
- "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.7/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (5.2.0)\n",
- "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.7/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.2.8)\n",
- "Requirement already satisfied: requests-oauthlib>=0.7.0 in /opt/conda/lib/python3.7/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.3.1)\n",
- "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2022.12.7)\n",
- "Requirement already satisfied: charset-normalizer<3,>=2 in /opt/conda/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (2.1.1)\n",
- "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (3.4)\n",
- "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (1.26.13)\n",
- "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /opt/conda/lib/python3.7/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (0.4.8)\n",
- "Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.7/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 3)) (3.2.2)\n"
+ "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.7/site-packages (from packaging<22.0.0dev,>=14.3->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (3.0.9)\n",
+ "Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.8.1)\n",
+ "Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 4)) (3.4.1)\n",
+ "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 4)) (0.4.6)\n",
+ "Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /opt/conda/lib/python3.7/site-packages (from tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 4)) (0.6.1)\n",
+ "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.7/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (0.2.8)\n",
+ "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.7/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (5.2.0)\n",
+ "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.7/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (4.9)\n",
+ "Requirement already satisfied: requests-oauthlib>=0.7.0 in /opt/conda/lib/python3.7/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 4)) (1.3.1)\n",
+ "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /opt/conda/lib/python3.7/site-packages (from google-resumable-media<3.0dev,>=0.6.0->google-cloud-bigquery<3.0.0dev,>=1.15.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (1.5.0)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.7/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2022.12.7)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.7/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (1.26.13)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.7/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (3.4)\n",
+ "Requirement already satisfied: charset-normalizer<3,>=2 in /opt/conda/lib/python3.7/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (2.1.1)\n",
+ "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /opt/conda/lib/python3.7/site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0dev,>=1.25.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform==1.18.3->-r service/requirements.txt (line 2)) (0.4.8)\n",
+ "Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.7/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.9,>=2.8->tensorflow==2.8.4->-r service/requirements.txt (line 4)) (3.2.2)\n"
]
}
],
@@ -113,9 +185,16 @@
"!pip install -r service/requirements.txt"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### __Handle imports, utilites, and staging storage__"
+ ]
+ },
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 5,
"metadata": {
"id": "_XgTpm9ZxoN9",
"tags": []
@@ -135,134 +214,81 @@
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import LabelBinarizer\n",
"\n",
+ "from google.cloud import exceptions\n",
+ "\n",
+ "binarizer = LabelBinarizer()\n",
+ "\n",
"tf.get_logger().setLevel('ERROR')\n",
"rcParams['figure.figsize'] = 12, 8\n",
"warnings.filterwarnings(\"ignore\")"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### __Create Cloud Storage bucket__"
+ ]
+ },
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
- "df = pd.read_csv(DATA_FILE)\n",
+ "from google.cloud import storage\n",
"\n",
- "# Split off a testing datasets\n",
- "train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)\n",
+ "storage_client = storage.Client()\n",
"\n",
- "# Split the remaining data into training and validation datasets\n",
- "train_df, valid_df = train_test_split(train_df, test_size=0.1, random_state=42)"
+ "try:\n",
+ " bucket = storage_client.bucket(GCP_BUCKET)\n",
+ " bucket.storage_class = \"STANDARD\"\n",
+ " new_bucket = storage_client.create_bucket(bucket, location=GCP_REGION)\n",
+ "except exceptions.Conflict:\n",
+ " print(\"Bucket already exists - choose a new name if the bucket is not under your control\")\n",
+ " pass"
]
},
{
- "cell_type": "code",
- "execution_count": 5,
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " text | \n",
- " intent | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 507 | \n",
- " Delete scheduled task | \n",
- " destroy cron | \n",
- "
\n",
- " \n",
- " 89 | \n",
- " Can you delete a cron job? | \n",
- " destroy cron | \n",
- "
\n",
- " \n",
- " 199 | \n",
- " Documentation, where can I find? Can you guide... | \n",
- " documentation | \n",
- "
\n",
- " \n",
- " 193 | \n",
- " Can you please reduce scale, I have too many r... | \n",
- " self scale | \n",
- "
\n",
- " \n",
- " 468 | \n",
- " Can you assist me with scheduling tasks for my... | \n",
- " create cron | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " text intent\n",
- "507 Delete scheduled task destroy cron\n",
- "89 Can you delete a cron job? destroy cron\n",
- "199 Documentation, where can I find? Can you guide... documentation\n",
- "193 Can you please reduce scale, I have too many r... self scale\n",
- "468 Can you assist me with scheduling tasks for my... create cron"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
"source": [
- "train_df.head()"
+ "## Custom model"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### __Data preparation__"
]
},
{
"cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "scrolled": true
- },
+ "execution_count": 7,
+ "metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "(367, 2)"
+ "((347, 2), (82, 2), (82, 2))"
]
},
- "execution_count": 6,
+ "execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "train_df.shape"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "train_features = train_df.copy()\n",
- "train_labels = train_features.pop(\"intent\")"
+ "df = pd.read_csv(DATA_FILE)\n",
+ "\n",
+ "# Split off a testing dataset\n",
+ "train_df, test_df = train_test_split(df, test_size=0.16, random_state=42)\n",
+ "\n",
+ "# Split the remaining data into training and validation datasets\n",
+ "train_df, valid_df = train_test_split(train_df, test_size=0.19, random_state=42)\n",
+ "\n",
+ "train_df.shape, test_df.shape, valid_df.shape"
]
},
{
@@ -271,7 +297,12 @@
"metadata": {},
"outputs": [],
"source": [
- "train_features = train_features.values"
+ "# Separate out features and labels (training)\n",
+ "train_copy = train_df.copy()\n",
+ "train_labels = train_copy.pop(\"intent\")\n",
+ "train_labels = binarizer.fit_transform(train_labels.values)\n",
+ "train_features = train_copy.values\n",
+ "intent_count = train_labels.shape[1]"
]
},
{
@@ -280,47 +311,24 @@
"metadata": {},
"outputs": [],
"source": [
- "binarizer = LabelBinarizer()\n",
- "train_labels = binarizer.fit_transform(train_labels.values)"
+ "# Separate out features and labels (testing)\n",
+ "test_copy = test_df.copy()\n",
+ "test_labels = test_copy.pop(\"intent\")\n",
+ "test_labels = binarizer.transform(test_labels.values)\n",
+ "test_features = test_copy.values"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(367, 8)"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "intent_count = train_labels.shape[1]\n",
- "train_labels.shape"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
"outputs": [],
"source": [
- "test_features = test_df.copy()\n",
- "test_labels = test_features.pop(\"intent\")\n",
- "valid_features = valid_df.copy()\n",
- "valid_labels = valid_features.pop(\"intent\")\n",
- "\n",
- "test_features = test_features.values\n",
- "valid_features = valid_features.values\n",
- "\n",
- "test_labels = binarizer.transform(test_labels.values)\n",
- "valid_labels = binarizer.transform(valid_labels.values)"
+ "# Separate out features and labels (validation)\n",
+ "valid_copy = valid_df.copy()\n",
+ "valid_labels = valid_copy.pop(\"intent\")\n",
+ "valid_labels = binarizer.transform(valid_labels.values)\n",
+ "valid_features = valid_copy.values"
]
},
{
@@ -329,7 +337,7 @@
"id": "dX8FtlpGJRE6"
},
"source": [
- "## Loading models from TensorFlow Hub\n",
+ "#### __Load model from TensorFlow Hub__\n",
"\n",
"Here you can choose which BERT model you will load from TensorFlow Hub and fine-tune. There are multiple BERT models available.\n",
"\n",
@@ -350,7 +358,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 11,
"metadata": {
"id": "y8_ctG55-uTX",
"tags": []
@@ -366,7 +374,6 @@
}
],
"source": [
- "bert_model_name = 'small_bert/bert_en_uncased_L-8_H-512_A-8' \n",
"map_name_to_handle = {\n",
" 'bert_en_uncased_L-12_H-768_A-12':\n",
" 'https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/3',\n",
@@ -505,8 +512,8 @@
" 'https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/2',\n",
"}\n",
"\n",
- "tfhub_handle_encoder = map_name_to_handle[bert_model_name]\n",
- "tfhub_handle_preprocess = map_model_to_preprocess[bert_model_name]\n",
+ "tfhub_handle_encoder = map_name_to_handle[BERT_MODEL_NAME]\n",
+ "tfhub_handle_preprocess = map_model_to_preprocess[BERT_MODEL_NAME]\n",
"\n",
"print(f'BERT model selected : {tfhub_handle_encoder}')\n",
"print(f'Preprocess model auto-selected: {tfhub_handle_preprocess}')"
@@ -518,7 +525,7 @@
"id": "7WrcxxTRDdHi"
},
"source": [
- "## The preprocessing model\n",
+ "#### __The preprocessing model__\n",
"\n",
"Text inputs need to be transformed to numeric token ids and arranged in several Tensors before being input to BERT. TensorFlow Hub provides a matching preprocessing model for each of the BERT models discussed above, which implements this transformation using TF ops from the TF.text library. It is not necessary to run pure Python code outside your TensorFlow model to preprocess text.\n",
"\n",
@@ -529,7 +536,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 12,
"metadata": {
"id": "0SQi-jWd_jzq",
"tags": []
@@ -539,10 +546,10 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "2023-01-15 19:09:42.975269: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda/lib64:/usr/local/nccl2/lib:/usr/local/cuda/extras/CUPTI/lib64\n",
- "2023-01-15 19:09:42.975329: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)\n",
- "2023-01-15 19:09:42.975352: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (tensorflow-2-8-20230115-133740): /proc/driver/nvidia/version does not exist\n",
- "2023-01-15 19:09:42.975597: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n",
+ "2023-01-17 22:50:26.002258: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda/lib64:/usr/local/nccl2/lib:/usr/local/cuda/extras/CUPTI/lib64\n",
+ "2023-01-17 22:50:26.002306: W tensorflow/stream_executor/cuda/cuda_driver.cc:269] failed call to cuInit: UNKNOWN ERROR (303)\n",
+ "2023-01-17 22:50:26.002335: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (tensorflow-2-8-20230117-000657): /proc/driver/nvidia/version does not exist\n",
+ "2023-01-17 22:50:26.002591: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n",
"To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
]
}
@@ -562,16 +569,17 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "array(['Delete scheduled task'], dtype=object)"
+ "array(['Can you tell me how to change the scale of one of your microservices?'],\n",
+ " dtype=object)"
]
},
- "execution_count": 14,
+ "execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
@@ -582,7 +590,7 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": 14,
"metadata": {
"id": "r9-zCzJpnuwS",
"tags": []
@@ -592,10 +600,10 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Keys : ['input_type_ids', 'input_word_ids', 'input_mask']\n",
+ "Keys : ['input_mask', 'input_type_ids', 'input_word_ids']\n",
"Shape : (1, 128)\n",
- "Word Ids : [ 101 3972 12870 5115 4708 102 0 0 0 0 0 0]\n",
- "Input Mask : [1 1 1 1 1 1 0 0 0 0 0 0]\n",
+ "Word Ids : [ 101 2064 2017 2425 2033 2129 2000 2689 1996 4094 1997 2028]\n",
+ "Input Mask : [1 1 1 1 1 1 1 1 1 1 1 1]\n",
"Type Ids : [0 0 0 0 0 0 0 0 0 0 0 0]\n"
]
}
@@ -632,14 +640,14 @@
"id": "DKnLPSEmtp9i"
},
"source": [
- "## Using the BERT model\n",
+ "#### __Using the BERT model__\n",
"\n",
"Before putting BERT into an own model, let's take a look at its outputs. You will load it from TF Hub and see the returned values."
]
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": 15,
"metadata": {
"id": "tXxYpK8ixL34",
"tags": []
@@ -651,7 +659,7 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 16,
"metadata": {
"id": "_OoF9mebuSZc",
"tags": []
@@ -661,35 +669,35 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Loaded BERT: https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-512_A-8/1\n",
- "Pooled Outputs Shape:(1, 512)\n",
- "Pooled Outputs Values:[ 0.38008717 -0.3713979 -0.99633324 -0.8828487 -0.4356928 -0.4016127\n",
- " -0.99928737 0.32494175 0.24131705 0.39659867 0.9951671 -0.11896375]\n",
- "Sequence Outputs Shape:(1, 128, 512)\n",
- "Sequence Outputs Values:[[-0.7442301 0.17604867 0.63783437 ... 0.513188 -1.2219555\n",
- " -0.00173689]\n",
- " [-0.54973364 0.26147014 -0.7926538 ... 0.24370176 -0.60001326\n",
- " 0.24907288]\n",
- " [-0.09852025 -0.24003302 -0.42945752 ... 0.29231924 -1.28544\n",
- " -0.24107009]\n",
+ "Loaded BERT : https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-512_A-8/1\n",
+ "Pooled Outputs Shape : (1, 512)\n",
+ "Pooled Outputs Values : [ 0.385889 -0.12248868 -0.9998633 0.28463823 -0.4075239 -0.39477754\n",
+ " -0.99803925 0.2665583 0.24860786 0.08505904 -0.34656683 0.1943462 ]\n",
+ "Sequence Outputs Shape : (1, 128, 512)\n",
+ "Sequence Outputs Values : [[-0.23372588 0.3678839 0.94593 ... -0.12252477 -0.43001646\n",
+ " 0.6094305 ]\n",
+ " [-0.39601198 -0.09191871 0.30907482 ... -0.6917538 1.4148049\n",
+ " -0.2261968 ]\n",
+ " [-1.4655601 -0.6329228 1.4872218 ... -0.44263726 -0.7672484\n",
+ " -0.14803627]\n",
" ...\n",
- " [ 0.10415229 -0.1520155 -0.23385802 ... 0.17001778 -0.54459953\n",
- " -0.22196133]\n",
- " [ 0.17499137 -0.06097127 0.54251975 ... 0.5958168 -0.37109143\n",
- " -0.10074075]\n",
- " [ 0.15013008 0.03962955 0.59219164 ... 0.3902613 -0.3109738\n",
- " 0.33535522]]\n"
+ " [-0.59902114 0.02120084 0.6990685 ... 0.9867604 -0.20310818\n",
+ " -0.4146583 ]\n",
+ " [-0.16003767 0.2527567 1.5589244 ... 0.30391887 1.2162194\n",
+ " -0.24888408]\n",
+ " [ 0.30644155 0.27735925 0.70691913 ... 0.53195554 0.14866629\n",
+ " 0.9018017 ]]\n"
]
}
],
"source": [
"bert_results = bert_model(text_preprocessed)\n",
"\n",
- "print(f'Loaded BERT: {tfhub_handle_encoder}')\n",
- "print(f'Pooled Outputs Shape:{bert_results[\"pooled_output\"].shape}')\n",
- "print(f'Pooled Outputs Values:{bert_results[\"pooled_output\"][0, :12]}')\n",
- "print(f'Sequence Outputs Shape:{bert_results[\"sequence_output\"].shape}')\n",
- "print(f'Sequence Outputs Values:{bert_results[\"sequence_output\"][0, :12]}')"
+ "print(f'Loaded BERT : {tfhub_handle_encoder}')\n",
+ "print(f'Pooled Outputs Shape : {bert_results[\"pooled_output\"].shape}')\n",
+ "print(f'Pooled Outputs Values : {bert_results[\"pooled_output\"][0, :12]}')\n",
+ "print(f'Sequence Outputs Shape : {bert_results[\"sequence_output\"].shape}')\n",
+ "print(f'Sequence Outputs Values : {bert_results[\"sequence_output\"][0, :12]}')"
]
},
{
@@ -713,7 +721,7 @@
"id": "pDNKfAXbDnJH"
},
"source": [
- "## Define your model\n",
+ "#### __Define the model__\n",
"\n",
"You will create a very simple fine-tuned model, with the preprocessing model, the selected BERT model, one Dense and a Dropout layer.\n",
"\n",
@@ -722,7 +730,7 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 17,
"metadata": {
"id": "aksj743St9ga",
"tags": []
@@ -752,7 +760,7 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": 18,
"metadata": {
"id": "mGMF8AZcB2Zy",
"tags": []
@@ -763,8 +771,8 @@
"output_type": "stream",
"text": [
"tf.Tensor(\n",
- "[[0.10404271 0.09260793 0.08020899 0.09814781 0.15087037 0.03379072\n",
- " 0.16705798 0.27327356]], shape=(1, 8), dtype=float32)\n"
+ "[[0.16331084 0.22407842 0.26904288 0.04798554 0.12082581 0.0503904\n",
+ " 0.09420813 0.03015799]], shape=(1, 8), dtype=float32)\n"
]
}
],
@@ -787,7 +795,7 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 19,
"metadata": {},
"outputs": [
{
@@ -800,28 +808,28 @@
"==================================================================================================\n",
" text (InputLayer) [(None,)] 0 [] \n",
" \n",
- " preprocessing (KerasLayer) {'input_type_ids': 0 ['text[0][0]'] \n",
- " (None, 128), \n",
- " 'input_mask': (Non \n",
+ " preprocessing (KerasLayer) {'input_mask': (Non 0 ['text[0][0]'] \n",
" e, 128), \n",
" 'input_word_ids': \n",
+ " (None, 128), \n",
+ " 'input_type_ids': \n",
" (None, 128)} \n",
" \n",
- " BERT_encoder (KerasLayer) {'sequence_output': 41373185 ['preprocessing[0][0]', \n",
- " (None, 128, 512), 'preprocessing[0][1]', \n",
- " 'default': (None, 'preprocessing[0][2]'] \n",
- " 512), \n",
- " 'pooled_output': ( \n",
- " None, 512), \n",
- " 'encoder_outputs': \n",
- " [(None, 128, 512), \n",
+ " BERT_encoder (KerasLayer) {'encoder_outputs': 41373185 ['preprocessing[0][0]', \n",
+ " [(None, 128, 512), 'preprocessing[0][1]', \n",
+ " (None, 128, 512), 'preprocessing[0][2]'] \n",
" (None, 128, 512), \n",
" (None, 128, 512), \n",
" (None, 128, 512), \n",
" (None, 128, 512), \n",
" (None, 128, 512), \n",
+ " (None, 128, 512)], \n",
+ " 'sequence_output': \n",
" (None, 128, 512), \n",
- " (None, 128, 512)]} \n",
+ " 'default': (None, \n",
+ " 512), \n",
+ " 'pooled_output': ( \n",
+ " None, 512)} \n",
" \n",
" dropout (Dropout) (None, 512) 0 ['BERT_encoder[0][9]'] \n",
" \n",
@@ -845,9 +853,9 @@
"id": "WbUWoZMwc302"
},
"source": [
- "## Model training\n",
+ "#### __Model training__\n",
"\n",
- "You now have all the pieces to train a model, including the preprocessing module, BERT encoder, data, and classifier."
+ "You now have all the pieces to train a model, including the preprocessing module, BERT encoder, data, and classifier. Vertex AI Training can be used for parallelization, accelerated training, and hyperparameter tuning, however the \"baseline case\" of in-notebook training is provided below."
]
},
{
@@ -856,12 +864,12 @@
"id": "WpJ3xcwDT56v"
},
"source": [
- "Since this is a non-binary classification problem and the model outputs probabilities, you'll use `losses.CategoricalCrossentropy` loss function.\n"
+ "Since this is a non-binary classification problem and the model outputs probabilities, you'll use `losses.CategoricalCrossentropy` loss function."
]
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 20,
"metadata": {
"id": "OWPOZE-L3AgE",
"tags": []
@@ -878,22 +886,21 @@
"id": "SqlarlpC_v0g"
},
"source": [
- "### Loading the BERT model and training\n",
+ "#### __Loading the BERT model and training__\n",
"\n",
"Using the `classifier_model` you created earlier, you can compile the model with the loss, metric and optimizer."
]
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 21,
"metadata": {
"id": "-7GPDhR98jsD",
"tags": []
},
"outputs": [],
"source": [
- "epochs=5\n",
- "optimizer=tf.keras.optimizers.Adam(1e-5)\n",
+ "optimizer=tf.keras.optimizers.Adam(LEARNING_RATE)\n",
"classifier_model.compile(\n",
" optimizer=optimizer,\n",
" loss=loss,\n",
@@ -907,12 +914,12 @@
"id": "CpBuV5j2cS_b"
},
"source": [
- "Note: training time will vary depending on the complexity of the BERT model you have selected."
+ "Note: training time will vary depending on the complexity of the BERT model you have selected, the notebook environment compute/memory, and the availability of TPU/GPU accelerators. Again, Vertex AI Training could be used to scale and distribute training."
]
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 22,
"metadata": {
"id": "HtfDFAnN_Neu",
"scrolled": true,
@@ -923,36 +930,34 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Training model with https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-512_A-8/1\n",
- "(367, 1)\n",
- "(367, 8)\n",
- "(41, 1)\n",
- "(41, 8)\n",
- "Epoch 1/5\n",
- "12/12 [==============================] - 95s 7s/step - loss: 2.1091 - categorical_accuracy: 0.1880 - val_loss: 1.7822 - val_categorical_accuracy: 0.3415\n",
- "Epoch 2/5\n",
- "12/12 [==============================] - 83s 7s/step - loss: 1.7212 - categorical_accuracy: 0.3951 - val_loss: 1.5522 - val_categorical_accuracy: 0.5854\n",
- "Epoch 3/5\n",
- "12/12 [==============================] - 82s 7s/step - loss: 1.4229 - categorical_accuracy: 0.6431 - val_loss: 1.3455 - val_categorical_accuracy: 0.6585\n",
- "Epoch 4/5\n",
- "12/12 [==============================] - 82s 7s/step - loss: 1.1552 - categorical_accuracy: 0.7575 - val_loss: 1.0439 - val_categorical_accuracy: 0.7805\n",
- "Epoch 5/5\n",
- "12/12 [==============================] - 83s 7s/step - loss: 0.8882 - categorical_accuracy: 0.8692 - val_loss: 0.7925 - val_categorical_accuracy: 0.8780\n"
+ "Training the transfer-learning model based on https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-512_A-8/1\n",
+ "Epoch 1/8\n",
+ "11/11 [==============================] - 96s 8s/step - loss: 2.1831 - categorical_accuracy: 0.1354 - val_loss: 1.9841 - val_categorical_accuracy: 0.2805\n",
+ "Epoch 2/8\n",
+ "11/11 [==============================] - 81s 7s/step - loss: 1.8310 - categorical_accuracy: 0.3285 - val_loss: 1.7547 - val_categorical_accuracy: 0.4634\n",
+ "Epoch 3/8\n",
+ "11/11 [==============================] - 81s 7s/step - loss: 1.5643 - categorical_accuracy: 0.5533 - val_loss: 1.4916 - val_categorical_accuracy: 0.6463\n",
+ "Epoch 4/8\n",
+ "11/11 [==============================] - 81s 7s/step - loss: 1.2815 - categorical_accuracy: 0.7349 - val_loss: 1.1838 - val_categorical_accuracy: 0.7805\n",
+ "Epoch 5/8\n",
+ "11/11 [==============================] - 80s 7s/step - loss: 1.0152 - categorical_accuracy: 0.8444 - val_loss: 0.9169 - val_categorical_accuracy: 0.8537\n",
+ "Epoch 6/8\n",
+ "11/11 [==============================] - 81s 7s/step - loss: 0.7800 - categorical_accuracy: 0.9193 - val_loss: 0.7026 - val_categorical_accuracy: 0.8902\n",
+ "Epoch 7/8\n",
+ "11/11 [==============================] - 80s 7s/step - loss: 0.5785 - categorical_accuracy: 0.9280 - val_loss: 0.5540 - val_categorical_accuracy: 0.8780\n",
+ "Epoch 8/8\n",
+ "11/11 [==============================] - 80s 7s/step - loss: 0.4360 - categorical_accuracy: 0.9597 - val_loss: 0.4612 - val_categorical_accuracy: 0.8902\n"
]
}
],
"source": [
- "print(f'Training model with {tfhub_handle_encoder}')\n",
- "print(train_features.shape)\n",
- "print(train_labels.shape)\n",
- "print(valid_features.shape)\n",
- "print(valid_labels.shape)\n",
+ "print(f'Training the transfer-learning model based on {tfhub_handle_encoder}')\n",
"history = classifier_model.fit(\n",
" x=train_features,\n",
" y=train_labels,\n",
" validation_data=(valid_features,valid_labels),\n",
- " batch_size=32,\n",
- " epochs=epochs\n",
+ " batch_size=BATCH_SIZE,\n",
+ " epochs=EPOCHS\n",
")"
]
},
@@ -962,14 +967,14 @@
"id": "uBthMlTSV8kn"
},
"source": [
- "### Evaluate the model\n",
+ "#### __Evaluate the model__\n",
"\n",
"Let's see how the model performs. Two values will be returned. Loss (a number which represents the error, lower values are better), and accuracy."
]
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 23,
"metadata": {
"id": "slqB-urBV9sP",
"tags": []
@@ -979,9 +984,9 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "4/4 [==============================] - 7s 2s/step - loss: 0.6393 - categorical_accuracy: 0.9029\n",
- "Loss: 0.6392922401428223\n",
- "Accuracy: 0.9029126167297363\n"
+ "3/3 [==============================] - 5s 2s/step - loss: 0.3591 - categorical_accuracy: 0.9146\n",
+ "Loss: 0.35913094878196716\n",
+ "Accuracy: 0.9146341681480408\n"
]
}
],
@@ -998,39 +1003,32 @@
"id": "uttWpgmSfzq9"
},
"source": [
- "### Plot the accuracy and loss over time\n",
+ "#### __Plot the accuracy and loss over time__\n",
"\n",
"Based on the `History` object returned by `model.fit()`. You can plot the training and validation loss for comparison, as well as the training and validation accuracy:"
]
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 24,
"metadata": {
"id": "fiythcODf0xo",
"tags": []
},
"outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "dict_keys(['loss', 'categorical_accuracy', 'val_loss', 'val_categorical_accuracy'])\n"
- ]
- },
{
"data": {
"text/plain": [
- ""
+ ""
]
},
- "execution_count": 25,
+ "execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
- "image/png": "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Z88eateujaenJxkzZuT1118nJCQk6uddunShRYsWjBo1Cn9/fzJmzEj37t3jtWYoIiKC4cOHkyNHDtzd3SldujRLly6N+vm9e/fo0aMH/v7+eHh4kCtXrqhpjJZlMXToUHLmzIm7uzvZsmWjV69ecf7sJ+HQEafu3bszY8YMfvvtN3x8fLhw4QIAadOmxdPTE4BOnTqRPXv2qE7q3bs3NWrUYPTo0TRp0oRff/2V7du388033zjsOuQ/eHhA587QqRNs3gzjxsHs2bBxo2n+/vDmm/D66/AfI4YiIiKSut2+bQr8Ji4nIB3BwRH4+MR+touLC506dWLq1KkMGjQoakRl9uzZhIeH89xzzxESEkK5cuV499138fX1ZdGiRbz44ovky5ePihUrxvoZERERtGrViqxZs7JlyxZu3LhBnz59HjrPx8eHqVOnki1bNvbs2cNrr72Gj48P77zzDu3bt2fv3r0sXbqUFStWAOZ797/dunWLBg0aULlyZbZt28alS5d49dVX6dGjR4zkcNWqVfj7+7Nq1SqOHDlC+/btKV26NK+99lrsnQaMHTuW0aNH8/XXX1OmTBl++OEHmjVrxr59+yhQoABjx47l999/Z9asWeTMmZPTp09z+vRpAObOncuXX37Jr7/+SrFixbhw4QK7d++O0+c+McuBgEe2KVOmRJ1To0YNq3PnzjFeN2vWLKtgwYKWm5ubVaxYMWvRokVx/swbN25YgHXjxo0Euoqnc+/ePWvBggXWvXv3HB1K4jh3zrKGDLEsPz/LMn/IsSxXV8t6/nnL2rw5wT8u1fVvIlP/2pf6177Uv/al/rWvlNy/d+7csf7++2/rzp07lmVZVkhI9FeGxG7BweFxjnv//v0WYK1atSrqWLVq1awXXnjhP1/TpEkT66233op6XqNGDat3795Rz3PlymV9+eWXlmVZ1rJlyywXFxfr7NmzUT9fsmSJBVjz58//z8/4/PPPrXLlykU9HzJkiFWqVKmHznvwfb755hsrffr0VkhISNTPFy1aZDk5OVkXLlywLMuyOnfubOXKlcu6f/9+1Dlt27a12rdv/5+xRH52eHi49c8//1jZsmWzPvrooxjnVKhQwerWrZtlWZbVs2dPq3bt2lZERMRD7zV69GirYMGCcfp34N/31IPikxs4dMTJisP45+rVqx861rZtW9q2bWuHiMTu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LI917tw5smfPzsaNG6lcuXLU8XfeeYc1a9awZcuWR75u7NixvP3221iWxf3793nzzTeZNGnSI88dOnQow4YNe+j4jBkz8PLySpgLERERERGRKPfv2zh0KD27dmUhKCgLR46kw7KiN4dycwvnnXe2Ub78RQdGCbdv36Zjx47cuHEDX1/fx56b7KrqrV69mo8//piJEydSqVIljhw5Qu/evRkxYgQffPDBQ+cPHDiQfv36RT0PDg4mICCA+vXrx9o5iSEsLIzAwEDq1auHa2qt7WhH6l/7Uv/al/rXvtS/9qX+tS/1r32pfxPe1av3WbnS9v8jUnDunDMvvFCKvHkdm44Ex6OihUMjzZQpE87Ozly8GDPTvHjxIn5+fo98zQcffMCLL77Iq6++CkCJEiW4desWr7/+OoMGDcLJKeayLXd3d9zd3R96H1dX1yT1L0JSiyelUf/al/rXvtS/9qX+tS/1r32pf+1L/Ztw/Pzg+edNu3cvjO+++5O8eWs4vH/j8/kOLQ7h5uZGuXLlWLlyZdSxiIgIVq5cGWPq3oNu3779UHLk7OwMgANnHYqIiIiISBzYbJA9+y1HhxFvDp+q169fPzp37kz58uWpWLEiX331Fbdu3eKll14CoFOnTmTPnp1PPvkEgKZNm/LFF19QpkyZqKl6H3zwAU2bNo1KoERERERERBKSwxOn9u3bc/nyZQYPHsyFCxcoXbo0S5cuJWvWrACcOnUqxgjT+++/j81m4/333+fs2bNkzpyZpk2b8tFHHznqEkREREREJIVzeOIE0KNHD3r06PHIn61evTrGcxcXF4YMGcKQIUMSITIREREREZEksAGuiIiIiIhIUqfESUREREREJBZKnERERERERGKhxElERERERCQWSpxERERERERiocRJREREREQkFkmiHHlisiwLgODgYAdHYoSFhXH79m2Cg4NxdXV1dDgpjvrXvtS/9qX+tS/1r32pf+1L/Wtf6l/7Skr9G5kTROYIj5PqEqebN28CEBAQ4OBIREREREQkKbh58yZp06Z97Dk2Ky7pVQoSERHBuXPn8PHxwWazOTocgoODCQgI4PTp0/j6+jo6nBRH/Wtf6l/7Uv/al/rXvtS/9qX+tS/1r30lpf61LIubN2+SLVs2nJwev4op1Y04OTk5kSNHDkeH8RBfX1+H3zgpmfrXvtS/9qX+tS/1r32pf+1L/Wtf6l/7Sir9G9tIUyQVhxAREREREYmFEicREREREZFYKHFyMHd3d4YMGYK7u7ujQ0mR1L/2pf61L/Wvfal/7Uv9a1/qX/tS/9pXcu3fVFccQkREREREJL404iQiIiIiIhILJU4iIiIiIiKxUOIkIiIiIiISCyVOIiIiIiIisVDiZEdr166ladOmZMuWDZvNxoIFC2J9zerVqylbtizu7u7kz5+fqVOn2j3O5Cq+/bt69WpsNttD7cKFC4kTcDLzySefUKFCBXx8fMiSJQstWrTg4MGDsb5u9uzZFC5cGA8PD0qUKMHixYsTIdrk50n6d+rUqQ/dvx4eHokUcfIyadIkSpYsGbW5YuXKlVmyZMljX6N7N+7i27+6d5/Op59+is1mo0+fPo89T/fwk4lL/+oejruhQ4c+1FeFCxd+7GuSy72rxMmObt26RalSpZgwYUKczj9+/DhNmjShVq1aBAUF0adPH1599VWWLVtm50iTp/j2b6SDBw9y/vz5qJYlSxY7RZi8rVmzhu7du7N582YCAwMJCwujfv363Lp16z9fs3HjRp577jleeeUVdu3aRYsWLWjRogV79+5NxMiThyfpXzC7rD94/548eTKRIk5ecuTIwaeffsqOHTvYvn07tWvXpnnz5uzbt++R5+vejZ/49i/o3n1S27Zt4+uvv6ZkyZKPPU/38JOJa/+C7uH4KFasWIy+Wr9+/X+em6zuXUsSBWDNnz//see88847VrFixWIca9++vdWgQQM7RpYyxKV/V61aZQHWP//8kygxpTSXLl2yAGvNmjX/eU67du2sJk2axDhWqVIl64033rB3eMleXPp3ypQpVtq0aRMvqBQmffr01nfffffIn+nefXqP61/du0/m5s2bVoECBazAwECrRo0aVu/evf/zXN3D8Ref/tU9HHdDhgyxSpUqFefzk9O9qxGnJGTTpk3UrVs3xrEGDRqwadMmB0WUMpUuXRp/f3/q1avHhg0bHB1OsnHjxg0AMmTI8J/n6B5+cnHpX4CQkBBy5cpFQEBArH/hFyM8PJxff/2VW7duUbly5Ueeo3v3ycWlf0H37pPo3r07TZo0eejefBTdw/EXn/4F3cPxcfjwYbJly0bevHl5/vnnOXXq1H+em5zuXRdHByDRLly4QNasWWMcy5o1K8HBwdy5cwdPT08HRZYy+Pv7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3Nzg7OwMhUJRZtdVKBTYu3cvOnbsWGEPGDamsp5fS0vLUslsMXAiIiIiIpNmZmZW4v0p+l4vOzsb1tbWDJwMoLzOLxdtEhERERERFYKBExERERERUSEYOBERERERERWi0u1xUh2AlZSUZOSRCAqFAmlpaUhKSipXazzLC86vYXF+DYvza1icX8Pi/BoW59ewOL+GZUrzq4oJinJIbqULnJKTkwEAHh4eRh4JERERERGZguTkZFStWrXAPjKpKOFVBaJUKhEfHw97e3uTqMuflJQEDw8P3Lp1Cw4ODsYeToXD+TUszq9hcX4Ni/NrWJxfw+L8Ghbn17BMaX4lSUJycjJq1apVaMnySpdxksvlqF27trGHocXBwcHoN05Fxvk1LM6vYXF+DYvza1icX8Pi/BoW59ewTGV+C8s0qbA4BBERERERUSEYOBERERERERWCgZORWVlZYfr06bCysjL2UCokzq9hcX4Ni/NrWJxfw+L8Ghbn17A4v4ZVXue30hWHICIiIiIi0hczTkRERERERIVg4ERERERERFQIBk5ERERERESFYOBERERERERUCAZOBrR371707dsXtWrVgkwmw+bNmwt9ze7du9GqVStYWVnB29sbK1euNPg4yyt953f37t2QyWRaj4SEhLIZcDkzZ84ctG7dGvb29nB2dka/fv0QGxtb6Ot+//13NGzYENbW1mjWrBm2bt1aBqMtf4ozvytXrtS6f62trctoxOXLkiVL0Lx5c/XhikFBQdi2bVuBr+G9W3T6zi/v3ZL54osvIJPJMG7cuAL78R4unqLML+/hopsxY4bWXDVs2LDA15SXe5eBkwGlpqbCz88PixcvLlL/uLg49OnTB126dEFMTAzGjRuHd999F//884+BR1o+6Tu/KrGxsbh796764ezsbKARlm979uzBqFGjcPjwYURFRUGhUKBnz55ITU3N9zUHDx7EwIED8c477+DkyZPo168f+vXrh7Nnz5bhyMuH4swvIE5Zz3v/3rhxo4xGXL7Url0bX3zxBY4fP47//vsPXbt2xSuvvIJz587p7M97Vz/6zi/Ae7e4jh07hu+//x7NmzcvsB/v4eIp6vwCvIf10aRJE4252r9/f759y9W9K1GZACBt2rSpwD7jx4+XmjRpotEW/icwZAAACo9JREFUEhIi9erVy4AjqxiKMr+7du2SAEhPnjwpkzFVNPfv35cASHv27Mm3z5tvvin16dNHo61NmzbSe++9Z+jhlXtFmd8VK1ZIVatWLbtBVTCOjo7STz/9pPNnvHdLrqD55b1bPMnJyZKPj48UFRUlderUSRo7dmy+fXkP60+f+eU9XHTTp0+X/Pz8ity/PN27zDiZkEOHDqF79+4abb169cKhQ4eMNKKKqUWLFnBzc0OPHj1w4MABYw+n3EhMTAQAVK9ePd8+vIeLryjzCwApKSnw9PSEh4dHob/hJyEnJwfr1q1DamoqgoKCdPbhvVt8RZlfgPducYwaNQp9+vTRujd14T2sP33mF+A9rI/Lly+jVq1aqF+/Pt566y3cvHkz377l6d41N/YAKFdCQgJcXFw02lxcXJCUlIT09HTY2NgYaWQVg5ubG5YuXYqAgABkZmbip59+QufOnXHkyBG0atXK2MMzaUqlEuPGjUP79u3RtGnTfPvldw9zH1nBijq/vr6+WL58OZo3b47ExETMmzcP7dq1w7lz51C7du0yHHH5cObMGQQFBSEjIwN2dnbYtGkTGjdurLMv71396TO/vHf1t27dOpw4cQLHjh0rUn/ew/rRd355DxddmzZtsHLlSvj6+uLu3buIiIhAcHAwzp49C3t7e63+5eneZeBElYavry98fX3Vz9u1a4erV6/im2++wapVq4w4MtM3atQonD17tsA1ylR8RZ3foKAgjd/ot2vXDo0aNcL333+PWbNmGXqY5Y6vry9iYmKQmJiIDRs2IDQ0FHv27Mn3yz3pR5/55b2rn1u3bmHs2LGIiopiAQIDKM788h4uuhdffFH9782bN0ebNm3g6emJ3377De+8844RR1ZyDJxMiKurK+7du6fRdu/ePTg4ODDbZCCBgYEMBgoRFhaGv//+G3v37i30t2r53cOurq6GHGK5ps/8Ps/CwgItW7bElStXDDS68s3S0hLe3t4AAH9/fxw7dgwLFizA999/r9WX967+9Jnf5/HeLdjx48dx//59jdUQOTk52Lt3LxYtWoTMzEyYmZlpvIb3cNEVZ36fx3u46KpVq4YGDRrkO1fl6d7lHicTEhQUhOjoaI22qKioAteMU8nExMTAzc3N2MMwSZIkISwsDJs2bcK///6LevXqFfoa3sNFV5z5fV5OTg7OnDnDe7iIlEolMjMzdf6M927JFTS/z+O9W7Bu3brhzJkz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\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAK9CAYAAADIapagAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD/i0lEQVR4nOzdd3yN5xvH8c85mYLECknsxN5bVatamyodZlujWq0aVVWlVRW1quhAUUXQmjVaaoUWtWdaatSIHatFECKS8/vj/uWQWsFJzgnf9+v1vPQ85znPcx23/H4u931fl8Vms9kQERERERGRB2J1dgAiIiIiIiIPAyVXIiIiIiIiDqDkSkRERERExAGUXImIiIiIiDiAkisREREREREHUHIlIiIiIiLiAEquREREREREHEDJlYiIiIiIiAMouRIREREREXEAJVciImlcmzZtyJcv3319tm/fvlgsFscG5GIOHjyIxWIhLCwsVZ+7YsUKLBYLK1assJ9L7lilVMz58uWjTZs2Dr1ncoSFhWGxWDh48GCqP1tEJDUpuRIRSSEWiyVZx41/+RZ5UGvXrqVv376cO3fO2aGIiDxy3J0dgIjIw2rKlClJXk+ePJnw8PCbzhctWvSBnjNu3DgSEhLu67O9e/emZ8+eD/R8Sb4HGavkWrt2LaGhobRp04ZMmTIleW/Pnj1Yrfp3VRGRlKLkSkQkhbzyyitJXq9fv57w8PCbzv9XTEwMPj4+yX6Oh4fHfcUH4O7ujru7/q8gtTzIWDmCl5eXU58vIvKw0z9fiYg4UfXq1SlRogRbtmyhWrVq+Pj48OGHHwLw008/0aBBA4KCgvDy8iIkJIRPP/2U+Pj4JPf47z6exP06Q4cO5dtvvyUkJAQvLy8qVqzIpk2bknz2VnuuLBYLnTp1Yt68eZQoUQIvLy+KFy/O4sWLb4p/xYoVVKhQAW9vb0JCQhg7dmyy93H9/vvvNGnShDx58uDl5UXu3Ll59913uXz58k3fL0OGDBw7dozGjRuTIUMG/P396d69+02/F+fOnaNNmzb4+fmRKVMmWrdunazlcZs3b8ZisTBp0qSb3luyZAkWi4UFCxYAcOjQId5++20KFy5MunTpyJo1K02aNEnWfqJb7blKbsx//vknbdq0ITg4GG9vbwICAnjttdf4559/7Nf07duX999/H4D8+fPbl54mxnarPVcHDhygSZMmZMmSBR8fHx577DF++eWXJNck7h+bOXMmAwYMIFeuXHh7e1OjRg327dt31+99O9988w3FixfHy8uLoKAgOnbseNN337t3Ly+++CIBAQF4e3uTK1cumjdvzvnz5+3XhIeH88QTT5ApUyYyZMhA4cKF7T9HIiKpSf9cKSLiZP/88w/16tWjefPmvPLKK+TIkQMwRQAyZMhAt27dyJAhA7/++it9+vQhOjqazz///K73nTp1KhcuXODNN9/EYrEwZMgQXnjhBQ4cOHDXGZTVq1czZ84c3n77bTJmzMjXX3/Niy++yOHDh8maNSsA27Zto27dugQGBhIaGkp8fDz9+vXD398/Wd971qxZxMTE0KFDB7JmzcrGjRsZMWIER48eZdasWUmujY+Pp06dOlSuXJmhQ4eybNkyhg0bRkhICB06dADAZrPRqFEjVq9ezVtvvUXRokWZO3curVu3vmssFSpUIDg4mJkzZ950/YwZM8icOTN16tQBYNOmTaxdu5bmzZuTK1cuDh48yOjRo6levTo7d+68p1nHe4k5PDycAwcO0LZtWwICAvjrr7/49ttv+euvv1i/fj0Wi4UXXniBv//+m2nTpvHFF1+QLVs2gNuOycmTJ3n88ceJiYmhS5cuZM2alUmTJvHcc8/x448/8vzzzye5fvDgwVitVrp378758+cZMmQIL7/8Mhs2bEj2d07Ut29fQkNDqVmzJh06dGDPnj2MHj2aTZs2sWbNGjw8PLh69Sp16tQhNjaWzp07ExAQwLFjx1iwYAHnzp3Dz8+Pv/76i2effZZSpUrRr18/vLy82LdvH2vWrLnnmEREHphNRERSRceOHW3//Z/dp556ygbYxowZc9P1MTExN5178803bT4+PrYrV67Yz7Vu3dqWN29e++vIyEgbYMuaNavt33//tZ//6aefbIBt/vz59nOffPLJTTEBNk9PT9u+ffvs5/744w8bYBsxYoT9XMOGDW0+Pj62Y8eO2c/t3bvX5u7uftM9b+VW32/QoEE2i8ViO3ToUJLvB9j69euX5NqyZcvaypcvb389b948G2AbMmSI/dy1a9dsTz75pA2wTZw48Y7x9OrVy+bh4ZHk9yw2NtaWKVMm22uvvXbHuNetW2cDbJMnT7af++2332yA7bfffkvyXW4cq3uJ+VbPnTZtmg2wrVq1yn7u888/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V6/CqFEQEgLvvgv/r5IoIiIiIo+ufPny8eWXXyb7+hUrVmCxWDh37lyKxQQQFhZGpkyZUvQZrkjJlYuzPfEEa/v359rSpVC1KsTGwpdfQnAw9OgBZ844O0QRERERuQuLxXLHo2/fvvd1302bNtG+fftkX//4448TFRWFn5/ffT1P7kzJVRphq14dfv8dliyBSpXg8mX4/HPInx8++gj+/dfZIYqIiIjIbURFRdmPL7/8El9f3yTnunfvbr82sUFycvj7+99T1URPT08CAgLUzyuFKLlKSywWqF0b1q+HBQugXDm4eBEGDjRJVt++kMJTvCIiIiIux2aDS5eccySjtRBAQECA/fDz88Nisdhf7969m4wZM7Jo0SLKly+Pl5cXq1evZv/+/TRq1IgcOXKQIUMGKlasyLJly5Lc97/LAi0WC9999x3PP/88Pj4+FCxYkJ9//tn+/n+XBSYu31uyZAlFixYlQ4YM1K1bl6ioKPtnrl27RpcuXciUKRNZs2blgw8+oHXr1jRu3Piehmn06NGEhITg6elJ4cKFmTJlyg1DaKNv377kyZMHLy8vcuXKxQcffGB//5tvvqFgwYJ4e3uTI0eOm3reugolV2mRxQINGsDmzTB3LpQsCdHREBpqkqwBA+DCBWdHKSIiIpI6YmIgQ4b7Pqy+vmTKlQurr++9fz4mxmFfo2fPngwePJhdu3ZRqlQpLl68SP369Vm+fDnbtm2jbt26NGzYkMN3qSIdGhpK06ZN+fPPP6lfvz4vv/wy/95hlVNMTAxDhw5lypQprFq1isOHDyeZSfvss8/44YcfmDhxImvWrCE6Opp58+bd03ebO3cu77zzDu+99x47duzgzTffpG3btvz2228AzJ49my+++IKxY8eyd+9e5syZQ7FixQDYvHkzXbp0oV+/fuzZs4fFixdTrVq1e3p+alFylZZZLNC4MUREwMyZULSombnq3dskWUOGmH9RERERERGX169fP2rVqkVISAhZsmShdOnSvPnmm5QoUYKCBQvy6aefEhISkmQm6lbatGlDixYtKFCgAAMHDuTixYts3LjxttfHxcUxZswYKlSoQLly5ejUqRPLly+3vz9ixAh69erF888/T5EiRRg5cuQ9F6sYOnQobdq04e2336ZQoUJ069aNF154gaFDhwJw+PBhAgICqFmzJnny5KFSpUq0bt3a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9++Pb9vMho3du+9t7+fjsUeu733d9/W572vT3r7f63NJTmOz2ejbty9Llixh7dq1ugjZCVmtVmJiYhxdRq7VvHlzdu3alWKse/fuVKpUiaFDhypYOYHIyEgOHDjAU0895ehScqXGjRunuoXHvn37KFmypIMqkkRz586lcOHCSY0UxDGioqJwcUnZEsLV1RWr1eqgijJO4cpJRUZGpviXxUOHDhEeHk6BAgUoUaKEAyvLvXr37s2CBQv4+uuvyZs3L6dPnwbA398fb29vB1eX+wwfPpw2bdpQokQJLl++zIIFC1i7di0rV650dGm5Vt68eVNdg5gnTx4CAgJ0baKDDB48mNDQUEqWLMnJkycZPXo0rq6udO7c2dGl5UoDBw6kUaNGTJgwgQ4dOrB161bef/993n//fUeXlqtZrVbmzp1LWFiYblXgYKGhoYwfP54SJUpQpUoVfvvtN6ZNm0aPHj0cXVq6WWzZ6a5cucjatWu59957U42HhYUxb968rC9Ibtg5aO7cubr41QGefvpp1qxZw6lTp/D396d69eoMHTqUli1bOro0uUazZs2oWbMm06dPd3QpuVKnTp1Yt24d58+fp1ChQtx9992MHz+esmXLOrq0XOvbb79l+PDh7N+/n9KlSzNo0CCeffZZR5eVq/3www+0atWKvXv3UqFCBUeXk6tdvnyZkSNHsmTJEs6ePUvRokXp3Lkzo0aNwsPDw9HlpYvClYiIiIiISCbQfa5EREREREQygcKViIiIiIhIJlC4EhERERERyQQKVyIiIiIiIplA4UpERERERCQTKFyJiIiIiIhkAoUrERERERGRTKBwJSIiIiIikgkUrkRERERERDKBwpWIiIiIiEgmULgSERERERHJBApXIiIiIiIimUDhSkQkC3Xr1o1SpUrd1nPHjBmDxWLJ3IKczOHDh7FYLMybNy9Lj7t27VosFgtr165NGkvvubJXzaVKlaJbt26Z+poiImJfClciIoDFYknX17W/fIvcqY0bNzJmzBguXrzo6FJERCQTuDm6ABERZ/DJJ5+k2P74449ZtWpVqvHKlSvf0XE++OADrFbrbT13xIgRDBs27I6OL+l3J+cqvTZu3MjYsWPp1q0b+fLlS/HY3r17cXHRv4GKiGQnClciIsCTTz6ZYnvz5s2sWrUq1fj1oqKi8PHxSfdx3N3db6s+ADc3N9zc9Nd2VrmTc5UZPD09HXr87OLKlSvkyZPH0WWIiABaFigikm7NmjWjatWqbN++naZNm+Lj48PLL78MwNdff80DDzxA0aJF8fT0pGzZsowbN46EhIQUr3H9dTyJ1+tMnTqV999/n7Jly+Lp6Um9evXYtm1biuemdc2VxWKhT58+LF26lKpVq+Lp6UmVKlVYsWJFqvrXrl1L3bp18fLyomzZsrz33nvpvo5r/fr1PP7445QoUQJPT0+Cg4MZOHAgV69eTfX+fH19OXHiBO3atcPX15dChQoxePDgVJ/FxYsX6datG/7+/uTLl4+wsLB0LY/79ddfsVgsfPTRR6keW7lyJRaLhW+//RaAI0eO0KtXLypWrIi3tzcBAQE8/vjjHD58+JbHSeuaq/TW/Pvvv9OtWzfKlCmDl5cXgYGB9OjRg/PnzyftM2bMGF566SUASpcunbT0NLG2tK65OnjwII8//jgFChTAx8eHhg0b8t1336XYJ/H6scWLFzN+/HiKFy+Ol5cXzZs35++//77l+87IZ3bx4kUGDhxIqVKl8PT0pHjx4nTt2pVz584l7RMdHc2YMWOoUKECXl5eBAUF8cgjj3DgwIEU9V6/5Data9kSv78OHDhA27ZtyZs3L126dAHS/z0K8Ndff9GhQwcKFSqEt7c3FStW5JVXXgHgp59+wmKxsGTJklTPW7BgARaLhU2bNt3ycxSR3En/BCoikgHnz5+nTZs2dOrUiSeffJIiRYoAMG/ePHx9fRk0aBC+vr78+OOPjBo1ioiICKZMmXLL112wYAGXL1/mueeew2KxMHnyZB555BEOHjx4yxmUX375ha+++opevXqRN29e3n77bR599FGOHj1KQEAAAL/99hutW7cmKCiIsWPHkpCQwKuvvkqhQoXS9b4///xzoqKieOGFFwgICGDr1q3MmDGD48eP8/nnn6fYNyEhgVatWtGgQQOmTp3K6tWreeONNyhbtiwvvPACADabjYcffphffvmF559/nsqVK7NkyRLCwsJuWUvdunUpU6YMixcvTrX/okWLyJ8/P61atQJg27ZtbNy4kU6dOlG8eHEOHz7MrFmzaNasGX/++WeGZh0zUvOqVas4ePAg3bt3JzAwkD/++IP333+fP/74g82bN2OxWHjkkUfYt28fn332GW+++SYFCxYEuOE5OXPmDI0aNSIqKop+/foREBDARx99xEMPPcQXX3xB+/btU+w/adIkXFxcGDx4MJcuXWLy5Ml06dKFLVu23PR9pvczi4yMpEmTJuzZs4cePXpQu3Ztzp07x7Jlyzh+/DgFCxYkISGBBx98kDVr1tCpUyf69+/P5cuXWbVqFbt376Zs2bLp/vwTxcfH06pVK+6++26mTp2aVE96v0d///13mjRpgru7Oz179qRUqVIcOHCAb775hvHjx9OsWTOCg4OZP39+qs90/vz5lC1blpCQkAzXLSK5hE1ERFLp3bu37fq/Iu+55x4bYJs9e3aq/aOiolKNPffcczYfHx9bdHR00lhYWJitZMmSSduHDh2yAbaAgADbhQsXksa//vprG2D75ptvksZGjx6dqibA5uHhYfv777+Txnbu3GkDbDNmzEgaCw0Ntfn4+NhOnDiRNLZ//36bm5tbqtdMS1rvb+LEiTaLxWI7cuRIivcH2F599dUU+9aqVctWp06dpO2lS5faANvkyZOTxuLj421NmjSxAba5c+fetJ7hw4fb3N3dU3xmMTExtnz58tl69Ohx07o3bdpkA2wff/xx0thPP/1kA2w//fRTivdy7bnKSM1pHfezzz6zAbZ169YljU2ZMsUG2A4dOpRq/5IlS9rCwsKStgcMGGADbOvXr08au3z5sq106dK2UqVK2RISElK8l8qVK9tiYmKS9n3rrbdsgG3Xrl2pjnWt9H5mo0aNsgG2r776KtX+VqvVZrPZbHPmzLEBtmnTpt1wn7Q+e5st+Wfj2s818ftr2LBh6ao7re/Rpk2b2vLmzZti7Np6bDbz/eXp6Wm7ePFi0tjZs2dtbm5uttGjR6c6johIIi0LFBHJAE9PT7p3755q3NvbO+nPly9f5ty5czRp0oSoqCj++uuvW75ux44dyZ8/f9J2kyZNALMM7FZatGiRYgagevXq+Pn5JT03ISGB1atX065dO4oWLZq0X7ly5WjTps0tXx9Svr8rV65w7tw5GjVqhM1m47fffku1//PPP59iu0mTJiney/Lly3Fzc0uayQJwdXWlb9++6aqnY8eOxMXF8dVXXyWN/fDDD1y8eJGOHTumWXdcXBznz5+nXLly5MuXjx07dqTrWLdT87XHjY6O5ty5czRs2BAgw8e99vj169fn7rvvThrz9fWlZ8+eHD58mD///DPF/t27d8fDwyNpO73fU+n9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1apVS3qtGTNmEBcXx+zZs/H09KRDhw5MmTLllo0nEmXke7RGjRps3ryZkSNHMmvWLKKjoylZsiQdOnRI9bqhoaHkz58fq9XKQw89lNGPUkRyIYvNmf5pVUREslS7du34448/0rweSCS3i4+Pp2jRooSGhvLhhx86uhwRyQZ0zZWISC5x9erVFNv79+9n+fLlNGvWzDEFiTi5pUuX8s8//6RokiEicjOauRIRySWCgoLo1q0bZcqU4ciRI8yaNYuYmBh+++03ypcv7+jyRJzGli1b+P333xk3bhwFCxa87Rs/i0juo2uuRERyidatW/PZZ59x+vRpPD09CQkJYcKECQpWIteZNWsWn376KTVr1mTevHmOLkdEshGnn7lat24dU6ZMYfv27Zw6dYolS5bQrl27mz5n7dq1DBo0iD/++IPg4GBGjBhBt27dsqReERERERHJnZz+mqsrV65Qo0YN3nnnnXTtf+jQIR544AHuvfdewsPDGTBgAM888wwrV660c6UiIiIiIpKbOf3M1bUsFsstZ66GDh3Kd999l+Lu6506deLixYusWLEiC6oUEREREZHcKMddc7Vp0yZatGiRYqxVq1YMGDDghs+JiYkhJiYmadtqtXLhwgUCAgKwWCz2KlVERERERJyczWbj8uXLFC1a9JY3bM9x4er06dMUKVIkxViRIkWIiIjg6tWreHt7p3rOxIkTGTt2bFaVKCIiIiIi2cyxY8eSbpJ+IzkuXN2O4cOHM2jQoKTtS5cuUaJECQ4dOkTevHkdWBnExcXx008/ce+99+Lu7u7QWsTQOXE+OifORefD+eicOB+dE+ei8+F8nOmcXL58mdKlS6crF+S4cBUYGMiZM2dSjJ05cwY/P780Z60APD098fT0TDVeoEAB/Pz87FJnesXFxeHj40NAQIDDv7HE0DlxPjonzkXnw/nonDgfnRPnovPhfJzpnCQePz2XCzl9t8CMCgkJYc2aNSnGVq1aRUhIiIMqEhERERGR3MDpw1VkZCTh4eGEh4cDptV6eHg4R48eBcySvq5duybt//zzz3Pw4EGGDBnCX3/9xbvvvsvixYsZOHCgI8oXEREREZFcwunD1a+//kqtWrWoVasWAIMGDaJWrVqMGjUKgFOnTiUFLYDSpUvz3XffsWrVKmrUqMEbb7zB//73P1q1auWQ+kVEREREJHdw+muu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SqAiIiIiclsUrnKIHTtMs4qffzbbhQubJYE9eoCbznJKf/0F/frBqlVmOzjY9KV/9FHTvEJERERE5Dbo1+5s7vhxeOUV017dZgNPT3jxRRg6FPz8HF2dk7l82STON980NwX28DCdPoYNgzx5HF2diIiIiGRzClfZVGQkTJlivq5eNWNPPAETJkDJko6tzenYbLBggVkveeqUGXvwQROyypVzbG0iIiIikmMoXGUzCQnw0UcwYkRyTmjc2Kxqq1/fsbU5pZ07oW9fWL/ebJctC2+9BQ884Ni6RERERCTHUY/pbGTNGqhTB55+2gSr0qXh889NblCwus6//0KfPub+VOvXg48PjB8Pu3crWImIiIiIXWjmKhs4ftyXdu1cWb7cbPv7w8iRJjt4ejq2NqeTkABz5pi7JJ87Z8Y6dDB96IODHVubiIiIiORoCldOLDoaXnzRhdmz78VqdcHVFV54AUaPhoIFHV2dE9qyxSTOX38123fdBTNmmBbrIiIiIiJ2pmWBTszTE3bssGC1uvDAA1Z27zZZQcHqOmfPmp7zDRuaYOXnZ5pVhIcrWImIiIhIltHMlROzWOCttxJYsWITw4fXx91dWTiF+Hh4910YNQouXTJjYWEwaRIEBjq2NhERERHJdRSunFytWnDq1DlHl+F81q41XQB37zbbtWvDzJkQEuLQskREREQk99JUiGQvx49D585w770mWBUoALNnw9atClYiIiIi4lCauZLsISbGXEf12mtw5Qq4uMBzz8G4cRAQ4OjqRERExMESEhKIi4u7refGxcXh5uZGdHQ0CQkJmVyZ3I6sPCfu7u64urpmymspXInzW7EC+vWD/fvNdqNGZglgrVqOrUtEREQczmazcfr0aS5evHhHrxEYGMixY8ewWCyZV5zctqw+J/ny5SMwMPCOj6VwJc7r4EEYOBCWLTPbgYEweTI8+aTp9iEiIiK5XmKwKly4MD4+Prf1y7HVaiUyMhJfX19cXHTVjDPIqnNis9mIiori7NmzAAQFBd3R6ylcifOJioLXXzdfMTHg5gb9+5uugH5+jq5OREREnERCQkJSsAq4g8sErFYrsbGxeHl5KVw5iaw8J97e3gCcPXuWwoUL39ESQYUrcR42GyxZYmarjh41Y82bw9tvmxsCi4iIiFwj8RorHx8fB1ci2V3i91BcXJzCleQAe/aY66pW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IiIiki0ldlqMiopycCWS3SV+D91p905dcyUiIiIi2ZKrqyv58uXj7NmzgLnnkuU27v1ptVqJjY0lOjpardidRFadE5vNRlRUFGfPniVfvny4urre0espXImIiIhIthUYGAiQFLBuh81m4+rVq3h7e99WOJPMl9XnJF++fEnfS3dC4UpEREREsi2LxUJQUBCFCxcmLi7utl4jLi6OdevW0bRpU93U2Ulk5Tlxd3e/4xmrRApXIiIiIpLtubq63vYvyK6ursTHx+Pl5aVw5SSy6znRolIREREREZFMoHAlIiIiIiKSCRSuREREREREMoGuuUpD4k3EIiIiHFyJuZgvKiqKiIiIbLXeNCfTOXE+OifORefD+eicOB+dE+ei8+F8nOmcJGaC9NxoWOEqDZcvXwYgODjYwZWIiIiIiIgzuHz5Mv7+/jfdx2JLTwTLZaxWKydPniRv3rwOv9dBREQEwcHBHDt2DD8/P4fWIobOifPROXEuOh/OR+fE+eicOBedD+fjTOfEZrNx+fJlihYtessbGmvmKg0uLi4UL17c0WWk4Ofn5/BvLElJ58T56Jw4F50P56Nz4nx0TpyLzofzcZZzcqsZq0RqaCEiIiIiIpIJFK5EREREREQygcKVk/P09GT06NF4eno6uhT5j86J89E5cS46H85H58T56Jw4F50P55Ndz4kaWoiIiIiIiGQCzVyJiIiIiIhkAoUrERERERGRTKBwJSIiIiIikgkUrkRERERERDKBwpWTWrduHaGhoRQtWhSLxcLSpUsdXVKuN3HiROrVq0fevHkpXLgw7dq1Y+/evY4uK9eaNWsW1atXT7q5YEhICN9//72jy5JrTJo0CYvFwoABAxxdSq41ZswYLBZLiq9KlSo5uqxc7cSJEzz55JMEBATg7e1NtWrV+PXXXx1dVq5VqlSpVD8jFouF3r17O7q0XCkhIYGRI0dSunRpvL29KVu2LOPGjSM79d9zc3QBkrYrV65Qo0YNevTowSOPPOLocgT4+eef6d27N/Xq1SM+Pp6XX36Z+++/nz///JM8efI4urxcp3jx4kyaNIny5ctjs9n46KOPePjhh/ntt9+oUqWKo8vL9bZt28Z7771H9erVHV1KrlelShVWr16dtO3mpv/1O8q///5L48aNuffee/n+++8pVKgQ+/fvJ3/+/I4uLdfatm0bCQkJSdu7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mpX0WMOGDalduzbvvvsuH3zwAUOHDuXYsWPkyZMHgOXLlxMaGsrJkycpUqQIxYoVo3v37rz22mtp1mCxWBgxYgTjxo0DTGDz9fXl+++/p3Xr1jz00EMULFiQOXPm2OlTEBERZ6BrrkREJNu79957U4QngAIFCiT9OSQkJMVjISEhhIeHA7Bnzx5q1KiRFKwAGjdujNVqZe/evVgsFk6ePEnz5s1vWkP16tWT/pwnTx78/Pw4e/YsAC+88AKPPvooO3bs4P7776ddu3Y0atTott6riIg4L4UrERHJ9vLkyZNqmV5m8fb2Ttd+7u7uKbYtFgtWqxWANm3acOTIEZYvX86qVato3rw5vXv3ZurUqZler4iIOI6uuRIRkRxv8+bNqbYrV64MQOXKldm5cydXrlxJenzDhg24uLhQsWJF8ubNS6lSpVizZs0d1VCoUCHCwsL49NNPmT59Ou+///4dvZ6IiDgfzVyJiEi2FxMTw+nTp1OMubm5JTWN+Pzzz6lbty5333038+fPZ+vWrXz44YcAdOnShdGjRxMWFsaYMWP4559/6Nu3L0899RRFihQBYMyYMTz//PMULlyYNm3acPnyZTZs2EDfvn3TVd+oUaOoU6cOVapUISYmhm+//TYp3ImISM6hcCUiItneihUrCAoKSjFWsWJF/vrrL8B08lu4cCG9evUiKCiIzz77jLvuugsAHx8fVq5cSf/+/alXrx4+Pj48+uijTJs2Lem1wsLCiI6O5s0332Tw4MEULFiQxx57LN31eXh4MHz4cA4fPoy3tzdNmjRh4cKFmfDORUTEmahboIiI5GgWi4UlS5bQrl07R5ciIiI5nK65EhERERERyQQKVyIiIiIiIplA11yJiEiOptXvIiKSVTRzJSIiIiIikgkUrkRERERERDKBwpWIiIiIiEgmULgSERERERHJBApXIiIiIiIimUDhSkREREREJBMoXImIiIiIiGQChSsREREREZFM8H9lBrhm2S1bngAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
@@ -1041,7 +1039,6 @@
],
"source": [
"history_dict = history.history\n",
- "print(history_dict.keys())\n",
"\n",
"acc = history_dict['categorical_accuracy']\n",
"val_acc = history_dict['val_categorical_accuracy']\n",
@@ -1093,12 +1090,25 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 25,
"metadata": {
"id": "VBWzH6exlCPS",
"tags": []
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "input: Hey can I please see the documentation : estimated intent: documentation\n",
+ "input: Could use some help with a cron job : estimated intent: destroy cron\n",
+ "input: How do I deprovision you on the weekends : estimated intent: destroy cron\n",
+ "input: I have a big issue with that response. : estimated intent: report issue\n",
+ "input: How can I scale your microservices to be more cost-effective? : estimated intent: self scale\n",
+ "\n"
+ ]
+ }
+ ],
"source": [
"def print_my_examples(inputs, results):\n",
" result_for_printing = \\\n",
@@ -1107,68 +1117,1940 @@
" print(*result_for_printing, sep='\\n')\n",
" print()\n",
"\n",
- "\n",
"examples = [\n",
" 'Hey can I please see the documentation',\n",
" 'Could use some help with a cron job',\n",
" 'How do I deprovision you on the weekends',\n",
" 'I have a big issue with that response.',\n",
- " 'How can I scale your microservices to be more cost-effective?',\n",
- " 'I need to run some unit tests'\n",
+ " 'How can I scale your microservices to be more cost-effective?'\n",
"]\n",
"\n",
- "results = tf.nn.softmax(classifier_model(tf.constant(examples)))"
+ "results = tf.nn.softmax(classifier_model(tf.constant(examples)))\n",
+ "intents = binarizer.inverse_transform(results.numpy())\n",
+ "print_my_examples(examples, intents)"
]
},
{
- "cell_type": "code",
- "execution_count": 27,
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [],
"source": [
- "intents=binarizer.inverse_transform(results.numpy())"
+ "#### __Save the model__"
]
},
{
"cell_type": "code",
- "execution_count": 28,
- "metadata": {
- "id": "VBWzH6exlCPS",
- "tags": []
- },
+ "execution_count": 26,
+ "metadata": {},
"outputs": [
{
- "name": "stdout",
+ "name": "stderr",
"output_type": "stream",
"text": [
- "input: Hey can I please see the documentation : estimated intent: documentation\n",
- "input: Could use some help with a cron job : estimated intent: destroy cron\n",
- "input: How do I deprovision you on the weekends : estimated intent: documentation\n",
- "input: I have a big issue with that response. : estimated intent: report issue\n",
- "input: How can I scale your microservices to be more cost-effective? : estimated intent: self scale\n",
- "input: I need to run some unit tests : estimated intent: report issue\n",
- "\n"
+ "2023-01-17 23:02:42.986410: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.\n",
+ "WARNING:absl:Found untraced functions such as restored_function_body, restored_function_body, restored_function_body, restored_function_body, restored_function_body while saving (showing 5 of 244). These functions will not be directly callable after loading.\n"
]
}
],
"source": [
- "print_my_examples(examples, intents)"
+ "classifier_model.save('service/model')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We have taken a \"DIY\" and notebook-centric approach to data preparation, model definition, and training. Continuing this approach would involve engineering \"taking over\" at this point, for versioning and productionalization. However, we can take a more platformized approach with incremental additions of Vertex AI (initially, just for metadata, then for more)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "### Save the model"
+ "## Adding the custom model to Vertex AI"
]
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
- "classifier_model.save('service/intents.keras')"
+ "from google.cloud import aiplatform\n",
+ "from google.cloud import storage\n",
+ "\n",
+ "# Vertex AI initialization\n",
+ "aiplatform.init(\n",
+ " project=GCP_PROJECT,\n",
+ " location=GCP_REGION,\n",
+ " experiment=EXPERIMENT_NAME,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### __Create an experiment run for the custom model__"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Associating projects/12345678910/locations/us-central1/metadataStores/default/contexts/isidro-intents-compare-custom-automl-bqml-run-custom-r1 to Experiment: isidro-intents-compare-custom-automl-bqml\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.metadata.experiment_resources:Associating projects/12345678910/locations/us-central1/metadataStores/default/contexts/isidro-intents-compare-custom-automl-bqml-run-custom-r1 to Experiment: isidro-intents-compare-custom-automl-bqml\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Start an experiment run (used to compare against other models like BQML and AutoML)\n",
+ "aiplatform.start_run(f\"run-custom-{VERTEX_MODEL_ROUND}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Add experiment run parameters\n",
+ "metaparams = {}\n",
+ "metaparams[\"epochs\"] = EPOCHS\n",
+ "metaparams[\"learning rate\"] = 1e-5\n",
+ "metaparams[\"base model\"] = BERT_MODEL_NAME\n",
+ "aiplatform.log_params(metaparams)\n",
+ "\n",
+ "# Add experiment run metrics\n",
+ "metrics = {}\n",
+ "metrics[\"cross-entropy loss\"] = history_dict[\"val_loss\"][-1]\n",
+ "metrics[\"categorical accuracy\"] = history_dict[\"val_categorical_accuracy\"][-1]\n",
+ "aiplatform.log_metrics(metrics)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.metrics import confusion_matrix\n",
+ "\n",
+ "# Use test dataset to compile a confusion matrix\n",
+ "test_copy = test_df.copy()\n",
+ "test_labels = test_copy.pop(\"intent\")\n",
+ "test_features = test_copy.values\n",
+ "test_results = tf.nn.softmax(classifier_model(tf.constant(test_features)))\n",
+ "test_results = binarizer.inverse_transform(test_results.numpy())\n",
+ "\n",
+ "labels = list(set(test_labels))\n",
+ "y_true = list(test_labels)\n",
+ "y_pred = list(test_results)\n",
+ "\n",
+ "classification_metrics = {\n",
+ " \"matrix\": confusion_matrix(y_true, y_pred, labels=labels).tolist(),\n",
+ " \"labels\": labels,\n",
+ "}\n",
+ "\n",
+ "# Add the confusion matrix to the experiment run\n",
+ "aiplatform.log_classification_metrics(\n",
+ " labels=classification_metrics[\"labels\"],\n",
+ " matrix=classification_metrics[\"matrix\"],\n",
+ " display_name=\"intents confusion matrix\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Creating Model\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.models:Creating Model\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Create Model backing LRO: projects/12345678910/locations/us-central1/models/1240990186968449024/operations/8960009109030043648\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.models:Create Model backing LRO: projects/12345678910/locations/us-central1/models/1240990186968449024/operations/8960009109030043648\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Model created. Resource name: projects/12345678910/locations/us-central1/models/1240990186968449024@1\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.models:Model created. Resource name: projects/12345678910/locations/us-central1/models/1240990186968449024@1\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "To use this Model in another session:\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.models:To use this Model in another session:\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "model = aiplatform.Model('projects/12345678910/locations/us-central1/models/1240990186968449024@1')\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.models:model = aiplatform.Model('projects/12345678910/locations/us-central1/models/1240990186968449024@1')\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Tie the dataset to the model training and experiment run\n",
+ "storage_client = storage.Client()\n",
+ "bucket = storage_client.bucket(GCP_BUCKET)\n",
+ "blob = bucket.blob(f\"custom-{VERTEX_MODEL_ROUND}/{DATA_FILE}\")\n",
+ "blob.upload_from_filename(DATA_FILE) # raw data\n",
+ "\n",
+ "training_data_artifact = aiplatform.Artifact.create(\n",
+ " schema_title='system.Dataset',\n",
+ " uri=f'gs://{GCP_BUCKET}/custom-{VERTEX_MODEL_ROUND}/{DATA_FILE}',\n",
+ " display_name='labeled intents data'\n",
+ ")\n",
+ "\n",
+ "with aiplatform.start_execution(\n",
+ " schema_title=\"system.ContainerExecution\", \n",
+ " display_name='training'\n",
+ ") as execution:\n",
+ " execution.assign_input_artifacts([training_data_artifact])\n",
+ "\n",
+ " # Upload the model to GCS\n",
+ " storage_client = storage.Client()\n",
+ " bucket = storage_client.bucket(GCP_BUCKET)\n",
+ " for model_file in [\n",
+ " \"saved_model.pb\",\n",
+ " \"keras_metadata.pb\",\n",
+ " \"assets/vocab.txt\",\n",
+ " \"variables/variables.index\",\n",
+ " \"variables/variables.data-00000-of-00001\"\n",
+ " ]:\n",
+ " blob = bucket.blob(f\"custom-{VERTEX_MODEL_ROUND}/{model_file}\")\n",
+ " blob.upload_from_filename(\"service/model/\" + model_file)\n",
+ "\n",
+ " # Create a model in the registry\n",
+ " model = aiplatform.Model.upload(\n",
+ " display_name=f\"{VERTEX_MODEL_NAME_PREFIX}_custom\",\n",
+ " artifact_uri=f\"gs://{GCP_BUCKET}/custom-{VERTEX_MODEL_ROUND}\",\n",
+ " description=VERTEX_MODEL_DESCRIPTION,\n",
+ " serving_container_image_uri=\"us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest\"\n",
+ " )\n",
+ "\n",
+ " model.wait()\n",
+ "\n",
+ " execution.assign_output_artifacts([model])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "aiplatform.end_run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Create an experiment run using BQML"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Typically, you'd just run a few lines of SQL code in the BigQuery SQL Workspace, but using the Python SDK here for consistency sake"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Associating projects/12345678910/locations/us-central1/metadataStores/default/contexts/isidro-intents-compare-custom-automl-bqml-run-bqml-r1 to Experiment: isidro-intents-compare-custom-automl-bqml\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.metadata.experiment_resources:Associating projects/12345678910/locations/us-central1/metadataStores/default/contexts/isidro-intents-compare-custom-automl-bqml-run-bqml-r1 to Experiment: isidro-intents-compare-custom-automl-bqml\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "aiplatform.start_run(f\"run-bqml-{VERTEX_MODEL_ROUND}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Upload training data to GCS\n",
+ "storage_client = storage.Client()\n",
+ "bucket = storage_client.bucket(GCP_BUCKET)\n",
+ "blob = bucket.blob(f\"bqml-{VERTEX_MODEL_ROUND}/{DATA_FILE}\")\n",
+ "blob.upload_from_filename(DATA_FILE) # raw data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Dataset already exists - choose a new name if the dataset is not under your control\n",
+ "Loaded 511 rows.\n"
+ ]
+ }
+ ],
+ "source": [
+ "from google.cloud import bigquery\n",
+ "\n",
+ "client = bigquery.Client()\n",
+ "\n",
+ "# Create the BigQuery dataset\n",
+ "dataset_id = f\"{GCP_PROJECT}.{BQ_DATASET}\"\n",
+ "table_id = f\"{GCP_PROJECT}.{BQ_DATASET}.raw_data\"\n",
+ "dataset = bigquery.Dataset(dataset_id)\n",
+ "dataset.location = \"US\"\n",
+ "try:\n",
+ " dataset = client.create_dataset(dataset, timeout=30) # Make an API request.\n",
+ " print(\"Created dataset {}.{}\".format(client.project, dataset.dataset_id))\n",
+ "except exceptions.Conflict:\n",
+ " print(\"Dataset already exists - choose a new name if the dataset is not under your control\")\n",
+ " pass\n",
+ "\n",
+ "# Import data to the BigQuery dataset\n",
+ "job_config = bigquery.LoadJobConfig(\n",
+ " schema=[\n",
+ " bigquery.SchemaField(\"text\", \"STRING\"),\n",
+ " bigquery.SchemaField(\"intent\", \"STRING\"),\n",
+ " ],\n",
+ " skip_leading_rows=1,\n",
+ " # The source format defaults to CSV, so the line below is optional.\n",
+ " source_format=bigquery.SourceFormat.CSV,\n",
+ ")\n",
+ "uri = f\"gs://{GCP_BUCKET}/bqml-{VERTEX_MODEL_ROUND}/{DATA_FILE}\"\n",
+ "load_job = client.load_table_from_uri(\n",
+ " uri, table_id, job_config=job_config\n",
+ ") # Make an API request.\n",
+ "load_job.result() # Waits for the job to complete.\n",
+ "\n",
+ "# Confirm the loaded data\n",
+ "destination_table = client.get_table(table_id) # Make an API request.\n",
+ "print(\"Loaded {} rows.\".format(destination_table.num_rows))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Create the BQML model\n",
+ "MODEL_QUERY = f\"\"\"\n",
+ "CREATE OR REPLACE MODEL\n",
+ " `{BQ_DATASET}.{VERTEX_MODEL_NAME_PREFIX}_bqml`\n",
+ "OPTIONS\n",
+ " (\n",
+ " model_type='LOGISTIC_REG',\n",
+ " auto_class_weights=TRUE,\n",
+ " data_split_method='RANDOM',\n",
+ " data_split_eval_fraction = .10,\n",
+ " input_label_cols=['intent'],\n",
+ " model_registry='vertex_ai'\n",
+ " ) AS\n",
+ "SELECT \n",
+ " ML.NGRAMS(intents.words_array, [1,2]) as ngrams, \n",
+ " intents.intent\n",
+ "FROM (\n",
+ " SELECT \n",
+ " REGEXP_EXTRACT_ALL(LOWER(raw.text), '[a-z]+') as words_array,\n",
+ " raw.intent\n",
+ " FROM `{BQ_DATASET}.raw_data` raw\n",
+ ") intents\n",
+ "\"\"\"\n",
+ "job = client.query(MODEL_QUERY)\n",
+ "job.result()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Evaluate the BQML model\n",
+ "EVALUATE_QUERY = f\"\"\"\n",
+ "SELECT accuracy, log_loss FROM ML.EVALUATE(MODEL `{BQ_DATASET}.{VERTEX_MODEL_NAME_PREFIX}_bqml`)\n",
+ "\"\"\"\n",
+ "job = client.query(EVALUATE_QUERY)\n",
+ "rows = job.result()\n",
+ "results = next(rows)\n",
+ "\n",
+ "# Experiment run parameters\n",
+ "metaparams = {}\n",
+ "metaparams[\"epochs\"] = \"N/A\"\n",
+ "metaparams[\"learning rate\"] = \"N/A\"\n",
+ "metaparams[\"base model\"] = \"N/A\"\n",
+ "aiplatform.log_params(metaparams)\n",
+ "\n",
+ "# Experiment run metrics\n",
+ "metrics = {}\n",
+ "metrics[\"cross-entropy loss\"] = results.log_loss\n",
+ "metrics[\"categorical accuracy\"] = results.accuracy\n",
+ "aiplatform.log_metrics(metrics)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Add the model to the experiment run\n",
+ "with aiplatform.start_execution(\n",
+ " schema_title=\"system.ContainerExecution\", \n",
+ " display_name='training'\n",
+ ") as execution:\n",
+ " execution.assign_output_artifacts([aiplatform.Model(model_name=f\"{VERTEX_MODEL_NAME_PREFIX}_bqml\")])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "aiplatform.end_run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Create an experiment run using AutoML"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Part of the value of AutoML is that it's no-code. The Python below is only for consistency sake (consider other mechanisms like the Cloud Console GUI for easier setup)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Associating projects/12345678910/locations/us-central1/metadataStores/default/contexts/isidro-intents-compare-custom-automl-bqml-run-automl-r1 to Experiment: isidro-intents-compare-custom-automl-bqml\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.metadata.experiment_resources:Associating projects/12345678910/locations/us-central1/metadataStores/default/contexts/isidro-intents-compare-custom-automl-bqml-run-automl-r1 to Experiment: isidro-intents-compare-custom-automl-bqml\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "aiplatform.start_run(f\"run-automl-{VERTEX_MODEL_ROUND}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Remove the headers from the CSV file\n",
+ "headerless_data = \"\"\n",
+ "with open(DATA_FILE, 'r') as data_file:\n",
+ " next(data_file) # Skip the header row\n",
+ " for line in data_file:\n",
+ " headerless_data += line\n",
+ "\n",
+ "# Upload data and schema to GCS\n",
+ "storage_client = storage.Client()\n",
+ "bucket = storage_client.bucket(GCP_BUCKET)\n",
+ "bucket.blob(f\"automl-{VERTEX_MODEL_ROUND}/headerless-{DATA_FILE}\").upload_from_string(headerless_data, 'text/csv')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Creating TextDataset\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:Creating TextDataset\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Create TextDataset backing LRO: projects/12345678910/locations/us-central1/datasets/7477763187341787136/operations/8187641772936003584\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:Create TextDataset backing LRO: projects/12345678910/locations/us-central1/datasets/7477763187341787136/operations/8187641772936003584\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "TextDataset created. Resource name: projects/12345678910/locations/us-central1/datasets/7477763187341787136\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:TextDataset created. Resource name: projects/12345678910/locations/us-central1/datasets/7477763187341787136\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "To use this TextDataset in another session:\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:To use this TextDataset in another session:\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "ds = aiplatform.TextDataset('projects/12345678910/locations/us-central1/datasets/7477763187341787136')\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:ds = aiplatform.TextDataset('projects/12345678910/locations/us-central1/datasets/7477763187341787136')\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Importing TextDataset data: projects/12345678910/locations/us-central1/datasets/7477763187341787136\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:Importing TextDataset data: projects/12345678910/locations/us-central1/datasets/7477763187341787136\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Import TextDataset data backing LRO: projects/12345678910/locations/us-central1/datasets/7477763187341787136/operations/2267660062757486592\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:Import TextDataset data backing LRO: projects/12345678910/locations/us-central1/datasets/7477763187341787136/operations/2267660062757486592\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "TextDataset data imported. Resource name: projects/12345678910/locations/us-central1/datasets/7477763187341787136\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.datasets.dataset:TextDataset data imported. Resource name: projects/12345678910/locations/us-central1/datasets/7477763187341787136\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "View Training:\n",
+ "https://console.cloud.google.com/ai/platform/locations/us-central1/training/7351014922865606656?project=12345678910\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:View Training:\n",
+ "https://console.cloud.google.com/ai/platform/locations/us-central1/training/7351014922865606656?project=12345678910\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656 current state:\n",
+ "PipelineState.PIPELINE_STATE_RUNNING\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "AutoMLTextTrainingJob run completed. Resource name: projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:AutoMLTextTrainingJob run completed. Resource name: projects/12345678910/locations/us-central1/trainingPipelines/7351014922865606656\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Model available at projects/12345678910/locations/us-central1/models/684373420523126784\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:google.cloud.aiplatform.training_jobs:Model available at projects/12345678910/locations/us-central1/models/684373420523126784\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Create a Managed Dataset\n",
+ "text_dataset = aiplatform.TextDataset.create(\n",
+ " display_name=f\"{VERTEX_MODEL_NAME_PREFIX}_automl\",\n",
+ " gcs_source=f\"gs://{GCP_BUCKET}/automl-{VERTEX_MODEL_ROUND}/headerless-{DATA_FILE}\",\n",
+ " import_schema_uri=aiplatform.schema.dataset.ioformat.text.single_label_classification\n",
+ ")\n",
+ "\n",
+ "# Train an AutoML model off the Managed Dataset\n",
+ "job = aiplatform.AutoMLTextTrainingJob(\n",
+ " display_name=f\"{VERTEX_MODEL_NAME_PREFIX}_automl\",\n",
+ " prediction_type=\"classification\",\n",
+ " multi_label=False,\n",
+ ")\n",
+ "model = job.run(\n",
+ " dataset=text_dataset,\n",
+ " model_display_name=f\"{VERTEX_MODEL_NAME_PREFIX}_automl\",\n",
+ " training_fraction_split=0.68,\n",
+ " validation_fraction_split=0.16,\n",
+ " test_fraction_split=0.16,\n",
+ ")\n",
+ "\n",
+ "# Add the model to the experiment run\n",
+ "with aiplatform.start_execution(\n",
+ " schema_title=\"system.ContainerExecution\", \n",
+ " display_name='training'\n",
+ ") as execution:\n",
+ " execution.assign_output_artifacts([model])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Add experiment run parameters\n",
+ "metaparams = {}\n",
+ "metaparams[\"epochs\"] = \"N/A\"\n",
+ "metaparams[\"learning rate\"] = \"N/A\"\n",
+ "metaparams[\"base model\"] = \"N/A\"\n",
+ "aiplatform.log_params(metaparams)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Add experiment run metrics\n",
+ "model_evaluations = model.list_model_evaluations()\n",
+ "for model_evaluation in model_evaluations:\n",
+ " log_loss = model_evaluation.metrics[\"logLoss\"]\n",
+ "metrics = {}\n",
+ "metrics[\"cross-entropy loss\"] = log_loss\n",
+ "aiplatform.log_metrics(metrics)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "aiplatform.end_run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Experiment analysis (across custom model, BQML, and AutoML)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " experiment_name | \n",
+ " run_name | \n",
+ " run_type | \n",
+ " state | \n",
+ " param.epochs | \n",
+ " param.base model | \n",
+ " param.learning rate | \n",
+ " metric.cross-entropy loss | \n",
+ " metric.categorical accuracy | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " isidro-intents-compare-custom-automl-bqml | \n",
+ " run-automl-r1 | \n",
+ " system.ExperimentRun | \n",
+ " COMPLETE | \n",
+ " N/A | \n",
+ " N/A | \n",
+ " N/A | \n",
+ " 0.035308 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " isidro-intents-compare-custom-automl-bqml | \n",
+ " run-bqml-r1 | \n",
+ " system.ExperimentRun | \n",
+ " COMPLETE | \n",
+ " N/A | \n",
+ " N/A | \n",
+ " N/A | \n",
+ " 0.036435 | \n",
+ " 0.981132 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " isidro-intents-compare-custom-automl-bqml | \n",
+ " run-custom-r1 | \n",
+ " system.ExperimentRun | \n",
+ " COMPLETE | \n",
+ " 8.0 | \n",
+ " small_bert/bert_en_uncased_L-8_H-512_A-8 | \n",
+ " 0.00001 | \n",
+ " 0.461158 | \n",
+ " 0.890244 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " experiment_name run_name \\\n",
+ "0 isidro-intents-compare-custom-automl-bqml run-automl-r1 \n",
+ "1 isidro-intents-compare-custom-automl-bqml run-bqml-r1 \n",
+ "2 isidro-intents-compare-custom-automl-bqml run-custom-r1 \n",
+ "\n",
+ " run_type state param.epochs \\\n",
+ "0 system.ExperimentRun COMPLETE N/A \n",
+ "1 system.ExperimentRun COMPLETE N/A \n",
+ "2 system.ExperimentRun COMPLETE 8.0 \n",
+ "\n",
+ " param.base model param.learning rate \\\n",
+ "0 N/A N/A \n",
+ "1 N/A N/A \n",
+ "2 small_bert/bert_en_uncased_L-8_H-512_A-8 0.00001 \n",
+ "\n",
+ " metric.cross-entropy loss metric.categorical accuracy \n",
+ "0 0.035308 NaN \n",
+ "1 0.036435 0.981132 \n",
+ "2 0.461158 0.890244 "
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "experiment_df = aiplatform.get_experiment_df()\n",
+ "experiment_df = experiment_df[experiment_df.experiment_name == EXPERIMENT_NAME]\n",
+ "experiment_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[ \n",
+ "resource name: projects/12345678910/locations/us-central1/metadataStores/default/artifacts/09422771-6759-45e5-aeb2-c7155b2b0144\n",
+ "uri: https://us-central1-aiplatform.googleapis.com/v1/projects/12345678910/locations/us-central1/models/1240990186968449024@1\n",
+ "schema_title:google.VertexModel, \n",
+ "resource name: projects/12345678910/locations/us-central1/metadataStores/default/artifacts/7b92f9ec-ef9b-4e17-ad28-b1b4a026f200\n",
+ "uri: gs://isidro_intent_classification/custom-r1/quality.csv\n",
+ "schema_title:system.Dataset, \n",
+ "resource name: projects/12345678910/locations/us-central1/metadataStores/default/artifacts/74feb581-a4a4-4fa5-8575-80cd25142268\n",
+ "uri: gs://isidro_intent_classification/custom-r1/quality.csv\n",
+ "schema_title:system.Dataset, \n",
+ "resource name: projects/12345678910/locations/us-central1/metadataStores/default/artifacts/e922980d-ea02-4fbc-a5b6-d529918211b6\n",
+ "uri: \n",
+ "schema_title:google.ClassificationMetrics]\n",
+ "{'categorical accuracy': 0.8902438879013062, 'cross-entropy loss': 0.4611583352088928}\n",
+ "{'learning rate': 1e-05, 'epochs': 8.0, 'base model': 'small_bert/bert_en_uncased_L-8_H-512_A-8'}\n",
+ "Empty DataFrame\n",
+ "Columns: []\n",
+ "Index: []\n",
+ "[{'id': 'e922980d-ea02-4fbc-a5b6-d529918211b6', 'display_name': 'intents confusion matrix', 'labels': ['destroy cron', 'create cron', 'self scale', 'report issue', 'create windows', 'self destruct', 'create workstation', 'documentation'], 'matrix': [[5.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 17.0, 0.0, 0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 12.0, 0.0, 1.0, 0.0, 1.0], [0.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 10.0, 0.0, 1.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 14.0]]}]\n"
+ ]
+ }
+ ],
+ "source": [
+ "experiment_run = aiplatform.ExperimentRun(\n",
+ " run_name=f\"run-custom-{VERTEX_MODEL_ROUND}\",\n",
+ " experiment=EXPERIMENT_NAME,\n",
+ ")\n",
+ "\n",
+ "print(experiment_run.get_artifacts())\n",
+ "print(experiment_run.get_metrics())\n",
+ "print(experiment_run.get_params())\n",
+ "print(experiment_run.get_time_series_data_frame())\n",
+ "print(experiment_run.get_classification_metrics())"
]
}
],
diff --git a/intents/service/requirements.txt b/intents/service/requirements.txt
index f1db98f..65a85d5 100644
--- a/intents/service/requirements.txt
+++ b/intents/service/requirements.txt
@@ -1,4 +1,5 @@
flask==2.2.2
+google-cloud-aiplatform==1.18.3
gunicorn==20.1.0
tensorflow==2.8.4
tensorflow_hub==0.12.0