Press "Enter" to skip to content

使用Amazon Personalize实时实施个性化推荐

在基础层面上,机器学习(ML)技术通过学习数据来进行预测。企业利用其数据与基于ML的个性化服务相结合,提升客户体验。这种方法可以帮助企业从数据中获得可操作的见解,促进收入增长和品牌忠诚度的提升。

Amazon Personalize利用ML加速您的数字化转型,使将个性化推荐集成到现有网站、应用程序、电子邮件营销系统等变得更加容易。Amazon Personalize使开发人员能够快速实现定制个性化引擎,无需专业的ML专长。Amazon Personalize为您提供必要的基础设施,并管理整个机器学习(ML)流程,包括处理数据、识别特征、使用最合适的算法以及训练、优化和托管模型。您通过API获得结果,并且只需根据使用情况付费,没有最低费用或预付款。

文章使用Amazon Personalize构建准实时个性化推荐展示了如何使用Amazon Personalize和AWS专用数据服务构建准实时个性化推荐。在这篇文章中,我们将为您介绍使用Amazon Personalize构建实时个性化推荐系统的参考实现。

解决方案概述

该实时个性化推荐解决方案使用Amazon PersonalizeAmazon Simple Storage Service (Amazon S3)Amazon Kinesis Data StreamsAWS LambdaAmazon API Gateway实施。

该架构实施如下:

  1. 数据准备 – 从创建数据集组、架构和表示您的项目、互动和用户数据的数据集开始。
  2. 训练模型 – 导入数据后,选择与您的用例匹配的配方,然后通过创建解决方案来训练模型,方法是创建解决方案版本。当您的解决方案版本就绪后,您可以为其创建一个运行活动。
  3. 获取准实时推荐 – 当您有一个运行活动时,可以在应用程序中集成对该运行活动的调用。这是从Amazon Personalize请求准实时推荐时调用GetRecommendationsGetPersonalizedRanking API的地方。

欲了解更多信息,请参阅使用Amazon Personalize构建准实时个性化推荐

下图说明了解决方案架构。

使用Amazon Personalize实时实施个性化推荐 四海 第1张

实施

我们通过一个使用案例来演示此实施,该案例是根据用户在影片数据库上的互动行为对用户进行实时电影推荐。

该解决方案的实施步骤如下:

  1. 前提条件(数据准备)
  2. 设置开发环境
  3. 部署解决方案
  4. 创建解决方案版本
  5. 创建广告系列
  6. 创建事件跟踪器
  7. 获取推荐
  8. 接收实时互动
  9. 验证实时推荐
  10. 清理

先决条件

在开始之前,请确保具备以下先决条件:

  • 准备训练数据 – 使用 说明 准备并上传数据到 S3 存储桶。对于这个特定的使用案例,您将上传互动数据和影片数据。互动是您记录并作为训练数据导入的事件。Amazon Personalize 主要根据导入到互动数据集中的互动数据生成推荐。您可以记录多种事件类型,例如点击、观看或喜欢。虽然由 Amazon Personalize 创建的模型可以基于用户过去的互动进行推荐,但当模型拥有关联用户或物品的数据时,这些推荐的质量可以得到提升。如果用户在物品数据集中参与了被分类为“剧情”的影片,Amazon Personalize 将推荐具有相同类型的影片(物品)。
  • 设置开发环境 – 使用 安装 AWS 命令行界面 (AWS CLI)。
  • 使用您的 Amazon 账户配置 CLI – 使用您的 AWS 账户信息进行 AWS CLI 配置
  • 安装和引导 AWS 云开发工具包 (AWS CDK)

部署解决方案

要部署解决方案,请执行以下操作:

  • 将存储库 克隆 到您的桌面上一个新的文件夹中。
  • 部署 栈到您的 AWS 环境中。

创建解决方案版本

解决方案指的是 Amazon Personalize 配方、自定义参数和一个或多个解决方案版本(训练模型)的组合。在前一步骤中部署 CDK 项目时,将自动为您创建一个使用用户个性化配方的解决方案。解决方案版本指的是经过训练的机器学习模型。为实施创建一个解决方案版本

创建广告系列

广告系列使用配置的事务容量部署一个解决方案版本(训练模型)来生成实时推荐。为实施创建一个广告系列

创建事件跟踪器

Amazon Personalize 只能基于实时事件数据、历史事件数据或二者结合进行推荐。记录实时事件来构建互动数据并让 Amazon Personalize 学习用户最近的活动。这样可以保持数据的新鲜性并提高 Amazon Personalize 推荐的相关性。在记录事件之前,您必须创建一个事件跟踪器。事件跟踪器将新的事件数据指向数据集组中的互动数据集。为实施创建和事件跟踪器

获取推荐

在这种用例中,交互数据集由电影ID组成。因此,向用户呈现的推荐将由与他们的个人偏好最接近的电影ID组成,这些个人偏好是根据他们的历史互动而确定的。您可以使用getRecommendations API通过发送其关联的用户ID、您为该用户需要的推荐结果的数量以及活动ARN来检索用户的个性化推荐。您可以在Amazon Personalize控制台菜单中找到运动方案的ARN。

