配置自动训练 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

配置自动训练

重要

默认情况下,所有新解决方案都使用自动训练。如果使用自动训练,则在解决方案处于活动状态时,就会产生训练费用。为避免产生不必要的费用,在完成后,可以更新解决方案以关闭自动训练。有关训练费用的信息,请参阅 Amazon Personalize 定价

创建解决方案时,您可以配置解决方案是否使用自动训练。还可以配置训练频率。例如,您可以将解决方案配置为每五天创建一个新的解决方案版本。

默认情况下,所有新解决方案都使用自动训练,每 7 天创建一个新的解决方案版本。只有在自上次训练以来导入了批量交互数据或实时交互数据时,才会进行自动训练。这包括项目交互,或者对于使用 Next-Best-Action配方的解决方案,包括操作交互数据。自动训练会持续运行,直到您删除解决方案。

我们建议您使用自动训练。自动训练使维护解决方案变得更加容易。有了自动训练,解决方案从最新数据中学习就不再需要手动训练。如果没有自动训练,则必须手动为解决方案创建新的解决方案版本,这样才能从最新数据中学习。没有自动训练会导致推荐内容过时和转化率下降。有关维护 Amazon Personalize 推荐的更多信息,请参阅维护建议相关性

您可以使用 Amazon Personalize 控制台 Amazon Command Line Interface (Amazon CLI)或配置自动培训 Amazon SDKs。有关使用控制台配置自动训练的步骤,请参阅创建解决方案(控制台)

创建解决方案后,记录解决方案ARN以备将来使用。通过自动训练,解决方案版本的创建将在解决方案发布后的一小时内开始ACTIVE。如果您在一小时内手动创建解决方案版本,则解决方案会跳过第一次自动训练。训练开始后,您可以通过ListSolutionVersionsAPI操作获取解决方案版本的 Amazon 资源名称 (ARN)。要获取其状态,请使用DescribeSolutionVersionAPI操作。

指南和要求

以下是自动训练的准则和要求:

  • 只有在自上次训练以来导入了批量交互数据或实时交互数据时,才会进行自动训练。这包括项目交互,或者对于使用 Next-Best-Action配方的解决方案,包括操作交互数据。

  • 每次训练都会考虑包括在训练中的数据集组中的所有数据。有关配置训练中所用列的信息,请参阅配置训练时使用的列

  • 您仍然可以手动创建解决方案版本。

  • 解决方案处于活动状态后的一小时内,自动训练会开始。如果您在一小时内手动创建解决方案版本,则解决方案会跳过第一次自动训练。

  • 训练计划基于训练开始日期。例如,如果第一个解决方案版本在晚上 7:00 开始训练,而您使用的是每周训练,那么下一个解决方案版本将在一周后的晚上 7:00 开始训练。

  • 对于所有配方,我们建议至少每周进行一次训练。您可以指定介于 1 天和 30 天之间的训练频率。默认为每 7 天进行一次训练。

    • 如果您使用 User-Personalization-v 2、用户个性化或 Next-Best-Action,则解决方案会自动更新,以考虑将新项目或操作作为推荐。自动更新与自动训练不同。自动更新不会创建全新的解决方案版本,模型也不会从最新数据中学习。为了维持您的解决方案,训练频率仍然应该是至少每周一次。有关自动更新的更多信息(包括其他准则和要求),请参阅自动更新

    • 如果您使用 Trending-Now,则 Amazon Personalize 会在可配置的时间间隔内自动识别交互数据中最热门的物品。Trending-Now 可以通过批量交互数据或流式处理交互数据推荐自上次训练以来添加的物品。您的训练频率仍然应该是至少每周一次。有关更多信息,请参阅 Trending-Now 食谱

    • 如果您不使用具有自动更新的配方或 Trending-Now 配方,则 Amazon Personalize 仅在下一次训练之后考虑在推荐中加入新物品。例如,如果您使用 Similar-Items 配方并每天添加新物品,则必须使用每日自动训练频率,这些物品才会出现在当天的推荐中。

配置自动训练(Amazon CLI)

以下代码向您展示了如何创建每五天自动创建解决方案版本的解决方案。要关闭自动训练,请将 perform-auto-training 设置为 false

要更改训练频率,可以修改 autoTrainingConfig 中的 schedulingExpression。表达式必须采用以下格式:rate(value unit)。对于值,指定一个介于 1 和 30 之间的数字。对于单位,请指定 daydays

有关 create-solution 命令的详细说明,请参阅创建解决方案 (Amazon CLI)

aws personalize create-solution \ --name solution name \ --dataset-group-arn dataset group ARN \ --recipe-arn recipe ARN \ --perform-auto-training \ --solution-config "{\"autoTrainingConfig\": {\"schedulingExpression\": \"rate(5 days)\"}}"

配置自动训练(SDKs)

以下代码向您展示了如何使用自动训练来创建解决方案 Amazon SDKs。该解决方案每五天自动创建一个解决方案版本。要关闭自动训练,请将 performAutoTraining 设置为 false

要更改训练频率,可以修改 autoTrainingConfig 中的 schedulingExpression。表达式必须采用以下格式:rate(value unit)。对于值,指定一个介于 1 和 30 之间的数字。对于单位,请指定 daydays

有关该 CreateSolution API操作的完整说明,请参阅创建解决方案 (Amazon SDKs)

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') create_solution_response = personalize.create_solution( name = 'solution name', recipeArn = 'recipe ARN', datasetGroupArn = 'dataset group ARN', performAutoTraining = True, solutionConfig = { "autoTrainingConfig": { "schedulingExpression": "rate(5 days)" } } ) solution_arn = create_solution_response['solutionArn'] print('solution_arn: ', solution_arn)
SDK for JavaScript v3
import { CreateSolutionCommand, PersonalizeClient, } from "@aws-sdk/client-personalize"; // create client const personalizeClient = new PersonalizeClient({ region: "REGION" }); // set the solution parameters export const solutionParam = { datasetGroupArn: "DATASET_GROUP_ARN" /* required */, recipeArn: "RECIPE_ARN" /* required */, name: "SOLUTION_NAME" /* required */, performAutoTraining: true /* optional, default is true */, solutionConfig: { autoTrainingConfig: { schedulingExpression: "rate(5 days)" /* optional, default is every 7 days */, }, }, }; export const run = async () => { try { const response = await personalizeClient.send( new CreateSolutionCommand(solutionParam) ); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

您可以使用以下 Python 代码来等待自动训练开始。该wait_for_training_to_start方法返回第一个解决方案版本的。ARN

import time import boto3 def wait_for_training_to_start(new_solution_arn): max_time = time.time() + 3 * 60 * 60 # 3 hours while time.time() < max_time: list_solution_versions_response = personalize.list_solution_versions( solutionArn=new_solution_arn ) solution_versions = list_solution_versions_response.get('solutionVersions', []) if solution_versions: new_solution_version_arn = solution_versions[0]['solutionVersionArn'] print(f"Solution version ARN: {new_solution_version_arn}") return new_solution_version_arn else: print(f"Training hasn't started yet. Training will start within the next hour.") time.sleep(60) personalize = boto3.client('personalize') solution_arn = "solution_arn" solution_version_arn = wait_for_training_to_start(solution_arn)