亚马逊AWS官方博客

在 Amazon Personalize 中引入推荐分数

Amazon Personalize 使您可以使利用Amazon.com 所使用的相同机器学习技术,对您的网站、应用程序、广告、电子邮件等进行个性化设置,而不要求之前有任何机器学习方面的经验。使用 Amazon Personalize,您可以通过简单的 API 接口调用用户生成个性化的建推荐我们很高兴地宣布,Amazon Personalize 现可为每个个性化推荐提供推荐分数。这些分数可以帮助您了解推荐相关性的相对差异。本文将引导您了解这些分数的用法和解释。

使用推荐分数

Amazon Personalize 推荐分数可帮助您优化推荐业务逻辑。我们来看下面的一些说明性示例:

  • 高于相对阈值的推荐项目,例如仅得分 > 返回项目中最高得分 50% 的推荐项目。不建议采用绝对阈值,例如仅推荐得分 > 0.001 的推荐项目。
  • 当某项目针对用户的得分很高时,请执行特殊操作。例如,如果某项目的得分 > 0.2,则向用户发送特殊通知或显示特殊的 UI 元素,以使他们知道此高可信度项目。
  • 对个性化结果执行自定义重新排名,例如平衡与其他业务目标(例如显示赞助内容)的建议相关性。

推荐分数可通过实时推荐和批量推荐获得。也可通过 Amazon Personalize 控制台使用实时推荐。为使用以下配方创建的解决方案版本启用分数:

arn:aws:personalize:::recipe/aws-hrnn
arn:aws:personalize:::recipe/aws-hrnn-metadata
arn:aws:personalize:::recipe/aws-hrnn-coldstart
arn:aws:personalize:::recipe/aws-personalized-ranking

目前,分数不适用于使用aws-simsaws-popularity-count配方创建的解决方案。

在本文中,我们将简要演示如何在控制台上获得推荐分数。如果您之前从未使用过 Amazon Personalize,请在继续之前参阅入门

获得实时推荐的分数

Amazon Personalize 控制台提供了一种从GetRecommendationsGetPersonalizedRankingAPI中发现检查结果的简便方法。在生产应用程序中,您将使用 AWS CLI 或特定于语言的开发工具包调用这些 API。要检索建议分数,请更新您的 Amazon Personalize 开发工具包。有关更多信息,请参阅获取实时建议

以下步骤详细说明了如何从控制台获取推荐和分数。

选择活动

在 Amazon Personalize 中,活动用于为您的用户提出推荐。您将需要一项活动,其解决方案版本使用支持分数的配方,如上所述。您可以创建一个新活动,也可以重复使用一个现有的活动。

要创建新活动,请完成以下步骤:

  1. 在活动标签上,选择创建活动。
  2. 对于活动名称,输入一个名称。
  3. 对于解决方案,选择解决方案,然后选择使用启用分数配方的解决方案版本
  4. 选择创建活动。

以下屏幕截图显示了使用aws-hrnn配方创建的解决方案的活动的详细信息。该活动将用于产生建议分数。

获得推荐

创建或更新广告系列后,您可以获得针对用户的推荐项目、针对某项目的类似项目或对该用户的输入项目的重新排序列表。在活动详细信息页面中,输入要测试的userIditemIdinputList

以下屏幕截图显示了包含GetRecommendations调用结果的“活动”详细信息页面,包括建议的项目及其得分。

对于给定用户,基于 HRNN 配方的解决方案为项目数据集中所有彼此相关的项目评分,以使每个项目的评分在 0 到 1(含 0 和 1)之间,并且用户的所有项目评分的总和等于 1。例如,如果您正在为用户生成电影推荐,并且项目数据集中有三部电影,则它们的得分可以分别为 0.6、0.3 和 0.1。如果您的项目数据集中有 10,000 部电影,则平均得分将为1/10,000,甚至得分最高的电影绝对得分也很低。因此,分数应该相对解释。

用数学术语来说,每个用户项目对 (u,i) 的 HRNN 得分计算如下,其中“exp”是指数函数,w和 wi/j 分别是学习的用户和项目嵌入,而 Σ 表示项目数据集中所有项目之和:

请注意,用户与项目嵌入 wu 和 wi/j 之间的内部乘积或点积表示特定用户与项目之间的贴合度。

以下屏幕截图显示了“活动”详细信息页面,该页面的GetPersonalizedRanking调用成功,返回的得分位于右下角。

对于使用aws-personalized-ranking配方创建的解决方案,GetPersonalizedRanking输出中的项目也会彼此相对评分(从 0 到1)。但是,与GetRecommendationsAPI 的结果不同,对于输入 ItemID 而不是项目数据集中所有可能的项目,其得分总和为 1。由于输入列表通常比 ITEMS 数据集中的项目总数少得多,因此对于同一用户(GetRecommendations API 中的项目对),绝对值可能看起来大于所说的得分。GetPersonalizedRanking操作inputList中不同项目的分数因此应相对于彼此进行解释。

从数学上讲,除了只考虑输入项进行排名外,GetPersonalizedRankingGetRecommendations 的评分函数相同。这意味着得分更接近于 1 的可能性更高,因为可以将得分相除的其他项更少:

对于GetPersonalizedRanking API,在训练时inputList中不在ITEMS 或 INTERACTIONS 数据集中的项目返回时不评分,并会排在列表末尾。

获得批量推荐的分数

分数包含在使用启用分数配方衍生的解决方案版本创建的批量推断作业的结果中。完成以下步骤以获取批量建议的分数。有关更多信息,请参阅获取批量建议

  1. 在Amazon Personalize 控制台的批量推断作业选项卡上,使用具有启用分数配方的解决方案版本创建新的批量推断作业。
  2. 作业完成后,导航至输出 Amazon S3。输出文件具有后缀 .out。对于本文,由于输入文件为 batch-20-lines.json,因此预期输出文件名为 batch-20-lines.json.out。以下屏幕截图显示了写入 S3 并出现在S3控制台中的 batch-20-lines.json.out
  3. 从 Amazon S3 下载文件。
  4. 在文本编辑器中打开文件。

分数出现在输出中。没有推荐分数的旧输出结构如下:

{
    "input": {...}
    "output": {
        "recommendedItems": ["item1", "item2"],
    },
    "error": "…"
}

具有分数的新输出结构如下:

{
    "input": {...}
    "output": {
        "recommendedItems": ["item1", "item2"],
        "scores": [score1, score2]
    },
    "error": "..."
}

以下是 * .out 文件的示例输出。输出已被格式化以提高可读性。

{
   "input":{
      "userId":"3962",
      "itemList":["474","465","1014","222"]
   },
   "output":{
      "recommendedItems":["222","474","1014","465"],
      "scores":[0.4897564, 0.265899, 0.165578, 0.078766]
   },
   "error":null
}

小结

随着推荐评分的发布,您现在可以更深入地了解推荐质量,并可以编写更智能的业务逻辑以与下游生产系统集成。立即开始使用 Amazon Personalize 个性化您的用户体验! 单击此处获取我们的开发人员指南。

 

本篇作者

Brandon Huang

是 AWS 的一名软件开发工程师,他是 Amazon Personalize 开发团队的成员。他专攻训练更快、更准确的建议模型,之前曾研究 Amazon Forecast。在不编程的时候,布兰登喜欢打羽毛球、弹钢琴,还喜欢游览湾区的顶级餐厅。