Oggi, annunciamo la disponibilità di notebook di esempio che dimostrano attività di risposta a domande utilizzando un approccio basato su Retrieval Augmented Generation (RAG) con Large Language Models (LLM) in Amazon SageMaker JumpStart. La generazione di testo con RAG e LLM consente di produrre output testuali specifici per un dominio, fornendo dati esterni specifici come parte del contesto alimentato agli LLM. Questo approccio è stato sviluppato da Xin Huang, Rachna Chadha, Hemant Singh, Ashish Khetan, Manas Dadarkar e Kyle Ulrich, con la traduzione di Luca Schumann.

Amazon SageMaker JumpStart: Un'Introduzione

JumpStart è una piattaforma di machine learning (ML) progettata per aiutare i clienti a raggiungere più rapidamente gli obiettivi dei loro progetti ML. Offre una vasta gamma di modelli di base (foundation models) pre-addestrati, che possono essere utilizzati per svolgere diverse attività, tra cui la riassunto di articoli, la risposta a domande, la generazione di conversazioni e la generazione di immagini. La sua versatilità e facilità d'uso lo rendono uno strumento prezioso per gli sviluppatori e i data scientist che desiderano accelerare lo sviluppo delle loro applicazioni basate su ML.

In questo articolo, esploreremo in dettaglio il concetto di RAG e i suoi numerosi vantaggi. Mostreremo come è possibile iniziare rapidamente con un notebook di esempio per risolvere un problema di risposta a domande con implementazione RAG e LLM in JumpStart. Verranno dimostrati due approcci principali:

  • Come risolvere il problema utilizzando la libreria open source LangChain e gli endpoint di Amazon SageMaker con poche righe di codice.
  • Come applicare l'algoritmo SageMaker KNN per eseguire ricerche semantiche su grandi volumi di dati utilizzando gli endpoint di SageMaker.

LLM e le Loro Limitazioni

I Large Language Models (LLM) sono modelli addestrati su enormi quantità di dati non strutturati e sono eccellenti nella generazione di testo di carattere generale. Questi modelli possono immagazzinare una vasta conoscenza fattuale attraverso l'addestramento dei loro parametri con un corpus esteso di dati in linguaggio naturale.

Tuttavia, esistono alcune limitazioni nell'utilizzo di LLM pre-addestrati "off-the-shelf":

  • Addestramento offline: Generalmente, vengono addestrati offline, il che significa che al modello non sono disponibili le informazioni più recenti. Ad esempio, un chatbot addestrato dal 2011 al 2018 non avrebbe informazioni su eventi successivi come la pandemia di COVID-19. Questo li rende meno efficaci in contesti dove la tempestività delle informazioni è cruciale.
  • Interpretazione limitata: Le previsioni sono basate esclusivamente sulle informazioni memorizzate nei loro parametri, il che porta a una minore interpretabilità del processo decisionale. È difficile capire perché il modello abbia prodotto una specifica risposta.
  • Efficacia ridotta per compiti specifici del dominio: Sono fondamentalmente addestrati su corpus trasversali a diversi domini, rendendoli meno efficaci in compiti specifici di un particolare settore. Ci sono situazioni in cui si desidera che i modelli generino testo basandosi su dati specifici anziché generici. Per esempio, un'azienda di assicurazioni sanitarie potrebbe voler che il proprio bot di risposta alle domande risponda utilizzando le informazioni più recenti archiviate nel proprio archivio di documenti aziendali o nel database, in modo che le risposte siano precise e riflettano le loro regole commerciali uniche.

Approcci Attuali per Referenziare Dati Specifici negli LLM

Attualmente, esistono due metodi popolari per referenziare dati specifici negli LLM:

  1. Includere dati come contesto nel prompt del modello: Questo metodo consiste nel fornire al modello le informazioni che può utilizzare nella creazione del risultato direttamente all'interno del prompt di input.
  2. Effettuare il fine-tuning del modello: Questo approccio implica l'addestramento del modello su un set di dati più piccolo e specifico, fornendo un file con coppie di input e output.

Sfide degli Approcci Attuali

Ogni metodo presenta delle sfide significative:

  • Approccio basato sul contesto: La principale sfida è che i modelli hanno una dimensione del contesto limitata. Aggiungere tutti i documenti come contesto potrebbe facilmente superare la dimensione del contesto consentita dal modello, rendendo l'approccio impraticabile per grandi basi di conoscenza.
  • Approccio di fine-tuning: Il problema di questo metodo è che la creazione delle informazioni correttamente formattate richiede tempo ed è costosa. Inoltre, la modifica frequente dei dati esterni implica che il modello necessita di frequenti fine-tuning e ri-addestramenti per produrre risultati accurati. Questo ciclo di addestramento frequente influisce sul tempo di commercializzazione (time-to-market) e aumenta i costi complessivi della soluzione.

