אינטליגנציה של נתונים גנרטיביים

צור אגם מסמכים באמצעות חילוץ טקסט בקנה מידה גדול ממסמכים עם Amazon Textract | שירותי האינטרנט של אמזון

תאריך:

לקוחות AWS בתחום הבריאות, השירותים הפיננסיים, המגזר הציבורי ותעשיות אחרות מאחסנים מיליארדי מסמכים כתמונות או קובצי PDF ב שירות אחסון פשוט של אמזון (אמזון S3). עם זאת, הם אינם מסוגלים לקבל תובנות כגון שימוש במידע הנעול במסמכים עבור מודלים של שפה גדולה (LLMs) או חיפוש עד שהם מחלצים את הטקסט, הטפסים, הטבלאות ונתונים מובנים אחרים. עם AWS עיבוד מסמכים חכם (IDP) באמצעות שירותי AI כגון טקסטורה באמזון, תוכל לנצל את היתרונות של טכנולוגיית למידת מכונה (ML) המובילה בתעשייה לעיבוד מהיר ומדויק של נתונים מקובצי PDF או תמונות מסמכים (TIFF, JPEG, PNG). לאחר חילוץ הטקסט מהמסמכים, תוכל להשתמש בו כדי לכוונן מודל יסוד, לסכם את הנתונים באמצעות מודל יסוד, או לשלוח אותו למסד נתונים.

בפוסט זה, אנו מתמקדים בעיבוד אוסף גדול של מסמכים לקובצי טקסט גולמיים ואחסוןם באמזון S3. אנו מספקים לך שני פתרונות שונים עבור מקרה שימוש זה. הראשון מאפשר לך להריץ סקריפט Python מכל שרת או מופע כולל מחברת Jupyter; זו הדרך המהירה ביותר להתחיל. הגישה השנייה היא פריסה סוהר של רכיבי תשתית שונים באמצעות ערכת פיתוח ענן AWS (AWS CDK) בונה. המבנה של AWS CDK מספק מסגרת גמישה וגמישה לעיבוד המסמכים שלך ולבניית צינור IDP מקצה לקצה. באמצעות השימוש ב-AWS CDK, אתה יכול להרחיב את הפונקציונליות שלו כך שתכלול עריכה, אחסן את הפלט ב- Amazon OpenSearch, או הוסף התאמה אישית AWS למבדה לתפקד עם ההיגיון העסקי שלך.

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

פתרון 1: השתמש בסקריפט של Python

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

התרשים הבא ממחיש את רצף האירועים בתוך התסריט. בסיום התסריט, סטטוס השלמה יחד עם הזמן שנדרש יוחזר לקונסולת הסטודיו של SageMaker.

תרשים

ארזנו את הפתרון הזה ב-a סקריפט .ipynb ו סקריפט .py. אתה יכול להשתמש בכל אחד מהפתרונות הניתנים לפריסה לפי הדרישות שלך.

תנאים מוקדמים

כדי להפעיל את הסקריפט הזה ממחברת Jupyter, ה AWS זהות וניהול גישה תפקיד (IAM) המוקצה למחברת חייב להיות בעל הרשאות המאפשרות לו אינטראקציה עם DynamoDB, Amazon S3 ו-Amazon Textract. ההנחיה הכללית היא לספק הרשאות לפחות הרשאות עבור כל אחד מהשירותים הללו עבורך AmazonSageMaker-ExecutionRole תַפְקִיד. למידע נוסף, עיין ב התחל עם מדיניות מנוהלת של AWS ועבור לעבר הרשאות הפחות-הרשאות.

לחלופין, אתה יכול להפעיל את הסקריפט הזה מסביבות אחרות כגון ענן מחשוב אלסטי של אמזון (Amazon EC2) מופע או מיכל שתנהל, בתנאי ש-Python, Pip3 וה- AWS SDK עבור Python (Boto3) מותקנים. שוב, יש ליישם את אותן מדיניות IAM המאפשרות לסקריפט ליצור אינטראקציה עם השירותים המנוהלים השונים.

Walkthrough

כדי ליישם פתרון זה, תחילה עליך לשכפל את המאגר GitHub.

