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

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

创建推荐器 (Amazon SDK)

创建域数据集组并导入数据后,您可以为域使用案例创建推荐器。推荐器 是生成建议的域数据集组资源。

对于所有使用案例,您可以配置训练时使用的列。有关更多信息,请参阅配置训练时使用的列。对于 Top picks for yourRecommended for you 使用案例,Amazon Personalize 在推荐物品时使用浏览。有关更多信息,请参阅配置浏览

创建推荐器

使用以下代码为域使用案例创建推荐器。为推荐器命名,并提供域数据集组的 Amazon 资源名称 (ARN)。对于 recipeArn,为您的使用案例提供 ARN。针对您的每个域使用案例运行此代码。可用的使用案例取决于您的域。有关使用案例、其 ARN 及其要求的列表,请参阅选择使用案例

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') create_recommender_response = personalize.create_recommender( name = 'recommender name', recipeArn = 'recipe ARN', datasetGroupArn = 'dataset group ARN' ) recommender_arn = create_recommender_response['recommenderArn'] print('Recommender ARN:' + recommender_arn)
SDK for Java 2.x
public static String createRecommender(PersonalizeClient personalizeClient, String name, String datasetGroupArn, String recipeArn) { long maxTime = 0; long waitInMilliseconds = 30 * 1000; // 30 seconds String recommenderStatus = ""; try { CreateRecommenderRequest createRecommenderRequest = CreateRecommenderRequest.builder() .datasetGroupArn(datasetGroupArn) .name(name) .recipeArn(recipeArn) .build(); CreateRecommenderResponse recommenderResponse = personalizeClient .createRecommender(createRecommenderRequest); String recommenderArn = recommenderResponse.recommenderArn(); System.out.println("The recommender ARN is " + recommenderArn); DescribeRecommenderRequest describeRecommenderRequest = DescribeRecommenderRequest.builder() .recommenderArn(recommenderArn) .build(); maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; while (Instant.now().getEpochSecond() < maxTime) { recommenderStatus = personalizeClient.describeRecommender(describeRecommenderRequest).recommender() .status(); System.out.println("Recommender status: " + recommenderStatus); if (recommenderStatus.equals("ACTIVE") || recommenderStatus.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return recommenderArn; } catch (PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
SDK for JavaScript v3
// Get service clients and commands using ES6 syntax. import { CreateRecommenderCommand, PersonalizeClient } from "@aws-sdk/client-personalize"; // create personalizeClient const personalizeClient = new PersonalizeClient({ region: "REGION" }); // set the recommender's parameters export const createRecommenderParam = { name: "RECOMMENDER_NAME", /* required */ recipeArn: "RECIPE_ARN", /* required */ datasetGroupArn: "DATASET_GROUP_ARN" /* required */ } export const run = async () => { try { const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

配置浏览

对于 Top picks for yourRecommended for you 使用案例,Amazon Personalize 在推荐物品时使用浏览。浏览包括测试不同的物品建议,以了解用户如何对交互数据很少的物品做出响应。您可以使用以下方式配置浏览:

  • 重点浏览不太相关的物品(浏览权重)- 配置要浏览的程度。指定 0 到 1 之间的十进制值。默认值为 0.3。值越接近 1,浏览次数就越多。浏览次数越多,建议包括的物品就越多,这些物品具有的物品交互数据更少或基于先前行为的相关性更低。如果值为零,则表示没有浏览,建议基于当前数据(相关性)。

  • 浏览物品使用期限截止时间 - 指定自物品交互数据集中所有物品最近一次交互以来的最大物品使用期限(以天为单位)。这会根据物品使用期限定义物品浏览的范围。Amazon Personalize 根据物品的创建时间戳或物品交互数据(如果缺少创建时间戳数据)来确定物品使用期限。有关 Amazon Personalize 如何确定物品使用期限的更多信息,请参阅创建时间戳数据

    要增加 Amazon Personalize 在浏览期间考虑的物品数量,请输入更大的值。最小值为 1 天,默认值为 30 天。建议可能包括比您指定的物品使用期限截止时间更早的物品。这是因为这些物品与用户相关,而浏览并未识别出它们。

以下代码显示了如何在创建推荐器时配置浏览。本示例使用了默认值。

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') create_recommender_response = personalize.create_recommender( name = 'recommender name', recipeArn = 'arn:aws:personalize:::recipe/aws-vod-top-picks', datasetGroupArn = 'dataset group ARN', recommenderConfig = {"itemExplorationConfig": {"explorationWeight": "0.3", "explorationItemAgeCutOff": "30"}} ) recommender_arn = create_recommender_response['recommenderArn'] print('Recommender ARN:' + recommender_arn)
SDK for JavaScript v3
// Get service clients and commands using ES6 syntax. import { CreateRecommenderCommand, PersonalizeClient } from "@aws-sdk/client-personalize"; // create personalizeClient const personalizeClient = new PersonalizeClient({ region: "REGION" }); // set the recommender's parameters export const createRecommenderParam = { name: "RECOMMENDER_NAME", /* required */ recipeArn: "RECIPE_ARN", /* required */ datasetGroupArn: "DATASET_GROUP_ARN", /* required */ recommenderConfig: { itemExplorationConfig: { explorationWeight: "0.3", explorationItemAgeCutOff: "30" } } }; export const run = async () => { try { const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

配置训练时使用的列

您可以修改 Amazon Personalize 在训练支持推荐器的模型时考虑的列。默认情况下,Amazon Personalize 使用可在训练时采用的所有列。不使用布尔数据类型和自定义非分类字符串字段的列。您无法排除 EVENT_TYPE 列。

您可以更改训练时使用的列,以控制 Amazon Personalize 在创建推荐器时使用的数据。您可以这样做,以试验不同的训练数据组合;也可以排除无有意义数据的列。例如,可能有一列,您只想将其用来筛选建议。您可以将此列排除在训练之外,Amazon Personalize 只有在筛选时才会考虑该列。

要将列排除在训练之外,请在推荐器配置期间,在 trainingDataConfig 中提供 excludedDatasetColumns 对象。对于每个键,提供数据集类型。对于每个值,提供要排除的列的列表。以下代码显示了如何在创建推荐器时将列排除在训练之外。

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') create_recommender_response = personalize.create_recommender( name = 'recommender name', recipeArn = 'recipe name', datasetGroupArn = 'dataset group ARN', recommenderConfig = { "trainingDataConfig": { "excludedDatasetColumns": { "datasetType": ["COLUMN_A", "COLUMN_B"] } } } ) recommender_arn = create_recommender_response['recommenderArn'] print('Recommender ARN:' + recommender_arn)
SDK for JavaScript v3
// Get service clients and commands using ES6 syntax. import { CreateRecommenderCommand, PersonalizeClient } from "@aws-sdk/client-personalize"; // create personalizeClient const personalizeClient = new PersonalizeClient({ region: "REGION" }); // set the recommender's parameters export const createRecommenderParam = { name: "RECOMMENDER_NAME", /* required */ recipeArn: "RECIPE_ARN", /* required */ datasetGroupArn: "DATASET_GROUP_ARN", /* required */ recommenderConfig: { trainingDataConfig: { excludedDatasetColumns: { "DATASET_TYPE": ["COLUMN_A", "COLUMN_B"] } } } }; export const run = async () => { try { const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

启用元数据

如果您有物品数据集,并且希望该选项在您获得建议时包含元数据,请在 recommender-config 中将 enableMetadataWithRecommendations 设置为 true

import boto3 personalize = boto3.client('personalize') create_recommender_response = personalize.create_recommender( name = 'recommender name', recipeArn = 'recipe name', datasetGroupArn = 'dataset group ARN', recommenderConfig = {"enableMetadataWithRecommendations": True} ) recommender_arn = create_recommender_response['recommenderArn'] print('Recommender ARN:' + recommender_arn)