자신의 데이터를 사용하여 요약 및 질문 답변을 위한 생성 AI 기반 모델 사용 | 아마존 웹 서비스

자신의 데이터를 사용하여 요약 및 질문 답변을 위한 생성 AI 기반 모델 사용 | 아마존 웹 서비스

대규모 언어 모델(LLM)을 사용하여 복잡한 문서를 분석하고 질문에 대한 요약 및 답변을 제공할 수 있습니다. 포스트 재무 데이터에서 Amazon SageMaker JumpStart의 기초 모델에 대한 도메인 적응 미세 조정 자체 데이터 세트를 사용하여 LLM을 미세 조정하는 방법을 설명합니다. 견고한 LLM이 있으면 해당 LLM을 비즈니스 사용자에게 노출하여 수백 페이지가 될 수 있는 새 문서를 처리할 수 있습니다. 이 게시물에서는 비즈니스 사용자가 임의 길이의 PDF 문서를 처리할 수 있도록 실시간 사용자 인터페이스를 구성하는 방법을 시연합니다. 파일이 처리되면 문서를 요약하거나 내용에 대해 질문할 수 있습니다. 이 게시물에 설명된 샘플 솔루션은 다음에서 사용할 수 있습니다. GitHub의.

재무 문서 작업

분기별 수익 보고서 및 주주에 대한 연례 보고서와 같은 재무제표는 종종 수십 또는 수백 페이지 길이입니다. 이러한 문서에는 면책 조항 및 법적 언어와 같은 상용구 언어가 많이 포함되어 있습니다. 이러한 문서 중 하나에서 핵심 데이터 포인트를 추출하려면 흥미로운 사실을 식별할 수 있도록 상용구 언어에 대한 친숙함과 시간이 모두 필요합니다. 물론 한 번도 본 적이 없는 문서에 대해 LLM에 질문할 수 없습니다.

요약에 사용되는 LLM은 모델에 전달되는 토큰(문자) 수에 제한이 있으며 일부 예외를 제외하고는 일반적으로 수천 개의 토큰을 넘지 않습니다. 일반적으로 더 긴 문서를 요약하는 기능을 배제합니다.

당사의 솔루션은 LLM의 최대 토큰 시퀀스 길이를 초과하는 문서를 처리하고 해당 문서를 질문 답변을 위해 LLM에서 사용할 수 있도록 합니다.

솔루션 개요

우리의 디자인에는 세 가지 중요한 부분이 있습니다.

  • 비즈니스 사용자가 PDF를 업로드하고 처리할 수 있는 대화형 웹 응용 프로그램이 있습니다.
  • langchain 라이브러리를 사용하여 큰 PDF를 보다 관리하기 쉬운 청크로 분할합니다.
  • 검색 증강 생성 기술을 사용하여 사용자가 LLM에서 이전에 본 적이 없는 새로운 데이터에 대해 질문할 수 있습니다.

다음 다이어그램에 표시된 것처럼 우리는 다음에서 호스팅되는 React JavaScript로 구현된 프런트 엔드를 사용합니다. 아마존 단순 스토리지 서비스 (Amazon S3) 버킷 전면 아마존 CloudFront를. 프런트 엔드 애플리케이션을 사용하면 PDF 문서를 Amazon S3에 업로드할 수 있습니다. 업로드가 완료되면 다음에서 제공하는 텍스트 추출 작업을 트리거할 수 있습니다. 아마존 텍사스. 사후 처리의 일부로 AWS 람다 기능은 페이지 경계를 나타내는 텍스트에 특수 마커를 삽입합니다. 해당 작업이 완료되면 텍스트를 요약하거나 이에 대한 질문에 답변하는 API를 호출할 수 있습니다.

자체 데이터를 사용한 요약 및 질문 답변을 위해 생성적 AI 기반 모델 사용 | Amazon Web Services PlatoBlockchain 데이터 인텔리전스. 수직 검색. 일체 포함.

이러한 단계 중 일부는 다소 시간이 걸릴 수 있으므로 아키텍처는 분리된 비동기 접근 방식을 사용합니다. 예를 들어 문서를 요약하는 호출은 메시지를 게시하는 Lambda 함수를 호출합니다. 아마존 단순 대기열 서비스 (Amazon SQS) 대기열. 다른 Lambda 함수가 해당 메시지를 선택하고 Amazon 탄력적 컨테이너 서비스 (아마존 ECS) AWS 파게이트 일. Fargate 작업은 다음을 호출합니다. 아마존 세이지 메이커 추론 종점. 매우 긴 PDF를 요약하는 데 Lambda 함수가 사용할 수 있는 것보다 더 많은 시간과 메모리가 필요할 수 있으므로 여기서는 Fargate 작업을 사용합니다. 요약이 완료되면 프런트 엔드 애플리케이션은 아마존 DynamoDB 테이블.

요약을 위해 다음을 통해 제공되는 기초 모델 중 하나인 AI21의 Summarize 모델을 사용합니다. Amazon SageMaker 점프스타트. 이 모델은 최대 10,000단어(약 40페이지)의 문서를 처리하지만 langchain의 텍스트 분할기를 사용하여 LLM에 대한 각 요약 호출이 10,000단어를 넘지 않도록 합니다. 텍스트 생성에는 Cohere의 Medium 모델을 사용하고 임베딩에는 GPT-J를 사용합니다. 둘 다 JumpStart를 통해 이루어집니다.

