Użyj generatywnego modelu bazowego AI do podsumowań i odpowiadania na pytania przy użyciu własnych danych | Usługi sieciowe Amazona

Użyj generatywnego modelu bazowego AI do podsumowań i odpowiadania na pytania przy użyciu własnych danych | Usługi sieciowe Amazona

Duże modele językowe (LLM) mogą być używane do analizowania złożonych dokumentów oraz dostarczania podsumowań i odpowiedzi na pytania. Poczta Adaptacja domeny Dostrajanie modeli podstawowych w Amazon SageMaker JumpStart na danych finansowych opisuje, jak dostroić LLM przy użyciu własnego zestawu danych. Gdy masz solidny LLM, będziesz chciał udostępnić ten LLM użytkownikom biznesowym w celu przetwarzania nowych dokumentów, które mogą mieć setki stron. W tym poście pokazujemy, jak zbudować interfejs użytkownika działający w czasie rzeczywistym, aby umożliwić użytkownikom biznesowym przetwarzanie dokumentu PDF o dowolnej długości. Po przetworzeniu pliku możesz podsumować dokument lub zadać pytania dotyczące jego treści. Przykładowe rozwiązanie opisane w tym poście jest dostępne na GitHub.

Praca z dokumentami finansowymi

Sprawozdania finansowe, takie jak kwartalne raporty o zyskach i roczne raporty dla akcjonariuszy, mają często dziesiątki lub setki stron. Dokumenty te zawierają wiele szablonów, takich jak zastrzeżenia i język prawniczy. Jeśli chcesz wyodrębnić kluczowe punkty danych z jednego z tych dokumentów, potrzebujesz zarówno czasu, jak i pewnej znajomości języka wzorcowego, aby móc zidentyfikować interesujące fakty. I oczywiście nie możesz zadawać LLM pytań o dokument, którego nigdy nie widział.

LLM używane do podsumowania mają limit liczby tokenów (znaków) przekazywanych do modelu i z pewnymi wyjątkami jest to zazwyczaj nie więcej niż kilka tysięcy tokenów. Zwykle wyklucza to możliwość podsumowania dłuższych dokumentów.

Nasze rozwiązanie obsługuje dokumenty przekraczające maksymalną długość sekwencji tokenów LLM i udostępnia ten dokument LLM w celu udzielenia odpowiedzi na pytania.

Omówienie rozwiązania

Nasz projekt składa się z trzech ważnych elementów:

  • Posiada interaktywną aplikację internetową dla użytkowników biznesowych do przesyłania i przetwarzania plików PDF
  • Wykorzystuje bibliotekę langchain do dzielenia dużego pliku PDF na łatwiejsze do zarządzania fragmenty
  • Wykorzystuje technikę wyszukiwania rozszerzonego generowania, aby umożliwić użytkownikom zadawanie pytań dotyczących nowych danych, których LLM wcześniej nie widział

Jak pokazano na poniższym diagramie, używamy interfejsu zaimplementowanego za pomocą React JavaScript hostowanego w pliku Usługa Amazon Simple Storage (Amazon S3) wiadro z przodu Amazon CloudFront. Aplikacja front-end pozwala użytkownikom przesyłać dokumenty PDF do Amazon S3. Po zakończeniu przesyłania możesz uruchomić zadanie wyodrębniania tekstu obsługiwane przez Ekstrakt z amazonki. W ramach post-processingu, an AWS Lambda funkcja wstawia w tekst specjalne znaczniki wskazujące granice stron. Po zakończeniu tej pracy możesz wywołać interfejs API, który podsumowuje tekst lub odpowiada na pytania na jego temat.

Użyj generatywnego modelu podstawowego AI do podsumowań i odpowiadania na pytania przy użyciu własnych danych Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Ponieważ niektóre z tych kroków mogą zająć trochę czasu, architektura wykorzystuje oddzielone podejście asynchroniczne. Na przykład wywołanie podsumowania dokumentu wywołuje funkcję Lambda, która wysyła komunikat do pliku Usługa Amazon Simple Queue (Amazon SQS). Inna funkcja Lambda odbiera tę wiadomość i uruchamia Usługa Amazon Elastic Container Service (Amazon ECS) AWS-Fargate zadanie. Zadanie Fargate wywołuje metodę Amazon Sage Maker punkt końcowy wnioskowania. Używamy tutaj zadania Fargate, ponieważ podsumowanie bardzo długiego pliku PDF może zająć więcej czasu i pamięci niż dostępna funkcja Lambda. Po zakończeniu podsumowania aplikacja front-end może pobrać wyniki z pliku an Amazon DynamoDB tabela.

Do podsumowania używamy modelu Summarize AI21, jednego z podstawowych modeli dostępnych przez Amazon SageMaker JumpStart. Chociaż ten model obsługuje dokumenty do 10,000 40 słów (około 10,000 stron), używamy rozdzielacza tekstu langchain, aby upewnić się, że każde wywołanie podsumowania do LLM nie przekracza długości XNUMX XNUMX słów. Do generowania tekstu używamy modelu Medium Cohere, a do osadzania używamy GPT-J, oba przez JumpStart.

Przetwarzanie podsumowania

