Créez un pipeline de recommandation par lots à l'aide d'Amazon Personalize sans code PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Créer un pipeline de recommandation par lots à l'aide d'Amazon Personalize sans code

Avec un contenu personnalisé plus susceptible de stimuler l'engagement des clients, les entreprises cherchent en permanence à fournir un contenu personnalisé en fonction du profil et du comportement de leurs clients. Les systèmes de recommandation, en particulier, cherchent à prédire la préférence qu'un utilisateur final donnerait à un article. Certains cas d'utilisation courants incluent les recommandations de produits sur les magasins de vente au détail en ligne, la personnalisation des newsletters, la génération de recommandations de listes de lecture musicales ou même la découverte de contenus similaires sur les services de médias en ligne.

Cependant, il peut être difficile de créer un système de recommandation efficace en raison de la complexité de la formation des modèles, de la sélection des algorithmes et de la gestion de la plate-forme. Amazon Personnaliser permet aux développeurs d'améliorer l'engagement des clients grâce à des recommandations personnalisées de produits et de contenus sans aucune expertise en machine learning (ML) requise. Les développeurs peuvent commencer à engager les clients immédiatement en utilisant les données de comportement des utilisateurs capturées. Dans les coulisses, Amazon Personalize examine ces données, identifie ce qui est significatif, sélectionne les bons algorithmes, forme et optimise un modèle de personnalisation personnalisé pour vos données et fournit des recommandations via un point de terminaison API.

Bien que fournir des recommandations en temps réel puisse aider à stimuler l'engagement et la satisfaction, cela peut parfois ne pas être nécessaire, et effectuer cela par lots sur une base planifiée peut simplement être une option plus rentable et gérable.

Cet article vous montre comment utiliser les services AWS non seulement pour créer des recommandations, mais également pour opérationnaliser un pipeline de recommandations par lots. Nous parcourons la solution de bout en bout sans une seule ligne de code. Nous abordons en détail deux sujets :

Vue d'ensemble de la solution

Dans cette solution, nous utilisons le FilmLens base de données. Cet ensemble de données comprend 86,000 2,113 notes de films de XNUMX XNUMX utilisateurs. Nous essayons d'utiliser ces données pour générer des recommandations pour chacun de ces utilisateurs.

La préparation des données est très importante pour nous assurer que nous obtenons les données sur le comportement des clients dans un format prêt pour Amazon Personalize. L'architecture décrite dans cet article utilise AWS Glue, un service d'intégration de données sans serveur, pour effectuer la transformation des données brutes dans un format prêt à être consommé par Amazon Personalize. La solution utilise Amazon Personalize pour créer des recommandations par lots pour tous les utilisateurs à l'aide d'une inférence par lots. Nous utilisons ensuite un flux de travail Step Functions afin que le flux de travail automatisé puisse être exécuté en appelant les API Amazon Personalize de manière reproductible.

Le schéma suivant illustre cette solution.Schéma d'architecture

Nous allons construire cette solution avec les étapes suivantes :

  1. Créez une tâche de transformation de données pour transformer nos données brutes à l'aide d'AWS Glue.
  2. Créez une solution Amazon Personalize avec l'ensemble de données transformé.
  3. Créez un flux de travail Step Functions pour orchestrer la génération d'inférences par lots.

Pré-requis

Vous avez besoin des éléments suivants pour cette procédure pas à pas :

Créer une tâche de transformation de données pour transformer les données brutes avec AWS Glue

Avec Amazon Personalize, les données d'entrée doivent avoir un schéma et un format de fichier spécifiques. Les données des interactions entre les utilisateurs et les éléments doivent être au format CSV avec des colonnes spécifiques, tandis que la liste des utilisateurs pour lesquels vous souhaitez générer des recommandations doit être au format JSON. Dans cette section, nous utilisons AWS Glue Studio pour transformer les données d'entrée brutes dans les structures et le format requis pour Amazon Personalize.

AWS Glue Studio fournit une interface graphique conçue pour faciliter la création et l'exécution de tâches d'extraction, de transformation et de chargement (ETL). Vous pouvez créer visuellement des charges de travail de transformation de données via de simples opérations de glisser-déposer.

