使用无代码 PlatoBlockchain Data Intelligence 的 Amazon Personalize 创建批量推荐管道。 垂直搜索。 哎。

使用 Amazon Personalize 创建批量推荐管道,无需代码

随着个性化内容更有可能推动客户参与,企业不断寻求根据客户的个人资料和行为提供量身定制的内容。 推荐系统尤其寻求预测最终用户对项目的偏好。 一些常见的用例包括在线零售商店的产品推荐、个性化时事通讯、生成音乐播放列表推荐,甚至在在线媒体服务上发现类似内容。

然而,由于模型训练、算法选择和平台管理的复杂性,创建有效的推荐系统可能具有挑战性。 亚马逊个性化 使开发人员能够通过个性化的产品和内容推荐来提高客户参与度,而无需机器学习 (ML) 专业知识。 开发人员可以通过使用捕获的用户行为数据立即开始吸引客户。 在幕后,Amazon Personalize 会检查这些数据、识别有意义的内容、选择正确的算法、训练和优化为您的数据定制的个性化模型,并通过 API 终端节点提供建议。

尽管实时提供建议可以帮助提高参与度和满意度,但有时这实际上可能不是必需的,并且按计划批量执行此操作可能只是一种更具成本效益和易于管理的选择。

这篇博文向您展示了如何使用 AWS 服务来创建推荐以及操作批量推荐管道。 我们在没有一行代码的情况下完成了端到端的解决方案。 我们详细讨论两个主题:

解决方案概述

在这个解决方案中,我们使用 电影镜头 数据集。 该数据集包括来自 86,000 个用户的 2,113 部电影评分。 我们尝试使用这些数据为这些用户中的每一个生成推荐。

数据准备对于确保我们将客户行为数据转换为适用于 Amazon Personalize 的格式非常重要。 本文中描述的架构使用无服务器数据集成服务 AWS Glue 将原始数据转换为可供 Amazon Personalize 使用的格式。 该解决方案使用 Amazon Personalize 通过批量推理为所有用户创建批量推荐。 然后,我们使用 Step Functions 工作流程,以便可以通过以可重复方式调用 Amazon Personalize API 来运行自动化工作流程。

下图演示了此解决方案。架构图

我们将通过以下步骤构建此解决方案:

  1. 构建数据转换作业以使用 AWS Glue 转换我们的原始数据。
  2. 使用转换后的数据集构建 Amazon Personalize 解决方案。
  3. 构建 Step Functions 工作流以协调批量推理的生成。

先决条件

本演练需要以下内容:

使用 AWS Glue 构建数据转换作业以转换原始数据

使用 Amazon Personalize,输入数据需要具有特定的架构和文件格式。 来自用户和项目之间交互的数据必须采用具有特定列的 CSV 格式,而您要为其生成推荐的用户列表必须采用 JSON 格式。 在本节中,我们使用 AWS Glue Studio 将原始输入数据转换为 Amazon Personalize 所需的结构和格式。

AWS Glue Studio 提供了一个图形界面,旨在轻松创建和运行提取、转换和加载 (ETL) 作业。 您可以通过简单的拖放操作直观地创建数据转换工作负载。

我们首先准备我们的源数据 亚马逊简单存储服务 (Amazon S3),然后我们无需代码即可转换数据。

  1. 在 Amazon S3 控制台上,创建一个包含三个文件夹的 S3 存储桶:raw、transformed 和 curated。
  2. 下载 MovieLens 数据集 并将名为 user_ratingmovies-timestamp.dat 的未压缩文件上传到 raw 文件夹下的存储桶。
  3. 在 AWS Glue Studio 控制台上,选择 工作机会 在导航窗格中。
  4. 选择 带有源和目标的可视化,然后选择 创建.
  5. 选择第一个节点称为 数据源 – S3 存储桶. 这是我们指定输入数据的地方。
  6. 点击 数据源属性 标签,选择 S3位置 并浏览到您上传的文件。
  7. 针对 资料格式,选择 CSV,和 分隔符,选择 制表.
    AWS Glue 工作室 - S3
  8. 我们可以选择输出模式选项卡来验证模式是否正确推断出列。
  9. 如果架构不符合您的期望,请选择 编辑 编辑架构。
    AWS Glue Studio - 字段

接下来,我们转换此数据以遵循 Amazon Personalize 的架构要求。

  1. 选择 变换 - 应用映射 节点,并且在 改造 选项卡,更新目标键和数据类型。
    Amazon Personalize 至少需要以下结构 交互数据集:
    • user_id (串)
    • item_id (串)
    • timestamp (长,采用 Unix 纪元时间格式)
      AWS Glue Studio - 字段映射

