Memulai grup dataset Domain (SDK for Java 2.x) - Amazon Personalize

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memulai grup dataset Domain (SDK for Java 2.x)

Tutorial ini menunjukkan cara menggunakan SDK for Java 2.x untuk membuat grup dataset Domain untuk domain VIDEO_ON_DEMAND. Dalam tutorial ini, Anda membuat rekomendasi untuk pilihan Top untuk kasus penggunaan Anda.

Saat Anda menyelesaikan latihan memulai, untuk menghindari biaya yang tidak perlu, hapus sumber daya yang Anda buat. Untuk informasi selengkapnya, lihat Persyaratan untuk menghapus sumber daya Amazon Personalize.

Prasyarat

Berikut ini adalah langkah-langkah prasyarat untuk menyelesaikan tutorial ini:

Tutorial

Pada langkah-langkah berikut, Anda menyiapkan project untuk menggunakan paket Amazon Personalize dan membuat Amazon Personalize SDK for Java 2.x client. Kemudian Anda mengimpor data, membuat pemberi rekomendasi untuk pilihan Teratas untuk kasus penggunaan Anda, dan mendapatkan rekomendasi.

Setelah menyelesaikan prasyarat, tambahkan dependensi Amazon Personalize ke file pom.xml dan impor paket Amazon Personalize.

  1. Tambahkan dependensi berikut ke file pom.xml Anda. Nomor versi terbaru mungkin berbeda dari kode contoh.

    <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>
  2. Tambahkan pernyataan impor berikut ke proyek Anda.

    // 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; // recommender packages import software.amazon.awssdk.services.personalize.model.CreateRecommenderRequest; import software.amazon.awssdk.services.personalize.model.CreateRecommenderResponse; import software.amazon.awssdk.services.personalize.model.DescribeRecommenderRequest; // 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;

Setelah menambahkan dependensi Amazon Personalize ke file pom.xml dan mengimpor paket yang diperlukan, buat klien Amazon Personalize berikut:

PersonalizeClient personalizeClient = PersonalizeClient.builder() .region(region) .build(); PersonalizeRuntimeClient personalizeRuntimeClient = PersonalizeRuntimeClient.builder() .region(region) .build();

Setelah Anda menginisialisasi klien Amazon Personalize, impor data historis yang Anda buat saat Anda menyelesaikan. Memulai prasyarat Untuk mengimpor data historis ke Amazon Personalize, lakukan hal berikut:

  1. Simpan skema Avro berikut sebagai file JSON di direktori kerja Anda. Skema ini cocok dengan kolom dalam file CSV yang Anda buat saat Anda menyelesaikan. Membuat data pelatihan (Grup dataset domain)

    { "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" }
  2. Gunakan createDomainSchema metode berikut untuk membuat skema domain di Amazon Personalize. Teruskan yang berikut ini sebagai parameter: klien layanan Amazon Personalize, nama untuk skema Anda, VIDEO_ON_DEMAND untuk domain, dan jalur file untuk file JSON skema yang Anda buat pada langkah sebelumnya. Metode ini mengembalikan Amazon Resource Name (ARN) skema baru Anda. Simpan untuk digunakan nanti.

    public static String createDomainSchema(PersonalizeClient personalizeClient, String schemaName, String domain, 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) .domain(domain) .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 ""; }
  3. Buat grup dataset. Gunakan createDomainDatasetGroup metode berikut untuk membuat grup dataset domain. Teruskan parameter berikut ini sebagai parameter: klien layanan Amazon Personalize, nama untuk grup kumpulan data, dan teruskan VIDEO_ON_DEMAND untuk domain. Metode mengembalikan ARN dari grup dataset baru Anda. Simpan untuk digunakan nanti.

    public static String createDomainDatasetGroup(PersonalizeClient personalizeClient, String datasetGroupName, String domain) { try { CreateDatasetGroupRequest createDatasetGroupRequest = CreateDatasetGroupRequest.builder() .name(datasetGroupName) .domain(domain) .build(); return personalizeClient.createDatasetGroup(createDatasetGroupRequest).datasetGroupArn(); } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
  4. Buat kumpulan data interaksi Item. Gunakan createDataset metode berikut untuk membuat kumpulan data interaksi Item. Teruskan yang berikut ini sebagai parameter: klien layanan Amazon Personalize, nama untuk kumpulan data Anda, ARN skema Anda, ARN grup kumpulan data Anda, dan untuk jenis kumpulan data. Interactions Metode mengembalikan ARN dari dataset baru Anda. Simpan untuk digunakan nanti.

    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 ""; }
  5. Impor data Anda dengan pekerjaan impor dataset. Gunakan createPersonalizeDatasetImportJob metode berikut untuk membuat pekerjaan impor dataset.

    Teruskan parameter berikut ini sebagai parameter: klien layanan Amazon Personalize, nama untuk pekerjaan, dan ARN kumpulan data Interaksi Anda. Lewati jalur bucket Amazon S3 (s3://bucket name/folder name/ratings.csv) tempat Anda menyimpan data pelatihan, dan ARN peran layanan Anda. Anda menciptakan peran ini sebagai bagian dariMemulai prasyarat. Metode mengembalikan ARN dari pekerjaan impor dataset Anda. Secara opsional simpan untuk digunakan nanti.

    public 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 ""; }

