Crea un’applicazione di riassunto dei documenti HCLS con Falcon utilizzando Amazon SageMaker JumpStart

Crea un'app di riassunto dei documenti HCLS con Falcon utilizzando Amazon SageMaker JumpStart

Gli utenti nel settore della sanità e delle scienze della vita (HCLS) stanno adottando l’IA generativa come strumento per ottenere maggiori informazioni dai loro dati. I casi d’uso includono la sintesi dei documenti per aiutare i lettori a concentrarsi sui punti chiave di un documento e la trasformazione del testo non strutturato in formati standardizzati per evidenziare attributi importanti. Con formati di dati unici e rigorosi requisiti normativi, i clienti cercano scelte per selezionare i modelli più performanti ed economicamente convenienti, nonché la capacità di personalizzazione necessaria (aggiustamento fine) per adattarsi al loro caso d’uso aziendale. In questo post, ti guidiamo nella distribuzione di un grande modello linguistico Falcon (LLM) utilizzando Amazon SageMaker JumpStart e nell’utilizzo del modello per sintetizzare lunghi documenti con LangChain e Python.

Panoramica della soluzione

Amazon SageMaker si basa su due decenni di esperienza di Amazon nello sviluppo di applicazioni di intelligenza artificiale del mondo reale, tra cui raccomandazioni di prodotti, personalizzazione, shopping intelligente, robotica e dispositivi con assistente vocale. SageMaker è un servizio gestito idoneo all’HIPAA che fornisce strumenti che consentono a data scientist, ingegneri di intelligenza artificiale e analisti aziendali di innovare con l’IA. All’interno di SageMaker c’è Amazon SageMaker Studio, un ambiente di sviluppo integrato (IDE) appositamente progettato per flussi di lavoro collaborativi di intelligenza artificiale, che a sua volta contiene una vasta varietà di soluzioni di avvio rapido e modelli di intelligenza artificiale pre-addestrati in un hub integrato chiamato SageMaker JumpStart. Con SageMaker JumpStart, puoi utilizzare modelli pre-addestrati, come il Falcon LLM, con esempi di notebook pre-costruiti e supporto SDK per sperimentare e distribuire questi potenti modelli trasformativi. Puoi utilizzare SageMaker Studio e SageMaker JumpStart per distribuire e interrogare il tuo stesso modello generativo nel tuo account AWS.

Puoi anche assicurarti che i dati di previsione dell’inferenza non lascino la tua VPC. Puoi fornire modelli come endpoint a singolo tenant e distribuirli con isolamento di rete. Inoltre, puoi curare e gestire l’insieme selezionato dei modelli che soddisfano i tuoi requisiti di sicurezza utilizzando la capacità di hub di modelli privati all’interno di SageMaker JumpStart e memorizzando i modelli approvati lì. SageMaker è in ambito per l’HIPAA BAA, SOC123 e HITRUST CSF.

Il Falcon LLM è un grande modello linguistico, addestrato dai ricercatori presso l’Istituto di Innovazione Tecnologica (TII) su oltre 1 trilione di token utilizzando AWS. Falcon ha molte varianti diverse, con i suoi due principali costituenti Falcon 40B e Falcon 7B, composti rispettivamente da 40 miliardi e 7 miliardi di parametri, con versioni perfezionate addestrate per compiti specifici, come seguire istruzioni. Falcon si comporta bene in una varietà di compiti, tra cui la sintesi del testo, l’analisi del sentimento, la risposta alle domande e la conversazione. Questo post fornisce una panoramica che puoi seguire per distribuire il Falcon LLM nel tuo account AWS, utilizzando un’istanza di notebook gestita attraverso SageMaker JumpStart per sperimentare con la sintesi del testo.

L’hub di modelli SageMaker JumpStart include notebook completi per distribuire e interrogare ciascun modello. Al momento di questa scrittura, sono disponibili sei versioni di Falcon nell’hub di modelli SageMaker JumpStart: Falcon 40B Instruct BF16, Falcon 40B BF16, Falcon 180B BF16, Falcon 180B Chat BF16, Falcon 7B Instruct BF16 e Falcon 7B BF16. In questo post viene utilizzato il modello Falcon 7B Instruct.

