

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

# 配置自动训练
<a name="solution-config-auto-training"></a>

**重要**  
默认情况下，所有新解决方案都使用自动训练。如果使用自动训练，则在解决方案处于活动状态时，就会产生训练费用。为避免产生不必要的费用，在完成后，可以[更新解决方案](updating-solution.md)以关闭自动训练。有关训练费用的信息，请参阅 [Amazon Personalize 定价](https://aws.amazon.com/personalize/pricing/)。

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

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

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

您可以使用 Amazon Personalize 控制台、AWS Command Line Interface（AWS CLI）或 AWS SDK 来配置自动训练。有关使用控制台配置自动训练的步骤，请参阅[创建解决方案（控制台）](create-solution.md#configure-solution-console)。

创建解决方案后，记录解决方案 ARN 以备将来使用。通过自动训练，解决方案处于活动状态后，解决方案版本的创建将在一小时内开始。如果您在一小时内手动创建解决方案版本，则解决方案会跳过第一次自动训练。训练开始后，您可以通过 [ListSolutionVersions](https://docs.aws.amazon.com/personalize/latest/dg/API_ListSolutionVersions.html) API 操作获取解决方案版本的 Amazon 资源名称（ARN）。要获取其状态，请使用 [DescribeSolutionVersion](https://docs.aws.amazon.com/personalize/latest/dg/API_DescribeSolutionVersion.html) API 操作。

**Topics**
+ [指南和要求](#auto-training-guidelines)
+ [配置自动训练（AWS CLI）](#configure-solution-auto-training-cli)
+ [配置自动训练（SDK）](#configure-solution-auto-training-sdk)

## 指南和要求
<a name="auto-training-guidelines"></a>

以下是自动训练的准则和要求：
+  只有在自上次训练以来导入了批量交互数据或实时交互数据时，才会进行自动训练。这包括物品交互，或者对于使用 Next-Best-Action 配方的解决方案，包括操作交互数据。
+ 每次训练都会考虑包括在训练中的数据集组中的所有数据。有关配置训练中所用列的信息，请参阅[配置训练时使用的列](custom-config-columns.md)。
+ 您仍然可以手动创建解决方案版本。
+ 解决方案处于活动状态后的一小时内，自动训练会开始。如果您在一小时内手动创建解决方案版本，则解决方案会跳过第一次自动训练。
+ 训练计划基于训练开始日期。例如，如果第一个解决方案版本在晚上 7:00 开始训练，而您使用的是每周训练，那么下一个解决方案版本将在一周后的晚上 7:00 开始训练。
+ 对于所有配方，我们建议至少每周进行一次训练。您可以指定介于 1 天和 30 天之间的训练频率。默认为每 7 天进行一次训练。
  +  如果您使用 User-Personalization-v2、User-Personalization 或 Next-Best-Action，则解决方案会自动更新为考虑在推荐中加入新物品或操作。自动更新与自动训练不同。自动更新不会创建全新的解决方案版本，模型也不会从最新数据中学习。为了维持您的解决方案，训练频率仍然应该是至少每周一次。有关自动更新的更多信息（包括其他准则和要求），请参阅[自动更新](use-case-recipe-features.md#automatic-updates)。
  + 如果您使用 Trending-Now，则 Amazon Personalize 会在可配置的时间间隔内自动识别交互数据中最热门的物品。Trending-Now 可以通过批量交互数据或流式处理交互数据推荐自上次训练以来添加的物品。您的训练频率仍然应该是至少每周一次。有关更多信息，请参阅 [Trending-Now 食谱](native-recipe-trending-now.md)。
  + 如果您不使用具有自动更新的配方或 Trending-Now 配方，则 Amazon Personalize 仅在下一次训练之后考虑在推荐中加入新物品。例如，如果您使用 Similar-Items 配方并每天添加新物品，则必须使用每日自动训练频率，这些物品才会出现在当天的推荐中。

## 配置自动训练（AWS CLI）
<a name="configure-solution-auto-training-cli"></a>

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

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

有关 `create-solution` 命令的详细说明，请参阅[创建解决方案 (AWS CLI)](create-solution.md#configure-solution-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)\"}}"
```

## 配置自动训练（SDK）
<a name="configure-solution-auto-training-sdk"></a>

以下代码向您展示了如何使用 AWS SDK 创建带有自动训练的解决方案。该解决方案每五天自动创建一个解决方案版本。要关闭自动训练，请将 `performAutoTraining` 设置为 `false`。

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

有关 CreateSolution API 操作的详细说明，请参阅[创建解决方案 (AWS SDK)](create-solution.md#configure-solution-sdk)。

------
#### [ 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)
```