Personalizza le tue applicazioni AI generative con Amazon SageMaker Feature Store

Personalizza le tue applicazioni AI generative con il Feature Store di Amazon SageMaker

I modelli di linguaggio di grandi dimensioni (LLM) stanno rivoluzionando campi come i motori di ricerca, l’elaborazione del linguaggio naturale (NLP), la sanità, la robotica e la generazione di codice. Le applicazioni si estendono anche al settore della vendita al dettaglio, dove possono migliorare l’esperienza del cliente attraverso chatbot dinamici e assistenti AI, e al marketing digitale, dove possono organizzare i feedback dei clienti e consigliare prodotti in base a descrizioni e comportamenti di acquisto.

La personalizzazione delle applicazioni LLM può essere ottenuta incorporando informazioni aggiornate dell’utente, che di solito comporta l’integrazione di diversi componenti. Uno di questi componenti è un feature store, uno strumento che archivia, condivide e gestisce le caratteristiche per i modelli di machine learning (ML). Le caratteristiche sono gli input utilizzati durante l’addestramento e l’inferenza dei modelli di ML. Ad esempio, in un’applicazione che consiglia film, le caratteristiche potrebbero includere valutazioni precedenti, categorie di preferenza e dati demografici. Amazon SageMaker Feature Store è un repository completamente gestito progettato specificamente per archiviare, condividere e gestire le caratteristiche dei modelli di ML. Un altro componente essenziale è uno strumento di orchestrazione adatto per l’ingegneria rapida e la gestione di diversi tipi di sottotasks. Gli sviluppatori di intelligenza artificiale generativa possono utilizzare framework come LangChain, che offre moduli per l’integrazione con LLM e strumenti di orchestrazione per la gestione dei task e l’ingegneria delle richieste.

Basandoci sul concetto di recupero dinamico di dati aggiornati per produrre contenuti personalizzati, l’uso di LLM ha suscitato notevole attenzione nelle recenti ricerche sui sistemi di raccomandazione. Il principio sottostante di questi approcci coinvolge la costruzione di richieste che racchiudono il compito di raccomandazione, i profili degli utenti, le caratteristiche degli elementi e le interazioni utente-elemento. Queste richieste specifiche del compito vengono quindi inserite nel LLM, che ha il compito di prevedere la probabilità di interazione tra un utente specifico e un elemento. Come indicato nel documento Raccomandazione Personalizzata tramite Prompting all’interno di Modelli di Linguaggio di Grandi Dimensioni, i componenti di prompting basati sulla raccomandazione e la guida all’interazione svolgono un ruolo cruciale nel consentire ai LLM di concentrarsi sul contesto pertinente e allinearsi alle preferenze dell’utente.

In questo post, illustreremo l’idea semplice ma potente di combinare i profili degli utenti e le caratteristiche degli elementi per generare raccomandazioni di contenuti personalizzati utilizzando LLM. Come dimostrato nel corso del post, questi modelli hanno un’enorme potenzialità nella generazione di testi di input di alta qualità e consapevoli del contesto, il che porta a raccomandazioni migliorate. Per illustrare ciò, ti guideremo attraverso il processo di integrazione di un feature store (che rappresenta i profili degli utenti) con un LLM per generare queste raccomandazioni personalizzate.

Panoramica della soluzione

Immaginiamo uno scenario in cui un’azienda di intrattenimento cinematografico promuova film a diversi utenti tramite una campagna di email. La promozione contiene 25 film famosi, e vogliamo selezionare le tre migliori raccomandazioni per ciascun utente in base ai loro interessi e ai loro comportamenti di valutazione precedenti.

Ad esempio, dati gli interessi di un utente in diversi generi di film come azione, romantico e fantascienza, potremmo avere un sistema AI che determina i tre film consigliati migliori per quel particolare utente. Inoltre, il sistema potrebbe generare messaggi personalizzati per ciascun utente con un tono adatto alle loro preferenze. Includiamo alcuni esempi di messaggi personalizzati più avanti in questo post.

Questa applicazione di intelligenza artificiale includerebbe diversi componenti che lavorano insieme, come illustrato nel diagramma seguente:

  1. Un motore di profilazione degli utenti prende in input i comportamenti precedenti di un utente e restituisce un profilo dell’utente che riflette i loro interessi.
  2. Un feature store conserva i dati del profilo dell’utente.
  3. Un archivio di metadati multimediali mantiene aggiornata la lista dei film in promozione.
  4. Un modello di linguaggio prende la lista corrente dei film e i dati del profilo dell’utente e restituisce i tre migliori film consigliati per ciascun utente, scritti nel loro tono preferito.
  5. Un agente di orchestrazione coordina i diversi componenti.

