您当前位置>首页 > 精品项目 > 使用 Amazon Personalize 实现实时个性化推荐 机器学习博客
发表时间:2026-01-27
浏览次数:83
在基本层面上,机器学习ML技术通过数据学习来进行预测。企业利用数据与 ML 驱动的个性化服务结合,以提升客户体验。这种方法使企业能够从数据中获得可操作的见解,帮助其增加收入和品牌忠诚度。
Amazon Personalize 加速了您的数字转型,简化了将个性化推荐集成至现有网站、应用程序和电子邮件营销系统的过程。Amazon Personalize 让开发者能够快速实现定制的个性化引擎,无需 ML 专业知识。Amazon Personalize 提供必要的基础设施,并管理整个机器学习ML流程,包括数据处理、特征识别、使用最合适的算法、模型训练、优化和托管。您通过 API 接收结果,并按实际使用情况付费,无最低费用或前期承诺。
本文中提到的 使用 Amazon Personalize 构建近实时个性化推荐架构 展示了如何使用 Amazon Personalize 和 AWS 专用数据服务 构建近实时个性化推荐。在本篇文章中,我们将带您走过使用 Amazon Personalize 实现实时个性化推荐系统的参考实现。
实时个性化推荐解决方案的实现涉及到使用 Amazon Personalize、Amazon Simple Storage Service (Amazon S3)、Amazon Kinesis Data Streams、AWS Lambda 和 Amazon API Gateway 等服务。
架构实现步骤如下:
数据准备 首先 创建数据集组、架构以及表示您的项目、交互和用户数据的 数据集。训练模型 导入数据后,选择与您的用例匹配的配方,然后 创建解决方案 来训练模型,通过 创建解决方案版本。当解决方案版本准备就绪时,您可以创建相应的活动。获取近实时推荐 一旦创建了活动,您便可以在应用程序中调用此活动。这是通过 GetRecommendations 或 GetPersonalizedRanking API 发起请求以从 Amazon Personalize 获取近实时推荐的过程。我们通过以下步骤演示如何实现该解决方案,并以实时电影推荐为案例:
前置条件数据准备设置开发环境部署解决方案创建解决方案版本创建活动创建事件追踪器获取推荐导入实时交互验证实时推荐清理在开始之前,请确保您具备以下前提条件:
准备训练数据 根据 说明 准备并上传数据到 S3 存储桶。此用例中,您需要上传交互数据和项目数据。交互是您记录并导入为训练数据的事件。Amazon Personalize 主要基于您导入的交互数据生成推荐。您可以记录多种事件类型,如点击、观看或喜欢。虽然 Amazon Personalize 创建的模型可以基于用户的历史交互进行建议,但当模型拥有用户或项目之间关联的数据时,这些建议的质量可以得到增强。设置开发环境 安装 AWS 命令行界面AWS CLI。配置 CLI 与您的 Amazon 账户 使用 AWS 账户信息进行 AWS CLI 配置。安装并引导 AWS 云开发工具包AWS CDK要部署解决方案,请执行以下操作:
克隆 仓库到桌面上的新文件夹。部署 堆栈至 AWS 环境。解决方案指的是 Amazon Personalize 配方、定制参数及一个或多个解决方案版本训练模型的组合。当您在上一个步骤中部署 CDK 项目时,会自动为您创建一个使用用户个性化配方的解决方案。解决方案版本指的是已训练的机器学习模型。为实施创建一个 解决方案版本。
活动将通过为生成实时推荐而配置的事务能力来部署解决方案版本训练模型。为实施创建一个 活动。
Amazon Personalize 可以仅基于实时事件数据、仅基于历史事件数据或同时基于两者进行推荐。记录实时事件可以丰富您的交互数据,并允许 Amazon Personalize 从用户最新的活动中学习,从而保持数据的新鲜感,提升推荐的相关性。在您能够记录事件之前,必须创建事件追踪器。事件追踪器将新事件数据导向您的数据集组中的交互数据集。为实施创建一个 事件追踪器。
在此用例中,交互数据集由电影 ID 组成。因此,向用户提供的推荐将包括与他们的个人偏好最接近的电影 ID,这些偏好是根据他们的历史交互确定的。您可以使用 getRecommendations API 通过发送对应的 userID,推荐结果数量以及活动 ARN 来检索个性化推荐。您可以在 Amazon Personalize 控制台中找到活动 ARN。
例如,以下请求将为用户 ID 为 429 的用户检索 5 条推荐:

