기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
시작하기(Python용 SDK(Boto3))
이 자습서에서는 Python용 SDK(Boto3)를 사용해 처음부터 끝까지 Personalize 워크플로우를 완료하는 방법을 보여줍니다.
시작하기 연습을 마쳤을 때 불필요한 요금이 발생하지 않도록 하려면 생성한 리소스를 삭제합니다. 자세한 내용은 Amazon Personalize 리소스 삭제 요구 사항 섹션을 참조하세요.
사전 조건
다음은 이 안내서에서 Python 예제를 사용하기 위한 필수 조건 단계입니다.
-
시작하기 전제 조건를 완료하여 필요한 권한을 설정하고 학습 데이터를 생성합니다. 고유한 소스 데이터를 사용하는 경우 필수 조건 단계와 같이 데이터의 형식이 지정되었는지 확인합니다.
-
AWSSDKs 설정에 지정된 대로 AWS SDK for Python (Boto3)환경을 설정합니다.
자습서
다음에 이어지는 단계에서는 환경을 확인하고 Personalize용 Python용 SDK(Boto3) 클라이언트를 생성합니다. 그런 다음 데이터를 가져와서 캠페인이 포함된 솔루션 버전을 생성 및 배포하고 추천을 받습니다.
필수 조건을 완료한 후 다음 Python 예제를 실행하여 환경이 올바르게 구성되었는지 확인합니다. 또한 이 코드는 이 자습서에서 사용하는 Personalize boto3 클라이언트를 생성합니다. 환경이 올바르게 구성된 경우 사용 가능한 레시피 목록이 표시되고 이 자습서의 다른 Python 예제를 실행할 수 있습니다.
import boto3 personalizeRt = boto3.client('personalize-runtime') personalize = boto3.client('personalize') response = personalize.list_recipes() for recipe in response['recipes']: print (recipe)
Personalize boto3 클라이언트를 생성하고 환경을 확인했으면, 시작하기 전제 조건완료 시 생성한 과거 데이터를 가져옵니다. 과거 데이터를 Personalize로 가져오려면 다음과 같이 합니다.
-
다음 코드를 사용하여 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)) -
다음 코드를 사용하여 데이터세트 그룹을 생성합니다.
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']) -
다음 코드를 사용하여 새 데이터 세트 그룹에 항목 상호 작용 데이터 세트를 만듭니다. 데이터세트에 이름을 지정하고 이전 단계의
schema_arn및dataset_group_arn를 입력합니다.response = personalize.create_dataset( name = 'datase_name', schemaArn = 'schema_arn', datasetGroupArn = 'dataset_group_arn', datasetType = 'Interactions' ) dataset_arn = response['datasetArn'] -
다음 코드를 사용한 데이터세트 가져오기 작업으로 데이터를 가져옵니다. 코드는 describe_dataset_import_job 메서드를 사용하여 작업 상태를 추적합니다.
작업 이름, 이전 단계의
dataset_arn, 학습 데이터를 저장한 S3 버킷 경로(s3://), IAM 서비스 역할의 ARN 등을 파라미터로 전달합니다. 시작하기 전제 조건의 일부로 이 역할을 생성했습니다. 버킷에 액세스할 수 있는 권한이 Personalize에 필요합니다. Personalize에 S3 리소스에 대한 액세스 권한 부여 단원을 참조하세요.bucket name/folder name/ratings.csvimport time response = personalize.create_dataset_import_job( jobName = 'JobName', datasetArn = 'dataset_arn', dataSource = {'dataLocation':'s3://amzn-s3-demo-bucket/filename.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)
데이터를 가져온 후 다음과 같이 솔루션과 솔루션 버전을 생성합니다. 솔루션에는 모델을 학습하기 위한 구성이 포함되어 있으며 솔루션 버전은 학습된 모델입니다.
-
다음 코드를 사용하여 새 솔루션을 생성합니다. 이전의
dataset_group_arn, 솔루션 이름, User-Personalization-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) -
다음 코드를 사용하여 솔루션 버전을 생성합니다. 이전 단계의
solution_arn을 파라미터로 전달합니다. 다음 코드는 솔루션 버전을 만듭니다. 학습 중에 코드는 DescribeSolutionVersion작업을 사용하여 솔루션 버전의 상태를 검색합니다. 학습이 완료되면 메서드는 새 솔루션 버전의 ARN을 반환합니다. 나중에 사용하기 위해 이 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)
솔루션 버전을 생성한 후 Personalize 캠페인을 통해 배포합니다. 다음 코드를 사용하여 솔루션 버전을 배포하는 캠페인을 생성합니다. 파라미터로 캠페인 이름, solution_version_arn을 전달합니다. 메서드는 새 캠페인의 리소스 이름(ARN)을 반환합니다. 나중에 사용하기 위해 이 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'])
주피터(IPython) 노트북으로 Personalize API 사용 시작하기
주피터 노트북을 사용하여 Personalize를 사용하려면 Personalize 샘플
참고
노트북을 시작하기 전에 README.md