In sintesi, agenti intelligenti potrebbero costruire prompt utilizzando dati relativi agli utenti e agli elementi e fornire risposte personalizzate in linguaggio naturale agli utenti. Ciò rappresenterebbe un tipico sistema di raccomandazione basato sui contenuti, che consiglia elementi agli utenti in base ai loro profili. Il profilo dell’utente è memorizzato e mantenuto nel feature store e ruota attorno alle loro preferenze e gusti. Comunemente viene derivato in base ai loro comportamenti precedenti, come le valutazioni.

Il seguente diagramma illustra come funziona.

L’applicazione segue questi passaggi per fornire risposte a una raccomandazione dell’utente:

  1. Il motore di profilazione dell’utente, che prende in input il rating storico dei film dell’utente, restituisce l’interesse dell’utente e memorizza la caratteristica in SageMaker Feature Store. Questo processo può essere aggiornato in modo pianificato.
  2. L’agente prende in input l’ID dell’utente, cerca l’interesse dell’utente e completa il modello di input seguendo gli interessi dell’utente.
  3. L’agente prende la lista degli elementi promozionali (nome del film, descrizione, genere) da un archivio dei metadati multimediali.
  4. Il modello di input degli interessi e la lista degli elementi promozionali vengono inseriti in un LLM per i messaggi della campagna email.
  5. L’agente invia la campagna email personalizzata all’utente finale.

Il motore di profilazione dell’utente crea un profilo per ogni utente, catturando le loro preferenze e interessi. Questo profilo può essere rappresentato come un vettore con elementi che corrispondono a caratteristiche come i generi dei film, con valori che indicano il livello di interesse dell’utente. I profili degli utenti nel feature store consentono al sistema di suggerire raccomandazioni personalizzate che corrispondono ai loro interessi. La profilazione degli utenti è un dominio ben studiato all’interno dei sistemi di raccomandazione. Per semplificare, è possibile costruire un algoritmo di regressione utilizzando le valutazioni precedenti di un utente in diverse categorie per dedurre le sue preferenze complessive. Ciò può essere fatto con algoritmi come XGBoost.

Descrizione del codice

In questa sezione, forniamo degli esempi di codice. La descrizione completa del codice è disponibile nel repo GitHub.

Dopo aver ottenuto la caratteristica degli interessi dell’utente dal motore di profilazione dell’utente, possiamo archiviare i risultati nel feature store. SageMaker Feature Store supporta l’ingestione batch delle caratteristiche e l’archiviazione online per l’inferenza in tempo reale. Per l’ingestione, i dati possono essere aggiornati in modalità offline, mentre l’inferenza deve avvenire in millisecondi. SageMaker Feature Store garantisce che i dataset offline e online rimangano sincronizzati.

Per l’ingestione dei dati, utilizziamo il seguente codice:

dalla sagemaker.feature_store.feature_group import FeatureGroupfeature_group_name = 'gruppo-caratteristiche-profilo-utente'feature_group = FeatureGroup(name=feature_group_name, feature_definitions=feature_definitions, sagemaker_session=sess)#Ingestione datifeature_group.ingest(data_frame=data_frame, max_workers=6, wait=True)

Per l’archiviazione online in tempo reale, potremmo utilizzare il seguente codice per estrarre il profilo dell’utente in base all’ID dell’utente:

feature_record = featurestore_runtime_client.get_record(FeatureGroupName=feature_group_name, RecordIdentifierValueAsString=customer_id)print(feature_record)

Quindi classifichiamo le tre categorie di film di maggior interesse per alimentare il motore di raccomandazione successivo:

ID utente: 42 Top3 Categorie: [‘Animazione’, ‘Thriller’, ‘Avventura’]

La nostra applicazione utilizza due componenti principali. Il primo componente recupera i dati da un feature store, mentre il secondo componente acquisisce una lista di promozioni di film dall’archivio dei metadati. Il coordinamento tra questi componenti è gestito da Chains from LangChain, che rappresentano una sequenza di chiamate ai componenti.

Vale la pena menzionare che in scenari complessi, l’applicazione potrebbe avere bisogno di più di una sequenza fissa di chiamate a LLM o altri strumenti. Gli Agenti, dotati di una serie di strumenti, utilizzano un LLM per determinare la sequenza di azioni da intraprendere. Mentre le Chains codificano una sequenza di azioni codificate, gli agenti utilizzano il potere di ragionamento di un modello di linguaggio per dettare l’ordine e la natura delle azioni.

