入门 (SDK for Python (Boto3)) - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

入门 (SDK for Python (Boto3))

本教程向您展示如何使用 SDK for Python (Boto3) 从头到尾完成 Amazon Personalize 工作流程。

为避免产生不必要的费用,完成这个入门练习后,删除您在本教程中创建的资源。有关更多信息,请参阅 清理资源

先决条件

以下是使用本指南中的 Python 示例的先决条件步骤:

教程

在以下步骤中,您将验证您的环境并为 Amazon Personalize 创建 SDK for Python (Boto3) 客户端。然后,将导入数据,创建解决方案版本并通过市场活动进行部署,随后获得建议。

在完成先决条件之后,请运行以下 Python 示例,以确认您的环境已正确配置。此代码还会创建您在本教程中使用的 Amazon Personalize boto3 客户端。如果已正确配置环境,则会显示可用食谱列表,您现在可以运行本教程中的其他示例。

import boto3 personalizeRt = boto3.client('personalize-runtime') personalize = boto3.client('personalize') response = personalize.list_recipes() for recipe in response['recipes']: print (recipe)

创建 Amazon Personalize boto3 客户端并验证您的环境后,导入您在完成入门先决条件时创建的历史数据。要将历史数据导入 Amazon Personalize,请执行以下操作:

  1. 使用以下代码创建 Amazon Personalize 架构。将 getting-started-schema 替换为架构的名称。

    import json schema = { "type": "record", "name": "Interactions", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "USER_ID", "type": "string" }, { "name": "ITEM_ID", "type": "string" }, { "name": "TIMESTAMP", "type": "long" } ], "version": "1.0" } create_interactions_schema_response = personalize.create_schema( name='getting-started-schema', schema=json.dumps(schema) ) interactions_schema_arn = create_interactions_schema_response['schemaArn'] print(json.dumps(create_interactions_schema_response, indent=2))
  2. 使用以下代码创建数据集组。将 dataset group name 替换为数据集组的名称。

    response = personalize.create_dataset_group(name = 'dataset group name') dataset_group_arn = response['datasetGroupArn'] description = personalize.describe_dataset_group(datasetGroupArn = dataset_group_arn)['datasetGroup'] print('Name: ' + description['name']) print('ARN: ' + description['datasetGroupArn']) print('Status: ' + description['status'])
  3. 使用以下代码在新数据集组中创建物品交互数据集。为数据集命名,并提供前面步骤中的schema_arndataset_group_arn

    response = personalize.create_dataset( name = 'datase_name', schemaArn = 'schema_arn', datasetGroupArn = 'dataset_group_arn', datasetType = 'Interactions' ) dataset_arn = response['datasetArn']
  4. 使用以下代码通过数据集导入作业导入数据。代码使用 describe_dataset_import_job 方法来跟踪作业的状态。

    将以下内容作为参数传递:作业名称、上一步中的 dataset_arn、存储训练数据的 Amazon S3 存储桶路径 (s3://bucket name/folder name/ratings.csv) 以及您的 IAM 服务角色的 ARN。您在入门先决条件期间创建了此角色。Amazon Personalize 需要权限才能访问存储桶。请参阅 向 Amazon Personalize 授予访问 Amazon S3 资源的权限

    import time response = personalize.create_dataset_import_job( jobName = 'JobName', datasetArn = 'dataset_arn', dataSource = {'dataLocation':'s3://bucket/file.csv'}, roleArn = 'role_arn', importMode = 'FULL' ) dataset_interactions_import_job_arn = response['datasetImportJobArn'] description = personalize.describe_dataset_import_job( datasetImportJobArn = dataset_interactions_import_job_arn)['datasetImportJob'] print('Name: ' + description['jobName']) print('ARN: ' + description['datasetImportJobArn']) print('Status: ' + description['status']) max_time = time.time() + 3*60*60 # 3 hours while time.time() < max_time: describe_dataset_import_job_response = personalize.describe_dataset_import_job( datasetImportJobArn = dataset_interactions_import_job_arn ) status = describe_dataset_import_job_response["datasetImportJob"]['status'] print("Interactions DatasetImportJob: {}".format(status)) if status == "ACTIVE" or status == "CREATE FAILED": break time.sleep(60)

导入数据后,创建解决方案和解决方案版本,如下所示。解决方案 包含用于训练模型的配置,解决方案版本 是经过训练的模型。

  1. 使用以下代码创建新解决方案。将以下内容作为参数传递:dataset_group_arn来自之前的、解决方案的名称以及用户个性化-v2 配方的 ARN ()。arn:aws:personalize:::recipe/aws-user-personalization-v2存储新解决方案的 ARN 以备日后使用。

    create_solution_response = personalize.create_solution( name='solution name', recipeArn= 'arn:aws:personalize:::recipe/aws-user-personalization-v2', datasetGroupArn = 'dataset group arn' ) solution_arn = create_solution_response['solutionArn'] print('solution_arn: ', solution_arn)
  2. 使用以下代码创建解决方案版本。将上一步中的 solution_arn 作为参数传递。以下代码将创建解决方案版本。在训练期间,代码使用 DescribeSolutionVersion 操作来检索解决方案版本的状态。训练完成后,方法将返回新解决方案版本的 ARN。请将其存储以便将来使用。

    import time import json create_solution_version_response = personalize.create_solution_version( solutionArn = solution_arn ) solution_version_arn = create_solution_version_response['solutionVersionArn'] print(json.dumps(create_solution_version_response, indent=2)) max_time = time.time() + 3*60*60 # 3 hours while time.time() < max_time: describe_solution_version_response = personalize.describe_solution_version( solutionVersionArn = solution_version_arn ) status = describe_solution_version_response["solutionVersion"]["status"] print("SolutionVersion: {}".format(status)) if status == "ACTIVE" or status == "CREATE FAILED": break time.sleep(60)

创建解决方案版本后,使用 Amazon Personalize 市场活动进行部署。使用以下代码创建可部署解决方案版本的市场活动。将以下内容作为参数传递:solution_version_arn 和市场活动名称。方法将返回新市场活动的 Amazon 资源名称 (ARN)。请将其存储以便将来使用。

response = personalize.create_campaign( name = 'campaign name', solutionVersionArn = 'solution version arn' ) arn = response['campaignArn'] description = personalize.describe_campaign(campaignArn = arn)['campaign'] print('Name: ' + description['name']) print('ARN: ' + description['campaignArn']) print('Status: ' + description['status'])

创建活动之后,您可以使用它来获得建议。以下代码展示了如何从市场活动中获取建议并打印出每个推荐物品的 ID。传递您在上一步中创建的市场活动的 ARN。对于用户 ID,传递来自训练数据的用户 ID,例如 123

response = personalizeRt.get_recommendations( campaignArn = 'Campaign ARN', userId = '123', numResults = 10 ) print("Recommended items") for item in response['itemList']: print (item['itemId'])

开始通过 Jupyter (iPython) 笔记本使用 Amazon Personalize API

要开始通过 Jupyter 笔记本使用 Amazon Personalize,请克隆或下载在 Amazon Personalize 示例存储库的 getting_started 文件夹中找到的一系列笔记本。笔记本将引导您使用 Amazon Personalize 导入训练数据、创建解决方案、创建市场活动以及获取建议。

注意

在开始使用笔记本之前,请务必按照 README.md 中的步骤构建您的环境