パーソナライズされたおすすめの映画を作成する


このチュートリアルでは、Movielens データセットを使用して、商品カタログとユーザー イベントを小売業向け Vertex AI Search にアップロードし、カスタマイズされた商品レコメンデーション モデルをトレーニングする方法を説明します。MovieLens データセットには、映画(商品)とユーザーによる映画の評価(ユーザー イベント)のカタログが含まれています。

ポジティブな各映画評価(評価 4 以上)は、商品ページビュー イベントとして処理されます。データセット内のユーザーまたはシードの映画に基づいて映画のレコメンデーションを作成する「関連商品のおすすめ」タイプのレコメンデーション モデルをトレーニングします。

推定所要時間:

  • モデルのトレーニングを開始するための最初の手順: 約 1.5 時間。
  • モデルのトレーニングを待機時間: 約 2 日。
  • モデル予測の評価とクリーンアップ: 約 30 分。

目標

  • 商品とユーザー イベントのデータを BigQuery から小売業向け Vertex AI Search にインポートする方法を学習します。
  • レコメンデーション モデルをトレーニングして評価します。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • Cloud Storage
  • BigQuery
  • Vertex AI Search for Retail

Cloud Storage の費用の詳細については、Cloud Storage の料金ページをご覧ください。

BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。

Vertex AI Search for Retail の小売費用の詳細については、Vertex AI Search for Retail の料金のページをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

データセットを準備する

Google Cloud コンソールを開き、Google Cloud プロジェクトを選択します。ダッシュボード ページの [プロジェクト情報] カードのプロジェクト ID をメモします。以降の手順では、このプロジェクト ID が必要です。次に、コンソールの上部にある [Cloud Shell をアクティブにする] ボタンをクリックします。

Cloud Shell

Google Cloud コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。

データセットのインポート

  1. Cloud Shell を使用して、ソース データセットをダウンロードして展開します。

    wget https://files.grouplens.org/datasets/movielens/ml-latest.zip
    unzip ml-latest.zip
    
  2. Cloud Storage バケットを作成してデータをバケットにアップロードします。

    gcloud storage buckets create gs://PROJECT_ID-movielens-data
    gcloud storage cp ml-latest/movies.csv ml-latest/ratings.csv \
      gs://PROJECT_ID-movielens-data
    
  3. BigQuery データセットを作成します。

    bq mk movielens
    
  4. 新しい映画 BigQuery テーブルに movies.csv を読み込む:

    bq load --skip_leading_rows=1 movielens.movies \
      gs://PROJECT_ID-movielens-data/movies.csv \
      movieId:integer,title,genres
    
  5. 新しい評価 BigQuery テーブルに ratings.csv を読み込む:

    bq load --skip_leading_rows=1 movielens.ratings \
      gs://PROJECT_ID-movielens-data/ratings.csv \
      userId:integer,movieId:integer,rating:float,time:timestamp
    

