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

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

筛选实时建议

您可以使用 Amazon Personalize 控制台筛选实时建议Amazon Command Line Interface(Amazon CLI),或Amazon开发工具包。

筛选实时建议(控制台)

要使用控制台筛选实时建议,请创建筛选器,然后将其应用于建议请求。

注意

要使用包含参数的筛选器和您在 2020 年 11 月 10 日之前部署的市场活动来筛选建议,您必须使用UpdateCampaign操作或创建新活动。

创建筛选条件(控制台)

要在控制台中创建筛选器,请选择包含要筛选结果的市场活动的数据集组,然后提供筛选器名称和筛选器表达式。

创建筛选条件(控制台)

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

  2. 选择包含要筛选结果的市场活动的数据集组。

  3. 在导航页面中,选择筛选条件,然后选择创建新筛选条件。这些区域有:创建筛选条件页面随即显示。

  4. 适用于筛选器名称中,输入筛选条件的名称。当您将筛选器应用于建议请求时,您将按此名称选择筛选器。

  5. 适用于表达式中,选择生成表达式或者手动添加表达式并构建或插入您的表达式:

    • 要使用表达式构建器,请选择生成表达式。表达式生成器提供用于构建格式正确的筛选器表达式的结构、字段和指导原则。有关更多信息,请参阅使用筛选器表达式生成器

    • 要输入您自己的表达式,请选择手动添加表达式。有关更多信息,请参阅筛选表达式元素

  6. 选择 Finish。筛选器的概述页面显示筛选器的 Amazon 资源名称 (ARN)、状态和完整筛选器表达式。要删除筛选器,请选择Delete。有关在离开概述页面后查找和删除筛选器的信息,请参阅删除筛选条件(控制台)

应用筛选条件(控制台)

要应用筛选条件,请在测试活动结果面板中,选择筛选器并输入任何过滤器参数值。然后为用户获取建议。

重要

对于使用INCLUDE元素来包含项目,您必须为表达式中定义的所有参数提供值。对于具有使用EXCLUDE元素排除项目,可以省略filter-values。在这种情况下,Amazon Personalize 不会使用表达式的该部分来筛选建议。

应用筛选条件(控制台)

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

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

  3. 为了进行比较,请先在不应用筛选器的情况下获取给用户的建议。在 Test campaign results (测试市场活动结果) 下,输入要为其获取建议的用户的 ID,然后选择 Get recommendations (获取建议)。此时将显示一个包含用户的前几项建议的表。

  4. 筛选器名称菜单中,选择您创建的筛选器。如果筛选器具有任何占位符参数,则会显示每个参数的关联字段。

  5. 如果要使用带占位符参数的筛选器,请为每个参数输入值以设置筛选条件。要对一个参数使用多个值,请用逗号分隔每个值。

  6. 使用相同的User ID如前面的步骤中所示,请选择获取建议。此时将显示建议表。

    如果用户已经购买了推荐商品,筛选器会将其从建议列表中删除。在此示例中,项目 2657、2985 被用户未购买的最合适的项目(项目 2641 和 1573)替换。

使用筛选器表达式生成器

这些区域有:表达式生成器创建筛选条件页面提供了构建格式正确筛选器的结构、字段和指南

要构建筛选器表达式:

  • 使用操作属性运算符, 和字段创建表达式。

    对于,输入固定值,或者,要在获取建议时设置筛选条件,请输入$+ 一个参数名称。例如:$GENRES。当您收到建议时,您将提供要筛选依据的一个或多个值。在此示例中,您将在获得建议时提供类型或类型列表。

    使用逗号分隔多个非参数值。不能将逗号分隔的参数添加到筛选器。

    注意

    在您选择属性(在dataset.property格式)、属性值链接的任何后续行AND或者OR条件必须使用相同的dataset

  • 使用+X按钮,从表达式中添加或删除行。您无法删除第一行。

  • 对于新行,请使用ANDIF,或者OR运算符菜单创建条件链。

    适用于IF条件:

    • 每个表达式只能包含一个IF项目。如果删除 IF 条件,表达式生成器将删除任何AND后面的条件。

    • 您可以使用IF条件仅适用于通过CurrentUser

  • 选择添加表达式按钮添加额外的过滤器表达式以实现更精确的过滤,包括使用 “项目” 和 “交互” 数据集进行过滤 每个表达式首先被独立评估,结果是两个结果的联合。

    注意

    要创建同时使用 “项目” 和 “交互” 数据集的过滤器,您可以必须使用多个表达式。

