

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

# バッチセグメントジョブを使用してユーザーセグメントを取得する
<a name="creating-batch-seg-job"></a>

 USER\$1SEGMENTATION レシピを使用した場合は、バッチセグメントジョブを作成して、ソリューションバージョンでユーザーセグメントを取得できます。各ユーザーセグメントは、各ユーザーがインベントリ内のアイテムを操作する蓋然性に基づいて、降順にソートされます。レシピに応じて、入力データはアイテム ([Item-Affinity レシピ](item-affinity-recipe.md)) またはアイテム属性 ([Item-Attribute-Affinity レシピ](item-attribute-affinity-recipe.md)) のリスト (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)」を参照してください。

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

## バッチセグメントジョブの作成 (コンソール)
<a name="batch-segment-console"></a>

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

**バッチセグメントジョブを作成するには (コンソール)**

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

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

1. ナビゲーションペインで **[batch segment jobs]** (バッチセグメントジョブ) を選択してから、**[Create batch segment job]** (バッチセグメントジョブを作成) を選択します。

1. **[batch segment job details]** (バッチセグメントジョブの詳細) で、**[Batch segment job name]** (バッチセグメントジョブ名) に、バッチセグメントジョブの名前を指定します。

1. **[Solution]** (ソリューション) で、ソリューションを選択してから、レコメンデーションの生成に使用する **[Solution version ID]** (ソリューションバージョン ID) を選択します。バッチセグメントジョブは、USER\$1SEGEMENTATION レシピを使用した場合にのみ作成できます。

1. **[Number of users]** (ユーザーの数) で、オプションで、Amazon Personalize が各ユーザーセグメントについて生成するユーザーの数を指定します。デフォルトは 25 です。最大数は 500 万です。

1.  **[Input source]** (入力ソース) で、入力ファイルへの Amazon S3 パスを指定するか、**[Browse S3]** (S3 を参照) を使用して Amazon S3 バケットを選択します。

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

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

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

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

1. **[IAM role]** (IAM ロール) で、以下のいずれかのオプションを選択します。
   +  **[Create and use new service role]** (新しいサービスロールを作成および使用) を選択し、**[Service role name]** (サービスロール名) を入力して新しいロールを作成するか、
   +  正しい許可を持つロールを既に作成している場合は、**[Use an existing service role]** (既存のサービスロールを使用) を選択し、IAM ロールを選択します。

    使用するロールには、入力および出力の Amazon S3 バケットへの読み取りおよび書き込みアクセスがそれぞれ必要です。

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

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

1.  **[Create batch segment job]** (バッチセグメントジョブを登録) を選択します。バッチセグメントジョブの作成が開始され、**[Batch segment jobs]** (バッチセグメントジョブ) のページが表示されます。当該ページには、**[Batch segment job detail]** (バッチセグメントジョブの詳細) のセクションが表示されます。

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

## バッチセグメントジョブの作成 (AWS CLI)
<a name="batch-segment-cli"></a>

[バッチレコメンデーション用の入力データを準備します。](batch-data-upload.md) を完了すると、次の `create-batch-segment-job` コードを使用してバッチセグメントジョブを作成する準備が整います。ジョブ名を指定し、`Solution version ARN` をソリューションバージョンの Amazon リソースネーム (ARN) に置き換えます。また、`IAM service role ARN` を、設定中に Amazon Personalize 用に作成した IAM サービスロールの ARN に置き換えます。このロールには、入力および出力の Amazon S3 バケットへの読み取りおよび書き込みアクセスがそれぞれ必要です。`num-results` では、入力データの各行に Amazon Personalize に予測させたいユーザーの人数を指定します。デフォルトは 25 です。最大数は 500 万です。オプションで `filter-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>/** の構文を使用します。

```
aws personalize create-batch-segment-job \
                --job-name Job name \
                --solution-version-arn Solution version ARN \
                --num-results The number of predicted users \
                --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
{
   "batchSegmentJobArn": "arn:aws:personalize:us-west-2:acct-id:batch-segment-job/batchSegmentJobName"
}
```

## バッチセグメントジョブ (AWS SDKsの作成
<a name="batch-segment-sdk"></a>

[バッチレコメンデーション用の入力データを準備します。](batch-data-upload.md) を完了すると、`CreateBatchSegmentJob` 操作を使用してバッチセグメントジョブを作成する準備が整います。次のコードは、バッチセグメントジョブを作成する方法を示しています。ジョブに名前を付け、使用するソリューションバージョンの Amazon リソースネーム (ARN) を指定し、Amazon Personalize IAM ロールの ARN を指定し、入力ファイルと出力場所への Amazon S3 パスを指定します。IAM サービスロールには、入力および出力の 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 に予測させたいユーザーの人数を指定します。デフォルトは 25 です。最大数は 500 万です。オプションで `filterArn` を指定してユーザーセグメントを絞り込みます。フィルタでプレースホルダーパラメータを使用する場合は、パラメータの値が入力 JSON に含まれていることを確認してください。詳細については、「[バッチレコメンデーションとユーザーセグメントのフィルタリング (カスタムリソース)](filter-batch.md)」を参照してください。

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

```
import boto3

