Swivel を使用してエンベディングを作成する

このガイドでは、Vertex Pipelines を使用して、エンベディング モデルを Submatrix-wise Vector Embedding Learner(Swivel)アルゴリズムでトレーニングする方法について説明します。

Swivel は、アイテムの共起行列からアイテムのエンベディングを生成します。注文書などの構造化データの場合、エンベディングを生成するすべての商品について、商品 A と商品 B の両方を含む注文書の数をカウントすることで、アイテムの共起行列を計算できます。

このチュートリアルでは、このテンプレートを使用して、独自のテキストまたは構造化データからエンベディングを生成する方法について説明します。手順は次のとおりです。

  1. 設定: API の有効化、権限の付与、入力データの準備を行います。
  2. パラメータの構成: Swivel ジョブに適切なパラメータ値を設定します。
  3. Vertex Pipelines でのトレーニング: Swivel パイプライン テンプレートを使用して、Vertex Pipelines で Swivel ジョブを作成します。

始める前に

  1. Vertex Pipelines 用の Google Cloud プロジェクトを設定します

  2. Dataflow API サービスを有効にします。

  3. きめ細かい権限を持つサービス アカウントを構成します。

    • サービス アカウントを指定しない場合、パイプラインの実行で Compute Engine のデフォルトのサービス アカウントが使用されます。このサービス アカウントには、デフォルトでプロジェクト編集者のロールが付与されています。
    • 独自のサービス アカウントを作成する場合は、このガイドの手順に沿って、サービス アカウントに roles/aiplatform.userroles/iam.serviceAccountUserroles/dataflow.developerroles/compute.viewerroles/storage.objectAdmin のロールを付与します。

入力データ

Swivel を使用すると、テキスト コーパスにある単語や構造化データセットのアイテムにエンベディングを生成できます。入力データファイルは次の形式にする必要があります。

  • 各行が 1 つの共起コンテキストを表します。たとえば、文中の単語、ショッピング カート内の商品のセット、再生リスト内の曲のセット、ユーザー セッションで訪問された URL のセットなどを表します。

  • 各行のアイテムはスペースで区切ります。アイテム名にスペースを入れることはできません。

入力データ型

入力には、テキストアイテムの 2 種類があります。入力データの処理に影響するため、正しいユースケースを指定することが重要です。

  1. テキスト入力には大文字と句読点が含まれている必要があるため、Swivel ではテキストは小文字に変換され、句読点が削除されます。これにより、「apple」、「Apple」、「APPLE!」は同じトークンとして扱われるため、エンベディングも同じになります。たとえば、上のテキスト入力は次のように処理されます。

    古池や

    蛙飛び込む

    水の音

  2. アイテム入力は空白で分割され、各トークンはアイテム 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 Pipelines を使用して Swivel ジョブを作成する

Google Cloud Console を使用してパイプラインを実行できます。次の 3 つの手順を行います。

  1. 次のリンクから、プリコンパイルされたパイプライン テンプレートと構成スクリプトをローカルにダウンロードします。

  2. スクリプト(swivel_template_configuration.sh)を使用してテンプレートを構成します。パラメータは以下のとおりです。

    • pipeline_suffix: パイプライン名の接尾辞(小文字とハイフンを使用できます)。
    • machine_type: n1-standard-16 など。マシンタイプの詳細をご覧ください
    • accelerator_count: 各マシンの GPU の数。
    • accelerator_type: NVIDIA_TESLA_P100、NVIDIA_TESLA_V100 など。GPU の詳細をご覧ください
    • pipeline_root: Cloud Storage バケットの名前。接頭辞 gs:// は含めないでください。

    次のスクリプトを実行します。

    ./swivel_template_configuration.sh -pipeline_suffix {your-pipeline-suffix} -project_id {your-project-id} -machine_type n1-standard-16 -accelerator_count 2 -accelerator_type NVIDIA_TESLA_V100 -pipeline_root {BUCKET_NAME}
    

    構成を含むコンパイル済みのパイプライン テンプレート swivel_pipeline.json が生成されます。

  3. 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 = textinput_base = {SOURCE_DATA}/wikipedia を使用します。MovieLens サンプルには、input_type = itemsinput_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 のサンプル ノートブックを起動します。

次のステップ