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

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

域数据集组入门 (SDK for Python (Boto3))

本教程向您展示如何使用 SDK for Python (Boto3) 为 VIDEO_ON_DEMAND 域创建域数据集组。在本教程中,您将为热门精选 使用案例创建推荐器。

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

先决条件

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

  • 完成入门先决条件,设置所需权限并创建训练数据。如果您使用自己的源数据,请确保按照先决条件中的步骤设置数据格式。

  • 设置您的 Amazon SDK for Python (Boto3) 环境,如设置 Amazon 软件开发工具包中所指定。

教程

在以下步骤中,您将验证您的环境并为 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 架构。将 gs-domain-interactions-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": "EVENT_TYPE", "type": "string" }, { "name": "TIMESTAMP", "type": "long" } ], "version": "1.0" } create_interactions_schema_response = personalize.create_schema( name='gs-domain-interactions-schema', schema=json.dumps(schema), domain='VIDEO_ON_DEMAND' ) 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', domain = 'VIDEO_ON_DEMAND' ) dsg_arn = response['datasetGroupArn'] description = personalize.describe_dataset_group(datasetGroupArn = dsg_arn)['datasetGroup'] print('Name: ' + description['name']) print('ARN: ' + description['datasetGroupArn']) print('Status: ' + description['status'])
  3. 使用以下代码在新数据集组中创建物品交互数据集。为数据集命名,并提供前面步骤中的schema_arndataset_group_arn

    response = personalize.create_dataset( name = 'interactions-dataset-name', schemaArn = interactions_schema_arn, datasetGroupArn = dsg_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' ) 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)

数据集导入作业完成后,您就可以创建推荐器了。使用以下代码创建推荐器。将以下内容作为参数传递:推荐器的名称、数据集组的 Amazon 资源名称 (ARN) 以及配方 ARN 的 arn:aws:personalize:::recipe/aws-vod-top-picks。代码使用 describe_recommender 方法来跟踪推荐器的状态。

import time create_recommender_response = personalize.create_recommender( name = 'gs-python-top-picks', recipeArn = 'arn:aws:personalize:::recipe/aws-vod-top-picks', datasetGroupArn = dsg_arn ) recommender_arn = create_recommender_response['recommenderArn'] print('Recommender ARN:' + recommender_arn) max_time = time.time() + 3*60*60 # 3 hours while time.time() < max_time: version_response = personalize.describe_recommender( recommenderArn = recommender_arn ) status = version_response["recommender"]["status"] if status == "ACTIVE": print("Creation succeeded for {}".format(recommender_arn)) elif status == "CREATE FAILED": print("Creation failed for {}".format(recommender_arn)) if status == "ACTIVE": break else: print("Recommender creation is still in progress") time.sleep(60)

创建推荐器后,您可以使用它,通过以下代码获取建议。将您在上一步中创建的推荐器的 Amazon 资源名称 (ARN) 和用户 ID(例如 123)作为参数传递。方法会打印推荐物品列表。

response = personalizeRt.get_recommendations( recommenderArn = "arn:aws:personalize:us-west-2:014025156336:recommender/gs-python-top-picks-89", userId = '123' ) print("Recommended items") for item in response['itemList']: print (item['itemId'])

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

要开始使用 Jupyter 笔记本创建域数据集组,请克隆或下载在 Amazon Personalize 示例存储库的 notebooks_managed_domains 文件夹中找到的一系列笔记本。笔记本将引导您使用 Amazon Personalize 导入训练数据、创建推荐器以及获取建议。

注意

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