Utilizați un model de bază generativ AI pentru rezumat și răspunsuri la întrebări folosind propriile date | Amazon Web Services

Utilizați un model de bază generativ AI pentru rezumat și răspunsuri la întrebări folosind propriile date | Amazon Web Services

Modelele lingvistice mari (LLM) pot fi utilizate pentru a analiza documente complexe și pentru a oferi rezumate și răspunsuri la întrebări. Bara Adaptarea domeniului Reglarea fină a modelelor de fundație în Amazon SageMaker JumpStart pe date financiare descrie cum să reglați un LLM folosind propriul set de date. Odată ce aveți un LLM solid, veți dori să expuneți acel LLM utilizatorilor de afaceri pentru a procesa documente noi, care ar putea avea o lungime de sute de pagini. În această postare, demonstrăm cum să construim o interfață de utilizator în timp real pentru a permite utilizatorilor de afaceri să proceseze un document PDF de lungime arbitrară. Odată procesat fișierul, puteți rezuma documentul sau puteți pune întrebări despre conținut. Exemplul de soluție descrisă în acest post este disponibil pe GitHub.

Lucrul cu documente financiare

Situațiile financiare, cum ar fi rapoartele trimestriale privind câștigurile și rapoartele anuale pentru acționari, au adesea zeci sau sute de pagini. Aceste documente conțin o mulțime de limbaj standard, cum ar fi declinări de răspundere și limbaj juridic. Dacă doriți să extrageți datele cheie dintr-unul dintre aceste documente, aveți nevoie atât de timp, cât și de o anumită familiaritate cu limbajul standard, astfel încât să puteți identifica faptele interesante. Și, desigur, nu poți pune întrebări unui LLM despre un document pe care nu l-a văzut niciodată.

LLM-urile utilizate pentru rezumare au o limită a numărului de jetoane (caractere) trecute în model și, cu unele excepții, acestea nu sunt de obicei mai mult de câteva mii de jetoane. În mod normal, acest lucru exclude posibilitatea de a rezuma documente mai lungi.

Soluția noastră gestionează documente care depășesc lungimea maximă a secvenței de token a unui LLM și pune acel document la dispoziția LLM pentru răspunsuri la întrebări.

Prezentare generală a soluțiilor

Designul nostru are trei piese importante:

  • Are o aplicație web interactivă pentru utilizatorii de afaceri pentru a încărca și procesa PDF-uri
  • Utilizează biblioteca langchain pentru a împărți un PDF mare în bucăți mai ușor de gestionat
  • Utilizează tehnica de generare augmentată de recuperare pentru a permite utilizatorilor să pună întrebări despre date noi pe care LLM nu le-a văzut înainte

După cum se arată în diagrama următoare, folosim un front-end implementat cu React JavaScript găzduit într-un Serviciul Amazon de stocare simplă (Amazon S3) găleată în fața Amazon CloudFront. Aplicația front-end permite utilizatorilor să încarce documente PDF pe Amazon S3. După ce încărcarea este finalizată, puteți declanșa o lucrare de extragere a textului Text Amazon. Ca parte a post-procesării, an AWS Lambdas funcția inserează markeri speciali în text care indică limitele paginii. Când această lucrare este finalizată, puteți invoca un API care rezumă textul sau răspunde la întrebări despre acesta.

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

Deoarece unii dintre acești pași pot dura ceva timp, arhitectura utilizează o abordare asincronă decuplată. De exemplu, apelul pentru a rezuma un document invocă o funcție Lambda care postează un mesaj către un Serviciul de coadă simplă Amazon coadă (Amazon SQS). O altă funcție Lambda preia acel mesaj și pornește un Serviciul Amazon de containere elastice (Amazon ECS) AWS Fargate sarcină. Sarcina Fargate numește Amazon SageMaker punctul final de inferență. Utilizăm o sarcină Fargate aici, deoarece rezumarea unui PDF foarte lung poate dura mai mult timp și memorie decât are disponibilă o funcție Lambda. Când rezumarea este finalizată, aplicația front-end poate prelua rezultatele de la un Amazon DynamoDB tabel.

Pentru rezumat, folosim modelul Summarize al AI21, unul dintre modelele de fundație disponibile prin intermediul Amazon SageMaker JumpStart. Deși acest model gestionează documente de până la 10,000 de cuvinte (aproximativ 40 de pagini), folosim divizorul de text al langchain pentru a ne asigura că fiecare apel de rezumat la LLM nu are mai mult de 10,000 de cuvinte. Pentru generarea de text, folosim modelul Cohere Medium și folosim GPT-J pentru încorporare, ambele prin JumpStart.

Prelucrarea rezumatului

