기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
시작하기 (자바 SDK 2.x용)
이 자습서에서는 Amazon Personalize 워크플로를 처음부터 끝까지 완료하는 방법을 보여줍니다. AWS SDK for Java 2.x.
시작하기 연습을 마치면 불필요한 비용이 발생하지 않도록 생성한 리소스를 삭제하십시오. 자세한 내용은 Amazon Personalize 리소스 삭제 요구 사항 단원을 참조하십시오.
더 많은 예제는 Personalize 프로젝트 완료단원을 참조하세요.
사전 조건
이 자습서를 완료하기 위한 필수 조건 단계는 다음과 같습니다.
-
시작하기 전제 조건를 완료하여 필요한 권한을 설정하고 학습 데이터를 생성합니다. 시작하기(콘솔) 또는 시작하기(AWS CLI)연습에 사용된 것과 동일한 소스 데이터를 사용할 수 있습니다. 고유한 소스 데이터를 사용하는 경우 필수 조건 단계와 같이 데이터의 형식이 지정되었는지 확인합니다.
-
Java SDK 2.x용 환경을 설정하고 AWS 설정에 지정된 자격 증명은 AWS SDK for Java 2.x의 프로시저: AWS SDK for Java 2.x 개발자 가이드.
튜토리얼
다음 단계에서는 Amazon Personalize 패키지를 사용하도록 프로젝트를 설정하고 자바 2.x용 Amazon SDK Personalize를 생성합니다. 그런 다음 데이터를 가져와서 캠페인이 포함된 솔루션 버전을 생성 및 배포하고, 추천을 받습니다.
필수 조건을 완료한 후, Personalize 종속 항목을 pom.xml 파일에 추가하고 Personalize 패키지를 가져옵니다.
-
pom.xml 파일에 다음 종속 항목을 추가합니다. 최신 버전 번호가 예제 코드와 다를 수 있습니다.
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>personalize</artifactId> <version>2.16.83</version> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>personalizeruntime</artifactId> <version>2.16.83</version> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>personalizeevents</artifactId> <version>2.16.83</version> </dependency>
-
프로젝트에 다음 가져오기 명령문을 추가합니다.
// import client packages import software.amazon.awssdk.services.personalize.PersonalizeClient; import software.amazon.awssdk.services.personalizeruntime.PersonalizeRuntimeClient; // Amazon Personalize exception package import software.amazon.awssdk.services.personalize.model.PersonalizeException; // schema packages import software.amazon.awssdk.services.personalize.model.CreateSchemaRequest; // dataset group packages import software.amazon.awssdk.services.personalize.model.CreateDatasetGroupRequest; import software.amazon.awssdk.services.personalize.model.DescribeDatasetGroupRequest; // dataset packages import software.amazon.awssdk.services.personalize.model.CreateDatasetRequest; // dataset import job packages import software.amazon.awssdk.services.personalize.model.CreateDatasetImportJobRequest; import software.amazon.awssdk.services.personalize.model.DataSource; import software.amazon.awssdk.services.personalize.model.DatasetImportJob; import software.amazon.awssdk.services.personalize.model.DescribeDatasetImportJobRequest; // solution packages import software.amazon.awssdk.services.personalize.model.CreateSolutionRequest; import software.amazon.awssdk.services.personalize.model.CreateSolutionResponse; // solution version packages import software.amazon.awssdk.services.personalize.model.DescribeSolutionRequest; import software.amazon.awssdk.services.personalize.model.CreateSolutionVersionRequest; import software.amazon.awssdk.services.personalize.model.CreateSolutionVersionResponse; import software.amazon.awssdk.services.personalize.model.DescribeSolutionVersionRequest; // campaign packages import software.amazon.awssdk.services.personalize.model.CreateCampaignRequest; import software.amazon.awssdk.services.personalize.model.CreateCampaignResponse; // get recommendations packages import software.amazon.awssdk.services.personalizeruntime.model.GetRecommendationsRequest; import software.amazon.awssdk.services.personalizeruntime.model.GetRecommendationsResponse; import software.amazon.awssdk.services.personalizeruntime.model.PredictedItem; // Java time utility package import java.time.Instant;
Personalize 종속 항목을 pom.xml 파일에 추가하고 필요한 패키지를 가져온 후 다음과 같은 Personalize 클라이언트를 생성합니다.
PersonalizeClient personalizeClient = PersonalizeClient.builder() .region(
region
) .build(); PersonalizeRuntimeClient personalizeRuntimeClient = PersonalizeRuntimeClient.builder() .region(region
) .build();
Personalize 클라이언트를 초기화한 후에는 시작하기 전제 조건완료 시 생성한 과거 데이터를 가져옵니다. 과거 데이터를 Personalize로 가져오려면 다음과 같이 합니다.
-
다음 Avro 스키마를 작업 디렉토리에 JSON 파일로 저장합니다. 이 스키마는 작업을 완료할 때 만든 CSV 파일의 열과 일치합니다시작하기 전제 조건.
{ "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" }
-
다음
createSchema
메서드를 사용하여 Personalize에서 스키마를 생성합니다. Amazon Personalize 서비스 클라이언트, 스키마 이름, 이전 단계에서 생성한 스키마 파일의 파일 경로를 파라미터로 전달합니다. JSON 이 메서드는 새 스키마의 Amazon 리소스 이름 (ARN) 을 반환합니다. 나중에 사용하기 위해 이 ARN을 저장합니다.public static String createSchema(PersonalizeClient personalizeClient, String schemaName, String filePath) { String schema = null; try { schema = new String(Files.readAllBytes(Paths.get(filePath))); } catch (IOException e) { System.out.println(e.getMessage()); } try { CreateSchemaRequest createSchemaRequest = CreateSchemaRequest.builder() .name(schemaName) .schema(schema) .build(); String schemaArn = personalizeClient.createSchema(createSchemaRequest).schemaArn(); System.out.println("Schema arn: " + schemaArn); return schemaArn; } catch (PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
-
데이터세트 그룹을 생성합니다. 다음
createDatasetGroup
메서드를 사용하여 데이터세트 그룹을 생성합니다. Personalize 서비스 클라이언트 및 데이터세트 그룹 이름을 파라미터로 전달합니다. 메서드는 새 데이터세트 그룹의 데이터를 반환합니다. ARN 나중에 사용하기 위해 이 ARN을 저장합니다.public static String createDatasetGroup(PersonalizeClient personalizeClient, String datasetGroupName) { try { CreateDatasetGroupRequest createDatasetGroupRequest = CreateDatasetGroupRequest.builder() .name(datasetGroupName) .build(); return personalizeClient.createDatasetGroup(createDatasetGroupRequest).datasetGroupArn(); } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
-
항목 상호 작용 데이터 세트를 생성합니다. 다음
createDataset
메서드를 사용하여 항목 상호 작용 데이터 세트를 생성합니다. Amazon Personalize 서비스 클라이언트, 데이터세트 이름, 스키마, 데이터세트 그룹, 데이터세트 유형 등을Interactions
파라미터로 전달합니다. ARN ARN 메서드는 새 ARN 데이터세트를 반환합니다. 나중에 사용하기 위해 이 ARN을 저장합니다.public static String createDataset(PersonalizeClient personalizeClient, String datasetName, String datasetGroupArn, String datasetType, String schemaArn) { try { CreateDatasetRequest request = CreateDatasetRequest.builder() .name(datasetName) .datasetGroupArn(datasetGroupArn) .datasetType(datasetType) .schemaArn(schemaArn) .build(); String datasetArn = personalizeClient.createDataset(request) .datasetArn(); System.out.println("Dataset " + datasetName + " created."); return datasetArn; } catch (PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
-
데이터세트 가져오기 작업을 사용하여 데이터를 가져옵니다. 다음
createPersonalizeDatasetImportJob
메서드를 사용하여 데이터세트 가져오기 작업을 생성합니다.Amazon Personalize 서비스 클라이언트, 작업 이름, 항목 상호 작용 데이터 세트, 교육 데이터를 저장한 Amazon S3 버킷 경로 (
s3://
), 서비스 역할 ARN (이 역할을 일부로 생성함) 을 파라미터로 전달합니다. ARN 시작하기 전제 조건 이 메서드는 데이터세트 ARN 가져오기 작업을 반환합니다. 나중에 사용할 수 있도록 저장할 수도 있습니다.bucket name
/folder name
/ratings.csvpublic static String createPersonalizeDatasetImportJob(PersonalizeClient personalizeClient, String jobName, String datasetArn, String s3BucketPath, String roleArn) { long waitInMilliseconds = 60 * 1000; String status; String datasetImportJobArn; try { DataSource importDataSource = DataSource.builder() .dataLocation(s3BucketPath) .build(); CreateDatasetImportJobRequest createDatasetImportJobRequest = CreateDatasetImportJobRequest.builder() .datasetArn(datasetArn) .dataSource(importDataSource) .jobName(jobName) .roleArn(roleArn) .build(); datasetImportJobArn = personalizeClient.createDatasetImportJob(createDatasetImportJobRequest) .datasetImportJobArn(); DescribeDatasetImportJobRequest describeDatasetImportJobRequest = DescribeDatasetImportJobRequest.builder() .datasetImportJobArn(datasetImportJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; while (Instant.now().getEpochSecond() < maxTime) { DatasetImportJob datasetImportJob = personalizeClient .describeDatasetImportJob(describeDatasetImportJobRequest) .datasetImportJob(); status = datasetImportJob.status(); System.out.println("Dataset import job status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return datasetImportJobArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
데이터를 가져온 후 다음과 같이 솔루션과 솔루션 버전을 생성합니다. 솔루션에는 모델을 학습하기 위한 구성이 포함되어 있으며 솔루션 버전은 학습된 모델입니다.
-
다음
createPersonalizeSolution
메서드를 사용하여 새 솔루션을 생성합니다. Amazon Personalize 서비스 클라이언트, 데이터 세트 그룹 Amazon 리소스 이름 (ARN), 솔루션 이름, 사용자 개인화-v2 레시피 () 를 파라미터로 전달합니다. ARNarn:aws:personalize:::recipe/aws-user-personalization-v2
이 메서드는 새 솔루션을 반환합니다. ARN 나중에 사용하기 위해 이 ARN을 저장합니다.public static String createPersonalizeSolution(PersonalizeClient personalizeClient, String datasetGroupArn, String solutionName, String recipeArn) { try { CreateSolutionRequest solutionRequest = CreateSolutionRequest.builder() .name(solutionName) .datasetGroupArn(datasetGroupArn) .recipeArn(recipeArn) .build(); CreateSolutionResponse solutionResponse = personalizeClient.createSolution(solutionRequest); return solutionResponse.solutionArn(); } catch (PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
-
다음
createPersonalizeSolutionVersion
메서드를 사용하여 솔루션 버전을 생성합니다. 이전 단계에서 ARN 솔루션의 매개 변수로 전달합니다. 다음 코드는 먼저 솔루션이 준비되었는지 확인한 다음 솔루션 버전을 생성합니다. 학습 중에 코드는 DescribeSolutionVersion작업을 사용하여 솔루션 버전의 상태를 검색합니다. 학습이 완료되면 메서드는 새 솔루션 버전의 버전을 반환합니다. ARN 나중에 사용하기 위해 이 ARN을 저장합니다.public static String createPersonalizeSolutionVersion(PersonalizeClient personalizeClient, String solutionArn) { long maxTime = 0; long waitInMilliseconds = 30 * 1000; // 30 seconds String solutionStatus = ""; String solutionVersionStatus = ""; String solutionVersionArn = ""; try { DescribeSolutionRequest describeSolutionRequest = DescribeSolutionRequest.builder() .solutionArn(solutionArn) .build(); maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; // Wait until solution is active. while (Instant.now().getEpochSecond() < maxTime) { solutionStatus = personalizeClient.describeSolution(describeSolutionRequest).solution().status(); System.out.println("Solution status: " + solutionStatus); if (solutionStatus.equals("ACTIVE") || solutionStatus.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } if (solutionStatus.equals("ACTIVE")) { CreateSolutionVersionRequest createSolutionVersionRequest = CreateSolutionVersionRequest.builder() .solutionArn(solutionArn) .build(); CreateSolutionVersionResponse createSolutionVersionResponse = personalizeClient .createSolutionVersion(createSolutionVersionRequest); solutionVersionArn = createSolutionVersionResponse.solutionVersionArn(); System.out.println("Solution version ARN: " + solutionVersionArn); DescribeSolutionVersionRequest describeSolutionVersionRequest = DescribeSolutionVersionRequest.builder() .solutionVersionArn(solutionVersionArn) .build(); while (Instant.now().getEpochSecond() < maxTime) { solutionVersionStatus = personalizeClient.describeSolutionVersion(describeSolutionVersionRequest) .solutionVersion().status(); System.out.println("Solution version status: " + solutionVersionStatus); if (solutionVersionStatus.equals("ACTIVE") || solutionVersionStatus.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return solutionVersionArn; } } catch (PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
자세한 내용은 솔루션 버전 수동 생성 단원을 참조하십시오. 솔루션 버전 생성 시 계속하기 전에 성능을 평가할 수 있습니다. 자세한 내용은 지표를 사용한 Amazon Personalize 솔루션 버전 평가단원을 참조하세요.
솔루션 버전을 학습시키고 평가한 후 Personalize 캠페인을 사용하여 배포할 수 있습니다. 솔루션 버전을 배포하려면 다음 createPersonalCampaign
메서드를 사용합니다. Amazon Personalize 서비스 클라이언트, 이전 단계에서 생성한 솔루션 버전의 Amazon 리소스 이름 (ARN), 캠페인 이름을 파라미터로 전달합니다. 이 메서드는 새 ARN 캠페인의 결과를 반환합니다. 나중에 사용하기 위해 이 ARN을 저장합니다.
public static String createPersonalCompaign(PersonalizeClient personalizeClient, String solutionVersionArn, String name) { try { CreateCampaignRequest createCampaignRequest = CreateCampaignRequest.builder() .minProvisionedTPS(1) .solutionVersionArn(solutionVersionArn) .name(name) .build(); CreateCampaignResponse campaignResponse = personalizeClient.createCampaign(createCampaignRequest); System.out.println("The campaign ARN is "+campaignResponse.campaignArn()); return campaignResponse.campaignArn(); } catch (PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }
Personalize 캠페인에 대한 자세한 내용은 캠페인을 사용하여 Amazon Personalize 솔루션 버전 배포단원을 참조하세요.
캠페인을 생성한 후 이 캠페인을 사용하여 추천을 받습니다. 사용자에 대한 추천을 받으려면 다음 getRecs
메서드를 사용합니다. Amazon Personalize 런타임 클라이언트, 이전 단계에서 생성한 캠페인의 Amazon 리소스 이름 (ARN) 및 가져온 과거 데이터의 사용자 ID (예:123
) 를 매개 변수로 전달합니다. 메서드가 추천 항목 목록을 화면에 인쇄합니다.
public static void getRecs(PersonalizeRuntimeClient personalizeRuntimeClient, String campaignArn, String userId) { try { GetRecommendationsRequest recommendationsRequest = GetRecommendationsRequest.builder() .campaignArn(campaignArn) .numResults(20) .userId(userId) .build(); GetRecommendationsResponse recommendationsResponse = personalizeRuntimeClient .getRecommendations(recommendationsRequest); List<PredictedItem> items = recommendationsResponse.itemList(); for (PredictedItem item : items) { System.out.println("Item Id is : " + item.itemId()); System.out.println("Item score is : " + item.score()); } } catch (AwsServiceException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }
Personalize 프로젝트 완료
Java 2.x용 Amazon Personalize 워크플로를 완료하는 방법을 보여주는 all-in-one 프로젝트에 SDK 대해서는 Amazon-Personalize-Java-앱을 참조하십시오.
추가 예제는 개인화