在此示例中,我们排除了数据集中评分不佳的电影。

  1. 为此,请移除名为 S3 存储桶的最后一个节点并在 改造 标签。
  2. 地址 流程条件 并过滤掉 rating < 3.5 的数据。
    AWS Glue Studio - 输出

我们现在将输出写回 Amazon S3。

  1. 展开 目标 菜单并选择 Amazon S3.
  2. 针对 S3 目标位置,选择名为的文件夹 transformed.
  3. CSV 作为格式和后缀 目标位置 interactions/.

接下来,我们输出一个我们想要获得推荐的用户列表。

  1. 选择 应用映射 节点,然后展开 改造 菜单并选择 应用映射.
  2. 删除所有字段,除了 user_id 并将该字段重命名为 userId. Amazon Personalize 期望该字段被命名 用户身份.
  3. 展开 目标 再次菜单并选择 Amazon S3.
  4. 这次选择 JSON 作为格式,然后选择转换后的 S3 文件夹并以 batch_users_input/.

这产生了一个 JSON 作为 Amazon Personalize 输入的用户列表。 我们现在应该有一个如下图所示的图表。

AWS Glue Studio - 整个工作流程

我们现在准备运行我们的转换作业。

  1. 在 IAM 控制台上,创建一个名为 glue-service-role 的角色并附加以下托管策略:
    • AWSGlueServiceRole
    • AmazonS3FullAccess

有关如何创建 IAM 服务角色的更多信息,请参阅 创建角色以将权限委派给 AWS 服务.

  1. 导航回您的 AWS Glue Studio 作业,然后选择 工作细节 标签。
  2. 将作业名称设置为 batch-personalize-input-transform-job.
  3. 选择新创建的 IAM 角色。
  4. 保留其他所有内容的默认值。
    AWS Glue Studio - 作业详细信息
  5. 保存.
  6. 准备好后,选择 运行 并监控工作 运行 标签。
  7. 作业完成后,导航到 Amazon S3 控制台以验证您的输出文件是否已成功创建。

现在,我们已将数据塑造成 Amazon Personalize 所需的格式和结构。 转换后的数据集应具有以下字段和格式:

  • 交互数据集 – 带字段的 CSV 格式 USER_ID, ITEM_ID, TIMESTAMP
  • 用户输入数据集 – 带元素的 JSON 格式 userId

使用转换后的数据集构建 Amazon Personalize 解决方案

使用正确格式的交互数据集和用户输入数据,我们现在可以创建 Amazon Personalize 解决方案。 在本节中,我们创建数据集组,导入数据,然后创建批量推理作业。 数据集组将资源组织到 Amazon Personalize 组件的容器中。

  1. 在Amazon Personalize控制台上,选择 创建 数据集组.
  2. 针对 域名, 选择 定制版.
  3. 创建数据集组并继续.
    Amazon Personalize - 创建数据集组

接下来,创建交互数据集。

  1. 输入数据集名称并选择 创建新架构.
  2. 创建数据集并继续.
    Amazon Personalize - 创建交互数据集

我们现在导入我们之前创建的交互数据。

  1. 导航到我们在其中创建交互 CSV 数据集的 S3 存储桶。
  2. 点击 权限 选项卡,添加以下存储桶访问策略,以便 Amazon Personalize 具有访问权限。 更新策略以包含您的存储桶名称。
    {
       "Version":"2012-10-17",
       "Id":"PersonalizeS3BucketAccessPolicy",
       "Statement":[
          {
             "Sid":"PersonalizeS3BucketAccessPolicy",
             "Effect":"Allow",
             "Principal":{
                "Service":"personalize.amazonaws.com"
             },
             "Action":[
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
             ],
             "Resource":[
                "arn:aws:s3:::<your-bucket-name>",
                "arn:aws:s3:::<your-bucket-name> /*"
             ]
          }
       ]
    }

导航回 Amazon Personalize 并选择 创建数据集导入作业. 我们的交互数据集现在应该导入 Amazon Personalize。 等待导入作业以“活动”状态完成,然后继续下一步。 这大约需要 8 分钟。

  1. 在Amazon Personalize控制台上,选择 概述 在导航窗格中并选择 创建解决方案.
    亚马逊个性化 - 仪表板
  2. 输入解决方案名称。
  3. 针对 解决方案类型,选择 项目推荐.
  4. 针对 烹饪食谱, 选择 aws-user-personalization 食谱。
  5. 创建和训练解决方案.
    Amazon Personalize - 创建解决方案

该解决方案现在针对使用用户个性化配方导入的交互数据集进行训练。 在下监控此进程的状态 解决方案版本. 等待它完成,然后再继续。 这大约需要 20 分钟。
亚马逊个性化 - 状态

