Generieren Sie personalisierte und neu eingestufte Empfehlungen mit Amazon Personalize - AWS Prescriptive Guidance

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.

Generieren Sie personalisierte und neu eingestufte Empfehlungen mit Amazon Personalize

Erstellt von Bol Calaze (AWS), Matthew Chasse (AWS) und Taio Olajide (AWS)

Code-Repository: personalize-pet-recommendations

Umgebung: PoC oder Pilotprojekt

Technologien: Machine Learning und KI; Cloudnativ; DevOpsInfrastruktur; Serverless

Workload: Open-Source

AWS-Services: AWS CloudFormation; Amazon Kinesis Data Firehose ; AWS Lambda ; Amazon Personalize; AWS Step Functions

Übersicht

Dieses Muster zeigt Ihnen, wie Sie Amazon Personalize verwenden, um personalisierte Empfehlungen – einschließlich neu eingestufter Empfehlungen – für Ihre Benutzer zu generieren, die auf der Aufnahme von Echtzeit-Benutzerinteraktionsdaten dieser Benutzer basieren. Das in diesem Muster verwendete Beispielszenario basiert auf einer Website zur Einführung von Haustieren, die Empfehlungen für seine Benutzer auf der Grundlage ihrer Interaktionen generiert (z. B. welche Haustiere ein Benutzer besucht). Wenn Sie dem Beispielszenario folgen, erfahren Sie, wie Sie Amazon Kinesis Data Streams verwenden, um Interaktionsdaten aufzunehmen, AWS Lambda, um Empfehlungen zu generieren und die Empfehlungen neu anzuordnen, und Amazon Data Firehose, um die Daten in einem Amazon Simple Storage Service (Amazon S3)-Bucket zu speichern. Sie lernen auch, AWS Step Functions zu verwenden, um einen Zustandsautomaten zu erstellen, der die Lösungsversion (d. h. ein trainiertes Modell) verwaltet, die Ihre Empfehlungen generiert.

Voraussetzungen und Einschränkungen

Voraussetzungen

Produktversionen

  • Python 3.9

  • AWS CDK 2.23.0 oder höher

  • AWS CLI 2.7.27 oder höher

Architektur

Technologie-Stack

  • Amazon Data Firehose

  • Amazon Kinesis Data Streams

  • Amazon Personalize

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Cloud Development Kit (AWS-CDK)

  • AWS-Befehlszeilenschnittstelle (AWS Command Line Interface, AWS CLI)

  • AWS Lambda

  • AWS Step Functions

Zielarchitektur

Das folgende Diagramm veranschaulicht eine Pipeline für die Aufnahme von Echtzeitdaten in Amazon Personalize. Die Pipeline verwendet diese Daten dann, um personalisierte und neu eingestufte Empfehlungen für Benutzer zu generieren.

Datenerfassungsarchitektur für Amazon Personalize

Das Diagramm zeigt den folgenden Workflow:

  1. Kinesis Data Streams nimmt Echtzeit-Benutzerdaten (z. B. Ereignisse wie besuchte Haustiere) zur Verarbeitung durch Lambda und Firehose auf.

  2. Eine Lambda-Funktion verarbeitet die Datensätze aus Kinesis Data Streams und führt einen API-Aufruf durch, um die Benutzerinteraktion im Datensatz einem Ereignis-Tracker in Amazon Personalize hinzuzufügen.

  3. Eine zeitbasierte Regel ruft einen Step-Functions-Zustandsautomaten auf und generiert neue Lösungsversionen für die Empfehlung und die Neurangierung von Modellen, indem die Ereignisse aus dem Ereignis-Tracker in Amazon Personalize verwendet werden.

  4. Amazon-Personalize-Kampagnen werden vom Zustandsautomaten aktualisiert, um die neue Lösungsversion zu verwenden.

  5. Lambda sortiert die Liste der empfohlenen Elemente neu, indem es die Kampagne zum erneuten Rangwechsel von Amazon Personalize aufruft.

  6. Lambda ruft die Liste der empfohlenen Elemente ab, indem es die Amazon-Personalize-Empfehlungskampagne aufruft.

  7. Firehose speichert die Ereignisse in einem S3-Bucket, in dem auf sie als historische Daten zugegriffen werden kann.