表达式生成器示例

以下示例说明如何构建一个过滤器,该过滤器排除具有您在获取建议时指定类型的项目(请注意 $GENRES 占位符参数),并使用DOWNLOAD_COUNT超过200,但仅当当前用户的年龄大于17

删除筛选条件(控制台)

删除筛选器将从数据集组的筛选器列表中移除筛选器。

重要

批量推断作业正在进行时,无法删除筛选器。

删除筛选条件(控制台)

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

  2. 数据集组列表中,选择包含要删除的筛选条件的数据集组。

  3. 在导航窗格中,选择筛选条件

  4. 从筛选条件列表中,选择要删除的筛选条件,然后选择查看详细信息。此时将显示筛选详细信息页面。

  5. 选择Delete并在确认对话框中确认删除。

筛选实时建议 (Amazon CLI)

要使用Amazon CLI,您需要创建一个筛选器,然后通过在GetRecommendations或者GetPersonalizedRanking请求.

重要

要使用包含参数的筛选器和您在 2020 年 11 月 10 日之前部署的市场活动来筛选建议,您必须使用UpdateCampaign调用或创建新活动。

创建筛选条件 (Amazon CLI)

请使用以下:create-filter操作来创建筛选器并指定筛选器表达式。

将替换为Filter name将替换为筛选器的名称,并使用Dataset group ARN替换为数据集组的 Amazon 资源名称 (ARN)。将示例替换为filter-expression使用您自己的过滤器表达式。

aws personalize create-filter \ --name Filter name \ --dataset-group-arn dataset group arn \ --filter-expression "EXCLUDE ItemID WHERE Items.CATEGORY IN (\"$CATEGORY\")"

如果成功,将显示筛选器 ARN。将其录制以备以后使用。要验证筛选器是否处于活动状态,请使用DescribeFilter操作,然后再使用筛选器。

有关该 API 的更多信息,请参阅CreateFilter。有关筛选条件表达式的更多信息(包括示例),请参阅创建筛选表达式

应用筛选条件 (Amazon CLI)

当您使用get-recommendations或者get-personalized-ranking操作,应用过滤器,方法是传递filter-arn和任何过滤器值作为参数。

以下是get-recommendationsoperation. ReplaceCampaign ARN添加广告活动的 Amazon 资源名称 (ARN)、User ID使用您正在获取建议的用户的 ID,Filter ARN与筛选条件的 ARN 一起使用。

如果您的表达式有任何参数,请包含filter-values对象。对于筛选器表达式中的每个参数,请提供参数名称(区分大小写)和值。例如,如果过滤器表达式具有$GENRE参数,提供“流派”作为关键,以及流派或流派,如"Comedy",作为值。使用逗号分隔多个值。例如:"\"comedy\",\"drama\",\"horror"\"

重要

对于使用INCLUDE元素来包含项目,您必须为表达式中定义的所有参数提供值。对于具有使用EXCLUDE元素排除项目,可以省略filter-values。在这种情况下,Amazon Personalize 不会使用表达式的该部分来筛选建议。

aws personalize-runtime get-recommendations \ --campaign-arn Campaign ARN \ --user-id User ID \ --filter-arn Filter ARN \ --filter-values '{ "Parameter name": "\"value\"", "Parameter name": "\"value1\",\"value2\",\"value3\"" }'

删除筛选条件 (Amazon CLI)

请使用以下:delete-filter操作删除筛选条件。Replacefilter ARN使用筛选条件的 ARN。

aws personalize delete-filter --filter-arn Filter ARN

筛选实时建议 (Amazon开发工具包)

要使用Amazon开发工具包,您需要创建筛选器,然后通过在GetRecommendations或者GetPersonalizedRanking请求.

重要

要使用包含参数的筛选器和您在 2020 年 11 月 10 日之前部署的市场活动来筛选建议,您必须使用UpdateCampaign调用或创建新活动。

创建筛选条件 (Amazon开发工具包)

使用创建新筛选条件CreateFilteroperation.

SDK for Python (Boto3)

请使用以下:create_filter方法创建一个过滤器Amazon SDK for Python (Boto3)。ReplaceFilter Name将替换为筛选器的名称,并Dataset Group ARN替换为数据集组的 Amazon 资源名称 (ARN)。替换示例filterExpression使用您自己的过滤器表达式。