요약 처리

더 큰 문서를 처리할 때 문서를 더 작은 조각으로 분할하는 방법을 정의해야 합니다. Amazon Textract에서 텍스트 추출 결과를 받으면 더 큰 텍스트 청크(구성 가능한 페이지 수), 개별 페이지 및 줄 바꿈에 대한 마커를 삽입합니다. Langchain은 해당 마커를 기반으로 분할하고 토큰 한도 미만인 더 작은 문서를 조립합니다. 다음 코드를 참조하십시오.

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은 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 

질문 답변

검색 증강 생성 방법에서는 먼저 문서를 더 작은 세그먼트로 분할합니다. 각 세그먼트에 대한 임베딩을 생성하고 langchain의 인터페이스를 통해 오픈 소스 Chroma 벡터 데이터베이스에 저장합니다. 우리는 데이터베이스를 아마존 탄성 파일 시스템 (Amazon EFS) 나중에 사용하기 위한 파일 시스템. 다음 코드를 참조하십시오.

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

임베딩이 준비되면 사용자는 질문을 할 수 있습니다. 질문과 가장 일치하는 텍스트 청크에 대해 벡터 데이터베이스를 검색합니다.

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

가장 근접하게 일치하는 청크를 가져와 텍스트 생성 모델의 컨텍스트로 사용하여 질문에 답합니다.

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

사용자 경험

LLM은 고급 데이터 과학을 대표하지만 대부분의 LLM 사용 사례는 궁극적으로 비기술 사용자와의 상호 작용을 포함합니다. 예제 웹 애플리케이션은 비즈니스 사용자가 새 PDF 문서를 업로드하고 처리할 수 있는 대화형 사용 사례를 처리합니다.

다음 다이어그램은 사용자 인터페이스를 보여줍니다. 사용자는 PDF를 업로드하여 시작합니다. 문서가 Amazon S3에 저장되면 사용자는 텍스트 추출 작업을 시작할 수 있습니다. 완료되면 사용자는 요약 작업을 호출하거나 질문을 할 수 있습니다. 사용자 인터페이스는 청크 크기 및 청크 겹침과 같은 일부 고급 옵션을 표시하며, 이는 새 문서에서 응용 프로그램을 테스트하는 고급 사용자에게 유용합니다.

사용자 인터페이스

다음 단계

LLM은 중요한 새 정보 검색 기능을 제공합니다. 비즈니스 사용자는 이러한 기능에 편리하게 액세스할 수 있어야 합니다. 향후 작업에서 고려해야 할 두 가지 방향이 있습니다.

  • Jumpstart 기초 모델에서 이미 사용 가능한 강력한 LLM을 활용하십시오. 몇 줄의 코드만으로 우리의 샘플 애플리케이션은 텍스트 요약 및 생성을 위해 AI21 및 Cohere의 고급 LLM을 배포하고 사용할 수 있습니다.
  • 기술적이지 않은 사용자가 이러한 기능에 액세스할 수 있도록 합니다. PDF 문서를 처리하기 위한 전제 조건은 문서에서 텍스트를 추출하는 것이며 요약 작업을 실행하는 데 몇 분 정도 걸릴 수 있습니다. 이를 위해서는 Lambda 및 Fargate와 같은 클라우드 네이티브 서비스를 사용하여 쉽게 설계할 수 있는 비동기식 백엔드 처리 기능이 있는 간단한 사용자 인터페이스가 필요합니다.

또한 PDF 문서는 반구조화된 정보입니다. 섹션 제목과 같은 중요한 신호는 글꼴 크기 및 기타 시각적 표시기에 의존하기 때문에 프로그래밍 방식으로 식별하기 어렵습니다. 정보의 기본 구조를 식별하면 LLM이 최소한 LLM이 무제한 길이의 입력을 처리할 수 있을 때까지 데이터를 더 정확하게 처리하는 데 도움이 됩니다.

결론

이 게시물에서는 비즈니스 사용자가 요약 및 질문 답변을 위해 PDF 문서를 업로드하고 처리할 수 있는 대화형 웹 애플리케이션을 구축하는 방법을 보여주었습니다. 고급 LLM에 액세스하기 위해 Jumpstart 기초 모델을 활용하는 방법과 텍스트 분할 및 검색 증강 생성 기술을 사용하여 더 긴 문서를 처리하고 LLM에 정보로 제공하는 방법을 살펴보았습니다.

이 시점에서 이러한 강력한 기능을 사용자에게 제공하지 않을 이유가 없습니다. 사용을 시작하는 것이 좋습니다. 점프스타트 기초 모델 .


저자,

작가 사진랜디 드포 AWS의 선임 수석 솔루션 아키텍트입니다. 그는 University of Michigan에서 MSEE를 취득하고 자율 차량용 컴퓨터 비전을 연구했습니다. 그는 또한 콜로라도 주립 대학에서 MBA를 취득했습니다. Randy는 소프트웨어 엔지니어링에서 제품 관리에 이르기까지 기술 분야에서 다양한 직책을 맡았습니다. In은 2013년에 Big Data 영역에 진출했으며 계속해서 해당 영역을 탐색합니다. 그는 ML 공간에서 프로젝트에 적극적으로 참여하고 있으며 Strata 및 GlueCon을 포함한 수많은 컨퍼런스에서 발표했습니다.

타임 스탬프 :

더보기 AWS 기계 학습