Utilizza un modello di base AI generativo per il riepilogo e la risposta alle domande utilizzando i tuoi dati | Servizi Web Amazon

Utilizza un modello di base AI generativo per il riepilogo e la risposta alle domande utilizzando i tuoi dati | Servizi Web Amazon

I grandi modelli linguistici (LLM) possono essere utilizzati per analizzare documenti complessi e fornire riepiloghi e risposte alle domande. La posta Adattamento del dominio Ottimizzazione dei modelli di base in Amazon SageMaker JumpStart sui dati finanziari descrive come mettere a punto un LLM utilizzando il proprio set di dati. Una volta che hai un solido LLM, ti consigliamo di esporre tale LLM agli utenti aziendali per elaborare nuovi documenti, che potrebbero essere lunghi centinaia di pagine. In questo post, dimostriamo come costruire un'interfaccia utente in tempo reale per consentire agli utenti aziendali di elaborare un documento PDF di lunghezza arbitraria. Una volta elaborato il file, puoi riassumere il documento o porre domande sul contenuto. La soluzione di esempio descritta in questo post è disponibile su GitHub.

Lavorare con documenti finanziari

I rendiconti finanziari come le relazioni trimestrali sugli utili e le relazioni annuali agli azionisti sono spesso lunghi decine o centinaia di pagine. Questi documenti contengono un sacco di linguaggio standard come dichiarazioni di non responsabilità e linguaggio legale. Se vuoi estrarre i punti dati chiave da uno di questi documenti, hai bisogno sia di tempo che di familiarità con il linguaggio standard in modo da poter identificare i fatti interessanti. E, naturalmente, non puoi fare domande a un LLM su un documento che non ha mai visto.

Gli LLM utilizzati per il riepilogo hanno un limite al numero di token (caratteri) passati nel modello e, con alcune eccezioni, in genere non superano poche migliaia di token. Ciò normalmente preclude la capacità di riassumere documenti più lunghi.

La nostra soluzione gestisce i documenti che superano la lunghezza massima della sequenza di token di un LLM e rende tale documento disponibile al LLM per la risposta alle domande.

Panoramica della soluzione

Il nostro design ha tre pezzi importanti:

  • Ha un'applicazione web interattiva per gli utenti aziendali per caricare ed elaborare PDF
  • Utilizza la libreria langchain per dividere un PDF di grandi dimensioni in blocchi più gestibili
  • Utilizza la tecnica di generazione aumentata di recupero per consentire agli utenti di porre domande sui nuovi dati che l'LLM non ha mai visto prima

Come mostrato nel diagramma seguente, utilizziamo un front-end implementato con React JavaScript ospitato in un file Servizio di archiviazione semplice Amazon (Amazon S3) secchio fronteggiato da Amazon CloudFront. L'applicazione front-end consente agli utenti di caricare documenti PDF su Amazon S3. Al termine del caricamento, puoi attivare un processo di estrazione del testo alimentato da Testo Amazon. Come parte della post-elaborazione, an AWS Lambda La funzione inserisce marcatori speciali nel testo che indicano i limiti della pagina. Al termine del lavoro, puoi richiamare un'API che riepiloghi il testo o risponda a domande al riguardo.

Utilizza un modello di base di intelligenza artificiale generativa per il riepilogo e la risposta alle domande utilizzando i tuoi dati | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Poiché alcuni di questi passaggi potrebbero richiedere del tempo, l'architettura utilizza un approccio asincrono disaccoppiato. Ad esempio, la chiamata per riepilogare un documento richiama una funzione Lambda che invia un messaggio a un Servizio Amazon Simple Queue (Amazon SQS). Un'altra funzione Lambda raccoglie quel messaggio e avvia un Servizio di container elastici Amazon (AmazonECS) AWS Fargate compito. L'attività Fargate chiama il file Amazon Sage Maker endpoint di inferenza. Usiamo un'attività Fargate qui perché il riepilogo di un PDF molto lungo può richiedere più tempo e memoria rispetto a una funzione Lambda disponibile. Al termine del riepilogo, l'applicazione front-end può prelevare i risultati da un file Amazon DynamoDB tabella.

Per il riepilogo, utilizziamo il modello Summarize di AI21, uno dei modelli di base disponibili tramite JumpStart di Amazon SageMaker. Sebbene questo modello gestisca documenti fino a 10,000 parole (circa 40 pagine), utilizziamo lo splitter di testo di langchain per assicurarci che ogni chiamata di riepilogo all'LLM non superi le 10,000 parole. Per la generazione del testo, utilizziamo il modello Medium di Cohere e utilizziamo GPT-J per gli incorporamenti, entrambi tramite JumpStart.

Elaborazione di riepilogo

Quando si gestiscono documenti più grandi, è necessario definire come suddividere il documento in parti più piccole. Quando otteniamo i risultati dell'estrazione del testo da Amazon Textract, inseriamo marcatori per blocchi di testo più grandi (un numero configurabile di pagine), singole pagine e interruzioni di riga. Langchain si dividerà in base a questi marcatori e assemblerà documenti più piccoli che sono al di sotto del limite di token. Vedere il seguente codice:

text_splitter = RecursiveCharacterTextSplitter( separators = ["<CHUNK>", "<PAGE>", "n"], chunk_size = int(chunk_size), chunk_overlap = int(chunk_overlap)) with open(local_path) as f: doc = f.read() texts = text_splitter.split_text(doc) print(f"Number of splits: {len(texts)}") llm = SageMakerLLM(endpoint_name = endpoint_name) responses = [] for t in texts: r = llm(t) responses.append(r) summary = "n".join(responses)

