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

このページでは、AutoML モデルをトレーニングするときに 3 つのセット(トレーニング、検証、テスト)を使用する方法と、データを AutoML モデルのセットに分割する方法を制御する方法について説明します。

AutoML でのデータ分割の使用方法

AutoML では、トレーニング データのデータ型に応じて異なるデータ分割を使用します。

画像

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

表形式

表形式のモデルの場合、トレーニング プロセスで次の処理が行われます。

  1. モデルの試行

    トレーニング セットは、さまざまな前処理、アーキテクチャ、ハイパーパラメータ オプションの組み合わせを使用してモデルをトレーニングするために使用されます。これらのモデルは検証セットに基づいて品質が評価され、さらに別のオプションの組み合わせの探索につながります。以下で説明するように、並列調整フェーズで決定された最適なパラメータとアーキテクチャが 2 つのアンサンブル モデルのトレーニングに使用されます。

  2. モデルの評価

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

  3. モデルのサービング

    トレーニング データの量が最大になるように、トレーニング セット、検証セット、テストセットを使用してモデルがトレーニングされます。このモデルは、予測をリクエストするために使用するモデルです。

テキスト

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

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

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

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

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

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

動画

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

データ分割オプション

Vertex AI ではデータを自動的に分割できます。多くの場合はこの方法をおすすめします。ただし、データをセットに分割する方法を制御する場合は、その方法にいくつかのオプションがあります。

データを分割する際のオプションは次のとおりです。

このオプションからいずれか 1 つだけを選択します。選択はモデルのトレーニングの際に行います。

オプションによっては、トレーニング データ(ml_use ラベルや Time 列など)の変更が必要になる場合があります。データ分割オプション用のデータまたはラベルを含める場合には、そうしたオプションを使用する必要はありません。モデルをトレーニングするときに別のオプションを選択することもできます。

デフォルトの分割の使用

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

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

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

ml_use ラベルの使用

ml_use ラベルを使用してデータ分割を制御するには、データに ml_use ラベルを設定する必要があります。ml_use ラベルの値の設定をご覧ください。

表形式以外の AutoML データ型の場合は、モデルをトレーニングする際に、Cloud Console でデータ分割に [Manual (Advanced)] と指定します。Vertex AI API を使用してトレーニングする場合は、FilterSplit オブジェクトを使用します。このとき、トレーニング フィルタに aiplatform.googleapis.com/ml_use=training、検証フィルタに aiplatform.googleapis.com/ml_use=validation、テストフィルタに 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 オブジェクトを使用して比率を定義します。データの種類が画像、テキスト、動画の場合、モデルのトレーニング時に Cloud Console を使用して分割の割合を変更することもできます。

時間列の使用

表形式のトレーニング データで、データが時間の影響を受けやすい場合は、1 つの列を時間列として指定できます。Vertex AI は、時間列を使用してデータを分割します。最も時間の古い行はトレーニング用に、次の行が検証用に、最も時間の新しい行がテスト用に使用されます。API を使用している場合は、各グループに使用するデータの割合を指定することもできます。詳細については、時間列をご覧ください。

ml_use ラベルの値の設定

ml_use ラベルを使用してデータ分割を制御するには、まずデータ項目の ml_use ラベルの値を設定します。

データの ml_use ラベルを設定する方法は、データ型によって異なります。

ビジョン、動画、テキストデータ用の ml_use の設定

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

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

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

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

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

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

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

インポート後の ml_use の設定

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

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

表形式データ用の ml_use の設定

表形式データ用のトレーニング データの 1 行ごとに ml_use を指定するには、トレーニング データにデータ分割列を設定し、モデルをトレーニングする際にその列を指定します。詳細については、データ分割列をご覧ください。