BigQuery ビューを作成する

  1. ムービーテーブルを小売商品カタログ スキーマに変換するビューを作成します。

    bq mk --project_id=PROJECT_ID \
     --use_legacy_sql=false \
     --view '
     SELECT
       CAST(movieId AS string) AS id,
       SUBSTR(title, 0, 128) AS title,
       SPLIT(genres, "|") AS categories
     FROM `PROJECT_ID.movielens.movies`' \
    movielens.products
    

    これで、新しいビューには小売業向け Vertex AI Search で想定されるスキーマが含まれるようになりました。次に、左側のサイドバーで [BIG DATA -> BigQuery] を選択します。次に、左側のエクスプローラ バーでプロジェクト名を展開し、movielens -> products を選択してこのビューのクエリページを開きます。

    商品ビュー

  2. 次に、映画の評価をユーザー イベントに変換します。以下を実施します。

    • 除外映画の評価を無視する(4 以上)
    • すべてのポジティブな評価を商品ページビュー イベントとして処理(detail-page-view
    • Movielens のタイムラインを過去 90 日間に再スケーリングします。これには 2 つの理由があります。
      • 小売業向け Vertex AI Search では、ユーザー イベントが 2015 年以降のものであることが必要です。Movielens の評価付けは 1995 年までさかのぼります。
      • 小売業向け Vertex AI Search では、ユーザーの予測リクエストを処理する際に、過去 90 日間のユーザー イベントを使用します。後でユーザーに対して予測を行う際に、すべてのユーザーに最近のイベントが存在するものとして表示されます。

    BigQuery ビューを作成します。次のコマンドは、上記の変換要件を満たす SQL クエリを使用します。

    bq mk --project_id=PROJECT_ID \
     --use_legacy_sql=false \
     --view '
     WITH t AS (
       SELECT
         MIN(UNIX_SECONDS(time)) AS old_start,
         MAX(UNIX_SECONDS(time)) AS old_end,
         UNIX_SECONDS(TIMESTAMP_SUB(
           CURRENT_TIMESTAMP(), INTERVAL 90 DAY)) AS new_start,
         UNIX_SECONDS(CURRENT_TIMESTAMP()) AS new_end
       FROM `PROJECT_ID.movielens.ratings`)
     SELECT
       CAST(userId AS STRING) AS visitorId,
       "detail-page-view" AS eventType,
       FORMAT_TIMESTAMP(
         "%Y-%m-%dT%X%Ez",
         TIMESTAMP_SECONDS(CAST(
           (t.new_start + (UNIX_SECONDS(time) - t.old_start) *
             (t.new_end - t.new_start) / (t.old_end - t.old_start))
         AS int64))) AS eventTime,
       [STRUCT(STRUCT(movieId AS id) AS product)] AS productDetails,
     FROM `PROJECT_ID.movielens.ratings`, t
     WHERE rating >= 4' \
    movielens.user_events
    

商品カタログとユーザー イベントをインポートする

これで、商品カタログとユーザー イベントデータを小売業向け Vertex AI Search にインポートする準備が整いました。

  1. Google Cloud プロジェクトで 小売業向け Vertex AI Search API を有効にします。

    API を有効にする

  2. [Get started] をクリックします。

  3. Search for Retail コンソールの [データ] ページに移動します。

    [データ] ページに移動

  4. [インポート] をクリックします。

商品カタログをインポートする

  1. 上で作成した BigQuery ビューから商品をインポートするには、次のようにフォームに入力します。

    • インポート タイプとして [商品カタログ] を選択します。
    • デフォルトのブランチ名を選択します。
    • データのソースとして [BigQuery] を選択します。
    • データのスキーマとして [小売商品スキーマ] を選択します。
    • 上記(PROJECT_ID.movielens.products)で作成した商品 BigQuery ビューの名前を入力します。

  2. [インポート] をクリックします。

  3. すべての商品がインポートされるまで待ちます。(所要時間 5~10 分)

    インポート オペレーションのステータスは、インポート アクティビティで確認できます。インポートが完了すると、インポート オペレーションのステータスが [Succeeded] に変わります。

    商品インポート アクティビティ

ユーザー イベントのインポート

  1. user_events BigQuery ビューをインポートします。

    • インポートのタイプとして [User Events] を選択します。
    • データのソースとして [BigQuery] を選択します。
    • データのスキーマとして [小売ユーザー イベント スキーマ] を選択します。
    • 上で作成した user_events BigQuery ビューの名前を入力します。
  2. [インポート] をクリックします。

  3. 新しいモデルのトレーニングに対するデータ要件を満たすには、少なくとも 100 万件のイベントがインポートされるのを待ってから次の手順に進んでください。

    オペレーションのステータスは、インポート アクティビティで確認できます。プロセスが完了するまでに約 1 時間を要します。

    イベントのインポート アクティビティ

レコメンデーション モデルをトレーニングして評価します

レコメンデーション モデルを作成する

  1. Search for Retail コンソールの [モデル] ページに移動します。

    [モデル] ページに移動

  2. [モデルを作成] をクリックします。

    • モデルに名前を付けます。
    • モデルタイプとして [関連商品のおすすめ] を選択します。
    • ビジネス目標として [Click-through rate (CTR)] を選択します。
  3. [作成] をクリックします。

    モデルの作成

    新しいモデルのトレーニングを開始します。

    モデル作成

サービス構成を作成する

  1. Search for Retail コンソールの[サービス構成]ページに移動します。

    [サービス構成] ページに移動

  2. [Create serving config] をクリックします。

    • [Recommendation] を選択します。
    • サービス提供構成に名前を付けます。
    • 作成したモデルを選択します。
  3. [作成] をクリックします。

モデルが「クエリの準備完了」になるのを待つ

モデルがトレーニングを行いクエリの準備が完了するまでに約 2 日間を要します。

ステータスを表示するには、[サービス構成] ページで作成されたサービス構成をクリックします。

[Model ready to query] フィールドには、プロセスが完了している場合には [Yes] と表示されます。

レコメンデーションをプレビューする

モデルでクエリの準備が完了したら、次の手順を行います。

  1. Search for Retail コンソールの[サービス構成]ページに移動します。

    [サービス構成] ページに移動
  2. サービス提供構成名をクリックして詳細ページに移動します。
  3. [Evaluate] タブをクリックします。
  4. シードの映画 ID を入力してください。たとえば、「ロード・オブ・ザ・リング: 旅の仲間(2001)」の場合は、4993 になります。

    ID の入力

  5. [予測のプレビュー] をクリックすると、ページの右側におすすめのアイテムのリストが表示されます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトを削除する

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

リソースを個別に削除する

  1. [サービス構成] ページに移動し、作成したサービス提供構成を削除します。

  2. [Models] ページに移動し、モデルを削除します。

  3. Cloud Shell で BigQuery データセットを削除します。

    bq rm --recursive --dataset movielens
    
  4. Cloud Storage バケットとその内容を削除します。

    gcloud storage rm gs://PROJECT_ID-movielens-data --recursive
    

次のステップ