Nous préparons d'abord nos données sources dans Service de stockage simple Amazon (Amazon S3), puis nous transformons les données sans code.

  1. Sur la console Amazon S3, créez un compartiment S3 avec trois dossiers : brut, transformé et organisé.
  2. Télécharger Ensemble de données MovieLens et chargez le fichier non compressé nommé user_ratingmovies-timestamp.dat dans votre bucket sous le dossier raw.
  3. Sur la console AWS Glue Studio, choisissez Emplois dans le volet de navigation.
  4. Sélectionnez Visuel avec une source et une cible, Puis choisissez Création.
  5. Choisissez le premier nœud appelé Source de données – compartiment S3. C'est ici que nous spécifions nos données d'entrée.
  6. Sur le Propriétés de la source de données onglet, sélectionnez Emplacement S3 et accédez à votre fichier téléchargé.
  7. Pour Format de données, choisissez CSV, Et pour Délimiteur, choisissez Languette.
    AWS Glue Studio-S3
  8. Nous pouvons choisir l'onglet Schéma de sortie pour vérifier que le schéma a correctement déduit les colonnes.
  9. Si le schéma ne correspond pas à vos attentes, choisissez Modifier pour modifier le schéma.
    AWS Glue Studio - Champs

Ensuite, nous transformons ces données pour suivre les exigences du schéma pour Amazon Personalize.

  1. Choisissez le Transformer - Appliquer le mappage nœud et, sur le Transformer , mettez à jour la clé cible et les types de données.
    Amazon Personalize attend au minimum la structure suivante pour le ensemble de données d'interactions:
    • user_id (chaîne)
    • item_id (chaîne)
    • timestamp (long, au format d'heure d'époque Unix)
      AWS Glue Studio - Mappage des champs

Dans cet exemple, nous excluons les films mal notés de l'ensemble de données.

  1. Pour ce faire, supprimez le dernier nœud appelé compartiment S3 et ajoutez un nœud de filtre sur le Transformer languette.
  2. Selectionnez Ajouter condition et filtrer les données dont la note est < 3.5.
    AWS Glue Studio - Sortie

Nous écrivons maintenant la sortie dans Amazon S3.

  1. Élargir la Target menu et choisissez Amazon S3.
  2. Pour Emplacement cible S3, choisissez le dossier nommé transformed.
  3. Selectionnez CSV comme format et suffixe Emplacement cible comprenant interactions/.

Ensuite, nous publions une liste d'utilisateurs pour lesquels nous souhaitons obtenir des recommandations.

  1. Choisissez le Appliquer le mappage nouveau nœud, puis développez le Transformer menu et choisissez Appliquer le mappage.
  2. Supprimez tous les champs sauf user_id et renommez ce champ en userId. Amazon Personalize s'attend à ce que ce champ soit nommé identifiant d'utilisateur.
  3. Élargir la Target menu et choisissez Amazon S3.
  4. Cette fois, choisissez JSON comme format, puis choisissez le dossier S3 transformé et suffixez-le avec batch_users_input/.

Cela produit un JSON liste d'utilisateurs comme entrée pour Amazon Personalize. Nous devrions maintenant avoir un diagramme qui ressemble à ce qui suit.

AWS Glue Studio - Flux de travail complet

Nous sommes maintenant prêts à exécuter notre travail de transformation.

  1. Sur la console IAM, créez un rôle appelé glue-service-role et attachez les stratégies gérées suivantes :
    • AWSGlueServiceRole
    • AmazonS3FullAccess

Pour plus d'informations sur la création de rôles de service IAM, consultez le Création d'un rôle pour déléguer des autorisations à un service AWS.

  1. Revenez à votre travail AWS Glue Studio et choisissez le Détails du poste languette.
  2. Définissez le nom du travail comme batch-personalize-input-transform-job.
  3. Choisissez le rôle IAM nouvellement créé.
  4. Conservez les valeurs par défaut pour tout le reste.
    AWS Glue Studio - Détails de la tâche
  5. Selectionnez Épargnez.
  6. Lorsque vous êtes prêt, choisissez Courir et surveiller le travail dans le Fonctionne languette.
  7. Lorsque la tâche est terminée, accédez à la console Amazon S3 pour vérifier que votre fichier de sortie a été créé avec succès.

Nous avons maintenant façonné nos données dans le format et la structure requis par Amazon Personalize. L'ensemble de données transformé doit avoir les champs et le format suivants :

  • Ensemble de données d'interactions – Format CSV avec champs USER_ID, ITEM_ID, TIMESTAMP
  • Ensemble de données d'entrée utilisateur – Format JSON avec élément userId

Créer une solution Amazon Personalize avec l'ensemble de données transformé

