写点什么

Amazon Personalize,适合每个人的实时个性化和推荐

  • 2019-10-14
  • 本文字数:3809 字

    阅读完需:约 12 分钟

Amazon Personalize,适合每个人的实时个性化和推荐

毫无疑问,机器学习提供了各种各样令人兴奋的研究主题,但其中最值得关注的当属个性化和推荐。


乍看起来,将用户与他们喜欢的项目匹配起来听起来似乎很简单。然而,开发有效的推荐程序系统是一项极具挑战性的任务。几年前,Netflix 甚至还举办了一场电影推荐比赛,为此还提供了 100 万美元的奖金! 实际上,如今构建、优化和部署实时个性化需要分析、应用机器学习、软件工程和系统操作方面的专业知识。很少有组织拥有应对这些挑战所需的知识、技能和经验,他们要么放弃使用推荐的想法,要么构建出的模型效果不佳。


20 多年来,Amazon.com 大规模构建了推荐程序系统,整合了购买体验(从产品发现到结账)整个过程中的个性化推荐。


为了帮助所有 AWS 客户都享有同样出色的体验,我们非常高兴地宣布推出 Amazon Personalize,这是一款完全托管的服务,让没有多少机器学习经验的开发人员也可构建个性化和推荐服务。

隆重推出 Amazon Personalize

Amazon Personalize 如何简化个性化和推荐? 如之前的博文所述,您可以使用 Factorization Machines(因子分解机)等算法在 Amazon SageMaker 上构建推荐模型。但是,这需要大量的数据准备和专家调整才能获得良好的结果。


使用 Amazon Personalize 创建推荐模型要简单得多。借助自动执行复杂机器学习任务的新流程 AutoML,Personalize 执行并加速设计、训练和部署机器学习模型所需的艰巨工作。


Amazon Personalize 支持存储在 Amazon S3 中的数据集和流数据集,例如从 JavaScript 跟踪器或服务器端实时发送的事件。简要流程如下所示:


1.创建描述数据集的 schema,使用 Personalize 预留的关键字作为用户 ID、项目 ID 等。


2.创建一个数据集组,其中包含用于构建模型和用于预测的数据集:用户项交互(也称为“谁喜欢什么”)、用户和项目。后面两个是可选的,我们将在下面的示例中看到。


3.将数据发送到 Personalize。


4.创建解决方案,即选择推荐配方并在数据集组上进行训练。


5.创建一个活动来预测新样本。


将存储在 Amazon S3 中的数据发送到 Personalize 只是意味着将数据文件添加到数据集组。提取会自动触发。


而使用流数据是不同的。发送事件的一种方法是使用 AWS Amplify JavaScript 库,该库与 Personalize 中的事件跟踪服务集成。另一种方法是使用您喜欢的语言通过 AWS 开发工具包将它们发送到服务器端:可以从 AWS 内部(例如,在 Amazon EC2 或 AWS Lambda 中)或外部托管代码的任何来源进行提取。


下面让我们看个示例。让我们基于 MovieLens 数据集构建一个解决方案!

MovieLens 数据集

MovieLens 是众所周知存储电影推荐的数据集。它有不同尺寸和格式:在这里,我们将使用 ml-20m,其中包含 138000 位用户对 27000 部电影的 2000 万次评分。


此数据集包含一个名为“ratings.csv”的文件,该文件用于存储用户项交互。第一行如下所示:


userId,movieId,rating,timestamp1,2,3.5,11124860271,29,3.5,11124846761,32,3.5,11124848191,47,3.5,11124847271,50,3.5,1112484580
复制代码


它的内容如下所示:用户 1 给电影 2 评分 3.5 分。电影 29、32、47、50 等以此类推! 这正是我们构建推荐模型所需要的。我们开始吧。

为数据集创建 schema

第一步是为此数据集创建 Avro schema。.这很简单,我们只需要使用 Amazon Personalize 中定义的一些关键字。


{"type": "record","name": "Interactions","namespace": "com.amazonaws.personalize.schema","fields":[    {"name": "ITEM_ID", "type": "string"},    {"name": "USER_ID", "type": "string"},    {"name": "TIMESTAMP", "type": "long"}],"version": "1.0"}
复制代码

准备数据集

下载并解压缩数据集后,加载“ratings.csv”文件并应用以下处理:


  • 随机评论。

  • 仅保留评分为 4 及以上的电影,并删除评分列:我们只希望我们的模型可以推荐用户真正喜欢的电影。

  • 将列重命名为 schema 中使用的名称。

  • 只保留 100000 次交互以最大限度地减少训练时间(毕竟这只是一个演示!)。

  • 所有这一切都可以通过 Pandas Python 库轻松实现,该库是用于列式数据处理的万能方法。同时,我们还会将处理过的文件上传到 Amazon S3 存储桶。