עליך להגדיר את המשתנים הבאים בסקריפט לפני שתוכל להפעיל אותו:

  • טבלת_מעקב – זהו השם של טבלת DynamoDB שתיווצר.
  • input_bucket – זהו מיקום המקור שלך באמזון S3 המכיל את המסמכים שברצונך לשלוח לאמזון טקסטרקט לזיהוי טקסט. עבור משתנה זה, ספק את שם הדלי, כגון mybucket.
  • פלט_דלי - זה מיועד לאחסון המיקום שבו אתה רוצה ש- Amazon Textract יכתוב את התוצאות. עבור משתנה זה, ספק את שם הדלי, כגון myoutputbucket.
  • _input_prefix (אופציונלי) – אם ברצונך לבחור קבצים מסוימים מתוך תיקייה בדלי S3 שלך, תוכל לציין את שם התיקיה הזה בתור קידומת הקלט. אחרת, השאר את ברירת המחדל כריקה כדי לבחור הכל.

התסריט הוא כדלקמן:

_tracking_table = "Table_Name_for_storing_s3ObjectNames"
_input_bucket = "your_files_are_here"
_output_bucket = "Amazon Textract_writes_JSON_containing_raw_text_to_here"

סכימת הטבלה הבאה של DynamoDB נוצרת כאשר הסקריפט מופעל:

Table Table_Name_for_storing_s3ObjectNames
Partition Key objectName (String) bucketName (String) createdDate (Decimal) outputbucketName (String) txJobId (String)

כאשר הסקריפט מופעל בפעם הראשונה, הוא יבדוק אם טבלת DynamoDB קיימת וייצור אותה באופן אוטומטי במידת הצורך. לאחר יצירת הטבלה, עלינו לאכלס אותה ברשימת הפניות לאובייקט מסמכים מאמזון S3 שאנו רוצים לעבד. התסריט בעיצובו יספור מעל אובייקטים במפורט input_bucket ומלאס אוטומטית את הטבלה שלנו בשמותיהם כאשר הם פועלים. לוקח בערך 10 דקות למנות למעלה מ-100,000 מסמכים ולאכלס את השמות האלה בטבלת DynamoDB מהסקריפט. אם יש לך מיליוני אובייקטים בדלי, אתה יכול לחלופין להשתמש בתכונת המלאי של Amazon S3 שיוצרת קובץ CSV של שמות, ואז לאכלס את טבלת DynamoDB מהרשימה הזו בסקריפט משלך מראש ולא להשתמש בפונקציה שנקראת fetchAllObjectsInBucketandStoreName על ידי הערה. למידע נוסף, עיין ב הגדרת מלאי Amazon S3.

כפי שהוזכר קודם לכן, יש גם גרסת מחברת וגם גרסת סקריפט של Python. המחברת היא הדרך הפשוטה ביותר להתחיל; פשוט הפעל כל תא מתחילתו ועד סופו.

אם תחליט להפעיל את הסקריפט של Python מ-CLI, מומלץ להשתמש במרבב טרמינלי כגון tmux. זה כדי למנוע מהסקריפט להפסיק אם הפעלת ה-SSH שלך תסתיים. לדוגמה: tmux new -d ‘python3 textractFeeder.py’.

להלן נקודת הכניסה של התסריט; מכאן אתה יכול להגיב על שיטות שאינן נחוצות:

"""Main entry point into script --- Start Here"""
if __name__ == "__main__": now = time.perf_counter() print("started")

השדות הבאים מוגדרים כאשר הסקריפט מאכלס את טבלת DynamoDB:

  • שם אובייקט – שם המסמך שנמצא באמזון S3 שיישלח לאמזון טקסטרקט
  • bucketName – הדלי שבו מאוחסן אובייקט המסמך

יש למלא את שני השדות הללו אם תחליט להשתמש בקובץ CSV מדוח המלאי של S3 ולדלג על האכלוס האוטומטי שמתרחש בתוך הסקריפט.

