ใช้โมเดลพื้นฐานของ AI เชิงกำเนิดสำหรับการสรุปและตอบคำถามโดยใช้ข้อมูลของคุณเอง | บริการเว็บอเมซอน

ใช้โมเดลพื้นฐานของ AI เชิงกำเนิดสำหรับการสรุปและตอบคำถามโดยใช้ข้อมูลของคุณเอง | บริการเว็บอเมซอน

สามารถใช้แบบจำลองภาษาขนาดใหญ่ (LLM) เพื่อวิเคราะห์เอกสารที่ซับซ้อนและให้ข้อมูลสรุปและคำตอบสำหรับคำถาม โพสต์ การปรับให้เข้ากับโดเมน การปรับแต่งโมเดลพื้นฐานอย่างละเอียดใน Amazon SageMaker JumpStart บนข้อมูลทางการเงิน อธิบายวิธีปรับแต่ง LLM โดยใช้ชุดข้อมูลของคุณเอง เมื่อคุณมี LLM ที่มั่นคงแล้ว คุณจะต้องเปิดเผย LLM นั้นแก่ผู้ใช้ทางธุรกิจเพื่อดำเนินการเอกสารใหม่ ซึ่งอาจมีความยาวหลายร้อยหน้า ในโพสต์นี้ เราจะสาธิตวิธีสร้างส่วนต่อประสานผู้ใช้แบบเรียลไทม์เพื่อให้ผู้ใช้ทางธุรกิจประมวลผลเอกสาร PDF ที่มีความยาวตามอำเภอใจ เมื่อประมวลผลไฟล์แล้ว คุณสามารถสรุปเอกสารหรือถามคำถามเกี่ยวกับเนื้อหาได้ โซลูชันตัวอย่างที่อธิบายไว้ในโพสต์นี้มีอยู่ใน GitHub.

ทำงานกับเอกสารทางการเงิน

งบการเงิน เช่น รายงานรายได้ประจำไตรมาสและรายงานประจำปีสำหรับผู้ถือหุ้นมักจะมีความยาวหลายสิบหรือหลายร้อยหน้า เอกสารเหล่านี้มีภาษาสำเร็จรูปจำนวนมาก เช่น ข้อความปฏิเสธความรับผิดชอบและภาษากฎหมาย หากคุณต้องการแยกจุดข้อมูลสำคัญออกจากหนึ่งในเอกสารเหล่านี้ คุณต้องใช้เวลาและความคุ้นเคยกับภาษาสำเร็จรูปเพื่อระบุข้อเท็จจริงที่น่าสนใจ และแน่นอน คุณไม่สามารถถามคำถาม LLM เกี่ยวกับเอกสารที่ไม่เคยเห็นมาก่อน

LLM ที่ใช้สำหรับการสรุปมีข้อจำกัดเกี่ยวกับจำนวนโทเค็น (อักขระ) ที่ส่งผ่านไปยังโมเดล และด้วยข้อยกเว้นบางประการ โดยปกติแล้ว โทเค็นเหล่านี้จะมีจำนวนไม่เกินสองสามพันโทเค็น ซึ่งโดยปกติจะขัดขวางความสามารถในการสรุปเอกสารที่ยาวขึ้น

โซลูชันของเราจัดการเอกสารที่เกินความยาวลำดับโทเค็นสูงสุดของ LLM และทำให้เอกสารนั้นพร้อมใช้งานสำหรับ LLM สำหรับการตอบคำถาม

ภาพรวมโซลูชัน

การออกแบบของเรามีสามส่วนสำคัญ:

  • มีเว็บแอปพลิเคชันแบบโต้ตอบสำหรับผู้ใช้ทางธุรกิจในการอัปโหลดและประมวลผล PDF
  • มันใช้ไลบรารี langchain เพื่อแยก PDF ขนาดใหญ่ออกเป็นชิ้น ๆ ที่จัดการได้มากขึ้น
  • ใช้เทคนิคการดึงข้อมูลการสร้างเสริมเพื่อให้ผู้ใช้ถามคำถามเกี่ยวกับข้อมูลใหม่ที่ LLM ไม่เคยเห็นมาก่อน

