バッチ推論ジョブの作成 - Amazon Personalize

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

バッチ推論ジョブの作成

バッチ推論ジョブを作成して、Amazon S3 からの入力データに基づいてユーザー向けのバッチアイテムのレコメンデーションを取得します。入力データは、ユーザーまたはアイテム (またはその両方) のJSON形式のリストにすることができます。バッチ推論ジョブは、Amazon Personalize コンソール、 AWS Command Line Interface (AWS CLI)、または を使用して作成できます AWS SDKs。

バッチ推論ジョブを作成するときは、入力場所と出力場所への Amazon S3 パスを指定します。Amazon S3 はプレフィックスベースです。入力データの場所にプレフィックスを指定すると、Amazon Personalize はそのプレフィックスに一致するすべてのファイルを入力データとして使用します。例えば、s3://amzn-s3-demo-bucket/folderName を指定し、バケットにもパスが s3://amzn-s3-demo-bucket/folderName_test のフォルダがある場合、Amazon Personalize は両方のフォルダのすべてのファイルを入力データとして使用します。特定のフォルダ内のファイルのみを入力データとして使用するには、Amazon S3 パスの末尾に / のようなプレフィックス区切り文字を付けます: s3://amzn-s3-demo-bucket/folderName/ Amazon S3 がオブジェクトを整理する方法の詳細については、「オブジェクトの整理、一覧表示、操作」を参照してください。

許可の要件、レコメンデーションスコアリング、入力データの準備とインポートなど、Amazon Personalize のバッチワークフローの詳細については、「カスタムリソースを使用したバッチアイテムレコメンデーションの取得」を参照してください。

バッチ推論ジョブの作成 (コンソール)

バッチレコメンデーション用の入力データを準備します。 を完了すると、バッチ推論ジョブを作成する準備が整います。この手順は、ソリューションとソリューションバージョン (トレーニング済みモデル) を既に作成していることを前提としています。

バッチ推論ジョブを作成するには (コンソール)
  1. https://console.aws.amazon.com/personalize/自宅の Amazon Personalize コンソールを開き、アカウントにサインインします。

  2. [データセットグループ] のページで、データセットグループを選択します。

  3. ナビゲーションペインの [カスタムリソース] で、[バッチ推論ジョブ] を選択します。

  4. [Create batch inference job (バッチ推論ジョブの作成)] を選択します。

  5. バッチ推論ジョブタイプを選択します。

    • テーマなしでアイテムのレコメンデーションを生成するには、[アイテムのレコメンデーション] を選択します。

    • Similar-Items レシピを使用し、類似アイテムのグループにわかりやすいテーマを追加する場合は、[Content Generator のテーマ別レコメンデーション] を選択します。テーマを生成するには、アイテム名データとテキストデータを含むアイテムデータセットが必要です。詳細については、「Content Generator のテーマ付きバッチレコメンデーション」を参照してください。

  6. [Batch inference job details (バッチ推論ジョブ詳細)] の [Batch inference job name (バッチ推論ジョブ名)] で、バッチ推論ジョブの名前を指定します。

  7. [Solution] (ソリューション) で、ソリューションを選択してから、レコメンデーションの生成に使用する [Solution version ID] (ソリューションバージョン ID) を選択します。

  8. [Number of results] (結果の数) で、オプションで、入力データの各行についてのレコメンデーション数を指定します。デフォルトは 25 です。

  9. バッチジョブでテーマ付きレコメンデーションが生成される場合は、[テーマ別レコメンデーションの詳細] で、アイテムデータセット内のアイテムの名前またはタイトルを含む列を選択します。このデータは、より関連性の高いテーマを作成するのに役立ちます。詳細については、「Content Generator のテーマ付きバッチレコメンデーション」を参照してください。

  10. [入力ソース] で、入力ファイルへの Amazon S3 パスを指定します。

    次の構文を使用します: s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json

    入力データは、ソリューションで使用するレシピに適した形式である必要があります。入力データの例については、「バッチ推論ジョブの入力と出力JSONの例」を参照してください。

  11. 復号キー で、バケット暗号化に独自の AWS KMS キーを使用する場合は、キーの Amazon リソースネーム (ARN) を指定します。Amazon Personalize は、キーを使用する許可を持っている必要があります。許可の付与の詳細については、「AWS KMS キーを使用するアクセス許可を Amazon Personalize に付与する」を参照してください。

  12. [出力先] で、出力場所へのパスを指定します。出力データには別の場所 (フォルダまたは別の Amazon S3 バケット) を使用することをお勧めします。

    次の構文を使用します: s3://amzn-s3-demo-bucket/<output folder name>/

  13. 暗号化キー で、暗号化に独自の AWS KMS キーを使用する場合は、キーARNの を指定します。Amazon Personalize は、キーを使用する許可を持っている必要があります。許可の付与の詳細については、「AWS KMS キーを使用するアクセス許可を Amazon Personalize に付与する」を参照してください。

  14. IAM サービスロール で、セットアップ中に Amazon Personalize 用に作成したIAMサービスロールを選択します。このロールには、入力および出力の Amazon S3 バケットへの読み取りおよび書き込みアクセスがそれぞれ必要です。

  15. [フィルター] では、フィルターを選択し、バッチレコメンデーションにフィルターを適用することもできます。フィルターでプレースホルダーパラメータを使用する場合は、パラメータの値が入力 に含まれていることを確認してくださいJSON。詳細については、「入力 JSON にフィルター値を指定します。」を参照してください。

  16. [タグ] には、オプションで任意のタグを追加します。Amazon Personalize リソースのタグ付けの詳細については、「Amazon Personalize リソースのタグ付け」を参照してください。

  17. [Create batch inference job (バッチ推論ジョブの作成)] を選択します。バッチ推論ジョブの作成が開始され、[Batch inference jobs (バッチ推論ジョブ)] ページが開いて、[Batch inference job detail (バッチ推論ジョブ詳細)] セクションが表示されます。

    バッチ推論ジョブのステータスが [Active] (アクティブ) に変わると、指定した出力 Amazon S3 バケットからジョブの出力を取得できます。出力ファイルの名前は input-name.out という形式になります。