כעת כשהטבלה נוצרה ומאוכלסת בהפניות לאובייקט המסמך, הסקריפט מוכן להתחיל לקרוא ל-Amazon Textract StartDocumentTextDetection ממשק API. ל- Amazon Textract, בדומה לשירותים מנוהלים אחרים, יש א מגבלת ברירת מחדל על ממשקי ה-API הנקראים טרנזקציות לשנייה (TPS). במידת הצורך, תוכל לבקש הגדלת מכסה מקונסולת Amazon Textract. הקוד נועד להשתמש במספר שרשורים בו-זמנית בעת קריאה לאמזון Textract כדי למקסם את התפוקה עם השירות. אתה יכול לשנות זאת בתוך הקוד על ידי שינוי ה- threadCountforTextractAPICall מִשְׁתַנֶה. כברירת מחדל, זה מוגדר ל-20 שרשורים. התסריט יקרא בתחילה 200 שורות מטבלת DynamoDB ויאחסן אותן ברשימה בזיכרון העטופה במחלקה לבטיחות חוטים. לאחר מכן מתחילים כל שרשור מתקשר ופועל בתוך נתיב השחייה שלו. בעיקרון, שרשור המתקשרים של Amazon Textract יאחזר פריט מרשימת הזיכרון שמכיל את הפניה לאובייקט שלנו. לאחר מכן הוא יקרא לאסינכרוני start_document_text_detection API והמתן לאישור עם מזהה העבודה. לאחר מכן, מזהה העבודה מתעדכן בחזרה לשורה DynamoDB עבור אובייקט זה, והשרשור יחזור על ידי אחזור הפריט הבא מהרשימה.

להלן קוד התזמור הראשי תסריט:

while len(results) > 0: for record in results: # put these records into our thread safe list fileList.append(record) """create our threads for processing Amazon Textract""" threadsforTextractAPI=threading.Thread(name="Thread - " + str(i), target=procestTextractFunction, args=(fileList,)) 

שרשורי המתקשרים ימשיכו לחזור על עצמם עד שלא יהיו עוד פריטים ברשימה, ובשלב זה כל השרשורים ייפסקו. כאשר כל השרשורים הפועלים בנתיבי השחייה שלהם נעצרו, 200 השורות הבאות מ-DynamoDB מאוחזרות ומתחילות קבוצה חדשה של 20 שרשורים, וכל התהליך חוזר על עצמו עד שכל שורה שאינה מכילה מזהה עבודה מאוחזרת מ-DynamoDB ו מְעוּדכָּן. אם התסריט יקרוס עקב בעיה בלתי צפויה כלשהי, ניתן להפעיל את הסקריפט שוב ​​מה- orchestrate() שיטה. זה מוודא שהשרשורים ימשיכו לעבד שורות המכילות מזהי עבודה ריקים. שימו לב שכאשר מפעילים מחדש את orchestrate() שיטה לאחר הפסקת הסקריפט, יש פוטנציאל שכמה מסמכים יישלחו שוב לאמזון Textract. מספר זה יהיה שווה או קטן ממספר השרשורים שהיו פועלים בזמן הקריסה.

כאשר אין יותר שורות המכילות מזהה עבודה ריק בטבלת DynamoDB, הסקריפט ייפסק. כל פלט ה-JSON מאמזון Textract עבור כל האובייקטים יימצא ב- output_bucket כברירת מחדל תחת textract_output תיקייה. כל תיקיית משנה בפנים textract_output ייקרא עם מזהה העבודה התואם למזהה העבודה שהיה מאוחסן בטבלת DynamoDB עבור אובייקט זה. בתוך תיקיית מזהה המשימה, תמצא את ה-JSON, אשר יקבל שם מספרי החל מ-1 ויכול להשתרע על פני קבצי JSON נוספים שיתוויו 2, 3 וכן הלאה. קובצי JSON משתרעים הם תוצאה של מסמכים צפופים או מרובי עמודים, שבהם כמות התוכן שחולץ עולה על גודל ה-JSON ברירת המחדל של Amazon Textract של 1,000 בלוקים. מתייחס לחסום למידע נוסף על בלוקים. קובצי JSON אלה יכללו את כל המטא נתונים של Amazon Textract, כולל הטקסט שחולץ מתוך המסמכים.

אתה יכול למצוא את גרסת מחברת הקוד של Python ואת הסקריפט עבור פתרון זה ב GitHub.

לנקות את

כאשר הסקריפט של Python הושלם, תוכל לחסוך בעלויות על ידי כיבוי או עצירה של סטודיו SageMaker של אמזון מחברת או מיכל שסבבת.

כעת נעבור לפתרון השני שלנו למסמכים בקנה מידה.

פתרון 2: השתמש במבנה AWS CDK ללא שרת