bashcurl location https//{yourapiid}executeapi{yourregion}amazonawscom/prod/getRecommendationscampaignArn={campaignArn}ampuserId=429ampnumResults=5
请求的响应将为:
json{ metadata { httpStatusCode 200 requestId 7159c1284e1645a49d7ecf19aa2256e8 attempts 1 totalRetryDelay 0 } itemList [ { itemId 596 score 00243044 } { itemId 153 score 00151695 } { itemId 16 score 0013694 } { itemId 261 score 0013524 } { itemId 34 score 00122294 } ] recommendationId RID1d40c18d20dfffbd7b0ac7CID06b10f}
梯子vpAPI 调用返回的项目是 Amazon Personalize 根据用户历史交互所推荐的电影。
在此上下文中提供的分数值为范围在零到 10 的浮点数。这些值与当前活动及其关联的配方相关联,基于您所有数据集中现有项目的集体分数而确定。
在之前的示例中,基于用户 ID 为 429 的用户与电影数据库的历史交互而获取推荐。对于实时推荐,用户与项目的交互必须实时导入 Amazon Personalize。这些交互通过 Amazon Personalize 的 事件追踪器 进入推荐系统。交互的类型,也称为 EventType,在交互数据集EVENTTYPE的同名列中给出。在本例中,事件可以是“观看”或“点击”,但也可以根据应用程序的需求自定义事件类型。
在本示例中,生成与项目进行交互的用户事件的公开 API 接受一个参数“interactions”,该参数对应于用户UserId当前与单个元素itemId发生的事件数量。“trackingId” 参数可以在 Amazon Personalize 控制台中找到,也可以在创建事件追踪器请求的响应中找到。
以下示例展示了一个 putEvent 请求:生成对用户 ID 为“429”的点击类型的 1 次交互,项目 ID 为“185”,使用当前时间戳。请注意,在生产环境中,“sentAt” 应设置为用户交互发生的时间。以下示例中,这被设置为撰写 API 请求时的时间以纪元时间格式。事件通过 API Gateway 发送至 Amazon Kinesis Data Streams,因此需要发送 streamname 和 PartitionKey 参数。
bashcurl location https//iyxhva3ll6executeapiuswest2amazonawscom/prod/data header ContentType application/json data { streamname mystreamData {userId 429 interactions 1 itemId 185 trackingId c90ac6d73d894abc8a709b09c295cbcd eventType click sentAt1698711110}PartitionKeyuserId}
您将收到如下确认响应:
json{ Message Event sent successfully data { EncryptionType KMS SequenceNumber 491901314 ShardId shardIdxxxxxxx }}
由于交互数据集已更新,推荐将自动更新以考虑新交互。要验证实时更新的推荐,您可以再次调用相同用户 ID 为 429 的 getRecommendations API,结果与之前应有所不同。以下结果显示了一条新推荐,ID 为 594,推荐 ID 为 16、596、153 和 261 的分数发生了变化。这些项目引入了新的电影类型‘AnimationChildrenDramaFantasyMusical’作为前5条推荐。
请求:
bashcurl location https//{yourapiid}executeapi{yourregion}amazonawscom/prod/getRecommendationscampaignArn={campaignArn} ampuserId=429ampnumResults=5
响应:
json{ metadata { httpStatusCode 200 requestId 680f2be82e6447d796f71c4aa9b9ac9d attempts 1 totalRetryDelay 0 } itemList [ { itemId 596 score 00288085 } { itemId 16 score 00134173 } { itemId 594 score 00129357 } { itemId 153 score 00129337 } { itemId 261 score 00123728 } ] recommendationId RIDdc44f8a327482fb9e54921CID06b10f}
响应显示,Amazon Personalize 提供的推荐已实时更新。
为了避免不必要的费用,请通过 清理资源 来清理解决方案实现。
在本文中,我们向您展示了如何使用 Amazon Personalize 实现实时个性化推荐系统。通过命令行工具 curl 实现与 Amazon Personalize 交互以导入实时交互并获取推荐,但这些 API 调用可以集成到业务应用程序中,从而获得相同的结果。
要为您的用例选择新的配方,参阅 实时个性化。要测量由 Amazon Personalize 生成的推荐的影响,请参阅 测量推荐影响。
Cristian Marquez 是高级云应用程序架构师,具有丰富的企业级软件、重载和分布式系统以及云原生应用程序设计、构建和交付的经验。他在后端和前端编程语言以及系统设计和实施 DevOps 实践方面都有经验,积极协助客户构建安全的创新云解决方案,解决其商业问题,实现商业目标。
Anand Komandooru 是 AWS 的高级云架构师,自 2021 年加入 AWS 专业服务组织以来,帮助客户在 AWS 云上构建云原生应用程序。他在软件构建方面拥有超过 20 年的经验,而他最喜欢的亚马逊领导原则是 “领导者常常是对的。”