Uporabite generativni temeljni model AI za povzemanje in odgovarjanje na vprašanja z uporabo lastnih podatkov | Spletne storitve Amazon

Uporabite generativni temeljni model AI za povzemanje in odgovarjanje na vprašanja z uporabo lastnih podatkov | Spletne storitve Amazon

Velike jezikovne modele (LLM) je mogoče uporabiti za analizo kompleksnih dokumentov ter zagotavljanje povzetkov in odgovorov na vprašanja. Objava Prilagoditev domene Natančna nastavitev temeljnih modelov v Amazon SageMaker JumpStart on Financial data opisuje, kako natančno prilagoditi LLM z uporabo lastnega nabora podatkov. Ko imate soliden LLM, ga boste želeli izpostaviti poslovnim uporabnikom za obdelavo novih dokumentov, ki so lahko dolgi na stotine strani. V tej objavi prikazujemo, kako sestaviti uporabniški vmesnik v realnem času, ki poslovnim uporabnikom omogoča obdelavo dokumenta PDF poljubne dolžine. Ko je datoteka obdelana, lahko povzamete dokument ali postavite vprašanja o vsebini. Vzorčna rešitev, opisana v tej objavi, je na voljo na GitHub.

Delo s finančnimi dokumenti

Finančni izkazi, kot so četrtletna poročila o dobičku in letna poročila delničarjem, so pogosto dolgi na desetine ali stotine strani. Ti dokumenti vsebujejo veliko standardnega jezika, kot so izjave o omejitvi odgovornosti in pravni jezik. Če želite izluščiti ključne podatkovne točke iz enega od teh dokumentov, potrebujete čas in nekaj poznavanja jezikovnega jezika, da boste lahko prepoznali zanimiva dejstva. In seveda LLM ne morete postavljati vprašanj o dokumentu, ki ga nikoli ni videl.

LLM-ji, ki se uporabljajo za povzemanje, imajo omejitev števila žetonov (znakov), posredovanih v model, in z nekaterimi izjemami ti običajno ne presegajo nekaj tisoč žetonov. To običajno onemogoča možnost povzemanja daljših dokumentov.

Naša rešitev obravnava dokumente, ki presegajo največjo dolžino zaporedja žetonov za LLM, in da ta dokument na voljo LLM za odgovore na vprašanja.

Pregled rešitev

Naš dizajn ima tri pomembne dele:

  • Ima interaktivno spletno aplikacijo za nalaganje in obdelavo PDF-jev za poslovne uporabnike
  • Uporablja knjižnico langchain za razdelitev velikega PDF-ja na bolj obvladljive dele
  • Uporablja tehniko generiranja razširjenega pridobivanja, ki uporabnikom omogoča postavljanje vprašanj o novih podatkih, ki jih LLM še ni videl

Kot je prikazano v naslednjem diagramu, uporabljamo sprednji del, implementiran z React JavaScript, ki gostuje v Preprosta storitev shranjevanja Amazon (Amazon S3) vedro na čelu Amazon CloudFront. Sprednja aplikacija uporabnikom omogoča nalaganje dokumentov PDF v Amazon S3. Ko je nalaganje končano, lahko sprožite opravilo ekstrakcije besedila, ki ga poganja Amazonovo besedilo. Kot del naknadne obdelave je an AWS Lambda funkcija vstavi posebne oznake v besedilo, ki označujejo meje strani. Ko je ta naloga končana, lahko pokličete API, ki povzame besedilo ali odgovori na vprašanja o njem.

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

Ker lahko nekateri od teh korakov trajajo nekaj časa, arhitektura uporablja nevezani asinhroni pristop. Na primer, klic za povzetek dokumenta prikliče funkcijo Lambda, ki objavi sporočilo v Storitev Amazon Simple Queue Service (Amazon SQS) čakalna vrsta. Druga funkcija Lambda prevzame to sporočilo in zažene Amazonska storitev za kontejnerje z elastiko (Amazon ECS) AWS Fargate naloga. Naloga Fargate kliče Amazon SageMaker končna točka sklepanja. Tukaj uporabljamo nalogo Fargate, ker lahko povzemanje zelo dolgega PDF-ja vzame več časa in pomnilnika, kot ga ima na voljo funkcija Lambda. Ko je povzemanje končano, lahko sprednja aplikacija pobere rezultate iz Amazon DynamoDB miza.

Za povzemanje uporabljamo model Summarize podjetja AI21, enega od temeljnih modelov, ki so na voljo prek Amazon SageMaker JumpStart. Čeprav ta model obravnava dokumente do 10,000 besed (približno 40 strani), uporabljamo langchainov razdelilnik besedila, da zagotovimo, da vsak povzemni klic LLM-u ni daljši od 10,000 besed. Za ustvarjanje besedila uporabljamo Coherejev model Medium, za vdelave pa uporabljamo GPT-J, oboje prek JumpStarta.

Obdelava povzemanja