Avec notre jeu de données d'interactions et nos données d'entrée utilisateur au bon format, nous pouvons désormais créer notre solution Amazon Personalize. Dans cette section, nous créons notre groupe d'ensembles de données, importons nos données, puis créons une tâche d'inférence par lots. Un groupe d'ensembles de données organise les ressources dans des conteneurs pour les composants Amazon Personalize.

  1. Sur la console Amazon Personalize, choisissez Création groupe de jeux de données.
  2. Pour Domaine, sélectionnez Coutume.
  3. Selectionnez Créer un groupe d'ensembles de données et continuer.
    Amazon Personalize - créer un groupe d'ensembles de données

Ensuite, créez le jeu de données d'interactions.

  1. Entrez un nom de jeu de données et sélectionnez Créer un nouveau schéma.
  2. Selectionnez Créer un jeu de données et continuer.
    Amazon Personalize - créer un ensemble de données d'interactions

Nous importons maintenant les données d'interactions que nous avions créées précédemment.

  1. Accédez au compartiment S3 dans lequel nous avons créé notre ensemble de données CSV d'interactions.
  2. Sur le Permissions , ajoutez la stratégie d'accès au compartiment suivante afin qu'Amazon Personalize y ait accès. Mettez à jour la stratégie pour inclure le nom de votre compartiment.
    {
       "Version":"2012-10-17",
       "Id":"PersonalizeS3BucketAccessPolicy",
       "Statement":[
          {
             "Sid":"PersonalizeS3BucketAccessPolicy",
             "Effect":"Allow",
             "Principal":{
                "Service":"personalize.amazonaws.com"
             },
             "Action":[
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
             ],
             "Resource":[
                "arn:aws:s3:::<your-bucket-name>",
                "arn:aws:s3:::<your-bucket-name> /*"
             ]
          }
       ]
    }

Revenez à Amazon Personalize et choisissez Créer votre tâche d'importation d'ensemble de données. Notre ensemble de données d'interactions devrait maintenant être importé dans Amazon Personalize. Attendez que la tâche d'importation se termine avec le statut Actif avant de passer à l'étape suivante. Cela devrait prendre environ 8 minutes.

  1. Sur la console Amazon Personalize, choisissez Vue d’ensemble dans le volet de navigation et choisissez Créer une solution.
    Amazon Personalize - Tableau de bord
  2. Entrez un nom de solution.
  3. Pour Type de solution, choisissez Recommandation d'article.
  4. Pour Recette, choisir la aws-user-personalization recette.
  5. Selectionnez Créer et former une solution.
    Amazon Personalize - créer une solution

La solution s'entraîne désormais par rapport à l'ensemble de données d'interactions qui a été importé avec la recette de personnalisation de l'utilisateur. Surveillez l'état de ce processus sous Variantes de solutions. Attendez qu'il soit terminé avant de continuer. Cela devrait prendre environ 20 minutes.
Amazon Personalize - Statut

Nous créons maintenant notre travail d'inférence par lots, qui génère des recommandations pour chacun des utilisateurs présents dans l'entrée JSON.

  1. Dans le volet de navigation, sous Ressources personnalisées, choisissez Tâches d'inférence par lots.
  2. Saisissez un nom de tâche et, pour Solution, choisissez la solution créée précédemment.
  3. Selectionnez Créer un travail d'inférence par lots.
    Amazon Personalize - créer une tâche d'inférence par lots
  4. Pour Configuration des données d'entrée, entrez le chemin S3 de l'endroit où batch_users_input le fichier est localisé.

Ceci est le fichier JSON qui contient userId.

  1. Pour Configuration des données de sortie chemin, choisissez le chemin sélectionné dans S3.
  2. Selectionnez Créer un travail d'inférence par lots.

Ce processus prend environ 30 minutes. Lorsque la tâche est terminée, les recommandations pour chacun des utilisateurs spécifiés dans le fichier d'entrée utilisateur sont enregistrées dans l'emplacement de sortie S3.

Nous avons généré avec succès un ensemble de recommandations pour tous nos utilisateurs. Cependant, nous n'avons implémenté la solution qu'à l'aide de la console jusqu'à présent. Pour nous assurer que cette inférence par lots s'exécute régulièrement avec le dernier ensemble de données, nous devons créer un workflow d'orchestration. Dans la section suivante, nous vous montrons comment créer un workflow d'orchestration à l'aide de Step Functions.

Créer un flux de travail Step Functions pour orchestrer le flux de travail d'inférence par lots