Nelle sezioni seguenti, mostriamo come iniziare con la sintesi dei documenti distribuendo Falcon 7B su SageMaker Jumpstart.

Prerequisiti

Per questo tutorial, avrai bisogno di un account AWS con un dominio SageMaker. Se non hai già un dominio SageMaker, fai riferimento a Onboard to Amazon SageMaker Domain per crearne uno.

Distribuire Falcon 7B utilizzando SageMaker JumpStart

Per distribuire il tuo modello, segui i seguenti passaggi:

  1. Accedi al tuo ambiente SageMaker Studio dalla console di SageMaker.
  2. All’interno dell’IDE, nella barra di navigazione sotto SageMaker JumpStart, scegli Modelli, notebook, soluzioni.
  3. Effettua il deploy del modello Falcon 7B Instruct su un endpoint per inferenza.

Scelta di Falcon-7B-Instruct da SageMaker JumpStart

Si aprirà la scheda del modello Falcon 7B Instruct BF16. In questa pagina, troverai le opzioni Deploy o Train, oltre ai link per aprire i notebook di esempio in SageMaker Studio. In questo post utilizzeremo il notebook di esempio da SageMaker JumpStart per effettuare il deploy del modello.

  1. Scegli Apri notebook.

Pagina di distribuzione dei modelli di SageMaker JumpStart

  1. Esegui le prime quattro celle del notebook per effettuare il deploy dell’endpoint Falcon 7B Instruct.

Puoi vedere i tuoi modelli JumpStart distribuiti sulla pagina Asset JumpStart lanciati.

  1. Nella barra di navigazione, sotto SageMaker Jumpstart, scegli Asset JumpStart lanciati.
  2. Scegli la scheda Endpoint del modello per visualizzare lo stato del tuo endpoint.

Pagina del modello lanciato di SageMaker JumpStart

Con l’endpoint Falcon LLM deployato, sei pronto per interrogare il modello.

Esegui la tua prima interrogazione

Per eseguire un’interrogazione, segui i seguenti passaggi:

  1. Nel menu File, scegli Nuovo e Notebook per aprire un nuovo notebook.

Puoi anche scaricare il notebook completo qui.

Crea un notebook SageMaker Studio

  1. Seleziona l’immagine, il kernel e il tipo di istanza quando richiesto. In questo post, scegliamo l’immagine Data Science 3.0, il kernel Python 3 e l’istanza ml.t3.medium.

Impostazione del kernel del notebook di SageMaker Studio

  1. Importa i moduli Boto3 e JSON inserendo le seguenti due righe nella prima cella:
import jsonimport boto3
  1. Premi Shift + Invio per eseguire la cella.
  2. Successivamente, puoi definire una funzione che chiamerà il tuo endpoint. Questa funzione prende in input un payload in formato dizionario e lo utilizza per invocare il client del runtime di SageMaker. Quindi deserializza la risposta e stampa l’input e il testo generato.
newline, bold, unbold = '\n', '\033[1m', '\033[0m'endpoint_name = 'NOME_ENDPOINT'def query_endpoint(payload):    client = boto3.client('runtime.sagemaker')    response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/json', Body=json.dumps(payload).encode('utf-8'))    model_predictions = json.loads(response['Body'].read())    generated_text = model_predictions[0]['generated_text']    print (        f"Testo di input: {payload['inputs']}{newline}"        f"Testo generato: {bold}{generated_text}{unbold}{newline}")

Il payload include l’input come prompt, insieme ai parametri di inferenza che saranno passati al modello.

  1. Puoi utilizzare questi parametri con il prompt per ottimizzare l’output del modello per il tuo caso d’uso:
payload = {    "inputs": "Girafatron è ossessionato dalle giraffe, l'animale più glorioso sulla faccia della Terra. Girafatron ritiene che tutti gli altri animali siano irrilevanti in confronto alla maestosità gloriosa della giraffa.\nDaniel: Ciao, Girafatron!\nGirafatron:",    "parameters":{        "max_new_tokens": 50,        "return_full_text": False,        "do_sample": True,        "top_k":10        }}

Query con un prompt di sintesi

