השתמש במודל בסיס AI מחולל לסיכום ותשובות לשאלות באמצעות הנתונים שלך | שירותי האינטרנט של אמזון

השתמש במודל בסיס AI מחולל לסיכום ותשובות לשאלות באמצעות הנתונים שלך | שירותי האינטרנט של אמזון

ניתן להשתמש במודלים של שפה גדולה (LLMs) לניתוח מסמכים מורכבים ולספק סיכומים ותשובות לשאלות. הפוסט התאמת דומיין כוונון עדין של מודלים של בסיס באמזון SageMaker JumpStart על נתונים פיננסיים מתאר כיצד לכוונן LLM באמצעות מערך הנתונים שלך. ברגע שיש לך LLM מוצק, תרצה לחשוף את LLM זה למשתמשים עסקיים כדי לעבד מסמכים חדשים, שאורכם עשוי להיות מאות עמודים. בפוסט זה, אנו מדגימים כיצד לבנות ממשק משתמש בזמן אמת כדי לאפשר למשתמשים עסקיים לעבד מסמך PDF באורך שרירותי. לאחר עיבוד הקובץ, תוכלו לסכם את המסמך או לשאול שאלות על התוכן. הפתרון לדוגמה המתואר בפוסט זה זמין ב- GitHub.

עבודה עם מסמכים פיננסיים

דוחות כספיים כמו דוחות רווח רבעוניים ודוחות שנתיים לבעלי המניות הם לרוב באורך של עשרות או מאות עמודים. מסמכים אלה מכילים הרבה שפות כתובות כמו כתב ויתור ושפה משפטית. אם ברצונך לחלץ את נקודות הנתונים העיקריות מאחד מהמסמכים הללו, אתה צריך גם זמן וגם היכרות מסוימת עם שפת ה-boilerplate כדי שתוכל לזהות את העובדות המעניינות. וכמובן, אתה לא יכול לשאול LLM שאלות על מסמך שהוא מעולם לא ראה.

ל-LLMs המשמשים לסיכום יש מגבלה על מספר האסימונים (התווים) המועברים למודל, ולמעט חריגים מסוימים, בדרך כלל מדובר בלא יותר מכמה אלפי אסימונים. זה בדרך כלל מונע את היכולת לסכם מסמכים ארוכים יותר.

הפתרון שלנו מטפל במסמכים החורגים מאורך רצף האסימונים המרבי של LLM, ומעמיד את המסמך הזה לרשות ה-LLM לצורך מענה על שאלות.

סקירת פתרונות

לעיצוב שלנו יש שלושה חלקים חשובים:

  • יש לו יישום אינטרנט אינטראקטיבי למשתמשים עסקיים להעלות ולעבד קובצי PDF
  • הוא משתמש בספריית langchain כדי לפצל קובץ PDF גדול לנתחים ניתנים לניהול
  • הוא משתמש בטכניקת הדור המוגבר של אחזור כדי לאפשר למשתמשים לשאול שאלות על נתונים חדשים שה-LLM לא ראה בעבר

כפי שמוצג בתרשים הבא, אנו משתמשים בממשק קצה המיושם עם React JavaScript שמתארח ב-an שירות אחסון פשוט של אמזון (Amazon S3) דלי בחזית אמזון CloudFront. האפליקציה הקדמית מאפשרת למשתמשים להעלות מסמכי PDF לאמזון S3. לאחר השלמת ההעלאה, תוכל להפעיל עבודת חילוץ טקסט המופעלת על ידי טקסטורה באמזון. כחלק מהפוסט-עיבוד, א AWS למבדה הפונקציה מכניסה סמנים מיוחדים לטקסט המציינים את גבולות העמוד. כשתסיים את העבודה, אתה יכול להפעיל API שמסכם את הטקסט או עונה על שאלות לגביו.

השתמש במודל בסיס AI מחולל לסיכום ותשובות לשאלות באמצעות הנתונים שלך | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

מכיוון שחלק מהצעדים הללו עשויים להימשך זמן מה, הארכיטקטורה משתמשת בגישה אסינכרונית מנותקת. לדוגמה, הקריאה לסיכום מסמך מעוררת פונקציית Lambda שמפרסמת הודעה ל- an שירות תורים פשוט של אמזון (Amazon SQS) תור. פונקציית Lambda אחרת קולטת את ההודעה ומתחילה שירות מיכלים אלסטי של אמזון (אמזון ECS) AWS פרגייט מְשִׁימָה. המשימה של פארגייט קוראת ל- אמזון SageMaker נקודת קצה של מסקנות. אנו משתמשים כאן במשימה של Fargate מכיוון שסיכום של PDF ארוך מאוד עשוי לקחת יותר זמן וזיכרון ממה שיש לפונקציית Lambda. כאשר הסיכום נעשה, היישום הקדמי יכול לקלוט את התוצאות מ- אמזון דינמו השולחן.