Când manipulăm documente mai mari, trebuie să definim modul de împărțire a documentului în bucăți mai mici. Când primim rezultatele extragerii textului înapoi de la Amazon Texttract, inserăm marcatori pentru bucăți mai mari de text (un număr configurabil de pagini), pagini individuale și rupturi de rând. Langchain se va împărți pe baza acelor markeri și va asambla documente mai mici care sunt sub limita de simboluri. Vezi următorul cod:

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 din lanțul de rezumare este un înveliș subțire în jurul punctului nostru final 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 

Răspuns la întrebare

În metoda de generare augmentată de recuperare, mai întâi împărțim documentul în segmente mai mici. Creăm înglobări pentru fiecare segment și le stocăm în baza de date de vectori Chroma open-source prin interfața langchain. Salvăm baza de date într-un Sistem de fișiere elastice Amazon sistem de fișiere (Amazon EFS) pentru utilizare ulterioară. Vezi următorul cod:

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

Când înglobările sunt gata, utilizatorul poate pune o întrebare. Căutăm în baza de date vectorială fragmentele de text care se potrivesc cel mai bine cu întrebarea:

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

Luăm cea mai apropiată bucată de potrivire și o folosim ca context pentru modelul de generare de text pentru a răspunde la întrebarea:

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

Experiența utilizatorului

Deși LLM reprezintă știința avansată a datelor, majoritatea cazurilor de utilizare pentru LLM implică în cele din urmă interacțiunea cu utilizatori non-tehnici. Exemplul nostru de aplicație web gestionează un caz de utilizare interactiv în care utilizatorii de afaceri pot încărca și procesa un nou document PDF.

Următoarea diagramă prezintă interfața cu utilizatorul. Un utilizator începe prin a încărca un PDF. După ce documentul este stocat în Amazon S3, utilizatorul poate începe munca de extragere a textului. Când aceasta este finalizată, utilizatorul poate invoca sarcina de rezumare sau poate pune întrebări. Interfața cu utilizatorul expune câteva opțiuni avansate, cum ar fi dimensiunea și suprapunerea bucăților, care ar fi utile pentru utilizatorii avansați care testează aplicația pe documente noi.

Interfața cu utilizatorul

Pasii urmatori

LLM-urile oferă noi capabilități semnificative de regăsire a informațiilor. Utilizatorii business au nevoie de acces convenabil la aceste capabilități. Există două direcții pentru lucrările viitoare de luat în considerare:

  • Profitați de puternicele LLM-uri deja disponibile în modelele de fundație Jumpstart. Cu doar câteva linii de cod, aplicația noastră exemplu ar putea implementa și utiliza LLM-uri avansate de la AI21 și Cohere pentru rezumarea și generarea de text.
  • Faceți aceste capabilități accesibile utilizatorilor non-tehnici. O condiție prealabilă pentru procesarea documentelor PDF este extragerea textului din document, iar executarea lucrărilor de rezumare poate dura câteva minute. Acest lucru necesită o interfață de utilizator simplă, cu capabilități de procesare backend asincronă, care este ușor de proiectat folosind servicii native din cloud precum Lambda și Fargate.

De asemenea, menționăm că un document PDF este o informație semi-structurată. Indiciile importante, cum ar fi titlurile de secțiuni, sunt dificil de identificat programatic, deoarece se bazează pe dimensiunile fonturilor și alți indicatori vizuali. Identificarea structurii de bază a informațiilor ajută LLM să prelucreze datele cu mai multă acuratețe, cel puțin până în momentul în care LLM-urile pot gestiona intrările de lungime nelimitată.

Concluzie

În această postare, am arătat cum să construim o aplicație web interactivă care le permite utilizatorilor de afaceri să încarce și să proceseze documente PDF pentru rezumare și răspunsuri la întrebări. Am văzut cum să profităm de modelele de bază Jumpstart pentru a accesa LLM-uri avansate și să folosim tehnici de generare augmentată de divizare a textului și recuperare pentru a procesa documente mai lungi și a le face disponibile ca informații pentru LLM.

În acest moment, nu există niciun motiv să nu puneți la dispoziție utilizatorilor dvs. aceste capabilități puternice. Vă încurajăm să începeți să utilizați Modele de fundație Jumpstart astăzi.


Despre autor

Poza autoruluiRandy DeFauw este arhitect principal principal de soluții la AWS. El deține un MSEE de la Universitatea din Michigan, unde a lucrat la viziunea computerizată pentru vehicule autonome. De asemenea, deține un MBA de la Universitatea de Stat din Colorado. Randy a ocupat o varietate de poziții în spațiul tehnologic, de la inginerie software la managementul produselor. In a intrat în spațiul Big Data în 2013 și continuă să exploreze acea zonă. Lucrează activ la proiecte în spațiul ML și a prezentat la numeroase conferințe, inclusiv Strata și GlueCon.

Timestamp-ul:

Mai mult de la Învățare automată AWS