Setelah pekerjaan impor dataset Anda selesai, Anda siap membuat pemberi rekomendasi. Gunakan createRecommender metode berikut untuk membuat pemberi rekomendasi. Teruskan yang berikut ini sebagai parameter: klien layanan Amazon Personalize, nama untuk pemberi rekomendasi, Nama Sumber Daya Amazon (ARN) grup dataset Anda, dan untuk resep ARN. arn:aws:personalize:::recipe/aws-vod-top-picks Metode ini mengembalikan ARN dari pemberi rekomendasi baru Anda. Simpan untuk digunakan nanti.

public static String createRecommender(PersonalizeClient personalizeClient, String name, String datasetGroupArn, String recipeArn) { long maxTime = 0; long waitInMilliseconds = 30 * 1000; // 30 seconds String recommenderStatus = ""; try { CreateRecommenderRequest createRecommenderRequest = CreateRecommenderRequest.builder() .datasetGroupArn(datasetGroupArn) .name(name) .recipeArn(recipeArn) .build(); CreateRecommenderResponse recommenderResponse = personalizeClient .createRecommender(createRecommenderRequest); String recommenderArn = recommenderResponse.recommenderArn(); System.out.println("The recommender ARN is " + recommenderArn); DescribeRecommenderRequest describeRecommenderRequest = DescribeRecommenderRequest.builder() .recommenderArn(recommenderArn) .build(); maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; while (Instant.now().getEpochSecond() < maxTime) { recommenderStatus = personalizeClient.describeRecommender(describeRecommenderRequest).recommender() .status(); System.out.println("Recommender status: " + recommenderStatus); if (recommenderStatus.equals("ACTIVE") || recommenderStatus.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return recommenderArn; } catch (PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }

Setelah Anda membuat pemberi rekomendasi, Anda menggunakannya untuk mendapatkan rekomendasi. Gunakan getRecs metode berikut untuk mendapatkan rekomendasi bagi pengguna. Teruskan sebagai parameter klien runtime Amazon Personalize, Nama Sumber Daya Amazon (ARN) dari pemberi rekomendasi yang Anda buat pada langkah sebelumnya, dan ID pengguna (misalnya,). 123 Metode ini mencetak daftar item yang direkomendasikan ke layar.

public static void getRecs(PersonalizeRuntimeClient personalizeRuntimeClient, String recommenderArn, String userId) { try { GetRecommendationsRequest recommendationsRequest = GetRecommendationsRequest.builder() .recommenderArn(recommenderArn) .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); } }