

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 获取个性化排名（自定义资源）
<a name="rankings"></a>

个性化排名是为特定用户重新排名的推荐物品的列表。要获得个性化排名，请调用 [GetPersonalizedRanking](API_RS_GetPersonalizedRanking.md) API 操作或在控制台中从市场活动中获取建议。

**注意**  
必须已使用 PERSONALIZED\$1RANKING 类型的配方创建支持市场活动的解决方案。有关更多信息，请参阅 [选择食谱](working-with-predefined-recipes.md)。

**Topics**
+ [个性化排名评分的工作原理](#how-ranking-scoring-works)
+ [获取个性化排名（控制台）](get-ranking-recommendations-console.md)
+ [获取个性化排名 (AWS CLI)](get-personalized-rankings-cli.md)
+ [获取个性化排名 (AWS SDK)](get-personalized-rankings-sdk.md)
+ [Personalized-Ranking 示例笔记本](#real-time-recommendations-personalized-ranking-example)

## 个性化排名评分的工作原理
<a name="how-ranking-scoring-works"></a>

与使用 User-Personalization-v2 和 User-Personalization 配方创建的解决方案的 `GetRecommendations` 操作返回的分数相似，`GetPersonalizedRanking` 分数总和为 1，但只有输入物品获得分数且推荐分数往往更高。如果某个项目在最近一次训练中不存在，则该项目的分数为 0。

在数学上，GetPersonalizedRanking 的评分函数与 `GetRecommendations` 相同，但它只考虑输入物品。这意味着分数接近 1 的可能性更高，因为将分数进行划分的其他选择更少：

![\[描绘了用于计算评分中每个物品分数的公式。\]](http://docs.aws.amazon.com/zh_cn/personalize/latest/dg/images/get_personalized_ranking.png)


# 获取个性化排名（控制台）
<a name="get-ranking-recommendations-console"></a>

要从 Amazon Personalize 控制台获取用户的个性化排名，请选择您要使用的市场活动，然后提供他们的用户 ID，指定您要为该用户排名的物品列表，（可选）选择筛选器，并（可选）提供任何上下文数据。

**获得针对用户的个性化排名**

1. 打开 Amazon Personalize 控制台（网址为 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)），并登录您的账户。

1. 选择包含要使用的市场活动的数据集组。

1. 在导航窗格中，选择**市场活动**。

1. 在**活动**页面上，选择目标市场活动。

1.  在**测试市场活动结果** 下，输入要为其获取建议的用户的**用户 ID**。

1. 对于**物品 ID**，输入要为用户排名的物品列表。

1. （可选）选择筛选器。有关更多信息，请参阅 [筛选建议和用户细分](filter.md)。

1. 如果您在市场活动的建议中启用了元数据，请为**物品数据集列**选择要包含在建议结果中的元数据列。有关启用元数据的信息，请参阅[推荐中的物品元数据](campaigns.md#create-campaign-return-metadata)。

1. 如果活动使用上下文元数据（有关要求，请参阅[利用上下文元数据提高建议的相关性](contextual-metadata.md)），则可以选择提供上下文数据。

   对于每个上下文，为**键** 输入元数据字段，对于**值**，输入上下文数据。

1. 选择**获取个性化物品排名**。此时将显示一个表格，其中包含按用户预期兴趣顺序排名的物品。

# 获取个性化排名 (AWS CLI)
<a name="get-personalized-rankings-cli"></a>

以下代码示例显示了如何使用 AWS CLI 获得个性化排名的不同变体。

**Topics**
+ [获取个性化排名](#personalized-ranking-cli-sample)
+ [在个性化排名中包含物品元数据](#getting-personalized-ranking-with-metadata-cli)

## 获取个性化排名
<a name="personalized-ranking-cli-sample"></a>

 使用以下 `get-personalized-ranking` 命令，通过 AWS CLI 获得个性化排名。指定市场活动的 Amazon 资源名称 (ARN)、用户的用户 ID，并提供要为用户排名的物品的物品 ID 列表（每个项用空格隔开）。要排名的物品必须位于您用于训练解决方案版本的数据中。这将显示已排名的建议列表。Amazon Personalize 会将列表中的第一个物品视为用户最感兴趣的物品。

```
aws personalize-runtime get-personalized-ranking \
--campaign-arn Campaign ARN \
--user-id 12 \
--input-list 3 4 10 8 12 7
```

## 在个性化排名中包含物品元数据
<a name="getting-personalized-ranking-with-metadata-cli"></a>

如果您在市场活动的建议中启用了元数据，则可以指定要包含在响应中的物品数据集元数据列。有关启用元数据的信息，请参阅[推荐中的物品元数据](campaigns.md#create-campaign-return-metadata)。

以下代码示例显示了如何在请求个性化排名时指定元数据列。

```
aws personalize-runtime get-personalized-ranking \
--campaign-arn Campaign ARN \
--user-id 12 \
--input-list 3 4 10 8 12 7
--metadata-columns "{\"ITEMS\": ["\"columnNameA"\","\"columnNameB"\"]}"
```

# 获取个性化排名 (AWS SDK)
<a name="get-personalized-rankings-sdk"></a>

以下代码示例显示了如何使用 AWS SDK 获得个性化排名的不同变体。

**Topics**
+ [获取个性化排名](#personalized-ranking-sdk-sample)
+ [在个性化排名中包含物品元数据](#getting-personalized-ranking-with-metadata-sdk)
+ [使用上下文元数据获得个性化排名](#personalized-ranking-contextual-metadata-example)

## 获取个性化排名
<a name="personalized-ranking-sdk-sample"></a>

以下代码展示了如何为用户获取个性化排名。指定用户的 ID 和要为用户排名的物品 ID 列表。物品 ID 必须位于您用于训练解决方案版本的数据中。这将返回已排名的建议列表。Amazon Personalize 会将列表中的第一个物品视为用户最感兴趣的物品。

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

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign arn",
    userId = "UserID",
    inputList = ['ItemID1','ItemID2']
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
    print (item['itemId'])
```

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

```
public static List<PredictedItem> getRankedRecs(PersonalizeRuntimeClient personalizeRuntimeClient,
                                                String campaignArn,
                                                String userId,
                                                ArrayList<String> items) {

    try {
        GetPersonalizedRankingRequest rankingRecommendationsRequest = GetPersonalizedRankingRequest.builder()
                .campaignArn(campaignArn)
                .userId(userId)
                .inputList(items)
                .build();
  
        GetPersonalizedRankingResponse recommendationsResponse =
                personalizeRuntimeClient.getPersonalizedRanking(rankingRecommendationsRequest);
        List<PredictedItem> rankedItems = recommendationsResponse.personalizedRanking();
        int rank = 1;
        for (PredictedItem item : rankedItems) {
            System.out.println("Item ranked at position " + rank + " details");
            System.out.println("Item Id is : " + item.itemId());
            System.out.println("Item score is : " + item.score());
            System.out.println("---------------------------------------------");
            rank++;
        }
        return rankedItems;
    } catch (PersonalizeRuntimeException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return null;
}
```

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

```
// Get service clients module and commands using ES6 syntax.
import { GetPersonalizedRankingCommand } from "@aws-sdk/client-personalize-runtime";
import { personalizeRuntimeClient } from "./libs/personalizeClients.js";
// Or, create the client here.
// const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"});

// Set the ranking request parameters.
export const getPersonalizedRankingParam = {
  campaignArn: "CAMPAIGN_ARN" /* required */,
  userId: "USER_ID" /* required */,
  inputList: ["ITEM_ID_1", "ITEM_ID_2", "ITEM_ID_3", "ITEM_ID_4"],
};

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

------

## 在个性化排名中包含物品元数据
<a name="getting-personalized-ranking-with-metadata-sdk"></a>

如果您在市场活动的建议中启用了元数据，则可以指定要包含在响应中的物品数据集元数据列。有关启用元数据的信息，请参阅[推荐中的物品元数据](campaigns.md#create-campaign-return-metadata)。

以下代码示例显示了如何在请求个性化排名时指定元数据列。

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign arn",
    userId = "UserID",
    inputList = ['ItemID1','ItemID2'],
    metadataColumns = {
      "ITEMS": ['columnNameA','columnNameB']
    }
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
    print (item['itemId'])
    print (item['metadata'])
```

## 使用上下文元数据获得个性化排名
<a name="personalized-ranking-contextual-metadata-example"></a>

使用以下代码，根据上下文元数据获取个性化排名。对于 `context`，对于每个键值对，提供元数据字段作为键，提供上下文数据作为值。在以下示例代码中，键为 `DEVICE`，值为 `mobile phone`。替换这些值，将 `Campaign ARN` 和 `User ID` 替换为您自己的值。此外，将 `inputList` 更改为用于训练解决方案的数据中的物品 ID 列表。Amazon Personalize 会将列表中的第一个物品视为用户最感兴趣的物品。

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign ARN",
    userId = "User ID",
    inputList = ['ItemID1', 'ItemID2'],
    context = {
      'DEVICE': 'mobile phone'
    }
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
  print(item['itemId'])
```

## Personalized-Ranking 示例笔记本
<a name="real-time-recommendations-personalized-ranking-example"></a>

 有关展示如何使用 Personalized-Ranking 食谱的示例 Jupyter 笔记本，请参阅 [Personalize Ranking 示例](https://github.com/aws-samples/amazon-personalize-samples/blob/master/next_steps/core_use_cases/personalized_ranking/personalize_ranking_example.ipynb)。