Pri delu z večjimi dokumenti moramo določiti, kako bomo dokument razdelili na manjše dele. Ko dobimo rezultate črpanja besedila nazaj iz storitve Amazon Texttract, vstavimo oznake za večje dele besedila (nastavljivo število strani), posamezne strani in prelome vrstic. Langchain se bo razdelil na podlagi teh označevalcev in sestavil manjše dokumente, ki so pod omejitvijo žetonov. Oglejte si naslednjo kodo:

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 v verigi povzemanja je tanek ovoj okoli naše končne točke 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 

Odgovarjanje na vprašanje

Pri metodi pridobivanja razširjenega generiranja dokument najprej razdelimo na manjše segmente. Za vsak segment ustvarimo vdelave in jih preko langchain vmesnika shranimo v odprtokodno vektorsko podatkovno bazo Chroma. Bazo podatkov shranimo v an Elastični datotečni sistem Amazon (Amazon EFS) datotečni sistem za kasnejšo uporabo. Oglejte si naslednjo kodo:

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

Ko so vdelave pripravljene, lahko uporabnik postavi vprašanje. V vektorski bazi podatkov iščemo dele besedila, ki najbolj ustrezajo vprašanju:

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

Vzamemo najbližje ujemajoči se kos in ga uporabimo kot kontekst za model generiranja besedila, da odgovorimo na vprašanje:

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

Uporabniška izkušnja

Čeprav LLM-ji predstavljajo napredno podatkovno znanost, večina primerov uporabe LLM-jev na koncu vključuje interakcijo z netehničnimi uporabniki. Naš primer spletne aplikacije obravnava interaktivni primer uporabe, kjer lahko poslovni uporabniki naložijo in obdelajo nov dokument PDF.

Naslednji diagram prikazuje uporabniški vmesnik. Uporabnik začne z nalaganjem PDF-ja. Ko je dokument shranjen v Amazon S3, lahko uporabnik začne z ekstrakcijo besedila. Ko je to končano, lahko uporabnik prikliče nalogo povzemanja ali postavlja vprašanja. Uporabniški vmesnik razkriva nekatere napredne možnosti, kot sta velikost in prekrivanje kosov, kar bi bilo koristno za napredne uporabnike, ki preizkušajo aplikacijo na novih dokumentih.

Uporabniški vmesnik

Naslednji koraki

LLM nudijo pomembne nove zmožnosti iskanja informacij. Poslovni uporabniki potrebujejo udoben dostop do teh zmogljivosti. Za prihodnje delo je treba upoštevati dve smeri:

  • Izkoristite zmogljive LLM, ki so že na voljo v modelih temeljev Jumpstart. S samo nekaj vrsticami kode bi lahko naša vzorčna aplikacija uvedla in uporabila napredne LLM iz AI21 in Cohere za povzemanje in generiranje besedila.
  • Naj bodo te zmožnosti dostopne netehničnim uporabnikom. Predpogoj za obdelavo dokumentov PDF je ekstrahiranje besedila iz dokumenta, opravila povzemanja pa lahko trajajo nekaj minut. To zahteva preprost uporabniški vmesnik z zmožnostmi asinhronega zalednega procesiranja, ki ga je enostavno oblikovati z uporabo storitev v oblaku, kot sta Lambda in Fargate.

Upoštevamo tudi, da je dokument PDF polstrukturirana informacija. Pomembne namige, kot so naslovi razdelkov, je težko prepoznati programsko, ker so odvisni od velikosti pisave in drugih vizualnih indikatorjev. Identifikacija osnovne strukture informacij pomaga LLM-ju pri natančnejši obdelavi podatkov, vsaj dokler LLM-ji ne morejo obdelati vnosa neomejene dolžine.

zaključek

V tej objavi smo pokazali, kako zgraditi interaktivno spletno aplikacijo, ki poslovnim uporabnikom omogoča nalaganje in obdelavo dokumentov PDF za povzemanje in odgovarjanje na vprašanja. Videli smo, kako izkoristiti modele temeljev Jumpstart za dostop do naprednih LLM-jev ter uporabiti tehnike generiranja ločevanja besedila in razširjenega pridobivanja za obdelavo daljših dokumentov in jih dati na voljo kot informacije LLM-u.

V tem trenutku ni razloga, da teh zmogljivih zmogljivosti ne bi dali na voljo vašim uporabnikom. Svetujemo vam, da začnete uporabljati Modeli temeljev Jumpstart danes.


O avtorju

Slika avtorjaRandy DeFauw je višji glavni arhitekt rešitev pri AWS. Ima MSEE z Univerze v Michiganu, kjer je delal na računalniškem vidu za avtonomna vozila. Ima tudi MBA z univerze Colorado State University. Randy je zasedal različne položaje v tehnološkem prostoru, od razvoja programske opreme do upravljanja izdelkov. V prostor velikih podatkov je vstopil leta 2013 in še naprej raziskuje to področje. Aktivno dela na projektih v prostoru ML in je predstavil na številnih konferencah, vključno s Strata in GlueCon.

Časovni žig:

Več od Strojno učenje AWS