Questo post utilizza un articolo di ricerca di esempio per dimostrare la sintesi. Il file di testo di esempio riguarda la sintesi automatica del testo nella letteratura biomedica. Completa i seguenti passaggi:

  1. Scarica il PDF e copia il testo in un file chiamato document.txt.
  2. In SageMaker Studio, scegli l’icona di caricamento e carica il file nella tua istanza di SageMaker Studio.
Caricamento file su SageMaker Studio

Di base, il Falcon LLM fornisce supporto per la sintesi del testo.

  1. Creiamo una funzione che utilizza tecniche di prompt engineering per sintetizzare document.txt:
def sintetizza(testo_da_sintetizzare):    prompt_sintesi = """Elabora il seguente testo e quindi esegui le istruzioni seguenti:{testo_da_sintetizzare}Fornisci un breve riassunto del testo precedente.:"""    payload = {        "inputs": prompt_sintesi,        "parameters":{            "max_new_tokens": 150,            "return_full_text": False,            "do_sample": True,            "top_k":10            }    }    response = query_endpoint(payload)    print(response)    with open("document.txt") as f:    testo_da_sintetizzare = f.read()sintetizza(testo_da_sintetizzare)

Noterai che per documenti più lunghi compare un errore: Falcon, insieme a tutti gli altri LLM, ha un limite sul numero di token passati in input. Possiamo aggirare questo limite utilizzando le capacità avanzate di sintesi di LangChain, che consente di passare un input molto più ampio al LLM.

Importa ed esegui una catena di sintesi

LangChain è una libreria software open-source che consente agli sviluppatori e ai data scientist di costruire, ottimizzare e distribuire rapidamente applicazioni generative personalizzate senza dover gestire interazioni ML complesse, comunemente utilizzate per astrarre molti dei casi d’uso comuni per i modelli di linguaggio AI generativi con poche righe di codice. Il supporto di LangChain per i servizi AWS include il supporto per gli endpoint di SageMaker.

LangChain fornisce un’interfaccia accessibile per LLM. Le sue caratteristiche includono strumenti per il templating dei prompt e per la concatenazione dei prompt. Queste catene possono essere utilizzate per sintetizzare documenti di testo più lunghi di quanto supportato dal modello linguistico in una singola chiamata. Puoi utilizzare una strategia di map-reduce per sintetizzare documenti lunghi suddividendoli in blocchi gestibili, sintetizzandoli, combinandoli (e sintetizzandoli nuovamente, se necessario).

  1. Installiamo LangChain per iniziare:
%pip install langchain
  1. Importare i moduli pertinenti e suddividere il lungo documento in blocchi:
import langchainfrom langchain import SagemakerEndpoint, PromptTemplatefrom langchain.llms.sagemaker_endpoint import LLMContentHandlerfrom langchain.chains.summarize import load_summarize_chainfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.docstore.document import Documenttext_splitter = RecursiveCharacterTextSplitter(                    dimensione_blocco = 500,                    sovrapposizione_blocco  = 20,                    separatori = [" "],                    funzione_lunghezza = len                )input_documents = text_splitter.create_documents([text_to_summarize])
  1. Per rendere LangChain effettivo con Falcon, è necessario definire le classi gestione contenuti predefinite per l’input e l’output validi:
class ContentHandlerTextSummarization(LLMContentHandler):    tipo_contenuto = "application/json"    accetta = "application/json"    def transform_input(self, prompt: str, model_kwargs={}) -> bytes:        input_str = json.dumps({"inputs": prompt, **model_kwargs})        return input_str.encode("utf-8")    def transform_output(self, output: bytes) -> json:        response_json = json.loads(output.read().decode("utf-8"))        generated_text = response_json[0]['generated_text']        return generated_text.split("summary:")[-1]    content_handler = ContentHandlerTextSummarization()
  1. È possibile definire le promemoria personalizzate come oggetti PromptTemplate, il veicolo principale per i promemoria con LangChain, per l’approccio di riepilogo map-reduce. Questo è un passaggio opzionale perché i promemoria di mappatura e combinazione sono forniti di default se i parametri nella chiamata per caricare la catena di riepilogo (load_summarize_chain) non sono definiti.
