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

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

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

推定所要時間:

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

データセットを準備する

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 for Commerce で想定されるスキーマが含まれるようになりました。次に、左側のサイドバーで [BIG DATA -> BigQuery] を選択します。次に、左側のエクスプローラ バーでプロジェクト名を展開し、movielens -> products を選択してこのビューのクエリページを開きます。

    商品ビュー

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

    • 除外映画の評価を無視する(4 以上)
    • すべてのポジティブな評価を商品ページビュー イベントとして処理(detail-page-view
    • Movielens のタイムラインを過去 90 日間に再スケーリングします。これには 2 つの理由があります。
      • Vertex AI Search for Commerce では、ユーザー イベントが 2015 年以降のものであることが必要です。Movielens の評価付けは 1995 年までさかのぼります。
      • Vertex AI Search for Commerce では、ユーザーの予測リクエストを処理する際に、過去 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 for Commerce にインポートする準備が整いました。

  1. Google Cloud プロジェクトで Vertex AI Search for Commerce API を有効にします。

    API を有効にする

  2. [開始] をクリックします。

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

    [データ] ページに移動

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

レコメンデーション モデルのトレーニングと評価の手順に沿って操作します。

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

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

    [モデル] ページに移動

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

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

    モデルの作成

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

    モデル作成

サービス構成を作成する

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

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

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

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

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

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

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

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

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

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

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

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

    ID の入力

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