Genera consigli personalizzati e riclassificati con Amazon Personalize - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Genera consigli personalizzati e riclassificati con Amazon Personalize

Creato da Mason Cahill (AWS), Matthew Chasse (AWS) e Tayo Olajide (AWS)

Archivio di codici: personalize-pet-recommendations

Ambiente: PoC o pilota

Tecnologie: apprendimento automatico e intelligenza artificiale; nativa per il cloud; infrastruttura DevOps; senza server

Carico di lavoro: open source

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

Riepilogo

Questo modello mostra come utilizzare Amazon Personalize per generare consigli personalizzati, inclusi consigli riclassificati, per i tuoi utenti in base all'acquisizione di dati di interazione utente in tempo reale da tali utenti. Lo scenario di esempio utilizzato in questo modello si basa su un sito Web dedicato all'adozione di animali domestici che genera consigli per gli utenti in base alle loro interazioni (ad esempio, quali animali domestici visita un utente). Seguendo lo scenario di esempio, impari a utilizzare Amazon Kinesis Data Streams per importare dati di interazione, AWS Lambda per generare consigli e riclassificarli e Amazon Data Firehose per archiviare i dati in un bucket Amazon Simple Storage Service (Amazon S3). Imparerai anche a usare AWS Step Functions per creare una macchina a stati che gestisca la versione della soluzione (ovvero un modello addestrato) che genera i tuoi consigli.

Prerequisiti e limitazioni

Prerequisiti

Versioni del prodotto

  • Python 3.9

  • AWS CDK 2.23.0 o versione successiva

  • AWS CLI 2.7.27 o versione successiva

Architettura

Stack tecnologico

  • Amazon Data Firehose

  • Flusso di dati Amazon Kinesis

  • Amazon Personalize

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Cloud Development Kit (CDK AWS)

  • Interfaccia a riga di comando di AWS (CLI AWS)

  • AWS Lambda

  • AWS Step Functions

Architettura Target

Il diagramma seguente illustra una pipeline per l'acquisizione di dati in tempo reale in Amazon Personalize. La pipeline utilizza quindi tali dati per generare consigli personalizzati e riclassificati per gli utenti.

Architettura di inserimento dati per Amazon Personalize

Il diagramma mostra il flusso di lavoro seguente:

  1. Kinesis Data Streams acquisisce i dati degli utenti in tempo reale (ad esempio, eventi come animali domestici visitati) per l'elaborazione da parte di Lambda e Firehose.

  2. Una funzione Lambda elabora i record di Kinesis Data Streams ed effettua una chiamata API per aggiungere l'interazione dell'utente nel record a un tracker di eventi in Amazon Personalize.

  3. Una regola basata sul tempo richiama una macchina a stati Step Functions e genera nuove versioni della soluzione per i modelli di raccomandazione e riclassificazione utilizzando gli eventi dell'event tracker in Amazon Personalize.

  4. Le campagne Amazon Personalize vengono aggiornate dalla macchina a stati per utilizzare la nuova versione della soluzione.

  5. Lambda riordina l'elenco degli articoli consigliati avviando la campagna di riclassificazione di Amazon Personalize.

  6. Lambda recupera l'elenco degli articoli consigliati chiamando la campagna di consigli di Amazon Personalize.

  7. Firehose salva gli eventi in un bucket S3 dove è possibile accedervi come dati storici.

Strumenti

Strumenti AWS

  • AWS Cloud Development Kit (AWS CDK) è un framework di sviluppo software che aiuta a definire e fornire l'infrastruttura cloud AWS in codice.

  • AWS Command Line Interface (AWS CLI) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

  • Amazon Data Firehose ti aiuta a distribuire dati di streaming in tempo reale ad altri servizi AWS, endpoint HTTP personalizzati ed endpoint HTTP di proprietà di provider di servizi terzi supportati.

  • Amazon Kinesis Data Streams ti aiuta a raccogliere ed elaborare grandi flussi di record di dati in tempo reale.

  • AWS Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

  • Amazon Personalize è un servizio di machine learning (ML) completamente gestito che ti aiuta a generare consigli sugli articoli per i tuoi utenti in base ai tuoi dati.

  • AWS Step Functions è un servizio di orchestrazione senza server che ti aiuta a combinare funzioni Lambda e altri servizi AWS per creare applicazioni aziendali critiche.

