Commencer à utiliser un groupe de jeux de données de domaine (SDK for Java 2.x) - Amazon Personalize

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Commencer à utiliser un groupe de jeux de données de domaine (SDK for Java 2.x)

Ce didacticiel explique comment utiliser le SDK pour Java 2.x afin de créer un groupe de jeux de données de domaine pour le domaine VIDEO_ON_DEMAND. Dans ce didacticiel, vous allez créer un outil de recommandation pour le cas d'utilisation qui vous convient le mieux.

Lorsque vous avez terminé l'exercice de mise en route, pour éviter d'encourir des frais inutiles, supprimez les ressources que vous avez créées. Pour de plus amples informations, veuillez consulter Conditions requises pour supprimer des ressources Amazon Personalize.

Prérequis

Les étapes suivantes sont nécessaires pour suivre ce didacticiel :

didacticiel

Dans les étapes suivantes, vous allez configurer votre projet pour utiliser les packages Amazon Personalize et créer le SDK Amazon Personalize pour les clients Java 2.x. Ensuite, vous importez des données, vous créez un outil de recommandation pour le cas d'utilisation qui vous convient le mieux et vous obtenez des recommandations.

Une fois les conditions requises remplies, ajoutez les dépendances Amazon Personalize à votre fichier pom.xml et importez les packages Amazon Personalize.

  1. Ajoutez les dépendances suivantes à votre fichier pom.xml. Les numéros de version les plus récents peuvent être différents de ceux de l'exemple de code.

    <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. Ajoutez les instructions d'importation suivantes à votre projet.

    // 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;

Après avoir ajouté les dépendances Amazon Personalize à votre fichier pom.xml et importé les packages requis, créez les clients Amazon Personalize suivants :

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

Après avoir initialisé vos clients Amazon Personalize, importez les données historiques que vous avez créées lorsque vous avez terminé leConditions préalables pour démarrer. Pour importer des données historiques dans Amazon Personalize, procédez comme suit :

  1. Enregistrez le schéma Avro suivant sous forme de fichier JSON dans votre répertoire de travail. Ce schéma correspond aux colonnes du fichier CSV que vous avez créé lorsque vous avez terminé leCréation des données d'entraînement (groupe de jeux de données de domaine).

    { "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. Utilisez la createDomainSchema méthode suivante pour créer un schéma de domaine dans Amazon Personalize. Transmettez les paramètres suivants : un client du service Amazon Personalize, le nom de votre schéma, VIDEO_ON_DEMAND du domaine et le chemin du fichier JSON du schéma que vous avez créé à l'étape précédente. La méthode renvoie l'Amazon Resource Name (ARN) de votre nouveau schéma. Conservez-le en vue d'une utilisation ultérieure.

    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. Créez un groupe d'ensemble de données. Utilisez la createDomainDatasetGroup méthode suivante pour créer un groupe de jeux de données de domaine. Transmettez les paramètres suivants : un client du service Amazon Personalize, un nom pour le groupe de jeux de données et un pass VIDEO_ON_DEMAND pour le domaine. La méthode renvoie l'ARN de votre nouveau groupe de données. Conservez-le en vue d'une utilisation ultérieure.

    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. Créez un jeu de données sur les interactions entre les articles. Utilisez la createDataset méthode suivante pour créer un jeu de données d'interactions entre articles. Transmettez les paramètres suivants : un client du service Amazon Personalize, le nom de votre ensemble de données, l'ARN de votre schéma, l'ARN de votre groupe de jeux de données et le type Interactions de jeu de données. La méthode renvoie l'ARN de votre nouvel ensemble de données. Conservez-le en vue d'une utilisation ultérieure.

    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. Importez vos données à l'aide d'une tâche d'importation de jeux de données. Utilisez la createPersonalizeDatasetImportJob méthode suivante pour créer une tâche d'importation de jeux de données.

    Transmettez les paramètres suivants : un client du service Amazon Personalize, le nom de la tâche et l'ARN de votre ensemble de données Interactions. Transmettez le chemin du compartiment Amazon S3 (s3://bucket name/folder name/ratings.csv) dans lequel vous avez stocké les données d'entraînement, ainsi que l'ARN de votre rôle de service. Vous avez créé ce rôle dans le cadre duConditions préalables pour démarrer. La méthode renvoie l'ARN de votre tâche d'importation de jeu de données. Stockez-le éventuellement pour une utilisation ultérieure.

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

Une fois votre tâche d'importation de jeu de données terminée, vous êtes prêt à créer un recommandateur. Utilisez la createRecommender méthode suivante pour créer une recommandation. Transmettez les paramètres suivants : un client du service Amazon Personalize, le nom du recommandeur, le nom de ressource Amazon (ARN) de votre groupe de données et l'ARN de la arn:aws:personalize:::recipe/aws-vod-top-picks recette. La méthode renvoie l'ARN de votre nouveau recommandeur. Conservez-le en vue d'une utilisation ultérieure.

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

Une fois que vous avez créé un recommandeur, vous l'utilisez pour obtenir des recommandations. Utilisez la getRecs méthode suivante pour obtenir des recommandations pour un utilisateur. Transmettez comme paramètres un client d'exécution Amazon Personalize, le nom de ressource Amazon (ARN) du recommandeur que vous avez créé à l'étape précédente et un ID utilisateur (par exemple,123). La méthode imprime la liste des éléments recommandés à l'écran.

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); } }