設定自動訓練 - Amazon Personalize

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

設定自動訓練

重要

根據預設,所有新的解決方案都使用自動訓練。透過自動訓練,您可以在解決方案啟用時產生訓練費用。為了避免不必要的成本,當您完成時,您可以更新解決方案以關閉自動訓練。如需有關訓練費用的資訊,請參閱 Amazon Personalize 定價

當您建立解決方案時,您可以設定解決方案是否使用自動訓練。您也可以設定訓練頻率。例如,您可以將解決方案設定為每五天建立一個新的解決方案版本。

根據預設,所有新的解決方案都會使用自動訓練,每 7 天建立一個新的解決方案版本。自動訓練只有在您從上次訓練後匯入大量或即時互動資料時才會發生。這包括項目互動,或者對於使用「下一個最佳動作」方案的解決方案,則為動作互動資料。自動訓練會繼續進行,直到您刪除解決方案

我們建議您使用自動訓練。它使維護您的解決方案更容易。它會移除解決方案從最新資料中學習所需的手動訓練。如果沒有自動訓練,您必須手動建立解決方案的新版本,以便從最新的資料中學習。這可能會導致過時的建議和較低的轉換率。如需維護 Amazon Personalize 建議的詳細資訊,請參閱維護建議相關性

您可以使用 Amazon Personalize 主控台設定自動訓練, AWS Command Line Interface (AWS CLI),或 AWS SDKs。如需使用主控台設定自動訓練的步驟,請參閱建立解決方案 (主控台)

建立解決方案之後,請記錄解決方案以ARN供 future 使用。透過自動訓練,解決方案版本建立會在解決方案為之後的一個開始ACTIVE。如果您在一小時內手動建立解決方案版本,則解決方案會略過第一個自動訓練。訓練開始後,您可以透過ListSolutionVersionsAPI作業取得解決方案版本的 Amazon 資源名稱 (ARN)。若要取得其狀態,請使用該DescribeSolutionVersionAPI作業。

指引和要求

以下是自動訓練的準則和要求:

  • 自動訓練只有在您從上次訓練後匯入大量或即時互動資料時才會發生。這包括項目互動,或者對於使用「下一個最佳動作」方案的解決方案,則為動作互動資料。

  • 每個訓練都會考慮您在訓練中包含的資料集群組中的所有資料。如需有關配置訓練中使用的欄的資訊,請參閱設定訓練時使用的欄

  • 您仍然可以手動建立解決方案版本。

  • 自動訓練會在解決方案啟用後的一小時內開始。如果您在一小時內手動建立解決方案版本,則解決方案會略過第一個自動訓練。

  • 訓練排程是以訓練開始日期為基礎。例如,如果您的第一個解決方案版本在晚上 7:00 開始訓練,而您使用每週訓練,則下一個解決方案版本將在一週晚上 7:00 開始訓練。

  • 對於所有食譜,我們建議至少每週進行一次訓練頻率。您可以指定 1 到 30 天之間的訓練頻率。預設值為每 7 天一次。

    • 如果您使用使用者個人化-第 2 版、使用者個人化或下一個最佳動作,解決方案會自動更新以考量建議的新項目或動作。自動更新與自動訓練不一樣。自動更新不會建立全新的解決方案版本,而且模型無法從您最新的資料中學習。為了維持您的解決方案,您的訓練頻率至少應該是每週一次。有關自動更新的更多形成,包括其他準則和要求,請參閱自動更新

    • 如果您使用趨勢-現在,Amazon Personalize 會在可設定的時間間隔內自動識別互動資料中最熱門的趨勢項目。趨勢-現在可以通過批量或流式交互數據推薦自上次培訓以來添加的項目。您的訓練頻率至少應該是每週一次。如需詳細資訊,請參閱趨勢-現在食譜

    • 如果您沒有使用具有自動更新的食譜或趨勢現在方法,Amazon Personalize 只會在下次訓練後才會考慮新項目作為建議。例如,如果您使用 Similar-Items 方法並每天新增新項目,則必須使用每日自動訓練頻率,這些項目才會在同一天顯示在建議中。

設定自動訓練 (AWS CLI)

下列程式碼會示範如何建立每五天自動建立解決方案版本的解決方案。若要關閉自動訓練,請將設定perform-auto-trainingfalse

若要變更訓練頻率,您可以在schedulingExpression中修改autoTrainingConfig。運算式必須為rate(value unit)格式。對於值,請指定介於 1 到 30 之間的數字。對於單位,指定daydays

如需指create-solution令的完整說明,請參閱建立解決方案 (AWS 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)

下列程式碼會示範如何建立具有自動訓練的解決方案 AWS SDKs。該解決方案每五天自動創建一個解決方案版本。若要關閉自動訓練,請將設定performAutoTrainingfalse

若要變更訓練頻率,您可以在schedulingExpression中修改autoTrainingConfig。運算式必須為rate(value unit)格式。對於值,請指定介於 1 到 30 之間的數字。對於單位,指定daydays

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