

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

# バッチ推論ジョブの作成
<a name="creating-batch-inference-job"></a>

 バッチ推論ジョブを作成して、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 がオブジェクトを整理する方法の詳細については、「[オブジェクトの整理、一覧表示、操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/organizing-objects.html)」を参照してください。

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

**Topics**
+ [バッチ推論ジョブの作成 (コンソール)](#batch-console)
+ [バッチ推論ジョブの作成 (AWS CLI)](#batch-cli)
+ [バッチ推論ジョブ (AWS SDKsの作成](#batch-sdk)

## バッチ推論ジョブの作成 (コンソール)
<a name="batch-console"></a>

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

**バッチ推論ジョブを作成するには (コンソール)**

1. [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) で Amazon Personalize コンソールを開き、アカウントにサインインします。

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

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

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

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

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

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

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

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

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

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

    入力データは、ソリューションで使用するレシピに適した形式である必要があります。入力データの例については、「[バッチ推論ジョブの入力および出力 JSON の例](batch-data-upload.md#batch-inference-job-json-examples)」を参照してください。

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

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

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

1. **暗号化キー**で、暗号化に独自の AWS KMS キーを使用する場合は、キーの ARN を指定します。Amazon Personalize は、キーを使用する許可を持っている必要があります。許可の付与の詳細については、「[AWS KMS キーを使用するためのアクセス許可を Amazon Personalize に付与する](granting-personalize-key-access.md)」を参照してください。

1. **[IAM service role]** (IAM サービスロール) で、設定時に Amazon Personalize 用に作成した IAM サービスロールを選択します。このロールには、入力および出力の Amazon S3 バケットへの読み取りおよび書き込みアクセスがそれぞれ必要です。

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

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

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

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

## バッチ推論ジョブの作成 (AWS CLI)
<a name="batch-cli"></a>

[バッチレコメンデーション用の入力データを準備します。](batch-data-upload.md) を完了すると、[CreateBatchInferenceJob](API_CreateBatchInferenceJob.md) 操作を使用してバッチ推論ジョブを作成する準備が整います。

**Topics**
+ [バッチ推論ジョブの作成](#batch-cli-code-sample)
+ [テーマを生成するバッチ推論ジョブの作成](#batch-cli-themes)

### バッチ推論ジョブの作成
<a name="batch-cli-code-sample"></a>

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

`S3 input path` と `S3 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 レシピ](native-recipe-new-item-USER_PERSONALIZATION.md)」を参照してください。

```
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\"}}"
```

### テーマを生成するバッチ推論ジョブの作成
<a name="batch-cli-themes"></a>

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

次のコードは、テーマ付きレコメンデーションを生成するバッチ推論ジョブを作成します。`batch-inference-job-mode` は `THEME_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の作成
<a name="batch-sdk"></a>

[バッチレコメンデーション用の入力データを準備します。](batch-data-upload.md) を完了すると、[CreateBatchInferenceJob](API_CreateBatchInferenceJob.md) 操作を使用してバッチ推論ジョブを作成する準備が整います。

**Topics**
+ [バッチ推論ジョブの作成](#batch-sdk-code-sample)
+ [テーマを生成するバッチ推論ジョブの作成](#batch-sdk-themes)

### バッチ推論ジョブの作成
<a name="batch-sdk-code-sample"></a>

 次のコードを使用して、バッチ推論ジョブを作成できます。ジョブ名、ソリューションバージョンの 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 に含まれていることを確認してください。詳細については、「[バッチレコメンデーションとユーザーセグメントのフィルタリング (カスタムリソース)](filter-batch.md)」を参照してください。

------
#### [ SDK for Python (Boto3) ]

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

```
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 レシピ](native-recipe-new-item-USER_PERSONALIZATION.md)」を参照してください。

```
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: {
    s3DataSource: {
      path: "INPUT_PATH",
    },
  },
  jobOutput: {
    s3DataDestination: {
      path: "OUTPUT_PATH",
    },
  },
  roleArn: "ROLE_ARN",
  solutionVersionArn: "SOLUTION_VERSION_ARN",
  numResults: 20,
};

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](API_DescribeBatchInferenceJob.md) を呼び出し、入力パラメータとして `batchRecommendationsJobArn` を渡すことで、ジョブのステータスを確認できます。を呼び出すことで、 AWS 環境内のすべての Amazon Personalize バッチ推論ジョブを一覧表示することもできます[ListBatchInferenceJobs](API_ListBatchInferenceJobs.md)。

### テーマを生成するバッチ推論ジョブの作成
<a name="batch-sdk-themes"></a>

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

次のコードは、テーマ付きレコメンデーションを生成するバッチ推論ジョブを作成します。`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>/"}}
)
```