

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

# 在 Amazon Personalize 中建立網域推薦者
<a name="creating-domain-recommenders"></a>

您可以使用 Amazon Personalize 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs建立推薦者。以下包含使用 Amazon Personalize 主控台建立推薦者的詳細步驟，以及示範如何使用僅必要欄位建立推薦者的程式碼範例。
+ 如需示範如何在建議中啟用中繼資料的程式碼範例，請參閱 [在建議中啟用中繼資料](create-recommender-return-metadata.md)。
+  如需示範如何設定訓練支援建議程式之模型時使用之欄的程式碼範例，請參閱 [設定建立 Amazon Personalize 網域建議程式時使用的資料欄](create-recommender-configure-columns.md)。
+ 如需示範如何為 `Top picks for your`或 `Recommended for you`使用案例設定探勘的程式碼範例，請參閱 [為網域建議程式設定探勘](create-recommender-configure-exploration.md)。

**Topics**
+ [建立推薦者 （主控台）](#creating-recommenders-console)
+ [建立推薦者 (AWS CLI)](#create-recommender-cli)
+ [建立推薦者AWS SDKs)](#create-recommender-sdk)

## 建立推薦者 （主控台）
<a name="creating-recommenders-console"></a>

**重要**  
較高的 `minRecommendationRequestsPerSecond`會增加您的帳單。我們建議從 1 開始 `minRecommendationRequestsPerSecond`（預設值）。使用 Amazon CloudWatch 指標追蹤您的用量，並視需要增加 `minRecommendationRequestsPerSecond`。如需詳細資訊，請參閱[每秒最低建議請求數和自動調整規模](creating-recommenders.md#min-rrps-auto-scaling)。

 使用 Amazon Personalize 主控台為每個使用案例建立推薦者，如下所示。如果您剛建立網域資料集群組，且已在**概觀**頁面上，請跳至步驟 3。

**建立推薦者**

1. 在 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)：// 開啟 Amazon Personalize 主控台並登入您的帳戶。

1.  在**資料集群組**頁面上，選擇您的網域資料集群組。

1. 在**步驟 3** 中，選擇**使用 <網域名稱> 推薦者**，然後選擇**建立推薦者**。

1. 在**選擇使用案例**頁面上，選擇您要建立推薦者的使用案例，並為每個**推薦者命名**。Amazon Personalize 會為您所選的每個使用案例建立推薦者。可用的使用案例取決於您的網域。如需選擇使用案例的資訊，請參閱 [選擇使用案例](domain-use-cases.md)。

1.  選擇**下一步**。

1. 在**進階組態**頁面上，根據您的業務需求設定每個建議者：
   + 對於建議者使用案例使用的每個資料集，您可以選擇 Amazon Personalize 在訓練支援建議者的模型時考慮的資料欄。根據預設，Amazon Personalize 會使用可在訓練時使用的所有資料欄。如需詳細資訊，請參閱[設定建立 Amazon Personalize 網域建議程式時使用的資料欄](create-recommender-configure-columns.md)。
   + 您可以修改**每秒最低建議請求**數，為推薦者指定新的最低請求容量。較高的 `minRecommendationRequestsPerSecond`會增加您的帳單。我們建議從 1 開始 （預設值）。使用 Amazon CloudWatch 指標追蹤您的用量，並視需要增加 `minRecommendationRequestsPerSecond`。如需更多資訊，請參閱[每秒最低建議請求數和自動調整規模](creating-recommenders.md#min-rrps-auto-scaling)。
   + 如果您想要在建議中包含項目資料集中繼資料的功能，請在**建議結果中選擇傳回項目中繼資料**。如果啟用，您可以在建議或個人化排名的請求中指定項目資料集中的資料欄。Amazon Personalize 會針對建議回應中的每個項目傳回此資料。

      若要啟用中繼資料，您必須擁有具有中繼資料資料欄的項目資料集。
   + 對於 `Top picks for your`或 `Recommended for you`使用案例，選擇性地變更探勘組態。探索涉及測試不同的項目建議，以了解使用者如何以極少的互動資料回應項目。使用下列欄位來設定探勘：
     + 強調探索較不相關的項目 （探索權重） – 設定要探索多少。指定介於 0 到 1 之間的十進位值。預設值為 0.3。值越接近 1，探勘越多。隨著探索次數的增加，建議包括更多項目，其中根據先前的行為，具有較少的項目互動資料或相關性。在零時，不會進行探勘，建議是根據目前的資料 （相關性）。
     + 探勘項目存留期截止 – 指定項目互動資料集中所有項目自上次互動以來的最大項目存留期，以天為單位。這會根據項目存留期定義項目探索的範圍。Amazon Personalize 會根據項目建立時間戳記，或如果缺少建立時間戳記資料，則根據項目互動資料來決定項目存留期。如需 Amazon Personalize 如何決定項目存留期的詳細資訊，請參閱 [建立時間戳記資料](items-datasets.md#creation-timestamp-data)。

       若要增加 Amazon Personalize 在探勘期間考慮的項目，請輸入較大的值。最短為 1 天，預設值為 30 天。建議可能包括比您指定的項目存留期截止還舊的項目。這是因為這些項目與使用者相關，而且探勘無法識別它們。
   + 對於**標籤**，選擇性地新增任何標籤。如需標記 Amazon Personalize 資源的詳細資訊，請參閱 [標記 Amazon Personalize 資源](tagging-resources.md)。

1. 若要為每個使用案例建立推薦者，請選擇**建立推薦者**。

   您可以在建議程式頁面上監控每個**建議程式**的狀態。當您的推薦者狀態為作用中時，您可以在應用程式中使用它來取得建議。

## 建立推薦者 (AWS CLI)
<a name="create-recommender-cli"></a>

 使用下列 AWS CLI 程式碼為網域使用案例建立推薦者。為每個網域使用案例執行此程式碼。針對 `recipeArn`，請提供您的使用案例的 Amazon Resource Name (ARN)。可用的使用案例取決於您的網域。如需使用案例及其 ARNs的清單，請參閱 [選擇使用案例](domain-use-cases.md)。

```
aws personalize create-recommender \
--name recommender name \
--dataset-group-arn dataset group ARN \
--recipe-arn recipe ARN
```

## 建立推薦者AWS SDKs)
<a name="create-recommender-sdk"></a>

使用下列程式碼建立網域使用案例的推薦者。為您的推薦者命名，並提供網域資料集群組的 Amazon Resource Name (ARN)。針對 `recipeArn`，請提供您的使用案例的 ARN。為每個網域使用案例執行此程式碼。可用的使用案例取決於您的網域。如需使用案例、其 ARNs 及其需求的清單，請參閱 [選擇使用案例](domain-use-cases.md)。

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

```
import boto3

personalize = boto3.client('personalize')

create_recommender_response = personalize.create_recommender(
  name = 'recommender name',
  recipeArn = 'recipe ARN',
  datasetGroupArn = 'dataset group ARN'     
)

recommender_arn = create_recommender_response['recommenderArn']

print('Recommender ARN:' + recommender_arn)
```

------
#### [ SDK for Java 2.x ]

```
    public static String createRecommender(PersonalizeClient personalizeClient,
            String name,
            String datasetGroupArn,
            String recipeArn) {

        long maxTime = 0;
        long waitInMilliseconds = 30 * 1000; // 30 seconds
        String recommenderStatus = "";

        try {
            CreateRecommenderRequest createRecommenderRequest = CreateRecommenderRequest.builder()
                    .datasetGroupArn(datasetGroupArn)
                    .name(name)
                    .recipeArn(recipeArn)
                    .build();

            CreateRecommenderResponse recommenderResponse = personalizeClient
                    .createRecommender(createRecommenderRequest);
            String recommenderArn = recommenderResponse.recommenderArn();
            System.out.println("The recommender ARN is " + recommenderArn);

            DescribeRecommenderRequest describeRecommenderRequest = DescribeRecommenderRequest.builder()
                    .recommenderArn(recommenderArn)
                    .build();

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

            while (Instant.now().getEpochSecond() < maxTime) {

                recommenderStatus = personalizeClient.describeRecommender(describeRecommenderRequest).recommender()
                        .status();
                System.out.println("Recommender status: " + recommenderStatus);

                if (recommenderStatus.equals("ACTIVE") || recommenderStatus.equals("CREATE FAILED")) {
                    break;
                }
                try {
                    Thread.sleep(waitInMilliseconds);
                } catch (InterruptedException e) {
                    System.out.println(e.getMessage());
                }
            }
            return recommenderArn;

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

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

```
// Get service clients and commands using ES6 syntax.
import { CreateRecommenderCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";

// create personalizeClient
const personalizeClient = new PersonalizeClient({
  region: "REGION"
});

// set the recommender's parameters
export const createRecommenderParam = {
  name: "RECOMMENDER_NAME",                    /* required */
  recipeArn: "RECIPE_ARN",                     /* required */
  datasetGroupArn: "DATASET_GROUP_ARN"         /* required */
}

export const run = async () => {
  try {
    const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam));
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------