import boto3 personalize = boto3.client('personalize') response = personalize.create_filter( name = 'Filter Name', datasetGroupArn = 'Dataset Group ARN', filterExpression = 'EXCLUDE ItemID WHERE Items.CATEGORY IN ($CATEGORY)' ) filter_arn = response["filterArn"] print("Filter ARN: " + filter_arn)

记下筛选器 ARN 以供将来使用。要验证筛选器是否处于活动状态,请使用DescribeFilter操作,然后再使用过滤器。有关该 API 的更多信息,请参阅CreateFilter。有关筛选条件表达式的更多信息(包括示例),请参阅创建筛选表达式

SDK for Java 2.x

以下createFilter方法演示如何使用Amazon SDK for Java 2.x。该方法返回新筛选器的 ARN(亚马逊资源编号)。传递以下作为参数:Amazon Personalize 服务客户端、筛选器的名称、要创建筛选器的数据集组以及筛选器表达式。有关筛选条件表达式的更多信息(包括示例),请参阅创建筛选表达式

public static String createFilter(PersonalizeClient personalizeClient, String filterName, String datasetGroupArn, String filterExpression) { try { CreateFilterRequest request = CreateFilterRequest.builder() .name(filterName) .datasetGroupArn(datasetGroupArn) .filterExpression(filterExpression) .build(); return personalizeClient.createFilter(request).filterArn(); } catch(PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }

应用筛选条件 (Amazon开发工具包)

当您使用get_recommendations或者get_personalized_ranking方法,应用过滤器通过传递filterArn和任何过滤器值作为参数。

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

重要

对于使用INCLUDE元素来包含项目,您必须为表达式中定义的所有参数提供值。对于具有使用EXCLUDE元素排除项目,可以省略filter-values。在这种情况下,Amazon Personalize 不会使用表达式的该部分来筛选建议。

SDK for Python (Boto3)

请使用以下:get_recommendations方法使用适用于 Python 的开发工具包 (Boto3) 筛选建议。ReplaceCampaign ARN添加广告活动的 Amazon 资源名称 (ARN)、User ID使用您正在获取建议的用户的 ID,Filter ARN与筛选条件的 ARN 一起使用。

适用于filterValues,为筛选器表达式中的每个可选参数提供参数名称(区分大小写)和值。例如,如果过滤器表达式具有$GENRES参数,提供“流派”作为关键,以及流派或流派,如"\"Comedy"\",作为值。对于多个值,请用逗号分隔各个值。例如:"\"comedy\",\"drama\",\"horror\""

import boto3 personalize_runtime = boto3.client("personalize-runtime") response = personalize_runtime.get_recommendations( campaignArn = "Campaign ARN", userId = "User ID", filterArn = "Filter ARN", filterValues = { "Parameter name": "\"value1\"", "Parameter name": "\"value1\",\"value2\",\"value3\"" .... } )
SDK for Java 2.x

请使用以下:getFilteredRecs方法将筛选条件应用于 Amazon Personalize 推荐请求。传递以下参数:Amazon Personalize 运行时服务客户端、广告活动的 ARN(Amazon 资源名称)、用户的用户 ID、筛选器的 ARN 以及任何筛选器参数名称(区分大小写)及其值。例如,如果过滤器表达式具有$GENRES参数,提供“流派”作为参数名称。

以下示例使用两个参数,一个具有两个值,另一个具有一个值。根据筛选器表达式,修改代码以添加或删除参数名称和参数值字段。

public static void getFilteredRecs(PersonalizeRuntimeClient personalizeRuntimeClient, String campaignArn, String userId, String filterArn, String parameter1Name, String parameter1Value1, String parameter1Value2, String parameter2Name, String parameter2Value){ try { Map<String, String> filterValues = new HashMap<>(); filterValues.put(parameter1Name, String.format("\"%1$s\",\"%2$s\"", parameter1Value1, parameter1Value2)); filterValues.put(parameter2Name, String.format("\"%1$s\"", parameter2Value)); GetRecommendationsRequest recommendationsRequest = GetRecommendationsRequest.builder() .campaignArn(campaignArn) .numResults(20) .userId(userId) .filterArn(filterArn) .filterValues(filterValues) .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 (PersonalizeRuntimeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

删除筛选条件 (AmazonPython 开发工具包)

请使用以下:delete_filter方法删除筛选条件。Replacefilter ARN使用筛选条件的 ARN。

import boto3 personalize = boto3.client("personalize") response = personalize.delete_filter( filterArn = "filter ARN" )