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


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

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

時間の目安:

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

目標

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

料金

このチュートリアルでは、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. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

データセットを準備する

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 バケットを作成してデータをバケットにアップロードします。

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

    商品ビュー

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

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

  1. Google Cloud プロジェクトで Vertex AI Search for Retail 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. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

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

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

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

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

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

    gsutil rm gs://PROJECT_ID-movielens-data/movies.csv
    gsutil rm gs://PROJECT_ID-movielens-data/ratings.csv
    gsutil rb gs://PROJECT_ID-movielens-data/
    

次のステップ