バッチ推論ジョブの作成 (AWS CLI)

バッチレコメンデーション用の入力データを準備します。 を完了すると、CreateBatchInferenceJob 操作を使用してバッチ推論ジョブを作成する準備が整います。

バッチ推論ジョブの作成

create-batch-inference-job コマンドを使用して、バッチ推論ジョブを作成できます。ジョブ名を指定し、 をソリューションバージョンの Amazon リソースネーム (ARN) Solution version ARNに置き換え、 IAM service role ARN をセットアップ中に Amazon Personalize 用に作成したIAMサービスロールARNの に置き換えます。このロールには、入力および出力の Amazon S3 バケットへの読み取りおよび書き込みアクセスがそれぞれ必要です。必要に応じて、レコメンデーションをフィルタリングARNするフィルターを指定します。フィルターでプレースホルダーパラメータを使用する場合は、パラメータの値が入力 に含まれていることを確認してくださいJSON。詳細については、「バッチレコメンデーションとユーザーセグメントのフィルタリング (カスタムリソース)」を参照してください。

S3 input pathS3 output path を、入力ファイルへの Amazon S3 パスと出力場所に置き換えます。出力データには別の場所 (フォルダまたは別の Amazon S3 バケット) を使用することをお勧めします。入力および出力の場所には、s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json および s3://amzn-s3-demo-bucket/<output folder name>/ の構文を使用します。

この例には、オプションの User-Personalization レシピ固有の itemExplorationConfig ハイパーパラメータ (explorationWeight および explorationItemAgeCutOff) が含まれています。オプションで、explorationWeight および explorationItemAgeCutOff の値を含めて、探索を設定します。詳細については、「User-Personalization レシピ」を参照してください。