map_prompt = """Scrivi un riassunto conciso di questo testo in poche frasi complete:{text}Riepilogo conciso:"""map_prompt_template = PromptTemplate(                        template=map_prompt,                         input_variables=["text"]                      )combine_prompt = """Combina tutti questi riassunti seguenti e genera un riepilogo finale in poche frasi complete:{text}Riepilogo finale:"""combine_prompt_template = PromptTemplate(                            template=combine_prompt,                             input_variables=["text"]                          )      
  1. LangChain supporta LLM ospitati su endpoint di inferenza SageMaker, quindi anziché utilizzare l’SDK Python di AWS, è possibile inizializzare la connessione tramite LangChain per una maggiore accessibilità:
summary_model = SagemakerEndpoint(                    nome_endpoint = nome_endpoint,                    nome_regione= "us-east-1",                    model_kwargs= {},                    gestore_contenuti=content_handler                )
  1. Infine, è possibile caricare una catena di riepilogo ed eseguire un riepilogo sui documenti di input utilizzando il codice seguente:
summary_chain = load_summarize_chain(llm=summary_model,                                     tipo_catena="map_reduce",                                      mappa_promemoria=map_prompt_template,                                     combinare_promemoria=combine_prompt_template,                                     verbose=True                                    ) summary = summary_chain({"input_documents": input_documents, 'token_max': 700}, return_only_outputs=True)print(summary["output_text"])   

Poiché il parametro verbose è impostato suTrue, vedrai tutti gli output intermedi dell’approccio di riepilogo map-reduce. Questo è utile per seguire la sequenza di eventi per arrivare a un riepilogo finale. Con questo approccio map-reduce, è possibile riepilogare efficacemente documenti molto più lunghi rispetto a quanto consentito normalmente dal limite massimo di token di input del modello.

Pulizia

Dopo aver finito di utilizzare il punto di accesso di inferenza, è importante eliminarlo per evitare costi superflui attraverso le seguenti righe di codice:

client = boto3.client('runtime.sagemaker')client.delete_endpoint(EndpointName=nome_endpoint)

Utilizzare altri modelli di fondazione in SageMaker JumpStart

L’utilizzo di altri modelli di fondazione disponibili in SageMaker JumpStart per il riepilogo dei documenti richiede un minimo di overhead per la configurazione e il rilascio. Gli LLM occasionalmente variano con la struttura dei formati di input e output, e man mano che nuovi modelli e soluzioni predefinite vengono aggiunti a SageMaker JumpStart, a seconda dell’implementazione del task, potrebbe essere necessario apportare le seguenti modifiche al codice:

  • Se si sta eseguendo un riepilogo tramite il metodo summarize() (il metodo senza utilizzare LangChain), potrebbe essere necessario modificare la struttura JSON del parametro payload, così come la gestione della variabile response nella funzione query_endpoint()
  • Se si sta eseguendo un riepilogo tramite il metodo load_summarize_chain() di LangChain, potrebbe essere necessario modificare la classe ContentHandlerTextSummarization, in particolare le funzioni transform_input() e transform_output(), per gestire correttamente il payload che si aspetta l’LLM e l’output che l’LLM restituisce

I modelli di fondotinta variano non solo per fattori come la velocità di inferenza e la qualità, ma anche per i formati di input e output. Consulta la pagina di informazioni rilevanti dell’LLM sul formato di input e output previsti.

Conclusioni

Il modello Instruct di Falcon 7B è disponibile su SageMaker JumpStart model hub e funziona su numerosi casi d’uso. Questo post ha dimostrato come puoi implementare il tuo endpoint LLM Falcon nel tuo ambiente utilizzando SageMaker JumpStart e fare i tuoi primi esperimenti da SageMaker Studio, consentendoti di prototipare rapidamente i tuoi modelli e passare senza soluzione di continuità a un ambiente di produzione. Con Falcon e LangChain, puoi riassumere efficacemente documenti sulla salute e le scienze della vita a lunga forma su larga scala.

Per ulteriori informazioni su come lavorare con l’AI generativa su AWS, consulta Annunci Nuovi Strumenti per la Creazione di AI Generative su AWS. Puoi iniziare a sperimentare e costruire prove di concetto di riassunto dei documenti per le tue applicazioni GenAI orientate alla salute e alle scienze della vita utilizzando il metodo descritto in questo post. Quando Amazon Bedrock sarà disponibile, pubblicheremo un post di follow-up mostrando come implementare il riassunto dei documenti utilizzando Amazon Bedrock e LangChain.