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
Ein aktives AWS-Konto
mit einem bootstrapped AWS Cloud Development Kit (AWS CDK) AWS Command Line Interface (AWS CLI) mit konfigurierten Anmeldeinformationen
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.
Das Diagramm zeigt den folgenden Workflow:
Kinesis Data Streams nimmt Echtzeit-Benutzerdaten (z. B. Ereignisse wie besuchte Haustiere) zur Verarbeitung durch Lambda und Firehose auf.
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.
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.
Amazon-Personalize-Kampagnen werden vom Zustandsautomaten aktualisiert, um die neue Lösungsversion zu verwenden.
Lambda sortiert die Liste der empfohlenen Elemente neu, indem es die Kampagne zum erneuten Rangwechsel von Amazon Personalize aufruft.
Lambda ruft die Liste der empfohlenen Elemente ab, indem es die Amazon-Personalize-Empfehlungskampagne aufruft.
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
Code
Der Code für dieses Muster ist im GitHub Bol Recommender
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
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie eine isolierte Python-Umgebung. | Mac/Linux-Einrichtung
Windows-Einrichtung Um eine virtuelle Umgebung manuell zu erstellen, führen Sie den | DevOps Techniker |
Synthetisieren Sie die CloudFormation Vorlage. |
Hinweis: In Schritt 2 | DevOps Techniker |
Stellen Sie Ressourcen bereit und erstellen Sie eine Infrastruktur. | Um die Lösungsressourcen bereitzustellen, führen Sie den 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, 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.