获取实时推荐 - Amazon Personalize
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

获取实时推荐

您可以通过广告活动从 Amazon Personalize 获得实时推荐。例如,假设您有一个旨在提供电影推荐的活动。您可以将GetRecommendations或者GetPersonalizedRankingAPI 操作为已登录您的应用程序或网站的用户获取实时电影推荐。您还可以使用 Amazon Personalize 控制台获取推荐,其中针对用户的最佳推荐将显示在广告活动详情页面上的表格中。

使用上下文元数据提高建议相关性

要提高建议相关性,请在您获得建议或获得个性化排名时包含用户的上下文元数据,例如用户的设备类型或一天中的时间。

要使用上下文元数据,必须满足以下要求:

  • 交互式数据集的方案必须具有上下文元数据字段(请参阅数据集和架构)。

  • 支持市场活动的解决方案版本必须使用 USER_PERSONALIZATION 或 RELATED_ITEMS 类型的配方(参阅第 1 步:选择配方)。

有关包含上下文元数据的好处,请参阅上下文元数据

有关示例说明如何使用Amazon适用于 Python 的开发工具包请使用上下文元数据获取建议 (AmazonPython 开发工具包)使用上下文元数据获取个性化排名(AmazonPython 开发工具包)

获取建议

要获得推荐,请调用GetRecommendationsAPI 操作,或者在控制台的广告活动详细信息页面上为用户提供建议。有关使用 Amazon CLI 的示例,请参阅第 4 步:获取建议

评分的工作原理

为提出推荐,Amazon Personalize 会根据用户的交互数据和元数据为项目数据集中的项目生成分值。这些分数表示对于用户接下来将选择哪 Amazon Personalize 项目的相对确定性。分数越高,意味着确定性越大。

基于 USER_PERSONALIZATION 方法的模型对项目数据集中的所有项目进行相对于彼此的评分,其分数范围为 0 到 1(包含这两者),使得所有分数的总和等于 1。例如,如果您要获取用户的影片推荐,并且项目数据集中有三部影片,则其分数可能为 0.60.3、和 0.1。同样,如果您的库存中有 1,000 部电影,则得分最高的电影的分数可能非常小(平均分数为.001),但由于评分是相对的,推荐仍然有效。

在数学术语中,每个用户项目对 (u, i) 的分数是根据以下公式计算的,其中exp是指数函数,wu和 wi/j分别是用户嵌入和项嵌入,希腊字母 sigma (σ) 表示项目数据集中所有项的总和:

注意

Amazon Personalize 不显示 SIMS 或基于流行计数的模型的分数。

获取推荐(控制台)

要在 Amazon Personalize 控制台中为用户获取建议,请选择您正在使用的广告活动,然后提供其用户 ID,可选择筛选器,并可选择提供任何上下文数据。

获得针对用户的推荐

  1. 从打开 Amazon Personalize 控制台https://console.aws.amazon.com/personalize/home并登录您的账户。

  2. 选择包含您正在使用的市场活动的数据集组。

  3. 在导航窗格中,选择 Campaigns (活动)

  4. 在存储库的活动页面上,选择目标广告活动。

  5. UDER测试活动结果中,输入User ID (用户 ID)对于要获得其建议的用户。

  6. (可选)选择筛选器。有关更多信息,请参阅筛选建议

  7. 如果您的广告活动使用上下文元数据(有关要求,请参阅使用上下文元数据提高建议相关性)可以选择提供上下文数据。

    对于每个上下文,对于密钥中,输入元数据字段,然后对于中,输入上下文数据。

  8. 选择 Get recommendations (获得推荐)。将显示一个包含用户的前 25 项推荐项目的表。

获取推荐 (Amazon开发工具包)

以下代码说明了如何使用 SDK for Python (Boto3)(Bto3)或适用于 Java 2.x 的软件开发工具包获取 Amazon Personalize 建议。

SDK for Python (Boto3)

使用以下代码可获得推荐。将 userId 的值更改为用于训练解决方案的数据中的用户 ID。将显示为用户推荐的前 10 项的列表。要更改推荐项目的数量,请更改numResults。默认值为 25 项。最多 500 项。

import boto3 personalizeRt = boto3.client('personalize-runtime') response = personalizeRt.get_recommendations( campaignArn = 'Campaign ARN', userId = 'User ID', numResults = 10 ) print("Recommended items") for item in response['itemList']: print (item['itemId'])
SDK for Java 2.x

要获得推荐,请使用以下getRecommendations方法并将以下内容作为参数传递:APersonalizeRuntimeClient、您的广告活动的 Amazon 资源名称 (ARN) 以及userId对于要获得推荐的用户。