import pandas, boto3 from sklearn.utils import shuffleratings = pandas.read_csv('ratings.csv')ratings = shuffle(ratings)ratings = ratings[ratings['rating']>3.6]ratings = ratings.drop(columns='rating')ratings.columns = ['USER_ID','ITEM_ID','TIMESTAMP']ratings = ratings[:100000]ratings.to_csv('ratings.processed.csv',index=False)s3 = boto3.client('s3')s3.upload_file('ratings.processed.csv','jsimon-ml20m','ratings.processed.csv')
复制代码

创建数据集组

首先,我们需要创建一个包含用户项数据集及其 schema 的数据集组。我们使用 AWS CLI 执行此操作:正如您将看到的,许多这些 CLI 操作需要先前调用的 Amazon 资源名称 (ARN) 输出,因此请确保在实验时跟踪所有内容。


$ aws personalize create-dataset-group --name jsimon-ml20m-dataset-group$ aws personalize create-schema --name jsimon-ml20m-schema \--schema file://jsimon-ml20m-schema.json$ aws personalize create-dataset --schema-arn $SCHEMA_ARN \--dataset-group-arn $DATASET_GROUP_ARN \--dataset-type INTERACTIONS 
复制代码

导入数据集

在这个简单的示例中,我们将按需导入数据。还可以安排导入作业以定期加载新数据。我们需要传递一个允许从 Amazon S3 存储桶读取数据的角色。


$ aws personalize create-dataset-import-job --job-name jsimon-ml20m-job \--role-arn $ROLE_ARN--dataset-arn $DATASET_ARN \--data-source dataLocation=s3://jsimon-ml20m/ratings.processed.csv
复制代码


这需要一些时间,我们可以使用 describe-dataset-import-job API 来检查完成情况。此时将返回大量信息,但我们只需查询导入状态。


$ aws personalize describe-dataset-import-job \--dataset-import-job-arn $DATASET_IMPORT_JOB_ARN \--query "datasetImportJob.latestDatasetImportJobRun.status""CREATE IN_PROGRESS"
复制代码


把以上内容结合在一起:创建解决方案


导入数据集后,我们需要选择一个配方来构建我们的推荐模型。配方不仅仅是一种算法:它还包括预定义的功能转换、算法的初始参数以及自动模型调整。因此,有了配方,就无需掌握个性化方面的专业知识。


Amazon Personalize 附带了几个适用于不同用例的配方,高级用户也可以添加自己的配方。


以下是可用配方列表。


arn:aws:personalize:::recipe/awspersonalizehrnnmodelarn:aws:personalize:::recipe/awspersonalizehrnnmodel-for-coldstartarn:aws:personalize:::recipe/awspersonalizehrnnmodel-for-metadataarn:aws:personalize:::recipe/awspersonalizeffnnmodelarn:aws:personalize:::recipe/awspersonalizedeepfmmodelarn:aws:personalize:::recipe/awspersonalizesimsmodelarn:aws:personalize:::recipe/search-personalizationarn:aws:personalize:::recipe/popularity-baseline
复制代码


推荐专家肯定会喜欢它们带来的灵活性,但对于该主题不熟悉的开发人员呢?


如前所述,Amazon Personalize 支持 AutoML,这是一种自动搜索最佳配方的新技术,所以我们启用它。默认情况下启用超参数优化。最后但同样重要的是,Amazon Personalize 解决方案可以根据传入流量自动扩展:我们只需要定义我们想要支持的每秒事务数 (TPS) 的最小数量。


因此,我们可以如下所示创建解决方案:


$ aws personalize create-solution --name jsimon-ml20m-solution \ --minTPS 10 --perform-auto-ml \ --dataset-group-arn $DATASET_GROUP_ARN \ --query 'solution.status' "CREATE IN_PROGRESS"
复制代码


选择、训练和调整最佳配方需要一段时间。完成上述所有操作后,我们可以查看解决方案指标。


$ aws personalize get-metrics --solution-arn $SOLUTION_ARN
复制代码


实时推荐新项目


如果我们对模型感到满意,现在就可以创建一个活动来进行部署。每次部署解决方案时,它都会自动更新。


$ aws personalize create-campaign --name jsimon-ml20m-solution \--solution-arn $SOLUTION_ARN --update-mode AUTO
复制代码


现在,我们来推荐一些电影。