ดังที่แสดงในไดอะแกรมต่อไปนี้ เราใช้ส่วนหน้าที่ใช้งานกับ React JavaScript ที่โฮสต์ใน บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (Amazon S3) ที่ฝากข้อมูลอยู่ข้างหน้า Amazon CloudFront. แอปพลิเคชันส่วนหน้าช่วยให้ผู้ใช้อัปโหลดเอกสาร PDF ไปยัง Amazon S3 ได้ หลังจากอัปโหลดเสร็จแล้ว คุณสามารถทริกเกอร์งานแยกข้อความที่ขับเคลื่อนโดย Amazon Text. เป็นส่วนหนึ่งของกระบวนการหลังการประมวลผล AWS แลมบ์ดา ฟังก์ชันแทรกเครื่องหมายพิเศษลงในข้อความที่ระบุขอบเขตของหน้า เมื่องานนั้นเสร็จสิ้น คุณสามารถเรียกใช้ API ที่สรุปข้อความหรือตอบคำถามเกี่ยวกับมันได้

ใช้โมเดลรากฐาน AI ทั่วไปสำหรับการสรุปและการตอบคำถามโดยใช้ข้อมูลของคุณเอง | Amazon Web Services PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.

เนื่องจากบางขั้นตอนเหล่านี้อาจใช้เวลาพอสมควร สถาปัตยกรรมจึงใช้วิธีแบบอะซิงโครนัสแบบแยกส่วน ตัวอย่างเช่น การเรียกใช้เพื่อสรุปเอกสารจะเรียกใช้ฟังก์ชัน Lambda ที่โพสต์ข้อความไปยัง บริการ Amazon Simple Queue (Amazon SQS) คิว อีกฟังก์ชันของ Lambda จะรับข้อความนั้นและเริ่มต้น บริการ Amazon Elastic Container (อเมซอน อีซีเอส) AWS ฟาร์เกต งาน. งาน Fargate เรียกใช้ อเมซอน SageMaker จุดสิ้นสุดการอนุมาน เราใช้งาน Fargate ที่นี่ เนื่องจากการสรุป PDF ที่ยาวมากอาจใช้เวลาและหน่วยความจำมากกว่าที่ฟังก์ชัน Lambda มีอยู่ เมื่อการสรุปเสร็จสิ้น แอปพลิเคชันส่วนหน้าสามารถรับผลลัพธ์จาก อเมซอน ไดนาโมดีบี ตาราง

สำหรับการสรุป เราใช้โมเดล Summarize ของ AI21 ซึ่งเป็นหนึ่งในโมเดลพื้นฐานที่มีอยู่ Amazon SageMaker JumpStart. แม้ว่ารุ่นนี้จะจัดการเอกสารได้สูงสุด 10,000 คำ (ประมาณ 40 หน้า) เราใช้ตัวแยกข้อความของ langchain เพื่อให้แน่ใจว่าการเรียกสรุปไปยัง LLM แต่ละครั้งมีความยาวไม่เกิน 10,000 คำ สำหรับการสร้างข้อความ เราใช้โมเดลขนาดกลางของ Cohere และเราใช้ 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 

ตอบคำถาม