La connessione tra diverse fonti di dati, inclusi SageMaker Feature Store, è mostrata nel seguente codice. Tutti i dati recuperati vengono consolidati per costruire un’estesa prompt, che funge da input per il LLM. Approfondiamo i dettagli del design del prompt nella sezione successiva. Di seguito è definito un modello di prompt che interagisce con più fonti di dati:­

dalla langchain.prompts import StringPromptTemplateclass FeatureStorePromptTemplate(StringPromptTemplate):        feature_group_name = 'gruppo-caratteristiche-profilo-utente'        def format(self, **kwargs) -> str:        user_id = kwargs.pop("user_id")        feature_record = self.fetch_user_preference_from_feature_store(user_id)        user_preference = self.rank_user_preference(feature_record)                kwargs["promotion_movie_list"] = self.read_promotion_list()        kwargs["user_preference"] = user_preference        return prompt.format(**kwargs)        def fetch_user_preference_from_feature_store(self, user_id):                boto_session = boto3.Session()        featurestore_runtime_client = boto_session.client('sagemaker-featurestore-runtime')        feature_record = featurestore_runtime_client.get_record(FeatureGroupName=self.feature_group_name, RecordIdentifierValueAsString=str(user_id))        return feature_record['Record']        # Rank Top_3_Categories for given user's preference    def rank_user_preference(self, data) -> str:        # refer to the details in the notebook        return str(top_categories_df.values.tolist())            # Get promotion movie list from metadata store    def read_promotion_list(self,) -> str:        # refer to the details in the notebook        return output_string

Inoltre, utilizziamo Amazon SageMaker per ospitare il nostro modello LLM e renderlo accessibile come LangChain endpoint SageMaker. Per distribuire il LLM, utilizziamo Amazon SageMaker JumpStart (per ulteriori dettagli, fare riferimento a I modelli base Llama 2 di Meta ora disponibili in Amazon SageMaker JumpStart). Dopo che il modello viene distribuito, possiamo creare il modulo LLM:

from langchain import PromptTemplate, SagemakerEndpointfrom langchain.llms.sagemaker_endpoint import LLMContentHandlerclass ContentHandler(LLMContentHandler):    def transform_input(self, prompt: str, model_kwargs: dict) -> bytes:        # fare riferimento ai dettagli nel notebook            def transform_output(self, output: bytes) -> str:        # fare riferimento ai dettagli nel notebookcontent_handler = ContentHandler()sm_llm = SagemakerEndpoint(    endpoint_name = endpoint_name,    region_name = aws_region,    model_kwargs = parameters,    endpoint_kwargs={"CustomAttributes": 'accept_eula=true'},    content_handler = content_handler,)

Nel contesto della nostra applicazione, l’agente esegue una sequenza di passaggi, chiamata LLMChain. Integra un modello di prompt, un modello e delle regole per formattare l’input dell’utente, passarlo al modello, ottenere una risposta e quindi convalidare (e, se necessario, correggere) l’output del modello.

from langchain.chains import LLMChainllmchain = LLMChain(llm=sm_llm, prompt=prompt_template)email_content = llmchain.run({'user_id': 4})print(email_content)

Nella sezione successiva, affronteremo l’ingegnerizzazione del prompt per ottenere i risultati attesi dalla LLM.

LLM: prompting e risultati delle raccomandazioni

Seguendo il concetto di coinvolgimento guidato dal prompt come descritto nello studio di ricerca Raccomandazione personalizzata tramite prompt per modelli di linguaggio estesi, il principio fondamentale della nostra strategia di prompt è quello di integrare le preferenze dell’utente nella creazione dei prompt. Questi prompt sono progettati per guidare la LLM verso l’identificazione più efficace degli attributi all’interno della descrizione del contenuto che si allineano alle preferenze dell’utente. Per spiegare ulteriormente, il nostro prompt comprende diversi componenti:

  • Rilevanza contestuale – La parte iniziale del nostro modello di prompt incorpora metadati multimediali come il nome dell’elemento (titolo del film), la descrizione (sinossi del film) e l’attributo (genere del film). Incorporando queste informazioni, il prompt fornisce alla LLM un contesto più ampio e una comprensione più completa del contenuto. Queste informazioni contestuali aiutano la LLM a comprendere meglio l’elemento attraverso la sua descrizione e attributi, migliorando così la sua utilità negli scenari di raccomandazione del contenuto.
  • Allineamento delle preferenze dell’utente – Tenendo conto di un profilo utente che segnali le preferenze dell’utente, le raccomandazioni potenziali sono più in grado di individuare le caratteristiche e le funzioni del contenuto che risuonano con gli utenti target. Questo allineamento aumenta l’utilità delle descrizioni degli elementi perché migliora l’efficienza nel suggerire elementi rilevanti e in linea con le preferenze dell’utente.
  • Miglioramento della qualità delle raccomandazioni – Il prompt guidato dal coinvolgimento utilizza le preferenze dell’utente per identificare elementi promozionali rilevanti. Possiamo anche utilizzare le preferenze dell’utente per regolare il tono della LLM per l’output finale. Ciò può portare a un’esperienza accurata, informativa e personalizzata, migliorando quindi le prestazioni complessive del sistema di raccomandazione del contenuto.

