Brug en generativ AI-grundmodel til at opsummere og besvare spørgsmål ved hjælp af dine egne data | Amazon Web Services

Brug en generativ AI-grundmodel til at opsummere og besvare spørgsmål ved hjælp af dine egne data | Amazon Web Services

Store sprogmodeller (LLM'er) kan bruges til at analysere komplekse dokumenter og give resuméer og svar på spørgsmål. Posten Domænetilpasning Finjustering af fundamentmodeller i Amazon SageMaker JumpStart på finansielle data beskriver, hvordan du finjusterer en LLM ved hjælp af dit eget datasæt. Når du har en solid LLM, vil du gerne udsætte den LLM for forretningsbrugere for at behandle nye dokumenter, som kan være hundredvis af sider lange. I dette indlæg demonstrerer vi, hvordan man konstruerer en brugergrænseflade i realtid for at lade forretningsbrugere behandle et PDF-dokument af vilkårlig længde. Når filen er behandlet, kan du opsummere dokumentet eller stille spørgsmål til indholdet. Prøveløsningen beskrevet i dette indlæg er tilgængelig på GitHub.

Arbejde med økonomiske dokumenter

Regnskaber som kvartalsvise indtjeningsrapporter og årsrapporter til aktionærer er ofte titusinder eller hundredvis af sider lange. Disse dokumenter indeholder en masse kedelsprog som ansvarsfraskrivelser og juridisk sprogbrug. Hvis du vil udtrække de vigtigste datapunkter fra et af disse dokumenter, har du brug for både tid og lidt fortrolighed med kedelsproget, så du kan identificere de interessante fakta. Og selvfølgelig kan du ikke stille en LLM spørgsmål om et dokument, den aldrig har set.

LLM'er, der bruges til opsummering, har en grænse for antallet af tokens (tegn), der sendes ind i modellen, og med nogle undtagelser er disse typisk ikke mere end et par tusinde tokens. Det udelukker normalt muligheden for at opsummere længere dokumenter.

Vores løsning håndterer dokumenter, der overstiger en LLM's maksimale token-sekvenslængde, og gør dette dokument tilgængeligt for LLM'en til besvarelse af spørgsmål.

Løsningsoversigt

Vores design har tre vigtige dele:

  • Det har en interaktiv webapplikation til forretningsbrugere til at uploade og behandle PDF'er
  • Det bruger langchain-biblioteket til at opdele en stor PDF i mere håndterbare bidder
  • Den bruger teknikken til at hente augmented generation til at lade brugere stille spørgsmål om nye data, som LLM ikke har set før

Som vist i det følgende diagram bruger vi en frontend implementeret med React JavaScript hostet i en Amazon Simple Storage Service (Amazon S3) spand foran Amazon CloudFront. Front-end-applikationen lader brugere uploade PDF-dokumenter til Amazon S3. Når uploaden er fuldført, kan du udløse et tekstudtræksjob, der drives af amazontekst. Som en del af efterbehandlingen er en AWS Lambda funktionen indsætter specielle markører i teksten, der angiver sidegrænser. Når dette job er udført, kan du påberåbe dig en API, der opsummerer teksten eller besvarer spørgsmål om den.

Use a generative AI foundation model for summarization and question answering using your own data | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Fordi nogle af disse trin kan tage noget tid, bruger arkitekturen en afkoblet asynkron tilgang. For eksempel kalder opkaldet til at opsummere et dokument en Lambda-funktion, der sender en besked til en Amazon Simple Queue Service (Amazon SQS) kø. En anden Lambda-funktion opfanger den besked og starter en Amazon Elastic Container Service (Amazon ECS) AWS Fargate opgave. Fargate-opgaven kalder Amazon SageMaker slutningspunkt. Vi bruger en Fargate-opgave her, fordi opsummering af en meget lang PDF kan tage mere tid og hukommelse, end en Lambda-funktion har tilgængelig. Når opsummeringen er færdig, kan front-end-applikationen hente resultaterne fra en Amazon DynamoDB tabel.

Til opsummering bruger vi AI21's Summarize-model, en af ​​de fundamentmodeller, der er tilgængelige igennem Amazon SageMaker JumpStart. Selvom denne model håndterer dokumenter på op til 10,000 ord (ca. 40 sider), bruger vi langchains tekstsplitter for at sikre, at hvert opsummeringskald til LLM ikke er mere end 10,000 ord langt. Til tekstgenerering bruger vi Coheres Medium-model, og vi bruger GPT-J til indlejringer, både via JumpStart.

Opsummeringsbehandling

Når vi håndterer større dokumenter, skal vi definere, hvordan dokumentet skal opdeles i mindre stykker. Når vi får tekstudtræksresultaterne tilbage fra Amazon Textract, indsætter vi markører for større bidder af tekst (et konfigurerbart antal sider), individuelle sider og linjeskift. Langchain vil opdele baseret på disse markører og samle mindre dokumenter, der er under token-grænsen. Se følgende kode:

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 i opsummeringskæden er en tynd indpakning omkring vores SageMaker-endepunkt:

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 

Besvarelse af spørgsmål

I metoden med udvidet genfinding opdelte vi først dokumentet i mindre segmenter. Vi opretter indlejringer for hvert segment og gemmer dem i open source Chroma vektordatabasen via langchains grænseflade. Vi gemmer databasen i en Amazon Elastic File System (Amazon EFS) filsystem til senere brug. Se følgende kode:

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()

Når indlejringerne er klar, kan brugeren stille et spørgsmål. Vi søger i vektordatabasen efter de tekststykker, der passer bedst til spørgsmålet:

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

Vi tager den tættest matchende del og bruger den som kontekst for tekstgenereringsmodellen for at besvare spørgsmålet:

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', '')

Brugererfaring

Selvom LLM'er repræsenterer avanceret datavidenskab, involverer de fleste use cases for LLM'er i sidste ende interaktion med ikke-tekniske brugere. Vores eksempelwebapplikation håndterer en interaktiv use case, hvor forretningsbrugere kan uploade og behandle et nyt PDF-dokument.

Følgende diagram viser brugergrænsefladen. En bruger starter med at uploade en PDF. Efter at dokumentet er gemt i Amazon S3, er brugeren i stand til at starte tekstudtrækningsjobbet. Når det er færdigt, kan brugeren påberåbe sig opsummeringsopgaven eller stille spørgsmål. Brugergrænsefladen afslører nogle avancerede muligheder som chunk-størrelse og chunk-overlapning, hvilket ville være nyttigt for avancerede brugere, der tester applikationen på nye dokumenter.

Brugergrænseflade

Næste skridt

LLM'er giver betydelige nye muligheder for at hente oplysninger. Forretningsbrugere har brug for nem adgang til disse muligheder. Der er to retninger for det fremtidige arbejde at overveje:

  • Udnyt de kraftfulde LLM'er, der allerede er tilgængelige i Jumpstart-fundamentmodeller. Med blot et par linjer kode kunne vores eksempelapplikation implementere og gøre brug af avancerede LLM'er fra AI21 og Cohere til tekstresumé og generering.
  • Gør disse muligheder tilgængelige for ikke-tekniske brugere. En forudsætning for at behandle PDF-dokumenter er at udtrække tekst fra dokumentet, og opsummeringsjob kan tage flere minutter at køre. Det kræver en enkel brugergrænseflade med asynkrone backend-behandlingsfunktioner, som er nem at designe ved hjælp af cloud-native tjenester som Lambda og Fargate.

Vi bemærker også, at et PDF-dokument er semistruktureret information. Vigtige signaler som sektionsoverskrifter er svære at identificere programmatisk, fordi de er afhængige af skriftstørrelser og andre visuelle indikatorer. At identificere den underliggende informationsstruktur hjælper LLM med at behandle dataene mere præcist, i det mindste indtil det tidspunkt, hvor LLM'er kan håndtere input af ubegrænset længde.

Konklusion

I dette indlæg viste vi, hvordan man bygger en interaktiv webapplikation, der lader forretningsbrugere uploade og behandle PDF-dokumenter til opsummering og besvarelse af spørgsmål. Vi så, hvordan man kan drage fordel af Jumpstart-fundamentmodeller til at få adgang til avancerede LLM'er, og bruge teknikker til tekstopdeling og genfinding af augmented generation til at behandle længere dokumenter og gøre dem tilgængelige som information til LLM.

På dette tidspunkt er der ingen grund til ikke at gøre disse kraftfulde funktioner tilgængelige for dine brugere. Vi opfordrer dig til at begynde at bruge Jumpstart-fundamentmodeller i dag.


Om forfatteren

Forfatter billedeRandy DeFauw er Senior Principal Solutions Architect hos AWS. Han har en MSEE fra University of Michigan, hvor han arbejdede med computersyn til autonome køretøjer. Han har også en MBA fra Colorado State University. Randy har haft en række forskellige stillinger inden for teknologiområdet, lige fra softwareudvikling til produktstyring. In gik ind i Big Data-området i 2013 og fortsætter med at udforske dette område. Han arbejder aktivt på projekter i ML-området og har præsenteret på adskillige konferencer, herunder Strata og GlueCon.

Tidsstempel:

Mere fra AWS maskinindlæring