写点什么

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:241271
用户头像

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

关注

评论

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

敏捷价值流管理

敏捷开发

敏捷 敏捷开发 价值流 价值流管理

BitSail issue持续更新中,快来挑战,赢取千元礼品!

字节跳动数据平台

大数据 开源 12 月 PK 榜

大数据开发培训机构有哪些?

小谷哥

想在“互联网信息高速公路”顺畅通行,华为云CDN来助力

秃头也爱科技

【12.16-12.23】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动

WorkPlus助力中交四航局打造数字化管理新模式,释放企业生产力

BeeWorks

百度工程师教你玩转设计模式(装饰器模式)

百度Geek说

Java 设计模式 12 月 PK 榜 装饰器模式

软件设计中最关键的“开闭原则”,究竟指什么呢?

JAVA旭阳

架构 后端

Java本地高性能缓存实践

阿里技术

cache 本地缓存 缓存Java

搭建"积木"=编程?

间隔

火山引擎DataTester上线“流程画布”功能,支持组合型A/B实验分析

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

跨平台应用开发进阶(四十二)vue与nvue页面设计方案探究

No Silver Bullet

uni-app Vue 12月月更 nvue

阿里巴巴最新出版的 Java 面试参考指南(泰山版)开源了!

架构师之道

编程 程序员 java面试

AI技术实践|用腾讯云智能文本图像增强打造一个掌上扫描仪

牵着蜗牛去散步

人工智能 腾讯云 文字识别 图像处理

扬州万方:基于申威平台的 Curve 块存储在高性能和超融合场景下的实践

网易数帆

nvme 分布式存储 curve 12 月 PK 榜

Team Lead 的日常工作

QE_LAB

敏捷团队

金融科技 DevOps 的最佳实践

SEAL安全

DevOps 最佳实践 FinTech 12 月 PK 榜

阿里灵杰:与开发者一起推动AI创新落地

阿里云大数据AI技术

人工智能 阿里云 开发者 AI技术

前端培训学习后好就业吗?

小谷哥

跨平台应用开发进阶(三十八)uni-app前端监控方案:基调听云APP探究

No Silver Bullet

uni-app 前端监控 12月月更 基调听云APP

JavaScript进阶(十三)JavaScript 空值合并运算符、可选链操作符、空值赋值运算符讲解

No Silver Bullet

JavaScript 12月月更 空值合并运算符 可选链操作符 空值赋值运算符讲解

你的企业IM安全吗?对于私有化的即时通讯软件你了解多少?

BeeWorks

【重磅干货】如何构建 API 生态促进企业上下游合作

石臻臻的杂货铺

API

如何保证设计出合理的架构1-4

程序员小张

「架构实战营」

中移链已在BSN-DDC基础网络上线元交易功能

BSN研习社

BSN-DDC

企业IM软件WorkPlus,组织高效协作与一体化办公首选

BeeWorks

科班出生和培训出身的前端程序员哪个好?

小谷哥

极速畅享网络体验,华为云CDN加速一通到底

秃头也爱科技

华为云大数据BI,赋能数字化企业加速发展

秃头也爱科技

Dubbo架构设计与源码解析(三)责任链模式

京东科技开发者

dubbo 过滤器 filter 责任链 provider

培训学习大数据门槛低吗

小谷哥

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