Tools

AWS-Tools

  • AWS Cloud Development Kit (AWS CDK) ist ein Softwareentwicklungs-Framework, mit dem Sie AWS Cloud-Infrastruktur im Code definieren und bereitstellen können.

  • AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.

  • Amazon Data Firehose unterstützt Sie bei der Bereitstellung von Echtzeit-Streaming-Daten an andere AWS-Services, benutzerdefinierte HTTP-Endpunkte und HTTP-Endpunkte, die unterstützten Drittanbietern gehören.

  • Amazon Kinesis Data Streams hilft Ihnen, große Streams von Datensätzen in Echtzeit zu sammeln und zu verarbeiten.

  • AWS Lambda ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Es führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die genutzte Rechenzeit bezahlen.

  • Amazon Personalize ist ein vollständig verwalteter Machine Learning (ML)-Service, mit dem Sie Elementempfehlungen für Ihre Benutzer basierend auf Ihren Daten generieren können.

  • AWS Step Functions ist ein Serverless-Orchestrierungsservice, mit dem Sie Lambda-Funktionen und andere AWS-Services kombinieren können, um geschäftskritische Anwendungen zu erstellen.

Andere Tools

  • pytest ist ein Python-Framework zum Schreiben kleiner, lesbarer Tests.

  • Python ist eine Allzweck-Computer-Programmiersprache.

Code

Der Code für dieses Muster ist im GitHub Bol Recommender-Repository verfügbar. Sie können die AWS- CloudFormation Vorlage aus diesem Repository verwenden, um die Ressourcen für die Beispiellösung bereitzustellen.

Hinweis: Die Amazon-Personalize-Lösungsversionen, der Ereignis-Tracker und Kampagnen werden durch benutzerdefinierte Ressourcen (innerhalb der -Infrastruktur) unterstützt, die sich auf native CloudFormation Ressourcen erweitern.

Sekunden

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine isolierte Python-Umgebung.

Mac/Linux-Einrichtung

  1. Um eine virtuelle Umgebung manuell zu erstellen, führen Sie den $ python3 -m venv .venv Befehl von Ihrem Terminal aus aus.

  2. Führen Sie nach Abschluss des Initialisierungsvorgangs den $ source .venv/bin/activate Befehl aus, um die virtuelle Umgebung zu aktivieren.

Windows-Einrichtung

Um eine virtuelle Umgebung manuell zu erstellen, führen Sie den % .venv\Scripts\activate.bat Befehl von Ihrem Terminal aus aus.

DevOps Techniker

Synthetisieren Sie die CloudFormation Vorlage.

  1. Um die erforderlichen Abhängigkeiten zu installieren, führen Sie den $ pip install -r requirements.txt Befehl von Ihrem Terminal aus aus.

  2. Legen Sie in der AWS CLI die folgenden Umgebungsvariablen fest:

    • export ACCOUNT_ID=123456789

    • export CDK_DEPLOY_REGION=us-east-1

    • export CDK_ENVIRONMENT=dev

  3. Aktualisieren SievpcId in der -config/{env}.ymlDatei so, dass sie Ihrer Virtual Private Cloud (VPC)-ID entspricht.

  4. Um die CloudFormation Vorlage für diesen Code zu synthetisieren, führen Sie den $ cdk synth Befehl aus.

Hinweis: In Schritt 2 CDK_ENVIRONMENT bezieht sich auf die -config/{env}.ymlDatei.

DevOps Techniker

Stellen Sie Ressourcen bereit und erstellen Sie eine Infrastruktur.

Um die Lösungsressourcen bereitzustellen, führen Sie den ./deploy.sh Befehl von Ihrem Terminal aus aus.

Mit diesem Befehl werden die erforderlichen Python-Abhängigkeiten installiert. Ein Python-Skript erstellt einen S3-Bucket und einen AWS Key Management Service (AWS KMS)-Schlüssel und fügt dann die Seed-Daten für die ersten Modellerstellungen hinzu. Schließlich wird das Skript ausgeführt, cdk deployum die verbleibende Infrastruktur zu erstellen.