Pour orchestrer votre pipeline, procédez comme suit :

  1. Sur la console Step Functions, choisissez Créer une machine d'état.
  2. Sélectionnez Concevez visuellement votre flux de travail, Puis choisissez Suivant.
    AWS Step Functions - Créer un flux de travail
  3. Faites glisser le CreateDatasetImportJob nœud de gauche (vous pouvez rechercher ce nœud dans la zone de recherche) sur le canevas.
  4. Choisissez le nœud et vous devriez voir les paramètres de l'API de configuration sur la droite. Enregistrez l'ARN.
  5. Entrez vos propres valeurs dans le Paramètres API zone de texte.

Cela appelle le CreateDatasetImportJob API avec les valeurs de paramètre que vous spécifiez.

Flux de travail AWS Step Functions

  1. Faites glisser le CreateSolutionVersion nœud sur la toile.
  2. Mettez à jour les paramètres de l'API avec l'ARN de la solution que vous avez notée.

Cela crée une nouvelle version de la solution avec les données nouvellement importées en appelant le Créer une version de solution API.

  1. Faites glisser le CreateBatchInferenceJob nœud sur le canevas et mettez à jour de la même manière les paramètres de l'API avec les valeurs pertinentes.

Assurez-vous d'utiliser le $.SolutionVersionArn syntaxe pour récupérer le paramètre ARN de la version de la solution de l'étape précédente. Ces paramètres d'API sont transmis au CreateBatchInferenceJob API.

Flux de travail AWS Step Functions

Nous devons créer une logique d'attente dans le flux de travail Step Functions pour nous assurer que la tâche d'inférence par lots de recommandations se termine avant la fin du flux de travail.

  1. Recherchez et faites glisser un nœud d'attente.
  2. Dans la configuration pour Attendez, entrez 300 secondes.

Il s'agit d'une valeur arbitraire ; vous devez modifier ce temps d'attente en fonction de votre cas d'utilisation spécifique.

  1. Choisissez le CreateBatchInferenceJob nouveau nœud et naviguez jusqu'au La gestion des erreurs languette.
  2. Pour Attraper erreurs, Entrer Personalize.ResourceInUseException.
  3. Pour État de repli, choisissez Attendez.

Cette étape nous permet de vérifier périodiquement l'état du travail et de ne sortir de la boucle que lorsque le travail est terminé.

  1. Pour CheminRésultat, Entrer $.errorMessage.

Cela signifie effectivement que lorsque l'exception "ressource en cours d'utilisation" est reçue, le travail attend x secondes avant de réessayer avec les mêmes entrées.

Flux de travail AWS Step Functions

  1. Selectionnez Épargnez, puis choisissez Lancer l'exécution.

Nous avons orchestré avec succès notre pipeline de recommandations par lots pour Amazon Personalize. Comme étape facultative, vous pouvez utiliser Amazon Event Bridge pour programmer un déclenchement de ce workflow sur une base régulière. Pour plus de détails, reportez-vous à EventBridge (CloudWatch Events) pour les changements d'état d'exécution de Step Functions.

Nettoyer

Pour éviter des frais futurs, supprimez les ressources que vous avez créées pour cette procédure pas à pas.

Conclusion

Dans cet article, nous avons montré comment créer un pipeline de recommandations par lots en utilisant une combinaison d'AWS Glue, Amazon Personalize et Step Functions, sans avoir besoin d'une seule ligne de code ou d'expérience ML. Nous avons utilisé AWS Glue pour préparer nos données dans le format requis par Amazon Personalize. Ensuite, nous avons utilisé Amazon Personalize pour importer les données, créer une solution avec une recette de personnalisation de l'utilisateur et créer une tâche d'inférence par lots qui génère une valeur par défaut de 25 recommandations pour chaque utilisateur, en fonction des interactions passées. Nous avons ensuite orchestré ces étapes à l'aide de Step Functions afin de pouvoir exécuter ces tâches automatiquement.

Pour les étapes à considérer ensuite, la segmentation des utilisateurs est l'une des recettes les plus récentes d'Amazon Personalize, que vous voudrez peut-être explorer pour créer des segments d'utilisateurs pour chaque ligne des données d'entrée. Pour plus de détails, reportez-vous à Obtenir des recommandations par lots et des segments d'utilisateurs.


A propos de l'auteure

Maxine Wee

Maxine Wee est un architecte de solutions AWS Data Lab. Maxine travaille avec les clients sur leurs cas d'utilisation, conçoit des solutions pour résoudre leurs problèmes commerciaux et les guide dans la construction de prototypes évolutifs. Avant son parcours avec AWS, Maxine a aidé des clients à mettre en œuvre des projets de BI, d'entreposage de données et de lac de données en Australie.

Horodatage:

Plus de Apprentissage automatique AWS