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.
Mise en route (SDK pour Java 2.x)
Ce didacticiel vous explique comment effectuer le flux de travail Amazon Personalize du début à la fin avec le AWS SDK for Java 2.x.
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.
Pour obtenir plus d’exemples, consultez Compléter le projet Amazon Personalize.
Prérequis
Les étapes suivantes sont nécessaires pour suivre ce didacticiel :
-
Complétez leConditions préalables pour démarrer, pour configurer les autorisations requises et créer les données d'entraînement. Vous pouvez utiliser les mêmes données sources que celles utilisées dans les Démarrer (AWS CLI) exercices Démarrer (console) ou. Si vous utilisez vos propres données sources, assurez-vous qu'elles sont formatées conformément aux prérequis.
-
Configurez votre environnement SDK for Java 2.x AWS et vos informations d'identification comme indiqué dans la procédure de configuration AWS SDK for Java 2.x du manuel du développeur AWS SDK for Java 2.x .
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 et déployez une version de solution avec une campagne 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.
-
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>
-
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; // 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;
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 :
-
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é leConditions préalables pour démarrer.
{ "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" }
-
Utilisez la
createSchema
méthode suivante pour créer un schéma dans Amazon Personalize. Transmettez les paramètres suivants : un client du service Amazon Personalize, le nom de votre schéma 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 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 ""; }
-
Créez un groupe d'ensemble de données. Utilisez la
createDatasetGroup
méthode suivante pour créer un groupe de jeux de données. Transmettez les paramètres suivants : un client du service Amazon Personalize et le nom du groupe de jeux de données. 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 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 ""; }
-
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 typeInteractions
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 ""; }
-
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, l'ARN de votre ensemble de données d'interactions avec les articles, le chemin du compartiment Amazon S3 (
s3://
) dans lequel vous avez stocké les données de formation et 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.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 ""; }
Après avoir importé vos données, vous créez une solution et une version de solution comme suit. La solution contient les configurations permettant d'entraîner un modèle et une version de solution est un modèle entraîné.
-
Créez une nouvelle solution à l'aide de la
createPersonalizeSolution
méthode suivante. Transmettez les paramètres suivants : un client du service Amazon Personalize, vos groupes de données Amazon Resource Name (ARN), le nom de la solution et l'ARN des User-Personalization-v 2 recettes (arn:aws:personalize:::recipe/aws-user-personalization-v2
). La méthode renvoie l'ARN de votre nouvelle solution. Conservez-le en vue d'une utilisation ultérieure.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 ""; }
-
Créez une version de solution à l'aide de la
createPersonalizeSolutionVersion
méthode suivante. Passez en paramètre l'ARN de la solution à l'étape précédente. Le code suivant vérifie d'abord si votre solution est prête, puis crée une version de la solution. Pendant l'entraînement, le code utilise l'DescribeSolutionVersionopération pour récupérer l'état de la version de la solution. Lorsque la formation est terminée, la méthode renvoie l'ARN de la nouvelle version de votre solution. Conservez-le en vue d'une utilisation ultérieure.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 ""; }
Pour de plus amples informations, veuillez consulter Création manuelle d'une version de solution. Lorsque vous créez une version de solution, vous pouvez évaluer ses performances avant de continuer. Pour de plus amples informations, veuillez consulter Évaluation d'une version de la solution Amazon Personalize à l'aide de métriques.
Après avoir formé et évalué la version de votre solution, déployez-la dans le cadre d'une campagne Amazon Personalize. Utilisez la createPersonalCampaign
méthode suivante pour déployer une version de solution. Transmettez les paramètres suivants : un client du service Amazon Personalize, le nom de ressource Amazon (ARN) de la version de solution que vous avez créée à l'étape précédente et le nom de la campagne. La méthode renvoie l'ARN de votre nouvelle campagne. Conservez-le en vue d'une utilisation ultérieure.
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);
}
}
Pour plus d'informations sur les campagnes Amazon Personalize, consultezDéploiement d'une version de la solution Amazon Personalize avec une campagne.
Après avoir créé une campagne, 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) de la campagne que vous avez créée à l'étape précédente et un ID utilisateur (par exemple123
) issu des données historiques que vous avez importées. La méthode imprime la liste des éléments recommandés à l'écran.
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);
}
}
Compléter le projet Amazon Personalize
Pour un all-in-one projet qui explique comment terminer le flux de travail Amazon Personalize avec le SDK pour Java 2.x, consultez l'application Amazon-Personalize-Java sur
Pour des exemples supplémentaires, consultez le code trouvé dans le dossier de personnalisation