Dimostrazione delle Limitazioni

Per illustrare queste limitazioni, abbiamo utilizzato un modello LLM Flan T5 XXL e gli abbiamo posto la seguente domanda:

question = "Welche Instanzen kann ich mit Managed Spot Training in SageMaker verwenden?"

Abbiamo ricevuto la seguente risposta:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is:
das Managed Spot Training ist ein für folgende Instanzen verfügbares Abonnement Produkt: Data Science Virtual Machine (DSVM), DSVM High, und DSVM Low."""

Come si può vedere, la risposta non è corretta. La risposta esatta dovrebbe essere: "Tutte le istanze SageMaker supportano Managed Spot Training."

Abbiamo quindi provato la stessa domanda con un contesto aggiuntivo, che è stato passato insieme alla domanda:

question + context + prompt = """
Antwort basierend auf Kontext:

Managed Spot Training kann mit allen von Amazon SageMaker unterstützten Instanzen verwendet warden. Managed Spot Training wird von allen AWS Regionen unterstützt in denen Amazon SageMaker aktuell verfügbar ist.

Welche Instanzen kann ich mit Managed Spot Training in SageMaker verwenden?
"""

Questa volta abbiamo ottenuto la seguente risposta:

"""For model: huggingface-text2text-flan-t5-xxl, the generated output is:
Instanzen die von Amazon SageMaker unterstützt werden
"""

La risposta è migliore, ma ancora non del tutto corretta. In casi d'uso di produzione reali, gli utenti possono inviare diverse richieste, e per fornire risposte accurate, si potrebbe voler includere tutte o la maggior parte delle informazioni disponibili come parte del contesto statico. Con questo approccio, tuttavia, potremmo incontrare il limite della dimensione del contesto, poiché anche informazioni non rilevanti per la domanda specifica vengono inviate come parte del contesto. È qui che entra in gioco l'approccio basato su RAG per generare risposte scalabili e precise alle domande degli utenti.

Retrieval Augmented Generation (RAG)

Per affrontare le limitazioni discusse, possiamo utilizzare la Retrieval Augmented Generation (RAG) con gli LLM. RAG recupera dati dall'esterno del modello linguistico (non parametrico) ed estende i prompt aggiungendo dati pertinenti recuperati al contesto. I modelli RAG sono stati introdotti da Lewis et al. nel 2020. Nel loro modello, la memoria parametrica è un modello Seq2Seq pre-addestrato e la memoria non parametrica è un indice vettoriale denso di Wikipedia, recuperato con un retriever neurale pre-addestrato.

In RAG, i dati esterni possono provenire da diverse fonti, come un archivio di documenti, database o API. Il primo passo consiste nel trasformare i documenti e la domanda dell'utente in un formato in cui possano essere confrontati e possa essere eseguita una ricerca rilevante. Per rendere i formati confrontabili per la ricerca di pertinenza, una collezione di documenti (biblioteca della conoscenza) e la domanda dell'utente vengono convertite in una rappresentazione numerica utilizzando modelli linguistici di embedding. Gli embedding sono essenzialmente rappresentazioni numeriche di concetti nel testo.

Basandosi sull'embedding della richiesta dell'utente, il testo rilevante nella collezione di documenti viene identificato tramite una ricerca di somiglianza nello spazio degli embedding. Successivamente, il prompt fornito dall'utente viene esteso con il testo rilevante recuperato e aggiunto al contesto. Il prompt viene quindi inviato all'LLM e, poiché il contesto contiene dati esterni pertinenti insieme al prompt originale, l'output del modello è rilevante e preciso.

Per mantenere le informazioni per i documenti di riferimento aggiornate, è possibile aggiornare i documenti in modo asincrono e aggiornare la rappresentazione di embedding dei documenti. In questo modo, i documenti aggiornati vengono utilizzati per generare risposte a domande future e fornire risposte accurate.

Il seguente diagramma mostra il flusso concettuale nell'uso di RAG con LLM (nota: il diagramma non è incluso nella visualizzazione del testo, ma concettualmente parte dell'originale).

In questo post, ci concentriamo su come costruire un'applicazione di risposta a domande efficace e scalabile, superando le limitazioni intrinseche degli LLM tradizionali attraverso l'implementazione della Retrieval Augmented Generation. I notebook di esempio in Amazon SageMaker JumpStart forniscono una guida pratica per integrare RAG nei vostri progetti, permettendovi di sfruttare appieno il potenziale degli LLM per applicazioni specifiche e basate su dati aggiornati.