写点什么

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

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

关注

评论

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

彻底搞懂云桌面配置及实践踩坑【华为云至简致远】

神奇视野

Python 科技

高效的组织信息共享知识库是一种宝贵的资源

Geek_da0866

快速定位线上慢SQL问题,掌握这几个性能排查工具可助你一臂之力

IT学习日记

MySQL性能优化 数据库优化 MySQL 数据库 签约计划第三季 explain关键字

开源一夏 | 阿里云物联网平台之极速体验

六月的雨在InfoQ

阿里云 开源 物联网 8月月更

技术干货|如何将 Pulsar 数据快速且无缝接入 Apache Doris

SelectDB

数据库 Doris pulsar 数据导入 kafaka

浅谈Service Mesh对业务系统的价值

HelloGeek

微服务 云原生 server mesh 微服务治理

一次做数据报表的踩坑经历,让我领略了数据同步增量和全量的区别

百思不得小赵

数据同步 增量同步 全量同步 签约计划第三季 8月月更

不可忽略!户外LED显示屏的特点及优势

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案

ModelWhale

数据分析 代码复现 开放生态 协同软件 科研成果

基于Java的插件化集成项目实践

阿提说说

微服务 插件化

利用java实现视频人像分割及视频背景替换

夏夜许游

Java 图像分割 视频人像分割 背景替换

ModelWhale 云端运行 WRF 中尺度数值气象模式,随时随地即开即用的一体化工作流

ModelWhale

数据科学 气象 全流程一体化 WRF 大气科学

开源一夏 |我在滴滴做开源

石臻臻的杂货铺

开源 8月月更

基于DMS的数仓智能运维服务,知多少?

华为云开发者联盟

数据库 后端 监控 智能运维

手摸手带你完成智慧路灯构建及避坑【华为云至简致远】

神奇视野

Python 科技

开源一夏 | 打工人的第25天-曾经的考研人

Amazing_eve

#开源

豆瓣评分9.0,“Linux命令行”经典巨著升级版上市了!

图灵教育

详谈RDMA技术原理和三种实现方式

C++后台开发

网络协议 C/C++后台开发 C/C++开发 RDMA技术 以太网

面试不再被吊打!这才是Redis分布式锁的七种方案的正确打开方式

程序员小毕

Java 架构 面试 分布式 分布式锁

绝无此例!用实例演示如何使用Spring搭建微服务框架

Java永远的神

spring 面试 微服务 springboot SpringCloud

阿里云 EMAS Serverless 升级发布

移动研发平台EMAS

小程序云开发 阿里云 Serverless 开发者 云开发

2021年数据泄露成本报告解读

SEAL安全

DevSecOps 数据安全 混合云 零信任 软件供应链

带你了解什么是 Web3.0

liuzhen007

Web 3.0

从零开始搭建MySQL主从复制架构

杨杰灵

Java MySQL 主从复制

中小微企业如何简单便捷、低成本实现数字化?360视觉云有妙招

ToB行业头条

NFT盲盒挖矿DAO智能合约dapp系统开发详情

开发微hkkf5566

交大医学院临床研究中心如何将 ModelWhale 应用于临床医生教学、研究丨数据科学 x 临床医学

ModelWhale

人才培养 数据科学 低代码平台 教学 临床医学

破解数字化转型困局,企业分析协同场景案例解析

ModelWhale

数据分析 数字化转型 构建模型 成功案例 协同软件

出海季,互联网出海锦囊之本地化

融云 RongCloud

元宇宙 IT业界

生物统计师与临床医生协同研究使用的低代码洞察平台丨数据科学 x 临床医学

ModelWhale

团队协作 Jupyter Notebook 数据科学 低代码开发 临床医学

视频人脸识别和图片人脸识别的关系

夏夜许游

人脸识别 视频人脸识别

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