aws personalize create-batch-inference-job \ --job-name Batch job name \ --solution-version-arn Solution version ARN \ --filter-arn Filter ARN \ --job-input s3DataSource={path=s3://S3 input path} \ --job-output s3DataDestination={path=s3://S3 output path} \ --role-arn IAM service role ARN \ --batch-inference-job-config "{\"itemExplorationConfig\":{\"explorationWeight\":\"0.3\",\"explorationItemAgeCutOff\":\"30\"}}"

テーマを生成するバッチ推論ジョブの作成

類似アイテムのテーマを生成するには、Similar-Items レシピを使用し、アイテムデータセットにテキストフィールドとアイテム名データの列が必要です。テーマ付きレコメンデーションの詳細については、「Content Generator のテーマ付きバッチレコメンデーション」を参照してください。

次のコードは、テーマ付きレコメンデーションを生成するバッチ推論ジョブを作成します。batch-inference-job-modeTHEME_GENERATION に設定したままにしておきます。COLUMN_NAME をアイテム名データが格納されている列の名前に置き換えます。

aws personalize create-batch-inference-job \ --job-name Themed batch job name \ --solution-version-arn Solution version ARN \ --filter-arn Filter ARN \ --job-input s3DataSource={path=s3://S3 input path} \ --job-output s3DataDestination={path=s3://S3 output path} \ --role-arn IAM service role ARN \ --batch-inference-job-mode THEME_GENERATION \ --theme-generation-config "{\"fieldsForThemeGeneration\": {\"itemName\":\"COLUMN_NAME\"}}"

バッチ推論ジョブの作成 (AWS SDKs)

バッチレコメンデーション用の入力データを準備します。 を完了すると、CreateBatchInferenceJob 操作を使用してバッチ推論ジョブを作成する準備が整います。

バッチ推論ジョブの作成

次のコードを使用して、バッチ推論ジョブを作成できます。ジョブ名、ソリューションバージョンの Amazon リソースネーム (ARN)、およびセットアップ中に Amazon Personalize 用に作成したIAMサービスロールARNの を指定します。このロールには、入力および出力の Amazon S3 バケットへの読み取りおよび書き込みアクセスが必要です。

出力データには別の場所 (フォルダまたは別の Amazon S3 バケット) を使用することをお勧めします。入力および出力の場所には、s3:/amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json および s3://amzn-s3-demo-bucket/<output folder name>/ の構文を使用します。

numResults には、入力データの各行に Amazon Personalize に予測させたいアイテムの数を指定します。必要に応じて、レコメンデーションをフィルタリングARNするフィルターを指定します。フィルターでプレースホルダーパラメータを使用する場合は、パラメータの値が入力 に含まれていることを確認してくださいJSON。詳細については、「バッチレコメンデーションとユーザーセグメントのフィルタリング (カスタムリソース)」を参照してください。

SDK for Python (Boto3)

この例には、オプションの User-Personalization レシピ固有の itemExplorationConfig ハイパーパラメータ (explorationWeight および explorationItemAgeCutOff) が含まれています。オプションで、explorationWeight および explorationItemAgeCutOff の値を含めて、探索を設定します。詳細については、「User-Personalization レシピ」を参照してください。

import boto3 personalize_rec = boto3.client(service_name='personalize') personalize_rec.create_batch_inference_job ( solutionVersionArn = "Solution version ARN", jobName = "Batch job name", roleArn = "IAM service role ARN", filterArn = "Filter ARN", batchInferenceJobConfig = { # optional USER_PERSONALIZATION recipe hyperparameters "itemExplorationConfig": { "explorationWeight": "0.3", "explorationItemAgeCutOff": "30" } }, jobInput = {"s3DataSource": {"path": "s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3:/amzn-s3-demo-bucket/<output folder name>/"}} )
SDK for Java 2.x

この例には、オプションの User-Personalization レシピ固有の itemExplorationConfig フィールド (explorationWeight および explorationItemAgeCutOff) が含まれています。オプションで、explorationWeight および explorationItemAgeCutOff の値を含めて、探索を設定します。詳細については、「User-Personalization レシピ」を参照してください。

public static String createPersonalizeBatchInferenceJob(PersonalizeClient personalizeClient, String solutionVersionArn, String jobName, String filterArn, String s3InputDataSourcePath, String s3DataDestinationPath, String roleArn, String explorationWeight, String explorationItemAgeCutOff) { long waitInMilliseconds = 60 * 1000; String status; String batchInferenceJobArn; try { // Set up data input and output parameters. S3DataConfig inputSource = S3DataConfig.builder() .path(s3InputDataSourcePath) .build(); S3DataConfig outputDestination = S3DataConfig.builder() .path(s3DataDestinationPath) .build(); BatchInferenceJobInput jobInput = BatchInferenceJobInput.builder() .s3DataSource(inputSource) .build(); BatchInferenceJobOutput jobOutputLocation = BatchInferenceJobOutput.builder() .s3DataDestination(outputDestination) .build(); // Optional code to build the User-Personalization specific item exploration config. HashMap<String, String> explorationConfig = new HashMap<>(); explorationConfig.put("explorationWeight", explorationWeight); explorationConfig.put("explorationItemAgeCutOff", explorationItemAgeCutOff); BatchInferenceJobConfig jobConfig = BatchInferenceJobConfig.builder() .itemExplorationConfig(explorationConfig) .build(); // End optional User-Personalization recipe specific code. CreateBatchInferenceJobRequest createBatchInferenceJobRequest = CreateBatchInferenceJobRequest.builder() .solutionVersionArn(solutionVersionArn) .jobInput(jobInput) .jobOutput(jobOutputLocation) .jobName(jobName) .filterArn(filterArn) .roleArn(roleArn) .batchInferenceJobConfig(jobConfig) // Optional .build(); batchInferenceJobArn = personalizeClient.createBatchInferenceJob(createBatchInferenceJobRequest) .batchInferenceJobArn(); DescribeBatchInferenceJobRequest describeBatchInferenceJobRequest = DescribeBatchInferenceJobRequest.builder() .batchInferenceJobArn(batchInferenceJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; // wait until the batch inference job is complete. while (Instant.now().getEpochSecond() < maxTime) { BatchInferenceJob batchInferenceJob = personalizeClient .describeBatchInferenceJob(describeBatchInferenceJobRequest) .batchInferenceJob(); status = batchInferenceJob.status(); System.out.println("Batch inference job status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return batchInferenceJobArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { CreateBatchInferenceJobCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the batch inference job's parameters. export const createBatchInferenceJobParam = { jobName: 'JOB_NAME', jobInput: { /* required */ s3DataSource: { /* required */ path: 'INPUT_PATH', /* required */ // kmsKeyArn: 'INPUT_KMS_KEY_ARN' /* optional */' } }, jobOutput: { /* required */ s3DataDestination: { /* required */ path: 'OUTPUT_PATH', /* required */ // kmsKeyArn: 'OUTPUT_KMS_KEY_ARN' /* optional */' } }, roleArn: 'ROLE_ARN', /* required */ solutionVersionArn: 'SOLUTION_VERSION_ARN', /* required */ numResults: 20 /* optional integer*/ }; export const run = async () => { try { const response = await personalizeClient.send(new CreateBatchInferenceJobCommand(createBatchInferenceJobParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

バッチジョブの処理が完了するまでに時間がかかる場合があります。DescribeBatchInferenceJob を呼び出し、入力パラメータとして batchRecommendationsJobArn を渡すことで、ジョブのステータスを確認できます。を呼び出すことで、 AWS 環境内のすべての Amazon Personalize バッチ推論ジョブを一覧表示することもできますListBatchInferenceJobs

テーマを生成するバッチ推論ジョブの作成

類似アイテムのテーマを生成するには、Similar-Items レシピを使用し、アイテムデータセットにテキストフィールドとアイテム名データの列が必要です。テーマ付きレコメンデーションの詳細については、「Content Generator のテーマ付きバッチレコメンデーション」を参照してください。

次のコードは、テーマ付きレコメンデーションを生成するバッチ推論ジョブを作成します。batchInferenceJobMode"THEME_GENERATION" に設定したままにしておきます。COLUMNN_NAME をアイテム名データが格納されている列の名前に置き換えます。

import boto3 personalize_rec = boto3.client(service_name='personalize') personalize_rec.create_batch_inference_job ( solutionVersionArn = "Solution version ARN", jobName = "Batch job name", roleArn = "IAM service role ARN", filterArn = "Filter ARN", batchInferenceJobMode = "THEME_GENERATION", themeGenerationConfig = { "fieldsForThemeGeneration": { "itemName": "COLUMN_NAME" } }, jobInput = {"s3DataSource": {"path": "s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3://amzn-s3-demo-bucket/<output folder name>/"}} )