ในวิธีการสร้างแบบเสริมการดึงข้อมูล อันดับแรก เราจะแบ่งเอกสารออกเป็นส่วนย่อยๆ เราสร้างการฝังสำหรับแต่ละส่วนและจัดเก็บไว้ในฐานข้อมูลเวกเตอร์ Chroma แบบโอเพ่นซอร์สผ่านอินเทอร์เฟซของ langchain เราบันทึกฐานข้อมูลในรูปแบบ ระบบไฟล์ Amazon Elastic ระบบไฟล์ (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 ให้ความสามารถในการดึงข้อมูลใหม่ที่สำคัญ ผู้ใช้ทางธุรกิจจำเป็นต้องเข้าถึงความสามารถเหล่านี้ได้อย่างสะดวก มีสองทิศทางสำหรับการทำงานในอนาคตที่ต้องพิจารณา:

  • ใช้ประโยชน์จาก LLM อันทรงพลังที่มีอยู่แล้วในโมเดลพื้นฐานของ Jumpstart ด้วยโค้ดเพียงไม่กี่บรรทัด แอปพลิเคชันตัวอย่างของเราสามารถปรับใช้และใช้ประโยชน์จาก LLM ขั้นสูงจาก AI21 และ Cohere สำหรับการสรุปและสร้างข้อความ
  • ทำให้ความสามารถเหล่านี้เข้าถึงได้สำหรับผู้ใช้ที่ไม่ใช่ด้านเทคนิค ข้อกำหนดเบื้องต้นในการประมวลผลเอกสาร PDF คือการแยกข้อความออกจากเอกสาร และงานการสรุปอาจใช้เวลาหลายนาทีในการทำงาน ซึ่งต้องการส่วนต่อประสานผู้ใช้ที่เรียบง่ายพร้อมความสามารถในการประมวลผลแบ็คเอนด์แบบอะซิงโครนัส ซึ่งออกแบบได้ง่ายโดยใช้บริการแบบเนทีฟบนคลาวด์ เช่น Lambda และ Fargate

เราทราบด้วยว่าเอกสาร PDF เป็นข้อมูลกึ่งโครงสร้าง สัญญาณสำคัญ เช่น ส่วนหัวของส่วนนั้นยากที่จะระบุโดยทางโปรแกรม เนื่องจากต้องใช้ขนาดฟอนต์และสัญลักษณ์แสดงภาพอื่นๆ การระบุโครงสร้างพื้นฐานของข้อมูลช่วยให้ LLM ประมวลผลข้อมูลได้แม่นยำยิ่งขึ้น อย่างน้อยก็จนกว่าจะถึงเวลาที่ LLM สามารถจัดการกับอินพุตที่มีความยาวไม่จำกัดได้

สรุป

ในโพสต์นี้ เราได้แสดงวิธีสร้างเว็บแอปพลิเคชันเชิงโต้ตอบที่ให้ผู้ใช้ทางธุรกิจอัปโหลดและประมวลผลเอกสาร PDF สำหรับการสรุปและตอบคำถาม เราได้เห็นวิธีใช้ประโยชน์จากโมเดลพื้นฐาน Jumpstart เพื่อเข้าถึง LLM ขั้นสูง และใช้เทคนิคการแยกข้อความและดึงข้อมูลการสร้างเสริมเพื่อประมวลผลเอกสารที่ยาวขึ้นและทำให้พร้อมใช้งานเป็นข้อมูลสำหรับ LLM

ณ จุดนี้ ไม่มีเหตุผลที่จะไม่ทำให้ความสามารถอันทรงพลังเหล่านี้พร้อมใช้งานสำหรับผู้ใช้ของคุณ เราขอแนะนำให้คุณเริ่มใช้ โมเดลพื้นฐาน Jumpstart ในวันนี้


เกี่ยวกับผู้เขียน

ภาพผู้เขียนแรนดี เดอโฟว์ เป็นสถาปนิกอาวุโสด้านโซลูชันหลักที่ AWS เขาจบ MSEE จาก University of Michigan ที่ซึ่งเขาทำงานด้านคอมพิวเตอร์วิทัศน์สำหรับยานยนต์ไร้คนขับ เขายังสำเร็จการศึกษา MBA จาก Colorado State University Randy ดำรงตำแหน่งหลากหลายตำแหน่งในแวดวงเทคโนโลยี ตั้งแต่วิศวกรรมซอฟต์แวร์ไปจนถึงการจัดการผลิตภัณฑ์ เข้ามาในพื้นที่ข้อมูลขนาดใหญ่ในปี 2013 และยังคงสำรวจพื้นที่นั้น เขากำลังทำงานอย่างแข็งขันในโครงการในพื้นที่ ML และได้นำเสนอในการประชุมมากมายรวมถึง Strata และ GlueCon

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS