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

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

筛选实时建议

您可以使用 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. 选择完成。筛选器的概述页面显示筛选器的 Amazon 资源名称 (ARN)、状态和完整的筛选器表达式。要删除筛选器,请选择删除。有关在离开概述页面后查找和删除筛选器的信息,请参阅删除筛选器(控制台)

    使用筛选器的 ARN 和表达式描绘筛选器详情页面。

应用筛选器(控制台)

要应用筛选条件,请在测试推荐器(针对推荐器)或测试市场活动结果(针对自定义市场活动)中,选择筛选条件并输入任何筛选条件参数值。然后,获取针对用户的建议。

重要

对于使用 INCLUDE 元素的筛选条件表达式,您必须为表达式中定义的所有参数提供值。对于带有使用 EXCLUDE 元素的表达式的筛选条件,您可以省略 filter-values。在本例中,Amazon Personalize 未使用表达式的这一部分来筛选建议。

应用筛选器(控制台)
  1. 打开 Amazon Personalize 控制台(网址为 https://console.aws.amazon.com/personalize/home),并登录您的账户。

  2. 选择包含要用于获取筛选建议的市场活动或推荐器的数据集组。

  3. 根据数据集组类型或资源类型,执行以下任一操作:

    1. 对于域数据集组,在导航窗格中选择推荐器

    2. 对于自定义数据集组或自定义资源,在导航窗格中选择自定义资源,然后选择市场活动

  4. 推荐器或市场活动页面上,选择目标推荐器或市场活动。

  5. 为了进行比较,请先在不应用筛选条件的情况下获取建议。在测试推荐器/测试市场活动结果下,输入您要获取其建议的用户的 ID 或相关物品的物品 ID,然后选择获取建议。此时将显示一个包含前几项建议的表。

    在不应用筛选条件的情况下描绘推荐结果。
  6. 筛选器名称菜单中,选择您创建的筛选器。如果您的筛选器有任何占位符参数,则会显示每个参数的关联字段。

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

  8. 使用与上一步相同的 User IDItem ID,选择获取建议。此时将显示建议表。

    描绘应用过滤器的推荐结果。

    例如,如果用户已经购买了建议的物品,筛选条件会将其从建议列表中删除。在本示例中,物品 2657、2985 被用户未购买的最合适的物品(物品 2641 和 1573)所取代。

使用筛选器表达式生成器

创建筛选器” 页面上的表达式生成器提供了用于构建格式正确的过滤器的结构、字段和指南。

描绘了创建筛选器页面上表达式生成器的字段。

构建筛选器表达式:

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

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

    用英文逗号分隔多个非参数值。不能向筛选器中添加以逗号分隔的参数。

    注意

    选择属性dataset.field 格式)后,由 ANDOR 条件链接的任何后续行的属性值都必须使用相同的 dataset

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

  • 对于新行,使用 AND 菜单上的 ANDIFOR 运算符来创建条件链。

    对于 IF 条件:

    • 每个表达式只能包含一个 IF 项。如果删除 IF 条件,则表达式生成器会删除其后的所有 AND 条件。

    • 只能对按 CurrentUser 筛选的表达式使用 IF 条件。

  • 选择添加表达式按钮,以添加其它筛选条件表达式来进行更精确的筛选。首先对每个表达式进行独立评估,产生的结果是两个结果的并集。

    注意

    要创建同时使用物品数据集和交互数据集(或操作数据集和操作交互数据集)的筛选条件,必须使用多个表达式。

表达式生成器示例

以下示例说明如何构建筛选器,以排除含有在获得建议时指定的类型的物品(注意 $GENRES 占位符参数)。该筛选器还会排除 DOWNLOAD_COUNT 超过 200 的物品,但前提是当前用户的年龄超过 17

演示如何使用表达式生成器生成示例过滤器表达式。

删除筛选器(控制台)

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

重要

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

删除筛选器(控制台)
  1. 打开 Amazon Personalize 控制台(网址为 https://console.aws.amazon.com/personalize/home),并登录您的账户。

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

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

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

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

筛选实时建议 (Amazon CLI)

要使用筛选推荐 Amazon CLI,您可以创建一个筛选条件,然后通过在GetRecommendationsGetPersonalizedRanking请求中指定筛选条件 ARN 来应用该过滤器 ARN。

重要

要使用带有参数的筛选器和您在 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。记下该 ARN 供将来使用。要验证筛选器是否处于活动状态,请在使用筛选器之前使用 DescribeFilter 操作。

有关该 API 的更多信息,请参阅CreateFilter。有关筛选器表达式的更多信息(包括示例),请参阅筛选条件表达式结构和元素

应用筛选器 (Amazon CLI)

使用 get-recommendationsget-action-recommendationsget-personalized-ranking 操作时,您通过将 filter-arn 和任何筛选条件值作为参数传递,应用筛选条件。

以下是 get-recommendations 操作的示例。将 Campaign ARN 替换为市场活动的 Amazon 资源名称 (ARN),将 User ID 替换为要获得建议的用户的 ID,将 Filter ARN 替换为筛选器的 ARN。如果您从推荐器(而不是市场活动)获得建议,请使用 recommender-arn(而不是 --campaign-arn),并提供推荐器的 ARN。

如果您的表达式含有任何参数,请包含 filter-values 对象。对于筛选器表达式中的每个参数,提供参数名称(区分大小写)和值。例如,如果您的筛选器表达式具有 $GENRE 参数,请提供 "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 操作。将 filter ARN 替换为筛选器的 ARN。

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

筛选实时推荐 (Amazon SDK)

要使用 Amazon 软件开发工具包筛选推荐,您可以创建一个过滤器,然后通过在或请求中GetRecommendations指定过滤器 ARN 来应用该过滤器 ARN。GetPersonalizedRanking

重要

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

创建过滤器 (Amazon SDK)

使用 CreateFilter 操作创建新筛选器。以下代码展示了如何创建筛选器。指定筛选器名称、数据集组的 Amazon 资源名称 (ARN),并提供筛选器表达式。

SDK for Python (Boto3)
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)
SDK for Java 2.x
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 ""; }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { CreateFilterCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the filter's parameters. export const createFilterParam = { datasetGroupArn: 'DATASET_GROUP_ARN', /* required */ name: 'NAME', /* required */ filterExpression: 'FILTER_EXPRESSION' /*required */ } export const run = async () => { try { const response = await personalizeClient.send(new CreateFilterCommand(createFilterParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

记录筛选器 ARN 以备后用。要验证筛选器是否处于活动状态,请在使用筛选器之前使用 DescribeFilter 操作。有关该 API 的更多信息,请参阅CreateFilter。有关筛选器表达式的更多信息(包括示例),请参阅筛选条件表达式结构和元素

应用过滤器 (Amazon SDK)

使用 GetRecommendations、或 GetPersonalizedRanking 操作时 GetActionRecommendations,通过传递 a filterArn 和任意筛选值作为参数来应用过滤器。

以下代码展示了如何为用户获取经过筛选的 Amazon Personalize 物品建议。指定要获取建议的用户的 ID、市场活动的 Amazon 资源名称 (ARN),以及筛选器的 ARN。如果您从推荐器(而不是市场活动)获得建议,请使用 recommenderArn(而不是 campaignArn),并提供推荐器的 ARN。

对于 filterValues,对于筛选器表达式中的每个可选参数,提供参数名称(区分大小写)和一个或多个值。例如,如果您的筛选器表达式具有 $GENRES 参数,请提供 "GENRES" 作为键,并提供一个或多个类型(例如 "\"Comedy"\")作为值。对于多个值,用英文逗号分隔每个值。例如,"\"comedy\",\"drama\",\"horror\""

重要

对于使用 INCLUDE 元素来包含物品的筛选器表达式,您必须为表达式中定义的所有参数提供值。对于带有使用 EXCLUDE 元素排除物品的表达式的筛选器,您可以省略 filter-values。在本例中,Amazon Personalize 未使用表达式的这一部分来筛选建议。

SDK for Python (Boto3)
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

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

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); } }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { GetRecommendationsCommand } from "@aws-sdk/client-personalize-runtime"; import { personalizeRuntimeClient } from "./libs/personalizeClients.js"; // Or, create the client here: // const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"}); // Set recommendation request parameters. export const getRecommendationsParam = { campaignArn: 'CAMPAIGN_ARN', /* required */ userId: 'USER_ID', /* required */ numResults: 15, /* optional */ filterArn: 'FILTER_ARN', /* required to filter recommendations */ filterValues: { "PROPERTY": "\"VALUE\"" /* Only required if your filter has a placeholder parameter */ } } export const run = async () => { try { const response = await personalizeRuntimeClient.send(new GetRecommendationsCommand(getRecommendationsParam)); console.log("Success!", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

删除过滤器(Amazon Python 开发工具包)

要删除筛选器,请使用以下 delete_filter 方法。将 filter ARN 替换为筛选器的 ARN。

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