AutoML モデルのデータ分割の概要

このページでは、Vertex AI がデータのトレーニング セット、検証セット、テストセットを使用して AutoML モデルをトレーニングする方法と、これら 3 つのセット間でデータを分割する方法をどのように制御できるかについて説明します。AutoML では、トレーニング データのデータ型に応じて異なるデータ分割を使用します。

このページでは、画像、テキスト、動画データのデータ分割について説明します。表形式データのデータ分割については、表形式データのデータ分割をご覧ください。

画像

画像データセットの場合、AutoML はトレーニング セットを使用してモデルをトレーニングし、検証セットを使用してモデルがトレーニング中に返す結果を検証します。トレーニングが完了すると、AutoML はテストセットを使用して最終評価指標を提供します。

テキスト

テキストのデータセットでは、トレーニング セットと検証セットを使用して、前処理、アーキテクチャ、ハイパーパラメータのオプションのさまざまな組み合わせを試します。こうした試行を経てトレーニング済みモデルが得られます。このモデルはその後、検証セットに基づいて品質が評価され、さらに別のオプションの組み合わせの探索につながります。

さらに試行を重ねてもそれ以上品質は改善しないという段階までくると、そのバージョンのモデルは最終的な最高品質のトレーニング済みモデルとみなされます。次に、Vertex AI は、並列調整フェーズで決定されたパラメータとアーキテクチャを使用して、さらに 2 つのモデルをトレーニングします。

  1. トレーニング セットと検証セットを使用してトレーニングされたモデル。

    Vertex AI は、テストセットを使用してこのモデルでモデル評価指標を生成します。このプロセスでテストセットが使用されるのはこれが初めてです。この方法により、最終的なトレーニング済みモデルが本番環境でどの程度的確な結果を出せるかを、最終的な評価指標が偏りなく反映しているかが確認されます。

  2. トレーニング セット、検証セット、テストセットを使用してトレーニングされたモデル。

    このモデルは、予測をリクエストするために使用するモデルです。

動画

動画データセットの場合、AutoML はトレーニング セットを使用してモデルをトレーニングしてから、テストセットを使用して最終的な評価指標を提供します。検証セットは、動画データセットには使用されません。

Vertex AI ではデータを自動的に分割できます。データは、割合により 3 つのセットにランダムに分割されます。これはデータを分割する最も簡単な方法で、ほとんどの場合にうまく機能します。

設定 テキスト 画像 動画
トレーニング 80 80 80
検証 10 10 なし
テスト 10 10 20

デフォルトのデータ分割を使用するには、Google Cloud コンソールでデフォルト値をそのまま使用するか、API の split フィールドを空白のままにします。

データをセットに分割する方法を制御するには、次の方法があります。

このオプションからいずれか 1 つだけを選択します。選択はモデルのトレーニングの際に行います。これらのオプションの一部では、トレーニング データ(ml_use ラベルなど)の変更が必要です。データ分割オプション用のデータまたはラベルを含めても、そうしたオプションを使用する必要はありません。モデルをトレーニングするときに別のオプションを選択することもできます。

非構造化データの手動分割

手動分割は「事前定義分割」とも呼ばれます。

ml_use ラベルを使用してデータ分割を制御するには、データに ml_use ラベルを設定する必要があります。

ml_use ラベルの値の設定

ビジョン、動画、テキストデータ用の ml_use ラベルは、データ インポート時に(データ項目ごとに、またはインポート ファイル全体に対して)設定できます。また、Google Cloud コンソールを使用してデータをインポートした後に設定することもできます。

インポート時に個々のデータ項目に ml_use を設定

各データ項目に ml_use ラベルを設定するには、JSON Lines データに aiplatform.googleapis.com/ml_use フィールドの値を組み込むか、CSV ファイルの最初の列の値を設定します。詳細については、データ型に応じたデータの準備に関する情報をご覧ください。