Podczas obsługi większych dokumentów musimy zdefiniować sposób podziału dokumentu na mniejsze części. Kiedy otrzymamy wyniki ekstrakcji tekstu z Amazon Texttract, wstawimy znaczniki dla większych fragmentów tekstu (konfigurowalna liczba stron), pojedynczych stron i podziałów wierszy. Langchain podzieli się na podstawie tych znaczników i złoży mniejsze dokumenty, które są poniżej limitu tokenów. Zobacz następujący kod:

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 w łańcuchu podsumowania jest cienkim opakowaniem wokół naszego punktu końcowego 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 

Odpowiadanie na pytania

W metodzie generowania rozszerzonego wyszukiwania najpierw dzielimy dokument na mniejsze segmenty. Tworzymy osadzenie dla każdego segmentu i przechowujemy je w otwartej bazie danych wektorowych Chroma za pośrednictwem interfejsu langchain. Bazę danych zapisujemy w formacie System plików Amazon Elastic (Amazon EFS) do późniejszego wykorzystania. Zobacz następujący kod:

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

Gdy osadzenia są gotowe, użytkownik może zadać pytanie. Przeszukujemy wektorową bazę danych w poszukiwaniu fragmentów tekstu, które najlepiej pasują do pytania:

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

Bierzemy najbardziej pasujący fragment i używamy go jako kontekstu dla modelu generowania tekstu, aby odpowiedzieć na pytanie:

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

Doświadczenie użytkownika

Chociaż LLM reprezentują zaawansowaną naukę o danych, większość przypadków użycia LLM ostatecznie obejmuje interakcję z użytkownikami nietechnicznymi. Nasza przykładowa aplikacja internetowa obsługuje interaktywny przypadek użycia, w którym użytkownicy biznesowi mogą przesyłać i przetwarzać nowy dokument PDF.

Poniższy schemat przedstawia interfejs użytkownika. Użytkownik zaczyna od przesłania pliku PDF. Po zapisaniu dokumentu w Amazon S3 użytkownik może rozpocząć zadanie ekstrakcji tekstu. Po zakończeniu użytkownik może wywołać zadanie podsumowania lub zadać pytania. Interfejs użytkownika udostępnia niektóre zaawansowane opcje, takie jak rozmiar porcji i nakładanie się porcji, co byłoby przydatne dla zaawansowanych użytkowników, którzy testują aplikację na nowych dokumentach.

Interfejs użytkownika

Następne kroki

LLM zapewniają znaczące nowe możliwości wyszukiwania informacji. Użytkownicy biznesowi potrzebują wygodnego dostępu do tych funkcji. Istnieją dwa kierunki przyszłych prac do rozważenia:

  • Skorzystaj z potężnych LLM, które są już dostępne w podstawowych modelach Jumpstart. Wystarczy kilka wierszy kodu, aby nasza przykładowa aplikacja mogła wdrożyć i wykorzystać zaawansowane LLM z AI21 i Cohere do streszczania i generowania tekstu.
  • Udostępnij te możliwości użytkownikom nietechnicznym. Warunkiem wstępnym przetwarzania dokumentów PDF jest wyodrębnienie tekstu z dokumentu, a wykonanie zadania podsumowania może zająć kilka minut. Wymaga to prostego interfejsu użytkownika z możliwościami asynchronicznego przetwarzania zaplecza, który można łatwo zaprojektować przy użyciu usług natywnych dla chmury, takich jak Lambda i Fargate.

Zauważamy również, że dokument PDF to informacja częściowo ustrukturyzowana. Ważne wskazówki, takie jak nagłówki sekcji, są trudne do zidentyfikowania programowo, ponieważ opierają się na rozmiarach czcionek i innych wskaźnikach wizualnych. Zidentyfikowanie podstawowej struktury informacji pomaga LLM dokładniej przetwarzać dane, przynajmniej do czasu, gdy LLM będzie w stanie obsłużyć dane wejściowe o nieograniczonej długości.

Wnioski

W tym poście pokazaliśmy, jak zbudować interaktywną aplikację internetową, która umożliwia użytkownikom biznesowym przesyłanie i przetwarzanie dokumentów PDF w celu podsumowania i udzielenia odpowiedzi na pytania. Zobaczyliśmy, jak korzystać z podstawowych modeli Jumpstart, aby uzyskać dostęp do zaawansowanych LLM, oraz wykorzystywać techniki dzielenia tekstu i odzyskiwania rozszerzonego generowania do przetwarzania dłuższych dokumentów i udostępniania ich jako informacji LLM.

W tej chwili nie ma powodu, aby nie udostępniać użytkownikom tych zaawansowanych funkcji. Zachęcamy do rozpoczęcia korzystania z Modele fundamentów Jumpstart dzisiaj.


O autorze

Autorskie zdjęcieRandy’ego DeFauwa jest starszym głównym architektem rozwiązań w AWS. Posiada tytuł MSEE uzyskany na Uniwersytecie Michigan, gdzie pracował nad wizją komputerową dla pojazdów autonomicznych. Posiada również tytuł MBA uzyskany na Colorado State University. Randy zajmował różne stanowiska w przestrzeni technologicznej, od inżynierii oprogramowania po zarządzanie produktem. W przestrzeń Big Data weszła w 2013 roku i nadal eksploruje ten obszar. Aktywnie pracuje nad projektami w przestrzeni ML i występował na licznych konferencjach, w tym Strata i GlueCon.

Znak czasu:

Więcej z Uczenie maszynowe AWS