亚马逊AWS官方博客

现已推出:Amazon Personalize 中的批量建议

今天,我们非常高兴地宣布,Amazon Personalize 现已支持批量建议。

Personalize 在 AWS re:Invent 2018 中推出,它是一项完全托管的服务,允许您为应用程序创建私有、自定义的个性化建议,几乎不需要机器学习经验。

借助 Personalize,您可以在活动数据(页面查看次数、注册、购买等)中提供唯一信号以及可选的客户特征信息(年龄、位置等)。然后,您可以提供想要推荐的项目的清单,例如文章、产品、视频或音乐:如之前的博客文章所述,您既可以使用存储在 Amazon Simple Storage Service (S3) 中的历史数据,也可以使用从 JavaScript 跟踪器或服务器端实时发送的流数据

然后,完全在幕后,Personalize 将处理和检查数据,识别有意义的内容,选择正确的算法,培训和优化为您的数据定制的个性化模型,并通过您的业务应用程序可轻松调用的 API 访问。

但是,一些客户告诉我们,批量建议将更适合他们的用例。例如,其中一些人需要能够一次性为极大量用户或项目计算建议,然后存储这些建议并随时间推移将其提供给面向批处理的工作流,例如发送电子邮件或通知:尽管您肯定可以通过实时建议终端节点做到这一点,但毫无疑问批处理要方便得多且更加经济高效。

我们来做一个快速演示。

介绍批量建议
为了简洁起见,我将在 MovieLens 数据集上复用本文章中训练的电影推荐解决方案。在这里,我们将创建一个批量推荐作业,而不是基于此解决方案部署实时活动

首先,我们来定义要为其推荐电影的用户。我直接在存储于 S3 存储桶中的 JSON 文件里列出了他们的用户 ID。

{"userId": "123"}
{"userId": "456"}
{"userId": "789"}
{"userId": "321"}
{"userId": "654"}
{"userId": "987"}

然后,我将存储桶策略应用于该存储桶,以便 Personalize 可以在其中读取和写入对象。我在这里使用 AWS 控制台,您可以使用 PutBucketAcl API 以编程方式实现相同效果。

现在,我们转到 Personalize 控制台,并创建一个批量推断作业。

如您所想,我需要给作业命名,并为 Personalize 选择一个 AWS Identity and Access Management (IAM) 角色,以允许其访问我的 S3 存储桶。存储桶策略已经予以考虑。

然后,我选择要用于推荐电影的解决方案。

最后,我定义了输入和输出数据的位置,以及用于解密和加密的可选 AWS Key Management Service (KMS) 密钥。

片刻之后,作业完成,我可以从存储桶中获取建议。

$ aws s3 cp s3://jsimon-personalize-euwest-1/batch/output/batch/users.json.out -
{"input":{"userId":"123"}, "output": {"recommendedItems": ["137", "285", "14", "283", "124", "13", "508", "276", "275", "475", "515", "237", "246", "117", "19", "9", "25", "93", "181", "100", "10", "7", "273", "1", "150"]}}
{"input":{"userId":"456"}, "output": {"recommendedItems": ["272", "333", "286", "271", "268", "313", "340", "751", "332", "750", "347", "316", "300", "294", "690", "331", "307", "288", "304", "302", "245", "326", "315", "346", "305"]}}
{"input":{"userId":"789"}, "output": {"recommendedItems": ["275", "14", "13", "93", "1", "117", "7", "246", "508", "9", "248", "276", "137", "151", "150", "111", "124", "237", "744", "475", "24", "283", "20", "273", "25"]}}
{"input":{"userId":"321"}, "output": {"recommendedItems": ["86", "197", "180", "603", "170", "427", "191", "462", "494", "175", "61", "198", "238", "45", "507", "203", "357", "661", "30", "428", "132", "135", "479", "657", "530"]}}
{"input":{"userId":"654"}, "output": {"recommendedItems": ["272", "270", "268", "340", "210", "313", "216", "302", "182", "318", "168", "174", "751", "234", "750", "183", "271", "79", "603", "204", "12", "98", "333", "202", "902"]}}
{"input":{"userId":"987"}, "output": {"recommendedItems": ["286", "302", "313", "294", "300", "268", "269", "288", "315", "333", "272", "242", "258", "347", "690", "310", "100", "340", "50", "292", "327", "332", "751", "319", "181"]}}

在现实场景中,我会将这些建议提供给下游应用程序以供进一步处理。当然,除了使用控制台之外,我还可以使用CreateBatchInferenceJobDescribeBatchInferenceJobListBatchInferenceJobs API 以编程方式创建和管理作业。

现已推出!
使用 提供批量建议是一种向您的应用程序添加个性化特性的简便且经济高效的方法。您现在就可以在所有可使用 Personalize 的区域开始使用此功能。

请通过 Amazon Personalize 的 AWS 平台或您常用的 AWS Support 联系方式向我们发送反馈。

Julien