データ項目が繰り返される場合(同じ動画、画像、テキスト スニペットがインポート ファイルで複数回現れた場合)、Vertex AI では最初のデータ項目の ml_use 値を採用し、後続の ml_use 値は無視します。最初に検出された項目が、必ずしもアップロード ファイルの先頭に近い項目であるとは限りません。

アップロード ファイル全体で ml_use を設定

データを ml_use 値で並べ替えられて別のアップロード ファイルに設定できる場合、Google Cloud コンソールを使用してファイルをアップロードする際にプルダウン メニューを使用するか、datasets.import メソッドの dataItemLabels マップ フィールドを使用することで、アップロード ファイル全体の ml_use 値を設定できます。

アップロード ファイルに ml_use を設定し、そのファイルにも ml_use 値が含まれる場合、そのファイルの ml_use 値がファイル全体の値よりも優先されます。

インポート後に ml_use を設定

データをアップロードした後に、特定のデータ項目の ml_use 値を Google Cloud コンソールで設定または更新するには、リストに表示されている項目を 1 つ以上選択し、[ML の使用割り当て] プルダウン メニューを使用します。

データファイルを再アップロードすると、ml_use の値が変更されても、ml_use 値は更新されません。インポート後に Vertex AI API を使用して ml_use 値を更新することはできません。

ml_use ラベルを使用する

モデルをトレーニングするときに、Google Cloud コンソールでデータ分割に [手動(詳細設定)] を指定します。Vertex AI API を使用してトレーニングする場合は、FilterSplit オブジェクトを使用します。このとき、トレーニング フィルタに labels.aiplatform.googleapis.com/ml_use=training、検証フィルタに labels.aiplatform.googleapis.com/ml_use=validation、テストフィルタに labels.aiplatform.googleapis.com/ml_use=test を指定します。例:

model = job.run(
dataset=dataset,
model_display_name=_name,
training_filter_split="labels.aiplatform.googleapis.com/ml_use=training",
validation_filter_split="labels.aiplatform.googleapis.com/ml_use=validation",
test_filter_split="labels.aiplatform.googleapis.com/ml_use=test")

ml_use 値を持つデータ項目はすべて、指定されたセットに割り当てられます。ml_use が設定されていないデータ項目は、トレーニング プロセスから除外されます。

データのフィルタ分割

Vertex AI API で FilterSplit オブジェクトを使用すると、他のラベル(ml-use を除く)や他のフィールドを使用してデータを分割できます。たとえば、trainingFilterlabels.flower=rosevalidationFilterlabels.flower=daisytestFilterlabels.flower=dahlia に設定できます。この設定により、rose とラベル付けされたすべてのデータはトレーニング セットに、daisy とラベル付けされたすべてのデータは検証セットに、dahlia とラベル付けされたすべてのデータはテストセットに追加されます。

複数のフィールドでフィルタする場合は、1 つのデータ項目が複数のフィルタと一致する可能性があります。この場合、トレーニング セットが優先され、検証セット、テストセットの順となります。つまり項目は、テストセットのフィルタと一致して、トレーニング フィルタと検証フィルタのどちらにも一致しない場合に限って、テストセットに配置されます。どのフィルタセットとも一致しない項目は、トレーニングから除外されます。

モデルで予測される内容に関連するデータ分割には、カテゴリを使用しないでください。各セットには、モデルが予測に使用するデータの範囲が反映されている必要があります。(たとえば、花の種類で画像を分類することを期待するモデルには、前述のフィルタを使用しないでください)

あるフィルタをどの項目にも一致させたくない場合は、「-」(マイナス記号)に設定します。

数学的分割

数学的分割は「比率分割」とも呼ばれます。

デフォルトでは、データはデータ型のデフォルトの割合に従ってランダムにセットに分割されます。この割合は、合計で 100 までの値であれば変更できます(Vertex AI API については、合計で 1.0 の比率を使用します)。

割合(比率)を変更するには、FractionSplit オブジェクトを使用して比率を定義します。データの種類が画像、テキスト、動画の場合、モデルのトレーニング時に Google Cloud コンソールを使用して分割の割合を変更することもできます。