LLM nella catena di riepilogo è un sottile involucro attorno al nostro endpoint SageMaker:

class SageMakerLLM(LLM): endpoint_name: str @property
def _llm_type(self) -> str: return "summarize" def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: response = ai21.Summarize.execute( source=prompt, sourceType="TEXT", sm_endpoint=self.endpoint_name ) return response.summary 

Risposta alla domanda

Nel metodo di generazione aumentata di recupero, per prima cosa dividiamo il documento in segmenti più piccoli. Creiamo incorporamenti per ogni segmento e li memorizziamo nel database vettoriale Chroma open source tramite l'interfaccia di langchain. Salviamo il database in un file File system elastico Amazon (Amazon EFS) file system per un uso successivo. Vedere il seguente codice:

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
texts = text_splitter.split_documents(documents)
print(f"Number of splits: {len(texts)}") embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
vectordb.persist()

Quando gli incorporamenti sono pronti, l'utente può porre una domanda. Cerchiamo nel database vettoriale i blocchi di testo che corrispondono maggiormente alla domanda:

embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_embed
)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
docs = vectordb.similarity_search_with_score(question)

Prendiamo il pezzo corrispondente più vicino e lo usiamo come contesto per il modello di generazione del testo per rispondere alla domanda:

cohere_client = Client(endpoint_name=endpoint_qa)
context = docs[high_score_idx][0].page_content.replace("n", "")
qa_prompt = f'Context={context}nQuestion={question}nAnswer='
response = cohere_client.generate(prompt=qa_prompt, max_tokens=512, temperature=0.25, return_likelihoods='GENERATION')
answer = response.generations[0].text.strip().replace('n', '')

Esperienza utente

Sebbene gli LLM rappresentino una scienza dei dati avanzata, la maggior parte dei casi d'uso per gli LLM comportano in ultima analisi l'interazione con utenti non tecnici. La nostra applicazione Web di esempio gestisce un caso d'uso interattivo in cui gli utenti aziendali possono caricare ed elaborare un nuovo documento PDF.

Il diagramma seguente mostra l'interfaccia utente. Un utente inizia caricando un PDF. Dopo che il documento è stato archiviato in Amazon S3, l'utente è in grado di avviare il processo di estrazione del testo. Al termine, l'utente può richiamare l'attività di riepilogo o porre domande. L'interfaccia utente espone alcune opzioni avanzate come la dimensione del blocco e la sovrapposizione del blocco, che sarebbero utili per gli utenti avanzati che stanno testando l'applicazione su nuovi documenti.

Interfaccia utente

Prossimi passi

Gli LLM forniscono nuove significative capacità di recupero delle informazioni. Gli utenti aziendali hanno bisogno di un comodo accesso a queste funzionalità. Ci sono due direzioni per il lavoro futuro da considerare:

  • Sfrutta i potenti LLM già disponibili nei modelli base Jumpstart. Con poche righe di codice, la nostra applicazione di esempio potrebbe distribuire e utilizzare LLM avanzati di AI21 e Cohere per il riepilogo e la generazione del testo.
  • Rendi queste funzionalità accessibili agli utenti non tecnici. Un prerequisito per l'elaborazione dei documenti PDF è l'estrazione del testo dal documento e l'esecuzione dei processi di riepilogo può richiedere diversi minuti. Ciò richiede un'interfaccia utente semplice con capacità di elaborazione back-end asincrona, che è facile da progettare utilizzando servizi nativi del cloud come Lambda e Fargate.

Notiamo anche che un documento PDF è un'informazione semi-strutturata. Segnali importanti come i titoli delle sezioni sono difficili da identificare a livello di codice, perché si basano sulle dimensioni dei caratteri e altri indicatori visivi. L'identificazione della struttura sottostante delle informazioni aiuta l'LLM a elaborare i dati in modo più accurato, almeno fino al momento in cui gli LLM possono gestire input di lunghezza illimitata.

Conclusione

In questo post, abbiamo mostrato come creare un'applicazione Web interattiva che consenta agli utenti aziendali di caricare ed elaborare documenti PDF per il riepilogo e la risposta alle domande. Abbiamo visto come sfruttare i modelli di base Jumpstart per accedere a LLM avanzati e utilizzare tecniche di generazione aumentata di suddivisione del testo e recupero per elaborare documenti più lunghi e renderli disponibili come informazioni per LLM.

A questo punto, non c'è motivo per non rendere disponibili queste potenti funzionalità ai tuoi utenti. Ti invitiamo a iniziare a utilizzare il Modelli di fondazione Jumpstart oggi.


Circa l'autore

Foto d'autoreRandy De Fauw è Senior Principal Solutions Architect presso AWS. Ha conseguito un MSEE presso l'Università del Michigan, dove ha lavorato alla visione artificiale per veicoli autonomi. Ha conseguito anche un MBA presso la Colorado State University. Randy ha ricoperto diverse posizioni nel settore tecnologico, dall'ingegneria del software alla gestione dei prodotti. In è entrato nello spazio dei Big Data nel 2013 e continua a esplorare quell'area. Sta lavorando attivamente a progetti nello spazio ML e ha presentato a numerose conferenze tra cui Strata e GlueCon.

Timestamp:

Di più da Apprendimento automatico di AWS