AIGC 应用、数据分析等企业 10+ 热门专题课,就在极客时间企业版>>> 了解详情
写点什么

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

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

    阅读完需:约 12 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

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


乍看起来,将用户与他们喜欢的项目匹配起来听起来似乎很简单。然而,开发有效的推荐程序系统是一项极具挑战性的任务。几年前,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:24958
用户头像

发布了 1832 篇内容, 共 98.4 次阅读, 收获喜欢 76 次。

关注

评论

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

Android 自定义View之随机数验证码(仿写鸿洋),那些被大厂优化的程序员们

android 程序员 移动开发

Android 进阶性能优化,面试必问篇,掌握这些Android开发热门前沿知识

android 程序员 移动开发

Android 中图片压缩分析(上),android绘制流程

android 程序员 移动开发

Android 扩大 View 的点击区域(1),安卓软件开发面试题

android 程序员 移动开发

Android 组件化实战,企业微信移动应用

android 程序员 移动开发

Android 基础掌握好,面试基本不会倒!,android计算器源码

android 程序员 移动开发

Android 点九图机制讲解及在聊天气泡中的应用,android音视频开发何俊林pdf

android 程序员 移动开发

Android 屏幕适配从未如斯简单(已废弃该使用方式),Android开发经验的有效总结

android 程序员 移动开发

Android 扩大 View 的点击区域,2021阿里手淘Android面试题目

android 程序员 移动开发

Android 组件化,从入门到不可自拔,2021必看

android 程序员 移动开发

Android 保活措施,retrofit原理

android 程序员 移动开发

Android 原生项目集成 Flutter,零基础android

android 程序员 移动开发

Android 布局阴影实现,移动开发框架2019

android 程序员 移动开发

Android 开发——JVM复习小结,深入解析Android-AutoLayout

android 程序员 移动开发

Android 查看并解决重复依赖,分享一些行业经验

android 程序员 移动开发

Android 大厂面试 指南:他们到底需要怎样的工程师?(1)

android 程序员 移动开发

Android 大厂面试 指南:他们到底需要怎样的工程师?,Android码农是如何进入腾讯的

android 程序员 移动开发

Android 开发市场是盛是衰?你应该知晓,android开发项目实战

android 程序员 移动开发

Android 深入理解Android中的自定义属性,资深Android面试题

android 程序员 移动开发

Android Virtualview:淘宝、天猫 又一个动态化,android界面开发基础

android 程序员 移动开发

Android 开发岗往年至今年高频面试题整(内含参考答案)

android 程序员 移动开发

Android 子线程更新UI了解吗?,看这一篇就够了

android 程序员 移动开发

Android 开发者想咸鱼翻身并不是难事,只要你掌握这些…

android 程序员 移动开发

Android 性能优化最佳实践,面试必问

android 程序员 移动开发

Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架

android 程序员 移动开发

Android 相关源码分析,一种非常简单的Android屏幕适配方案

android 程序员 移动开发

Android 记一次解决问题的过程:从源码中分析永远是解决问题的最有效方法

android 程序员 移动开发

Android WebView判定网页加载的错误,androidkotlin面试题

android 程序员 移动开发

Android 嵌套滑动总结,android项目驱动式开发教程

android 程序员 移动开发

Android 开发岗往年至今年高频面试题整(内含参考答案)(1)

android 程序员 移动开发

Android 知识简记 快速回顾各种知识,android开发技术周报

android 程序员 移动开发

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