public static void getRecs(PersonalizeRuntimeClient personalizeRuntimeClient, String campaignArn, String userId){ try { GetRecommendationsRequest recommendationsRequest = GetRecommendationsRequest.builder() .campaignArn(campaignArn) .numResults(20) .userId(userId) .build(); GetRecommendationsResponse recommendationsResponse = personalizeRuntimeClient.getRecommendations(recommendationsRequest); List<PredictedItem> items = recommendationsResponse.itemList(); for (PredictedItem item: items) { System.out.println("Item Id is : "+item.itemId()); System.out.println("Item score is : "+item.score()); } } catch (AwsServiceException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

使用上下文元数据获取建议 (AmazonPython 开发工具包)

使用以下代码,根据上下文元数据获取建议。适用于context,为每个键值对提供元数据字段作为键,并提供上下文数据作为值。在下面的示例代码中,关键是DEVICE并且值为mobile phone。替换这些值和Campaign ARNUser ID用自己的值。将显示为用户推荐的项目的列表。

import boto3 personalizeRt = boto3.client('personalize-runtime') response = personalizeRt.get_recommendations( campaignArn = 'Campaign ARN', userId = 'User ID', context = { 'DEVICE': 'mobile phone' } ) print("Recommended items") for item in response['itemList']: print (item['itemId'])

获得个性化排名

个性化排名是为特定用户重新排名的推荐项目的列表。要获得个性化排名,请调用GetPersonalizedRankingAPI 操作或从控制台中的市场活动中获取推荐。

注意

必须已使用 PERSONALIZED_RANKING 类型的配方创建支持市场活动的解决方案。有关更多信息,请参阅第 1 步:选择配方

评分的工作原理

GetRecommendations 操作返回的分数相似, GetPersonalizedRanking 分数总和为 1,但由于所考虑项目的列表比您的完整项目数据集小得多,因此推荐分数往往更高。

在数学上,GetPersonalizedRanking 的评分函数与 GetRecommendations 相同,但它只考虑输入项目。这意味着分数接近 1 的可能性更高,因为将分数进行划分的其他选择更少:

获取个性化排名(控制台)

要从 Amazon 个性化控制台获取用户的个性化排名,请选择您正在使用的广告活动,然后提供他们的用户 ID,指定您希望为该用户排名的项目列表,可选择筛选器,并根据需要提供任何上下文数据。

获得用户个性化排名

  1. 从打开 Amazon Personalize 控制台https://console.aws.amazon.com/personalize/home并登录您的账户。

  2. 选择包含您正在使用的市场活动的数据集组。

  3. 在导航窗格中,选择 Campaigns (活动)

  4. 在存储库的活动页面上,选择目标广告活动。

  5. UDER测试活动结果中,输入User ID (用户 ID)对于要获得其建议的用户。

  6. 适用于项目 ID中,输入要为用户排名的项目列表。

  7. (可选)选择筛选器。有关更多信息,请参阅筛选建议

  8. 如果您的广告活动使用上下文元数据(有关要求,请参阅使用上下文元数据提高建议相关性)可以选择提供上下文数据。

    对于每个上下文,对于密钥中,输入元数据字段,然后对于中,输入上下文数据。

  9. 选择获取个性化商品排名。此时将显示一个表格,其中包含按用户预测兴趣顺序排列的项目。

获得个性化排名 (Amazon开发工具包)

以下代码演示如何通过Amazon SDK for Python (Boto3)或者Amazon SDK for Java 2.x。

SDK for Python (Boto3)

使用以下get_personalized_ranking方法可以通过适用于 Python 的开发工具包(Boto3)获得个性化排名。更改的值userIdinputList设置为用户 ID 及项目 ID 列表,以及要为用户排名的项目 ID 列表。项目 ID 必须位于用于训练解决方案的用户所用的数据中。这将显示已排名的推荐的列表。Amazon Personalize 会考虑用户最感兴趣的列表中的第一个项目。

import boto3 personalizeRt = boto3.client('personalize-runtime') response = personalizeRt.get_personalized_ranking( campaignArn = "Campaign arn", userId = "UserID", inputList = ['ItemID1','ItemID2'] ) print("Personalized Ranking") for item in response['personalizedRanking']: print (item['itemId'])
SDK for Java 2.x

使用以下getRankedRecs方法可以通过适用于 Java 2.x 的开发工具包获得个性化排名。传递以下参数:Amazon Personalize 运行时客户端、广告活动的亚马逊资源名称 (ARN)、用户的用户 ID 以及要为用户排名的商品 ID 列表。项目 ID 必须位于用于训练解决方案的数据中。该方法返回从最相关到最不相关的推荐项目列表。

public static List<PredictedItem> getRankedRecs(PersonalizeRuntimeClient personalizeRuntimeClient, String campaignArn, String userId, ArrayList<String> items) { try { GetPersonalizedRankingRequest rankingRecommendationsRequest = GetPersonalizedRankingRequest.builder() .campaignArn(campaignArn) .userId(userId) .inputList(items) .build(); GetPersonalizedRankingResponse recommendationsResponse = personalizeRuntimeClient.getPersonalizedRanking(rankingRecommendationsRequest); List<PredictedItem> rankedItems = recommendationsResponse.personalizedRanking(); int rank = 1; for (PredictedItem item : rankedItems) { System.out.println("Item ranked at position " + rank + " details"); System.out.println("Item Id is : " + item.itemId()); System.out.println("Item score is : " + item.score()); System.out.println("---------------------------------------------"); rank++; } return rankedItems; } catch (PersonalizeRuntimeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return null; }

使用上下文元数据获取个性化排名(AmazonPython 开发工具包)

使用以下代码,根据上下文元数据获取个性化排名。适用于context,为每个键值对提供元数据字段作为键,并提供上下文数据作为值。在下面的示例代码中,关键是DEVICE并且值为mobile phone。替换这些值和Campaign ARNUser ID用自己的值。同时更改inputList添加到您用于训练解决方案的数据中的项目 ID 列表。Amazon Personalize 会考虑用户最感兴趣的列表中的第一个项目。

import boto3 personalizeRt = boto3.client('personalize-runtime') response = personalizeRt.get_personalized_ranking( campaignArn = "Campaign ARN", userId = "User ID", inputList = ['ItemID1', 'ItemID2'], context = { 'DEVICE': 'mobile phone' } ) print("Personalized Ranking") for item in response['personalizedRanking']: print(item['itemId'])

个性化排名示例笔记本

有关演示如何使用个性化排名配方的 Jupyter 笔记本示例,请参阅Personalize 排名示例