לסיכום, אנו משתמשים במודל Summarize של AI21, אחד מדגמי היסוד הזמינים דרך אמזון SageMaker JumpStart. למרות שמודל זה מטפל במסמכים של עד 10,000 מילים (כ-40 עמודים), אנו משתמשים במפצל הטקסט של langchain כדי לוודא שכל קריאת סיכום ל-LLM היא באורך של לא יותר מ-10,000 מילים. ליצירת טקסט, אנו משתמשים במודל Medium של Cohere, ואנחנו משתמשים ב-GPT-J להטמעות, שניהם דרך JumpStart.

עיבוד סיכום

כאשר מטפלים במסמכים גדולים יותר, עלינו להגדיר כיצד לפצל את המסמך לחתיכות קטנות יותר. כאשר אנו מקבלים את תוצאות חילוץ הטקסט בחזרה מאמזון 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. אנו שומרים את מסד הנתונים ב-an מערכת הקבצים של אמזון אלסטית (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', '')

UX UI

למרות ש-LLMs מייצגים מדעי נתונים מתקדמים, רוב מקרי השימוש עבור LLMs כוללים בסופו של דבר אינטראקציה עם משתמשים לא טכניים. יישום האינטרנט לדוגמה שלנו מטפל במקרה שימוש אינטראקטיבי שבו משתמשים עסקיים יכולים להעלות ולעבד מסמך PDF חדש.

התרשים הבא מציג את ממשק המשתמש. משתמש מתחיל בהעלאת PDF. לאחר שהמסמך מאוחסן באמזון S3, המשתמש יכול להתחיל את עבודת חילוץ הטקסט. כאשר זה יסתיים, המשתמש יכול להפעיל את משימת הסיכום או לשאול שאלות. ממשק המשתמש חושף כמה אפשרויות מתקדמות כמו גודל הנתחים וחפיפת הנתחים, שיהיו שימושיים עבור משתמשים מתקדמים שבודקים את האפליקציה על מסמכים חדשים.

ממשק משתמש

השלבים הבא

LLMs מספקים יכולות חדשות משמעותיות לאחזור מידע. משתמשים עסקיים זקוקים לגישה נוחה ליכולות הללו. יש לשקול שני כיוונים לעבודה עתידית:

  • נצל את ה-LLMs החזקים שכבר זמינים במודלים של בסיס Jumpstart. עם כמה שורות קוד בלבד, היישום לדוגמה שלנו יכול לפרוס ולעשות שימוש ב-LLMs מתקדמים מ-AI21 ו-Cohere לסיכום והפקת טקסט.
  • הפוך את היכולות הללו לנגישות למשתמשים שאינם טכניים. תנאי מוקדם לעיבוד מסמכי PDF הוא חילוץ טקסט מהמסמך, וביצוע עבודות סיכום עשויות להימשך מספר דקות. זה דורש ממשק משתמש פשוט עם יכולות עיבוד עורפי אסינכרוני, שקל לעצב אותו באמצעות שירותים מקוריים בענן כמו Lambda ו-Fargate.

אנו גם מציינים שמסמך PDF הוא מידע מובנה למחצה. קשה לזהות רמזים חשובים כמו כותרות מקטעים באופן תכנותי, מכיוון שהם מסתמכים על גדלי גופנים ואינדיקטורים ויזואליים אחרים. זיהוי המבנה הבסיסי של המידע מסייע ל- LLM לעבד את הנתונים בצורה מדויקת יותר, לפחות עד למועד שבו LLMs יכולים להתמודד עם קלט באורך בלתי מוגבל.

סיכום

בפוסט זה, הראינו כיצד לבנות אפליקציית אינטרנט אינטראקטיבית המאפשרת למשתמשים עסקיים להעלות ולעבד מסמכי PDF לסיכום ותשובות לשאלות. ראינו כיצד לנצל את היתרונות של מודלים של בסיס Jumpstart כדי לגשת ל-LLMs מתקדמים, ולהשתמש בטכניקות פיצול טקסט ואחזור מוגבר לעיבוד מסמכים ארוכים יותר ולהפוך אותם לזמינים כמידע ל-LLM.

בנקודת זמן זו, אין סיבה לא להפוך את היכולות החזקות הללו לזמינות למשתמשים שלך. אנו ממליצים לך להתחיל להשתמש ב- מודלים של בסיס Jumpstart היום.


על הסופר

תמונת מחבררנדי דפאו הוא אדריכל פתרונות בכיר ב-AWS. הוא בעל תואר MSEE מאוניברסיטת מישיגן, שם עבד על ראייה ממוחשבת לרכבים אוטונומיים. הוא גם בעל תואר MBA מאוניברסיטת קולורדו סטייט. רנדי מילא מגוון תפקידים בתחום הטכנולוגיה, החל מהנדסת תוכנה ועד לניהול מוצר. אין נכנסה לתחום ה-Big Data בשנת 2013 וממשיכה לחקור את התחום הזה. הוא עובד באופן פעיל על פרויקטים בתחום ה-ML והציג בכנסים רבים כולל Strata ו-GlueCon.

בול זמן:

עוד מ למידת מכונות AWS