Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Erste Schritte (SDK for Java 2.x)
Dieses Tutorial zeigt Ihnen, wie Sie den Amazon Personalize Personalize-Workflow von Anfang bis Ende mit dem AWS SDK for Java 2.x abschließen.
Wenn Sie mit der Übung „Erste Schritte“ fertig sind, löschen Sie die von Ihnen erstellten Ressourcen, um unnötige Kosten zu vermeiden. Weitere Informationen finden Sie unter Anforderungen für das Löschen von Amazon Personalize Personalize-Ressourcen.
Weitere Beispiele finden Sie unter Schließen Sie das Amazon Personalize-Projekt ab.
Voraussetzungen
Für die Durchführung dieses Tutorials sind die folgenden Schritte erforderlich:
-
Füllen Sie die ausVoraussetzungen für den Einstieg, um die erforderlichen Berechtigungen einzurichten und die Trainingsdaten zu erstellen. Sie können dieselben Quelldaten verwenden, die in den Erste Schritte (AWS CLI) Übungen Erste Schritte (Konsole) oder verwendet wurden. Wenn Sie Ihre eigenen Quelldaten verwenden, stellen Sie sicher, dass Ihre Daten wie in den Voraussetzungen beschrieben formatiert sind.
-
Richten Sie Ihre SDK for Java 2.x-Umgebung und Ihre AWS Anmeldedaten wie im Setting up the AWS SDK for Java 2.x procedure im AWS SDK for Java 2.x Developer Guide beschrieben ein.
Tutorial
In den folgenden Schritten richten Sie Ihr Projekt für die Verwendung von Amazon Personalize-Paketen ein und erstellen Amazon Personalize SDK for Java 2.x-Clients. Anschließend importieren Sie Daten, erstellen und implementieren eine Lösungsversion mit einer Kampagne und erhalten Empfehlungen.
Nachdem Sie die Voraussetzungen erfüllt haben, fügen Sie Amazon Personalize Personalize-Abhängigkeiten zu Ihrer Datei pom.xml hinzu und importieren Amazon Personalize Personalize-Pakete.
-
Fügen Sie Ihrer Datei pom.xml die folgenden Abhängigkeiten hinzu. Die neuesten Versionsnummern können sich vom Beispielcode unterscheiden.
<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>
-
Fügen Sie Ihrem Projekt die folgenden Importanweisungen hinzu.
// 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;
Nachdem Sie Amazon Personalize zu Ihrer Datei pom.xml hinzugefügt und die erforderlichen Pakete importiert haben, erstellen Sie die folgenden Amazon Personalize Personalize-Clients:
PersonalizeClient personalizeClient = PersonalizeClient.builder() .region(
region
) .build(); PersonalizeRuntimeClient personalizeRuntimeClient = PersonalizeRuntimeClient.builder() .region(region
) .build();
Nachdem Sie Ihre Amazon Personalize-Clients initialisiert haben, importieren Sie die historischen Daten, die Sie beim Abschluss des erstellt haben. Voraussetzungen für den Einstieg Gehen Sie wie folgt vor, um historische Daten in Amazon Personalize zu importieren:
-
Speichern Sie das folgende Avro-Schema als JSON-Datei in Ihrem Arbeitsverzeichnis. Dieses Schema entspricht den Spalten in der CSV-Datei, die Sie beim Ausfüllen von erstellt haben. Voraussetzungen für den Einstieg
{ "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" }
-
Verwenden Sie die folgende
createSchema
Methode, um ein Schema in Amazon Personalize zu erstellen. Übergeben Sie Folgendes als Parameter: einen Amazon Personalize Personalize-Service-Client, den Namen für Ihr Schema und den Dateipfad für die Schema-JSON-Datei, die Sie im vorherigen Schritt erstellt haben. Die Methode gibt den Amazon-Ressourcennamen (ARN) Ihres neuen Schemas zurück. Speichern Sie es für eine spätere Verwendung.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 ""; }
-
Erstellen Sie eine Dataset-Gruppe. Verwenden Sie die folgende
createDatasetGroup
Methode, um eine Datensatzgruppe zu erstellen. Übergeben Sie Folgendes als Parameter: einen Amazon Personalize Personalize-Service-Client und den Namen für die Datensatzgruppe. Die Methode gibt den ARN Ihrer neuen Datensatzgruppe zurück. Speichern Sie es für eine spätere Verwendung.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 ""; }
-
Erstellen Sie einen Datensatz mit Artikelinteraktionen. Verwenden Sie die folgende
createDataset
Methode, um einen Datensatz mit Artikelinteraktionen zu erstellen. Übergeben Sie Folgendes als Parameter: einen Amazon Personalize Personalize-Service-Client, den Namen für Ihren Datensatz, den ARN Ihres Schemas, den ARN Ihrer Datensatzgruppe undInteractions
für den Datensatztyp. Die Methode gibt den ARN Ihres neuen Datensatzes zurück. Speichern Sie es für eine spätere Verwendung.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 ""; }
-
Importieren Sie Ihre Daten mit einem Job zum Importieren von Datensätzen. Verwenden Sie die folgende
createPersonalizeDatasetImportJob
Methode, um einen Datensatz-Importjob zu erstellen.Übergeben Sie Folgendes als Parameter: einen Amazon Personalize-Service-Client, einen Namen für den Job, den ARN Ihres Artikelinteraktionen-Datensatzes, den Amazon S3 S3-Bucket-Pfad (
s3://
), in dem Sie die Trainingsdaten gespeichert haben, und den ARN Ihrer Servicerolle (Sie haben diese Rolle als Teil von erstelltVoraussetzungen für den Einstieg). Die Methode gibt den ARN Ihres Datensatz-Importjobs zurück. Speichern Sie ihn optional für die spätere Verwendung.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 ""; }
Nachdem Sie Ihre Daten importiert haben, erstellen Sie wie folgt eine Lösung und eine Lösungsversion. Die Lösung enthält die Konfigurationen zum Trainieren eines Modells, und eine Lösungsversion ist ein trainiertes Modell.
-
Erstellen Sie eine neue Lösung mit der folgenden
createPersonalizeSolution
Methode. Übergeben Sie Folgendes als Parameter: einen Amazon Personalize Personalize-Service-Client, Ihre Datensatzgruppen Amazon Resource Name (ARN), einen Namen für die Lösung und den ARN für die User-Personalization-v 2 Rezepte (arn:aws:personalize:::recipe/aws-user-personalization-v2
). Die Methode gibt den ARN Ihrer neuen Lösung zurück. Speichern Sie es für eine spätere Verwendung.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 ""; }
-
Erstellen Sie eine Lösungsversion mit der folgenden
createPersonalizeSolutionVersion
Methode. Übergeben Sie als Parameter den ARN der Lösung im vorherigen Schritt. Der folgende Code überprüft zunächst, ob Ihre Lösung bereit ist, und erstellt dann eine Lösungsversion. Während des Trainings verwendet der Code den DescribeSolutionVersion Vorgang, um den Status der Lösungsversion abzurufen. Wenn das Training abgeschlossen ist, gibt die Methode den ARN Ihrer neuen Lösungsversion zurück. Speichern Sie es für eine spätere Verwendung.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 ""; }
Weitere Informationen finden Sie unter Manuelles Erstellen einer Lösungsversion. Wenn Sie eine Lösungsversion erstellen, können Sie deren Leistung bewerten, bevor Sie fortfahren. Weitere Informationen finden Sie unter Evaluierung einer Amazon Personalize Personalize-Lösungsversion mit Metriken.
Nachdem Sie Ihre Lösungsversion trainiert und bewertet haben, stellen Sie sie mit einer Amazon Personalize Personalize-Kampagne bereit. Verwenden Sie die folgende createPersonalCampaign
Methode, um eine Lösungsversion bereitzustellen. Übergeben Sie Folgendes als Parameter: einen Amazon Personalize Personalize-Service-Client, den Amazon-Ressourcennamen (ARN) der Lösungsversion, die Sie im vorherigen Schritt erstellt haben, und einen Namen für die Kampagne. Die Methode gibt den ARN Ihrer neuen Kampagne zurück. Speichern Sie es für eine spätere Verwendung.
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);
}
}
Weitere Informationen zu Amazon Personalize finden Sie unterBereitstellen einer Amazon Personalize Personalize-Lösungsversion mit einer Kampagne.
Nachdem Sie eine Kampagne erstellt haben, verwenden Sie sie, um Empfehlungen zu erhalten. Verwenden Sie die folgende getRecs
Methode, um Empfehlungen für einen Benutzer zu erhalten. Übergeben Sie als Parameter einen Amazon Personalize Personalize-Runtime-Client, den Amazon-Ressourcennamen (ARN) der Kampagne, die Sie im vorherigen Schritt erstellt haben, und eine Benutzer-ID (z. B.123
) aus den historischen Daten, die Sie importiert haben. Die Methode druckt die Liste der empfohlenen Artikel auf den Bildschirm.
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);
}
}
Schließen Sie das Amazon Personalize-Projekt ab
Ein all-in-one Projekt, das Ihnen zeigt, wie Sie den Amazon Personalize Personalize-Workflow mit dem SDK for Java 2.x abschließen, finden Sie in der Amazon-Personalize-Java-App
Weitere Beispiele finden Sie im Code, den Sie im Ordner „Personalize