

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定自動訓練
<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 SDKs設定自動訓練。如需使用 主控台設定自動訓練的步驟，請參閱 [建立解決方案 （主控台）](create-solution.md#configure-solution-console)。

建立解決方案之後，請記錄解決方案 ARN 以供日後使用。透過自動訓練，解決方案版本建立會在解決方案為 ACTIVE 後的一小時內開始。如果您在一小時內手動建立解決方案版本，解決方案會略過第一個自動訓練。訓練開始後，您可以使用 [ListSolutionVersions](https://docs.aws.amazon.com/personalize/latest/dg/API_ListSolutionVersions.html) API 操作取得解決方案版本的 Amazon Resource Name (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)
+ [

## 設定自動訓練 SDKs)
](#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 只會在下一次訓練後考慮建議的新項目。例如，如果您每天使用類似項目配方並新增項目，您必須使用每日自動訓練頻率，這些項目才能在同一天出現在建議中。

## 設定自動訓練 (AWS CLI)
<a name="configure-solution-auto-training-cli"></a>

下列程式碼說明如何建立每五天自動建立解決方案版本的解決方案。若要關閉自動訓練，請將 `perform-auto-training`設定為 `false`。

若要變更訓練頻率，您可以在 `schedulingExpression`中修改 `autoTrainingConfig`。表達式的`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)\"}}"
```

## 設定自動訓練 SDKs)
<a name="configure-solution-auto-training-sdk"></a>

下列程式碼說明如何使用 AWS SDKs建立具有自動訓練的解決方案。解決方案每五天會自動建立解決方案版本。若要關閉自動訓練，請將 `performAutoTraining`設定為 `false`。

若要變更訓練頻率，您可以在 `schedulingExpression`中修改 `autoTrainingConfig`。表達式的`rate(value unit)`格式必須是 。針對 值，指定介於 1 到 30 之間的數字。針對 單位，指定 `day`或 `days`。

如需 CreateSolution API 操作的完整說明，請參閱 [建立解決方案AWS SDKs)](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)
```