例如,以下请求将检索用户userId为429的用户的5个推荐结果:

curl --location 'https://{your-api-id}.execute-api.{your-region}.amazonaws.com/prod/getRecommendations?campaignArn={campaignArn}&userId=429&numResults=5'

请求的响应如下:

{ "$metadata": {      "httpStatusCode": 200,      "requestId": "7159c128-4e16-45a4-9d7e-cf19aa2256e8",        "attempts": 1,      "totalRetryDelay": 0    },  "itemList": [   {       "itemId": "596",        "score": 0.0243044  },  {       "itemId": "153",        "score": 0.0151695  },  {       "itemId": "16",     "score": 0.013694   },  {       "itemId": "261",        "score": 0.013524   },  {       "itemId": "34",     "score": 0.0122294  }   ],  "recommendationId": "RID-1d-40c1-8d20-dfffbd7b0ac7-CID-06b10f"}

API调用返回的项目是基于用户的历史互动Amazon Personalize推荐给用户的电影。

此上下文中提供的分数值代表介于零和1.0之间的浮点数。这些值对应于当前运动和与此用例相关的配方。它们是基于分配给您详细数据集中的所有项目的集体分数来确定的。

摄取实时互动

在先前的示例中,根据用户与电影数据库的历史互动,获取了ID为429的用户的推荐结果。对于实时推荐,用户与项目的互动必须实时摄取到Amazon Personalize中。这些互动通过Amazon Personalize事件跟踪器被摄取到推荐系统中。交互的类型,也称为 EventType ,由交互数据数据集中的同名列( EVENT_TYPE )给出。在此示例中,事件可以是“观看”或“点击”类型,但您可以根据应用程序需求拥有自己的事件类型。

在此示例中,生成用户与项目的事件的暴露API接收名为“interactions”的参数,该参数对应于当前时间点上用户( UserId )与单个元素( itemId )的事件( interactions )。Amazon Personalize控制台和事件跟踪器请求的响应中可以找到trackingId参数。

此示例显示了一个putEvent请求:生成1个点击类型的事件,其项目ID为“185”,用户ID为“429”,使用当前时间戳。请注意,在生产环境中,“sentAt”应设置为用户交互的时间。在下面的示例中,我们将其设置为写API请求的时刻的时刻(以纪元时间格式)。这些事件通过API网关发送到Amazon Kinesis数据流,因此您需要发送流名称和PartitionKey参数。

curl --location 'https://iyxhva3ll6.execute-api.us-west-2.amazonaws.com/prod/data' --header 'Content-Type: application/json' --data '{ "stream-name": "my-stream","Data": {"userId" : "429", "interactions": 1, "itemId": "185", "trackingId" : "c90ac6d7-3d89-4abc-8a70-9b09c295cbcd", "eventType": "click", "sentAt":"1698711110"},"PartitionKey":"userId"}'

您将收到类似以下的确认回复:

{   "Message": "事件成功发送",   "data": {       "EncryptionType": "KMS",        "SequenceNumber": "49..........1901314",        "ShardId": "shardId-xxxxxxx"    }}

验证实时推荐

由于交互数据集已更新,推荐将自动更新以考虑新的交互。为了验证实时更新的推荐,您可以再次调用getRecommendations API获取相同用户id 429的结果,该结果应与之前的结果不同。以下结果显示了一个id为594的新推荐以及id为16、596、153和261的推荐分数发生变化。这些项目引入了新的电影类型(“动画|儿童|戏剧|幻想|音乐剧”)的前5个推荐。

请求:

curl --location 'https://{your-api-id}.execute-api.{your-region}.amazonaws.com/prod/getRecommendations?campaignArn={campaignArn} &userId=429&numResults=5'

响应:

{  "$metadata": {      "httpStatusCode": 200,      "requestId": "680f2be8-2e64-47d7-96f7-1c4aa9b9ac9d",        "attempts": 1,      "totalRetryDelay": 0    },  "itemList": [   {       "itemId": "596",        "score": 0.0288085  },  {       "itemId": "16",     "score": 0.0134173  },  {       "itemId": "594",        "score": 0.0129357  },  {       "itemId": "153",        "score": 0.0129337  },  {       "itemId": "261",        "score": 0.0123728  }   ],  "recommendationId": "RID-dc-44f8-a327-482fb9e54921-CID-06b10f"}

响应显示了由Amazon Personalize提供的推荐已实时更新。

清理

为避免不必要的费用,在使用清理资源时清理解决方案实施。

结论

在本文中,我们展示了如何使用Amazon Personalize实现实时个性化推荐系统。通过名为curl的命令行工具执行与Amazon Personalize的交互和获取推荐,但这些API调用可以集成到业务应用程序中并获得相同的结果。

要选择您用例的新配方,请参阅实时个性化。要衡量Amazon Personalize所做推荐的影响,请参阅衡量推荐影响

Leave a Reply

Your email address will not be published. Required fields are marked *