创建个性化电影推荐


在本教程中,我们将使用 Movielens 数据集来演示如何将商品清单和用户事件上传到适用于零售业的 Vertex AI Search 中并训练个性化商品推荐模型。Movielens 数据集包含电影(商品)清单和用户电影评分(用户事件)。

我们将每个正面电影评分(评分 >= 4)视为商品页面浏览事件。我们将训练“其他您可能喜欢”类型的推荐模型,该模型将基于数据集中的任何用户或种子电影推荐电影。

预计时间:

  • 训练该模型的初始步骤:大约 1.5 小时。
  • 等待模型训练:大约 2 天。
  • 评估模型预测和清理:大约 30 分钟。

目标

  • 了解如何从 BigQuery 将商品和用户事件数据导入 Vertex AI Search for Retail。
  • 训练和评估推荐模型。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Cloud Storage
  • BigQuery
  • 针对零售的 Vertex AI Search

如需详细了解 Cloud Storage 费用,请参阅 Cloud Storage 价格页面。

如需详细了解 BigQuery 费用,请参阅 BigQuery 价格页面。

如需详细了解适用于零售费用的 Vertex AI Search,请参阅适用于零售业的 Vertex AI Search 价格页面。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $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

一个 Cloud Shell 会话随即会在 Google Cloud 控制台底部的新框内打开,并显示命令行提示符。

导入数据集

  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. movies.csv 加载到新的电影 BigQuery 表中:

    bq load --skip_leading_rows=1 movielens.movies \
      gs://PROJECT_ID-movielens-data/movies.csv \
      movieId:integer,title,genres
    
  5. ratings.csv 加载到新的评分 BigQuery 表中:

    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 天。这样做的原因有两个:
      • 适用于零售业的 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 for Retail API。

    启用 API

  2. 点击开始使用

  3. 转到 Search for Retail 控制台中的数据> 页面。

    转到“数据”页面

  4. 点击导入

导入商品目录

  1. 填写表单,从您之前创建的 BigQuery 视图中导入商品:

    • 选择导入类型:商品清单
    • 选择默认分支名称。
    • 选择数据源:BigQuery
    • 选择数据架构:零售商品架构
    • 输入您在上面创建的商品 BigQuery 视图的名称 (PROJECT_ID.movielens.products)。

  2. 点击导入

  3. 等待导入所有产品,这可能需要 5-10 分钟。

    您可以查看导入活动以获取导入操作的状态。导入完成后,导入操作状态会更改为成功

    商品导入活动

导入用户事件

  1. 导入 user_events BigQuery 视图:

    • 选择导入类型:用户事件
    • 选择数据源:BigQuery
    • 选择数据架构:零售用户事件架构
    • 输入您之前创建的 user_events BigQuery 视图的名称。
  2. 点击导入

  3. 等待导入至少一百万个事件后再继续下一步,以便满足训练新模型的数据要求。

    您可以查看导入活动以获取操作状态。该过程大约需要一个小时才能完成。

    事件导入活动

训练和评估推荐模型

创建推荐模型

  1. 前往 Search for Retail 控制台中的型号页面。

    转到“模型”页面

  2. 点击创建模型

    • 为模型命名。
    • 选择您可能喜欢的其他商品作为模型类型。
    • 选择点击率 (CTR) 作为业务目标。
  3. 点击创建

    创建模型

    新模型开始训练。

    模型创建时间

创建服务配置

  1. 转到 Search for Retail 控制台中的服务配置页面。

    转到“服务配置”页面

  2. 点击创建投放配置

    • 选择建议
    • 为服务配置命名。
    • 选择您已创建的模型。
  3. 点击创建

等待模型变为“可供查询”

训练模型并使其可供查询大约需要两天时间。

如需查看状态,请在“服务配置”页面上点击已创建的服务配置。

该过程完成后,模型准备就绪,可供查询 (Model ready to query) 字段会显示

预览推荐

准备好查询模型后:

  1. 转到 Search for Retail 控制台中的服务配置页面。

    转到“服务配置”页面
  2. 点击服务配置名称以转到其详情页面。
  3. 点击 *“评估”标签页。
  4. 输入种子电影 ID,例如 4993 代表“The Lord of the Rings: The Fellowship of the Ring (2001)”。

    输入 ID

  5. 点击预测预览版,即可在页面右侧查看推荐商品列表。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除各个资源

  1. 转到服务配置页面,然后删除您创建的服务配置。

  2. 转到模型页面并删除模型。

  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/
    

后续步骤