$ aws personalize-rec get-recommendations --campaign-arn $CAMPAIGN_ARN \--user-id $USER_ID --query "itemList[*].itemId"["1210", "260", "2571", "110", "296", "1193", ...]
复制代码


这样就可以了! 如您所见,我们通过一些 API 调用成功构建了一个推荐模型。我们需要做的就是定义一个 schema 并上传数据集。我们依靠 Amazon Personalize 通过 AutoML 选择最佳配方,并优化其超参数。该解决方案在完全托管的基础设施上进行训练和部署,让我们可以更加专注于构建我们的应用程序。


立即注册预览版!


我希望这篇博文提供了丰富的有用信息。我们只是触及了 Amazon Personalize 功能的冰山一角。该服务的预览版已在美国东部(弗吉尼亚)和美国西部(俄勒冈)推出。


预览期间服务不收费。预览版完成后,该服务将纳入 AWS 免费套餐。注册后的前两个月,您将获得:


1.数据处理和存储:每月高达 20 GB


2.训练:每月训练小时数多达 100 小时


3.推理:每月多达 50 TPS 小时的实时推荐


要开始使用,请访问 aws.amazon.com/personalize/。现在您可以体验一下,与我们分享您的想法。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-personalize-real-time-personalization-and-recommendation-for-everyone/


2019-10-14 11:241357
用户头像

发布了 1870 篇内容, 共 134.2 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

SpringBoot Webflux解析

Ethan

小红书自研KV存储架构如何实现万亿量级存储与跨云多活

小红书技术REDtech

存储 分布式KV 跨云多活

Vue.js基础环境的搭建以及简单使用Element-ui

是乃德也是Ned

7月月更

SAP UI5 ObjectPageLayout 控件使用方法分享

汪子熙

前端开发 Fiori SAP UI5 ui5 7月月更

蚁群算法(实例帮助理解)

秃头小苏

蚁群算法 7月月更

第五届 Polkadot Hackathon 创业大赛全程回顾,获胜项目揭秘!

One Block Community

区块链 科技

CSS动画篇之炫酷时钟之时钟墙

南城FE

CSS 前端 动画 时钟 7月月更

基于昇腾AI丨以萨技术推出视频图像全目标结构化解决方案,达到业界领先水平

科技热闻

Web3基金会「Grant计划」赋能开发者,盘点四大成功项目

One Block Community

区块链+

基于OpenHarmony的智能金属探测器

OpenHarmony开发者

OpenHarmony

spark调优(一):从hql转向代码

怀瑾握瑜的嘉与嘉

spark 7月月更

Node の MongoDB Driver

空城机

mongodb Node 7月月更

微信小程序触底加载与下拉刷新的实现

猪痞恶霸

小程序 前端 7月月更

RingCentral Android启动优化实践

RingCentral铃盛

android 启动流程

非技术部门,如何参与 DevOps?

飞算JavaAI开发助手

基于昇腾AI丨高新兴推出城市道路车辆二次识别解决方案,达到业界领先水平

科技热闻

如何让全彩LED显示屏更加节能环保

Dylan

LED LED显示屏

IPv6与IPv4的区别 网信办等三部推进IPv6规模部署

郑州埃文科技

ipv6 ipv4 IP地址

居家办公那些事|社区征文

CrazyGeek1996

居家办公 社区征文 7月月更

LeetCode-145. 二叉树的后序遍历(java)

bug菌

Leet Code 7月月更

5G NR系统架构

柒号华仔

5G 网络 7月月更

基于昇腾AI丨爱笔智能推出银行网点数字化解决方案,实现从总部到网点的信息数字化全覆盖

科技热闻

如何将 DevSecOps 引入企业?

SEAL安全

DevOps DevSecOps DevSecOps和敏捷

购买小间距LED显示屏的三个建议

Dylan

LED显示屏

容易混淆的基本概念 成员变量 局部变量 全局变量

NewBoy

前端 移动端 iOS 知识体系 7月月更

不要再说微服务可以解决一切问题了!

博文视点Broadview

基于STM32+华为云IOT设计的智能防盗单车锁

DS小龙哥

7月月更

Lepton 无损压缩原理及性能分析

vivo互联网技术

对象存储 无损压缩 lepton 图片压缩

Qt实现json解析

小肉球

7月月更

谈谈对Flink框架中容错机制及状态的一致性的理解

百思不得小赵

flink 容错机制 状态 7月月更

C++|TCP客户端中发送文件

中国好公民st

c++ TCP通信 7月月更

Amazon Personalize,适合每个人的实时个性化和推荐_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章