personalize_rec = boto3.client(service_name='personalize')

personalize_rec.create_batch_segment_job (
    solutionVersionArn = "Solution version ARN",
    jobName = "Job name",
    numResults = 25,
    filterArn = "Filter ARN",
    roleArn = "IAM service role ARN",
    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 ]

```
public static String createBatchSegmentJob(PersonalizeClient personalizeClient,
                                                        String solutionVersionArn,
                                                        String jobName,
                                                        String filterArn,
                                                        int numResults,
                                                        String s3InputDataSourcePath,
                                                        String s3DataDestinationPath,
                                                        String roleArn,
                                                        String explorationWeight,
                                                        String explorationItemAgeCutOff) {

  long waitInMilliseconds = 60 * 1000;
  String status;
  String batchSegmentJobArn;

  try {
      // Set up data input and output parameters.
      S3DataConfig inputSource = S3DataConfig.builder()
              .path(s3InputDataSourcePath)
              .build();
      S3DataConfig outputDestination = S3DataConfig.builder()
              .path(s3DataDestinationPath)
              .build();

      BatchSegmentJobInput jobInput = BatchSegmentJobInput.builder()
              .s3DataSource(inputSource)
              .build();
      BatchSegmentJobOutput jobOutputLocation = BatchSegmentJobOutput.builder()
              .s3DataDestination(outputDestination)
              .build();


      CreateBatchSegmentJobRequest createBatchSegmentJobRequest = CreateBatchSegmentJobRequest.builder()
              .solutionVersionArn(solutionVersionArn)
              .filterArn(filterArn)
              .jobInput(jobInput)
              .jobOutput(jobOutputLocation)
              .jobName(jobName)
              .numResults(numResults)
              .roleArn(roleArn)
              .build();

      batchSegmentJobArn = personalizeClient.createBatchSegmentJob(createBatchSegmentJobRequest)
              .batchSegmentJobArn();
      DescribeBatchSegmentJobRequest describeBatchSegmentJobRequest = DescribeBatchSegmentJobRequest.builder()
              .batchSegmentJobArn(batchSegmentJobArn)
              .build();

      long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;

      // wait until the batch segment job is complete.
      while (Instant.now().getEpochSecond() < maxTime) {

          BatchSegmentJob batchSegmentJob = personalizeClient
                  .describeBatchSegmentJob(describeBatchSegmentJobRequest)
                  .batchSegmentJob();

          status = batchSegmentJob.status();
          System.out.println("batch segment 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 batchSegmentJobArn;

  } catch (PersonalizeException e) {
      System.out.println(e.awsErrorDetails().errorMessage());
  }
  return "";
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients module and commands using ES6 syntax.
import { CreateBatchSegmentJobCommand } 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 segment job's parameters.

export const createBatchSegmentJobParam = {
  jobName: "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 CreateBatchSegmentJobCommand(createBatchSegmentJobParam),
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

バッチジョブの処理が完了するまでに時間がかかる場合があります。[DescribeBatchSegmentJob](API_DescribeBatchSegmentJob.md) を呼び出し、入力パラメータとして `batchSegmentJobArn` を渡すことで、ジョブのステータスを確認できます。を呼び出すことで、 AWS 環境内のすべての Amazon Personalize バッチセグメントジョブを一覧表示することもできます[ListBatchSegmentJobs](API_ListBatchSegmentJobs.md)。