Altri strumenti

  • pytest è un framework Python per scrivere test piccoli e leggibili.

  • Python è un linguaggio di programmazione per computer generico.

Codice

Il codice per questo modello è disponibile nel repository GitHub Animal Recommender. Puoi utilizzare il CloudFormation modello AWS di questo repository per distribuire le risorse per la soluzione di esempio.

Nota: le versioni della soluzione Amazon Personalize, l'event tracker e le campagne sono supportate da risorse personalizzate (all'interno dell'infrastruttura) che si espandono su risorse native. CloudFormation

Epiche

AttivitàDescrizioneCompetenze richieste

Crea un ambiente Python isolato.

Configurazione Mac/Linux

  1. Per creare manualmente un ambiente virtuale, esegui il $ python3 -m venv .venv comando dal tuo terminale.

  2. Al termine del processo di inizializzazione, esegui il $ source .venv/bin/activate comando per attivare l'ambiente virtuale.

Configurazione di Windows

Per creare manualmente un ambiente virtuale, esegui il % .venv\Scripts\activate.bat comando dal tuo terminale.

DevOps ingegnere

Sintetizza il modello. CloudFormation

  1. Per installare le dipendenze richieste, esegui il $ pip install -r requirements.txt comando dal tuo terminale.

  2. Nella CLI di AWS, imposta le seguenti variabili di ambiente:

    • export ACCOUNT_ID=123456789

    • export CDK_DEPLOY_REGION=us-east-1

    • export CDK_ENVIRONMENT=dev

  3. Nel config/{env}.yml file, esegui l'aggiornamento in vpcId modo che corrisponda al tuo ID del cloud privato virtuale (VPC).

  4. Per sintetizzare il CloudFormation modello per questo codice, esegui il comando. $ cdk synth

Nota: nel passaggio 2, CDK_ENVIRONMENT si riferisce al config/{env}.yml file.

DevOps ingegnere

Implementa risorse e crea infrastrutture.

Per distribuire le risorse della soluzione, esegui il ./deploy.sh comando dal tuo terminale.

Questo comando installa le dipendenze Python richieste. Uno script Python crea un bucket S3 e una chiave AWS Key Management Service (AWS KMS), quindi aggiunge i dati iniziali per le creazioni iniziali del modello. Infine, lo script viene eseguito per creare l'infrastruttura rimanentecdk deploy.

Nota: l'addestramento iniziale del modello avviene durante la creazione dello stack. Il completamento della creazione dello stack può richiedere fino a due ore.

DevOps ingegnere

Risorse correlate

Informazioni aggiuntive

Esempi di payload e risposte

Raccomandazione: funzione Lambda

Per recuperare i consigli, invia una richiesta alla funzione Lambda delle raccomandazioni con un payload nel seguente formato:

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

Il seguente esempio di risposta contiene un elenco di gruppi di animali:

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

Se si omette il userId campo, la funzione restituisce raccomandazioni generali.

Riclassificazione della funzione Lambda

Per utilizzare la riclassificazione, invia una richiesta alla funzione di riclassificazione Lambda. Il payload contiene tutti gli ID userId degli elementi da riclassificare e i relativi metadati. I seguenti dati di esempio utilizzano le classi Oxford Pets for animal_species_id (1=cat, 2=dog) e i numeri interi 1-5 per e: 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 funzione Lambda riclassifica questi articoli e quindi restituisce un elenco ordinato che include gli ID degli articoli e la risposta diretta di Amazon Personalize. Questo è un elenco classificato dei gruppi di animali a cui appartengono gli articoli e del relativo punteggio. Amazon Personalize utilizza le ricette di personalizzazione degli utenti e di classificazione personalizzata per includere un punteggio per ogni articolo nei consigli. Questi punteggi rappresentano la certezza relativa di Amazon Personalize in merito all'articolo successivo che l'utente sceglierà. I punteggi più alti rappresentano una maggiore certezza.

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

Carico utile Amazon Kinesis

Il payload da inviare ad Amazon Kinesis ha il seguente formato:

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

Nota: il userId campo viene rimosso per un utente non autenticato.