Hinweis: Das erste Modelltraining findet während der Stack-Erstellung statt. Es kann bis zu zwei Stunden dauern, bis der Stack die Erstellung abgeschlossen hat.

DevOps Techniker

Zugehörige Ressourcen

Zusätzliche Informationen

Beispiel für Nutzlasten und Antworten

Empfehlungs-Lambda-Funktion

Um Empfehlungen abzurufen, senden Sie eine Anfrage an die Empfehlungs-Lambda-Funktion mit einer Nutzlast im folgenden Format:

{ "userId": "3578196281679609099", "limit": 6 }

Die folgende Beispielantwort enthält eine Liste von Arztgruppen:

[{"id": "1-domestic short hair-1-1"}, {"id": "1-domestic short hair-3-3"}, {"id": "1-domestic short hair-3-2"}, {"id": "1-domestic short hair-1-2"}, {"id": "1-domestic short hair-3-1"}, {"id": "2-beagle-3-3"},

Wenn Sie das userId Feld auslassen, gibt die Funktion allgemeine Empfehlungen zurück.

Neuranging der Lambda-Funktion

Um das Re-Ranking zu verwenden, senden Sie eine Anfrage an die Re-Ranking-Lambda-Funktion. Die Nutzlast enthält die userId aller Element-IDs, die neu eingestuft werden sollen, und ihre Metadaten. Die folgenden Beispieldaten verwenden die Pets-Klassen für animal_species_id (1=cat, 2=dog) und Ganzzahlen 1-5 für animal_age_id und animal_size_id:

{ "userId":"12345", "itemMetadataList":[ { "itemId":"1", "animalMetadata":{ "animal_species_id":"2", "animal_primary_breed_id":"Saint_Bernard", "animal_size_id":"3", "animal_age_id":"2" } }, { "itemId":"2", "animalMetadata":{ "animal_species_id":"1", "animal_primary_breed_id":"Egyptian_Mau", "animal_size_id":"1", "animal_age_id":"1" } }, { "itemId":"3", "animalMetadata":{ "animal_species_id":"2", "animal_primary_breed_id":"Saint_Bernard", "animal_size_id":"3", "animal_age_id":"2" } } ] }

Die Lambda-Funktion sortiert diese Elemente neu und gibt dann eine geordnete Liste zurück, die die Element-IDs und die direkte Antwort von Amazon Personalize enthält. Dies ist eine Rangliste der Arztgruppen, in denen sich die Elemente befinden, und ihrer Punktzahl. Amazon Personalize verwendet User-Personalization- und Personalized-Ranking-Rezepte, um eine Punktzahl für jedes Element in die Empfehlungen aufzunehmen. Diese Punktzahlen stellen die relative Sicherheit dar, die Amazon Personalize darüber hat, welches Element der Benutzer als Nächstes auswählen wird. Höhere Punktzahlen bedeuten eine größere Gewissheit.

{ "ranking":[ "1", "3", "2" ], "personalizeResponse":{ "ResponseMetadata":{ "RequestId":"a2ec0417-9dcd-4986-8341-a3b3d26cd694", "HTTPStatusCode":200, "HTTPHeaders":{ "date":"Thu, 16 Jun 2022 22:23:33 GMT", "content-type":"application/json", "content-length":"243", "connection":"keep-alive", "x-amzn-requestid":"a2ec0417-9dcd-4986-8341-a3b3d26cd694" }, "RetryAttempts":0 }, "personalizedRanking":[ { "itemId":"2-Saint_Bernard-3-2", "score":0.8947961 }, { "itemId":"1-Siamese-1-1", "score":0.105204 } ], "recommendationId":"RID-d97c7a87-bd4e-47b5-a89b-ac1d19386aec" } }

Amazon Kinesis-Nutzlast

Die Nutzlast, die an Amazon Kinesis gesendet werden soll, hat das folgende Format:

{ "Partitionkey": "randomstring", "Data": { "userId": "12345", "sessionId": "sessionId4545454", "eventType": "DetailView", "animalMetadata": { "animal_species_id": "1", "animal_primary_breed_id": "Russian_Blue", "animal_size_id": "1", "animal_age_id": "2" }, "animal_id": "98765" } }

Hinweis: Das userId Feld wird für einen nicht authentifizierten Benutzer entfernt.