Générez des recommandations personnalisées et reclassées à l'aide d'Amazon Personalize - Recommandations AWS

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.

Générez des recommandations personnalisées et reclassées à l'aide d'Amazon Personalize

Créée par Mason Cahill (AWS), Matthew Chasse (AWS) et Tayo Olajide (AWS)

Référentiel de code : personalize-pet-recommendations

Environnement : PoC ou pilote

Technologies : apprentissage automatique et intelligence artificielle ; natif du cloud ; infrastructure DevOps ; sans serveur

Charge de travail : Open source

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

Récapitulatif

Ce modèle vous montre comment utiliser Amazon Personalize pour générer des recommandations personnalisées, y compris des recommandations reclassées, pour vos utilisateurs sur la base de l'ingestion de données d'interaction utilisateur en temps réel provenant de ces utilisateurs. L'exemple de scénario utilisé dans ce modèle est basé sur un site Web d'adoption d'animaux de compagnie qui génère des recommandations pour ses utilisateurs en fonction de leurs interactions (par exemple, les animaux qu'un utilisateur visite). En suivant l'exemple de scénario, vous apprendrez à utiliser Amazon Kinesis Data Streams pour ingérer les données d'interaction, AWS Lambda pour générer des recommandations et les reclasser, et Amazon Data Firehose pour stocker les données dans un compartiment Amazon Simple Storage Service (Amazon S3). Vous apprendrez également à utiliser AWS Step Functions pour créer une machine à états qui gère la version de la solution (c'est-à-dire un modèle entraîné) qui génère vos recommandations.

Conditions préalables et limitations

Prérequis

Versions du produit

  • Python 3.9

  • AWS CDK 2.23.0 ou version ultérieure

  • AWS CLI 2.7.27 ou version ultérieure

Architecture

Pile technologique

  • Amazon Data Firehose

  • Amazon Kinesis Data Streams

  • Amazon Personalize

  • Amazon Simple Storage Service (Amazon S3)

  • Kit de développement cloud AWS (AWS CDK)

  • Interface de ligne de commande AWS (AWS CLI)

  • AWS Lambda

  • AWS Step Functions

Architecture cible

Le schéma suivant illustre un pipeline d'ingestion de données en temps réel dans Amazon Personalize. Le pipeline utilise ensuite ces données pour générer des recommandations personnalisées et reclassées pour les utilisateurs.

Architecture d'ingestion de données pour Amazon Personalize

Le schéma suivant illustre le flux de travail suivant :

  1. Kinesis Data Streams ingère des données utilisateur en temps réel (par exemple, des événements tels que la visite d'animaux de compagnie) pour les traiter par Lambda et Firehose.

  2. Une fonction Lambda traite les enregistrements de Kinesis Data Streams et lance un appel d'API pour ajouter l'interaction utilisateur contenue dans l'enregistrement à un outil de suivi d'événements dans Amazon Personalize.

  3. Une règle basée sur le temps invoque une machine d'état Step Functions et génère de nouvelles versions de solutions pour les modèles de recommandation et de reclassement en utilisant les événements du suivi des événements d'Amazon Personalize.

  4. Les campagnes Amazon Personalize sont mises à jour par le State Machine pour utiliser la nouvelle version de la solution.

  5. Lambda reclasse la liste des articles recommandés en lançant la campagne de reclassement Amazon Personalize.

  6. Lambda récupère la liste des articles recommandés en appelant la campagne de recommandations Amazon Personalize.

  7. Firehose enregistre les événements dans un compartiment S3 où ils sont accessibles sous forme de données historiques.

Outils

Outils AWS

  • AWS Cloud Development Kit (AWS CDK) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.

  • L'interface de ligne de commande AWS (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.

  • Amazon Data Firehose vous aide à fournir des données de streaming en temps réel à d'autres services AWS, à des points de terminaison HTTP personnalisés et à des points de terminaison HTTP détenus par des fournisseurs de services tiers pris en charge.

  • Amazon Kinesis Data Streams vous aide à collecter et à traiter de grands flux d'enregistrements de données en temps réel.

  • AWS Lambda est un service de calcul qui vous permet d'exécuter du code sans avoir à provisionner ou à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

  • Amazon Personalize est un service d'apprentissage automatique (ML) entièrement géré qui vous aide à générer des recommandations d'articles pour vos utilisateurs en fonction de vos données.

  • AWS Step Functions est un service d'orchestration sans serveur qui vous permet de combiner les fonctions Lambda et d'autres services AWS pour créer des applications critiques pour l'entreprise.

Autres outils

  • pytest est un framework Python pour écrire de petits tests lisibles.

  • Python est un langage de programmation informatique polyvalent.

Code

Le code de ce modèle est disponible dans le référentiel GitHub Animal Recommender. Vous pouvez utiliser le CloudFormation modèle AWS de ce référentiel pour déployer les ressources de l'exemple de solution.

Remarque : les versions de la solution Amazon Personalize, le suivi des événements et les campagnes sont soutenus par des ressources personnalisées (au sein de l'infrastructure) qui s'appuient sur CloudFormation des ressources natives.

Épopées

TâcheDescriptionCompétences requises

Créez un environnement Python isolé.

Configuration Mac/Linux

  1. Pour créer manuellement un environnement virtuel, exécutez la $ python3 -m venv .venv commande depuis votre terminal.

  2. Une fois le processus d'initialisation terminé, exécutez la $ source .venv/bin/activate commande pour activer l'environnement virtuel.

Configuration de Windows

Pour créer manuellement un environnement virtuel, exécutez la % .venv\Scripts\activate.bat commande depuis votre terminal.

DevOps ingénieur

Synthétisez le CloudFormation modèle.

  1. Pour installer les dépendances requises, exécutez la $ pip install -r requirements.txt commande depuis votre terminal.

  2. Dans l'AWS CLI, définissez les variables d'environnement suivantes :

    • export ACCOUNT_ID=123456789

    • export CDK_DEPLOY_REGION=us-east-1

    • export CDK_ENVIRONMENT=dev

  3. Dans le config/{env}.yml fichier, mettez-le à jour vpcId pour qu'il corresponde à votre ID de cloud privé virtuel (VPC).

  4. Pour synthétiser le CloudFormation modèle de ce code, exécutez la $ cdk synth commande.

Remarque : À l'étape 2, CDK_ENVIRONMENT fait référence au config/{env}.yml fichier.

DevOps ingénieur

Déployez des ressources et créez une infrastructure.

Pour déployer les ressources de la solution, exécutez la ./deploy.sh commande depuis votre terminal.

Cette commande installe les dépendances Python requises. Un script Python crée un compartiment S3 et une clé AWS Key Management Service (AWS KMS), puis ajoute les données de départ pour les créations de modèles initiales. Enfin, le script s'exécute cdk deploy pour créer l'infrastructure restante.

Remarque : L'entraînement initial du modèle a lieu lors de la création de la pile. La création de la pile peut prendre jusqu'à deux heures.

DevOps ingénieur

Ressources connexes

Informations supplémentaires

Exemples de charges utiles et de réponses

Fonction Lambda de recommandation

Pour récupérer des recommandations, soumettez une demande à la fonction Lambda de recommandation avec une charge utile au format suivant :

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

L'exemple de réponse suivant contient une liste de groupes d'animaux :

[{"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"},

Si vous omettez ce userId champ, la fonction renvoie des recommandations générales.

Re-classement de la fonction Lambda

Pour utiliser le reclassement, soumettez une demande à la fonction Lambda de reclassement. La charge utile contient tous les identifiants userId d'éléments à reclasser et leurs métadonnées. Les exemples de données suivants utilisent les classes Oxford Pets pour animal_species_id (1=cat, 2=dog) et des nombres entiers de 1 à 5 pour et : animal_age_id 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" } } ] }

La fonction Lambda reclasse ces articles, puis renvoie une liste ordonnée qui inclut les identifiants des articles et la réponse directe d'Amazon Personalize. Il s'agit d'une liste classée des groupes d'animaux auxquels appartiennent les objets et de leur score. Amazon Personalize utilise des recettes de personnalisation utilisateur et de classement personnalisé pour inclure un score pour chaque article dans les recommandations. Ces scores représentent la certitude relative dont dispose Amazon Personalize quant au prochain article que l'utilisateur choisira. Des scores plus élevés représentent une plus grande certitude.

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

Charge utile Amazon Kinesis

La charge utile à envoyer à Amazon Kinesis est au format suivant :

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

Remarque : Le userId champ est supprimé pour un utilisateur non authentifié.