Il codice seguente mostra un esempio di modello di prompt:

prompt_template = """ La nostra azienda, "Classic Cinema", promuove frequentemente film che desideriamo raccomandare ai nostri clienti. In questo mese, abbiamo diversi film popolari in promozione.

Come agente di intelligenza artificiale, sei incaricato di aiutare "Classic Cinema" a creare una campagna via email per raccomandare film pertinenti agli utenti. Le raccomandazioni devono rispettare diverse linee guida, tra cui la rilevanza contestuale, assicurando che le raccomandazioni provengano esclusivamente dalla nostra lista di film promozionali. Inoltre, le raccomandazioni devono essere in linea con le preferenze dell'utente, suggerendo elementi pertinenti e in sintonia con le categorie preferite dall'utente. Devi fornire esattamente tre film raccomandati di primo livello. Infine, scrivi la bozza dell'email per riflettere il tono delle categorie preferite dall'utente. L'email non deve superare le 100 parole.

I film consigliati dovrebbero provenire da questa lista di film pertinenti al contesto: {promotion_movie_list}.

L'utente ha espresso interesse in {user_preference}.

Assicurati che le raccomandazioni siano pertinenti e che il tono dell'email rispecchi i gusti di coloro interessati alla categoria di film {user_preference}.

Assicurati che la lettera attiri coloro interessati alla categoria di film {user_preference} e mantieni la campagna email entro un limite di 100 parole.

Ecco un esempio di risultato con le preferenze dell’utente per i generi fantascienza, avventura e guerra:

Oggetto: Esplora la Frontiera del Cinema Classico con i Nostri Film di Fantascienza, Avventura e Guerra!

Cara [Nome], Sei pronto/a per intraprendere un viaggio nel tempo e nello spazio, vivere azioni mozzafiato e assistere alla bravura degli eroi sul campo di battaglia? Non cercare oltre! Classic Cinema presenta con orgoglio la nostra selezione attentamente curata di film, appositamente adattati ai tuoi interessi per la fantascienza, l’avventura e la guerra.

Per cominciare, abbiamo il mitico “Star Wars: Episodio V – L’Impero colpisce ancora” (1980). Questo classico episodio della saga di Star Wars racconta il viaggio di Luke Skywalker verso la sua formazione a maestro Jedi, mentre i suoi amici combattono contro l’Impero malvagio. Con gli effetti speciali rivoluzionari e i personaggi memorabili, questo film è un must per ogni fan del genere.

Inoltre, ti consigliamo “Interstellar” (2014), un film provocatorio e visivamente sbalorditivo che esplora i misteri del tempo e dello spazio. Mentre un gruppo di esploratori intraprende una missione per salvare l’umanità, si trovano di fronte a paesaggi mozzafiato e scoprono i segreti dell’universo.

Infine, abbiamo “Salvate il soldato Ryan” (1998), un dramma di guerra avvincente e intenso che segue un gruppo di soldati in una pericolosa missione per trovare e salvare un paracadutista i cui fratelli sono stati uccisi in azione. Questo film acclamato dalla critica è un potente tributo agli eroi della Seconda Guerra Mondiale. Non perderti questi capolavori cinematografici! Guardali ora e vivi l’emozione dell’avventura, la meraviglia della fantascienza e la bravura degli eroi di guerra. Buona visione e che la forza sia con te!

Cordiali saluti, Il Team di Classic Cinema

Di seguito un altro esempio di risultato con una preferenza dell’utente per documentari, musical e drammi:

Oggetto: Consigli di Classic Cinema per gli Amanti di Documentari, Musical e Drammi

Cara [Nome], Speriamo che questa email ti trovi bene e che tu stia godendo della varietà di film disponibili sulla nostra piattaforma. Classic Cinema si impegna a soddisfare i gusti diversi dei nostri clienti, e abbiamo selezionato tre eccezionali film che riteniamo faranno eco al tuo interesse per i documentari, i musical e i drammi.

Iniziamo con “Le ali della libertà” (1994), un dramma potente e commovente che racconta il viaggio di due prigionieri mentre trovano speranza e redenzione in un sistema carcerario corrotto e spietato. Con una trama coinvolgente, interpretazioni eccezionali e temi senza tempo, questo film è un must per chi ama un dramma ben realizzato.

Successivamente, ti consigliamo “Il Signore degli Anelli: La Compagnia dell’Anello” (2001), un’avventura epica che unisce immagini mozzafiato, personaggi memorabili e un mondo ricco di dettagli. Questo film è una lezione di narrazione, con un profondo senso di storia e cultura che ti porterà in Terra di Mezzo e ti lascerà desiderare di più.

Infine, ti suggeriamo “Il Pianista” (2002), un documentario profondo e commovente che racconta la vera storia di Władysław Szpilman, un pianista ebreo polacco che ha lottato per sopravvivere alla distruzione del ghetto di Varsavia durante la Seconda Guerra Mondiale. Questo film è un potente richiamo alla capacità dello spirito umano di resistenza e speranza, anche di fronte a tragedie impensabili. Speriamo che queste raccomandazioni riecheggino i tuoi interessi e ti offrano un’esperienza cinematografica appassionante ed arricchente. Non lasciarti sfuggire questi classici senza tempo – guardali ora e scopri la magia di Classic Cinema! Cordiali saluti, Il Team di Classic Cinema

Abbiamo effettuato test sia con Llama 2 7B-Chat (vedi l’esempio di codice seguente) sia con Llama 70B per confronto. Entrambi i modelli hanno ottenuto buoni risultati, fornendo conclusioni coerenti. Utilizzando un modello di input costantemente aggiornato, ci è stato più facile testare LLM arbitrari, aiutandoci a trovare il giusto equilibrio tra prestazioni e costo. Abbiamo anche effettuato diverse osservazioni condivise che vale la pena notare.

In primo luogo, possiamo vedere che le raccomandazioni fornite si allineano genuinamente alle preferenze dell’utente. Le raccomandazioni dei film sono guidate da vari componenti all’interno della nostra applicazione, soprattutto dal profilo dell’utente memorizzato nel feature store.

Inoltre, il tono delle email corrisponde alle preferenze dell’utente. Grazie alle capacità avanzate di comprensione del linguaggio di LLM, possiamo personalizzare le descrizioni dei film e il contenuto delle email, adattandoli a ciascun utente.

Inoltre, il formato finale dell’output può essere progettato nella richiesta. Ad esempio, nel nostro caso, il saluto “Gentile [Nome]” deve essere compilato dal servizio email. È importante notare che sebbene evitiamo di esporre informazioni personalmente identificabili (PII) all’interno della nostra applicazione AI generativa, è possibile reintrodurre tali informazioni durante il post-processing, a condizione che siano stati concessi i giusti livelli di autorizzazione.

Pulizia

Per evitare costi superflui, eliminare le risorse create come parte di questa soluzione, compreso il feature store e il punto di ingresso di inferenza LLM distribuito con SageMaker JumpStart.

Conclusione

Il potere degli LLM nella generazione di raccomandazioni personalizzate è immenso e trasformativo, specialmente quando abbinato agli strumenti giusti. Integrando SageMaker Feature Store e LangChain per l’ingegnerizzazione delle richieste, gli sviluppatori possono costruire e gestire profili utente altamente personalizzati. Ciò si traduce in un input di alta qualità e consapevole del contesto che migliora significativamente le prestazioni delle raccomandazioni. Nel nostro scenario illustrativo, abbiamo visto come questo possa essere applicato per adattare le raccomandazioni dei film alle preferenze individuali degli utenti, creando un’esperienza altamente personalizzata.

Man mano che il panorama degli LLM continua a evolversi, prevediamo di vedere applicazioni innovative sempre più coinvolgenti e personalizzate che utilizzano questi modelli. Le possibilità sono illimitate e siamo entusiasti di vedere cosa creerai con questi strumenti. Con risorse come SageMaker JumpStart e Amazon Bedrock ora disponibili per accelerare lo sviluppo di applicazioni AI generative, consigliamo vivamente di esplorare la costruzione di soluzioni di raccomandazione utilizzando LLM su AWS.