我们现在创建批量推理作业,它为 JSON 输入中存在的每个用户生成建议。

  1. 在导航窗格中, 自定义资源,选择 批量推理作业.
  2. 输入作业名称,然后为 解决方案,选择之前创建的解决方案。
  3. 创建批处理推断作业.
    Amazon Personalize - 创建批量推理作业
  4. 针对 输入数据配置,进入S3路径所在的 batch_users_input 文件位于。

这是包含的 JSON 文件 userId.

  1. 针对 输出数据配置 ,选择 S3 中的策划路径。
  2. 创建批处理推断作业.

此过程大约需要 30 分钟。 作业完成后,用户输入文件中指定的每个用户的推荐将保存在 S3 输出位置。

我们已经成功地为所有用户生成了一组建议。 但是,到目前为止,我们只使用控制台实现了该解决方案。 为了确保这个批量推理使用最新的数据集定期运行,我们需要构建一个编排工作流。 在下一部分中,我们将向您展示如何使用 Step Functions 创建编排工作流。

构建 Step Functions 工作流以编排批量推理工作流

要编排您的管道,请完成以下步骤:

  1. 在 Step Functions 控制台上,选择 创建状态机.
  2. 选择 直观地设计您的工作流程,然后选择 下一页.
    AWS Step Functions - 创建工作流程
  3. 拖动 CreateDatasetImportJob 从左侧的节点(您可以在搜索框中搜索此节点)到画布上。
  4. 选择节点,您应该会在右侧看到配置 API 参数。 记录 ARN。
  5. 在中输入您自己的值 API参数 文本框。

这称为 创建数据集导入作业 具有您指定的参数值的 API。

AWS Step Functions 工作流程

  1. 拖动 CreateSolutionVersion 节点到画布上。
  2. 使用您记下的解决方案的 ARN 更新 API 参数。

这会通过调用 创建解决方案版本 API。

  1. 拖动 CreateBatchInferenceJob 节点到画布上,并类似地使用相关值更新 API 参数。

确保您使用 $.SolutionVersionArn 从上一步检索解决方案版本 ARN 参数的语法。 这些 API 参数被传递给 创建批量推理作业 API。

AWS Step Functions 工作流程

我们需要在 Step Functions 工作流中构建等待逻辑,以确保推荐批处理推理作业在工作流完成之前完成。

  1. 查找并拖入等待节点。
  2. 在配置中 稍等, 输入 300 秒。

这是一个任意值; 您应该根据您的特定用例更改此等待时间。

  1. 选择 CreateBatchInferenceJob 再次节点并导航到 错误处理 标签。
  2. 针对 摔角 错误,输入 Personalize.ResourceInUseException.
  3. 针对 回退状态,选择 稍等.

此步骤使我们能够定期检查作业的状态,并且仅在作业完成时才退出循环。

  1. 针对 结果路径,输入 $.errorMessage.

这实际上意味着当接收到“正在使用的资源”异常时,作业会等待 x 秒,然后再使用相同的输入再次尝试。

AWS Step Functions 工作流程

  1. 保存,然后选择 开始执行.

我们已经成功地为 Amazon Personalize 编排了我们的批量推荐管道。 作为可选步骤,您可以使用 亚马逊EventBridge 定期安排此工作流程的触发器。 有关详细信息,请参阅 用于 Step Functions 执行状态更改的 EventBridge (CloudWatch Events).

清理

为避免将来产生费用,请删除您为此演练创建的资源。

结论

在这篇博文中,我们演示了如何结合使用 AWS Glue、Amazon Personalize 和 Step Functions 创建批量推荐管道,而无需单行代码或 ML 经验。 我们使用 AWS Glue 将我们的数据准备为 Amazon Personalize 所需的格式。 然后,我们使用 Amazon Personalize 导入数据,使用用户个性化配方创建解决方案,并创建批量推理作业,根据过去的交互为每个用户生成默认的 25 条建议。 然后,我们使用 Step Functions 编排这些步骤,以便我们可以自动运行这些作业。

对于接下来要考虑的步骤,用户细分是 Amazon Personalize 中较新的方法之一,您可能想要探索它以为输入数据的每一行创建用户细分。 有关详细信息,请参阅 获取批量推荐和用户细分.


关于作者

马克辛·维

马克辛·维 是 AWS 数据实验室解决方案架构师。 Maxine 与客户合作处理他们的用例,设计解决方案来解决他们的业务问题,并指导他们构建可扩展的原型。 在加入 AWS 之前,Maxine 帮助客户在澳大利亚实施 BI、数据仓库和数据湖项目。

时间戳记:

更多来自 AWS机器学习