פתרון זה משתמש פונקציות שלב AWS ולמבדה מתפקדת לתזמורת צינור ה-IDP. אנו משתמשים ב- IDP AWS CDK בונה, שמאפשרים לעבוד עם Amazon Textract בקנה מידה פשוט. בנוסף, אנו משתמשים ב- a שלב פונקציות מפה מבוזרת לחזור על כל הקבצים בדלי S3 ולהתחיל עיבוד. פונקציית Lambda הראשונה קובעת כמה עמודים יש למסמכים שלך. זה מאפשר לצינור להשתמש באופן אוטומטי בממשק API סינכרוני (עבור מסמכים בני עמוד בודד) או אסינכרוני (עבור מסמכים מרובי עמודים). בעת שימוש ב-API האסינכרוני, פונקציית Lambda נוספת נקראת לכל קבצי ה-JSON ש-Amazon Textract תייצר עבור כל הדפים שלך לקובץ JSON אחד כדי להפוך את זה לפשוט עבור האפליקציות במורד הזרם שלך לעבוד עם המידע.

פתרון זה מכיל גם שתי פונקציות נוספות של Lambda. הפונקציה הראשונה מנתחת את הטקסט מה-JSON ושומרת אותו כקובץ טקסט באמזון S3. הפונקציה השנייה מנתחת את ה-JSON ומאחסנת את זה עבור מדדים על עומס העבודה.

התרשים הבא ממחיש את זרימת העבודה של Step Functions.

תרשים

תנאים מוקדמים

בסיס קוד זה משתמש ב-AWS CDK ודורש Docker. אתה יכול לפרוס את זה מ- AWS Cloud9 מופע, שבו כבר הוגדרו את AWS CDK ואת Docker.

Walkthrough

כדי ליישם פתרון זה, תחילה עליך לשכפל את מאגר.

לאחר שתשכפל את המאגר, התקן את התלות:

pip install -r requirements.txt

לאחר מכן השתמש בקוד הבא כדי לפרוס את ערימת CDK של AWS:

cdk bootstrap
cdk deploy --parameters SourceBucket=<Source Bucket> SourcePrefix=<Source Prefix>

עליך לספק גם את דלי המקור וגם את קידומת המקור (מיקום הקבצים שברצונך לעבד) עבור פתרון זה.

לאחר השלמת הפריסה, נווט אל מסוף פונקציות השלב, שם אתה אמור לראות את מכונת המצב ServerlessIDPArchivePipeline.

תרשים

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

תרשים

בחרו התחל בביצוע שוב כדי להפעיל את מכונת המדינה.

תרשים

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

תרשים

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

לנקות את

לאחר שהצינור שלך סיים לפעול, כדי לנקות, אתה יכול לחזור לפרויקט שלך ולהזין את הפקודה הבאה:

cdk destroy

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

סיכום

בפוסט זה הצגנו פתרון המאפשר להמיר את תמונות המסמכים וקובצי ה-PDF שלך לקבצי טקסט בצורה פשוטה. זהו תנאי מוקדם לשימוש במסמכים שלך עבור AI וחיפוש יצירתיים. למידע נוסף על שימוש בטקסט כדי לאמן או לכוונן את דגמי הבסיס שלך, עיין ב כוונן את Llama 2 ליצירת טקסט ב- Amazon SageMaker JumpStart. לשימוש עם חיפוש, עיין ב הטמע אינדקס חיפוש מסמכים חכם עם Amazon Textract ו- Amazon OpenSearch. למידע נוסף על יכולות עיבוד מסמכים מתקדמות המוצעות על ידי שירותי AWS AI, עיין ב הדרכה לעיבוד מסמכים חכם ב-AWS.


על הכותבים

טים קונדלוטים קונדלו הוא ארכיטקט פתרונות מומחה לבינה מלאכותית (AI) ולמידת מכונה (ML) בכיר בשירותי האינטרנט של אמזון (AWS). המיקוד שלו הוא עיבוד שפה טבעית וראייה ממוחשבת. טים נהנה לקחת רעיונות של לקוחות ולהפוך אותם לפתרונות הניתנים להרחבה.

דיוויד גירלינג הוא ארכיטקט פתרונות AI/ML בכיר עם למעלה מעשרים שנות ניסיון בתכנון, הובלה ופיתוח של מערכות ארגוניות. דוד הוא חלק מצוות מומחים המתמקד בסיוע ללקוחות ללמוד, לחדש ולהשתמש בשירותים בעלי יכולת גבוהה אלה עם הנתונים שלהם עבור מקרי השימוש שלהם.

ספוט_ימג

המודיעין האחרון

ספוט_ימג