Vertex AI Pipelines を使用してエンベディング モデルをトレーニングする場合、Submatrix-wise Vector Embedding Learner(Swivel)アルゴリズムを使用できます。
Swivel は、アイテムの共起行列からアイテムのエンベディングを生成します。注文書などの構造化データの場合、エンベディングを生成するすべての商品について、商品 A と商品 B の両方を含む注文書の数をカウントすることで、アイテムの共起行列を計算できます。
以下のチュートリアルでは、Swivel パイプライン テンプレートを使用して独自のテキストや構造化データからエンベディングを生成する方法を説明します。手順は次のとおりです。
- 設定: API の有効化、権限の付与、入力データの準備を行います。
- パラメータの構成: Swivel ジョブに適切なパラメータ値を設定します。
- Vertex AI Pipelines でのトレーニング: Swivel パイプライン テンプレートを使用して、Vertex AI Pipelines で Swivel ジョブを作成します。
始める前に
Dataflow API サービスを有効にします。
きめ細かい権限を持つサービス アカウントを構成します。
- サービス アカウントを指定しない場合、パイプラインの実行で Compute Engine のデフォルトのサービス アカウントが使用されます。このサービス アカウントには、デフォルトでプロジェクト編集者のロールが付与されています。
- 独自のサービス アカウントの作成方法については、きめ細かい権限を持つサービス アカウントを構成するをご覧ください。また、サービス アカウントには以下のロールを付与してください。
roles/aiplatform.user
roles/iam.serviceAccountUser
roles/dataflow.developer
roles/compute.viewer
roles/storage.objectAdmin
入力データ
Swivel パイプライン テンプレートを使用すると、テキスト コーパスにある単語や構造化データセットのアイテムにエンベディングを生成できます。Swivel パイプライン テンプレートでは、次の形式の入力データファイルを想定しています。
各行が 1 つの共起コンテキストを表します。たとえば、文中の単語、ショッピング カート内の商品のセット、再生リスト内の曲のセット、ユーザー セッションで訪問された URL のセットなどを表します。
各行のアイテムはスペースで区切ります。アイテム名にスペースを入れることはできません。
入力データ型
入力には、テキストとアイテムの 2 種類があります。入力の仕様は入力データの処理方法に影響するため、正しいユースケースを指定することが重要です。
テキスト入力には大文字と句読点が含まれている必要があるため、Swivel ではテキストは小文字に変換され、句読点が削除されます。このため、「apple」、「Apple」、「APPLE!」は同じトークンとして扱われるため、エンベディングも同じになります。
アイテム入力は空白で分割されます。各トークンはアイテム ID である必要があります。さらに、バスケットなどのアイテムのグループは本質的に順序付けされていないため、アイテム入力に順序は関係ありません。つまり、アイテムの入力の各行は配列ではなく、セットとして扱われます。Swivel は行内の各項目を同等に扱います。
サンプルデータ
テスト用の次のサンプルデータを Cloud Storage バケットにコピーします。
- wikipedia: Wikipedia のダンプから作成されたテキスト コーパス データセット。単語のエンベディングの学習に使用できます。このデータセットの入力タイプはテキストです。
このデータをコピーするには、次のコマンドを実行します。
gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/wikipedia/* BUCKET_NAME/wikipedia
BUCKET_NAME は、管理する Cloud Storage バケットの名前で置き換えます。
- movielens_25m: 映画のエンベディングの作成に使用できる映画評価のデータセット。このデータセットは、各行に同一ユーザーによる同じ評価の映画が含まれるように処理されます。ディレクトリには
movies.csv
も含まれています。これは映画 ID と名前をマッピングします。このデータセットの入力タイプはアイテムになります。
このデータをコピーするには、次のコマンドを実行します。
gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/movielens_25m/data* BUCKET_NAME/movielesn_25m
BUCKET_NAME は、管理する Cloud Storage バケットの名前で置き換えます。
Vertex AI Pipelines を使用して Swivel ジョブを作成する
パイプラインを実行するには、Google Cloud Console を使用します。
プリコンパイルされた次のパイプライン テンプレートと構成スクリプトをローカルにダウンロードします。
swivel_template_configuration.sh
スクリプトを使用してテンプレートを構成します。./swivel_template_configuration.sh \ -pipeline_suffix YOUR_PIPELINE_SUFFIX \ -project_id PROJECT_ID \ -machine_type n1-standard-16 \ -accelerator_count 2 \ -accelerator_type NVIDIA_TESLA_V100 \ -pipeline_root BUCKET_NAME \ -region YOUR_REGION \ -network_name YOUR_NETWORK_NAME
パラメータのリストは次のとおりです。
pipeline_suffix
: パイプライン名の接尾辞(小文字とハイフンを使用できます)。machine_type
: たとえば、n1-standard-16
。詳細については、カスタム トレーニング用のコンピューティング リソースの構成をご覧ください。accelerator_count
: 各マシンの GPU の数。accelerator_type
: NVIDIA_TESLA_P100、NVIDIA_TESLA_V100 など。詳細については、GPU をご覧ください。pipeline_root
: Cloud Storage バケットの名前。接頭辞gs://
は含めないでください。region
: 省略可。デフォルトはus-central1
です。network_name
: 省略可。サブネットワーク。
swivel_template_configuration.sh
スクリプトは、構成を使用するプリコンパイル済みのパイプライン テンプレートを生成します。プライベート IP アドレスを使用せず、VPC ネットワークを設定する必要がない場合は、
swivel_pipeline.json
で次の行を削除してから Swivel ジョブを送信します。--subnetwork=regions/%REGION%/subnetworks/%NETWORK_NAME%
--no_use_public_ips
network
:projects/%PROJECT_NUMBER%/global/networks/%NETWORK_NAME%\
Cloud Console で
swivel_pipeline.json
を使用して、実行するパイプラインを作成します。次の表に、Swivel ジョブで使用するために Cloud Console で設定する必要があるランタイム パラメータを示します。
パラメータ データ型 説明 必須 embedding_dim
整数 トレーニングするエンベディングのディメンション。 × - デフォルトは 100 input_base
文字列 入力データが格納されている Cloud Storage パス。 ○ input_type
文字列 入力データのタイプ。タイプは「text」(Wikipedia のサンプルの場合)または「items」(MovieLens サンプルの場合)のいずれかです。 ○ max_vocab_size
整数 エンベディングを生成する最大語彙サイズ。 × - デフォルトは 409600 num_epochs
整数 トレーニングのエポックの数。 × - デフォルトは 20 - 入力タイプがアイテムの場合は、入力データの各行が空白文字で区切られたアイテム ID になっている必要があります。各行は空白文字で分割してトークン化されます。
- 入力タイプがテキストの場合は、入力データの各行がセンテンスと同等とみなされます。各行は、テキストを小文字に変換して空白文字で分割することでトークン化されます。
- Wikipedia のサンプルの場合は、
input_type = text
とinput_base = {SOURCE_DATA}/wikipedia
を使用します。 - MovieLens サンプルには、
input_type = items
とinput_base = {SOURCE_DATA}/movielens_25m
を使用します。
トレーニング済みのエンベディング モデルを使用する
パイプライン実行が正常に完了すると、トレーニング済みの TensorFlow SavedModel が Cloud Storage ディレクトリにエクスポートされます。
{BUCKET_NAME}/pipeline_root/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/model/
このパスは Cloud Console の Vertex ML Metadata で確認できます。
チュートリアル
Vertex AI で Swivel パイプライン テンプレートをトレーニングする方法については、トレーニング済みのエンベディングを探して、オンライン サービング用のエンベディング モデルをデプロイし、Colab でサンプル ノートブックを起動してください。
次のステップ
- Colab でサンプル ノートブックを起動する
- GitHub でノートブックを表示する。
- 生成されたトレーニング済みエンベディングで使用できる Vertex AI Matching Engine について学習する。