هوش داده افلاطون
جستجوی عمودی و هوش مصنوعی

ایجاد یک دریاچه سند با استفاده از استخراج متن در مقیاس بزرگ از اسناد با Amazon Textract | خدمات وب آمازون

تاریخ:

مشتریان AWS در مراقبت‌های بهداشتی، خدمات مالی، بخش عمومی و سایر صنایع، میلیاردها سند را به‌عنوان تصویر یا PDF ذخیره می‌کنند. سرویس ذخیره سازی ساده آمازون (Amazon S3). با این حال، تا زمانی که متن، فرم‌ها، جداول و سایر داده‌های ساختاریافته را استخراج نکنند، نمی‌توانند بینش‌هایی مانند استفاده از اطلاعات قفل‌شده در اسناد برای مدل‌های زبان بزرگ (LLM) یا جستجو به دست آورند. با پردازش اسناد هوشمند AWS (IDP) با استفاده از خدمات هوش مصنوعی مانند متن آمازون، می توانید از فناوری پیشرو در صنعت یادگیری ماشین (ML) برای پردازش سریع و دقیق داده ها از فایل های PDF یا تصاویر اسناد (TIFF، JPEG، PNG) بهره ببرید. پس از استخراج متن از اسناد، می توانید از آن برای تنظیم دقیق مدل پایه استفاده کنید. داده ها را با استفاده از مدل پایه خلاصه کنید، یا آن را به پایگاه داده ارسال کنید.

در این پست، ما بر پردازش مجموعه بزرگی از اسناد به فایل‌های متنی خام و ذخیره آنها در آمازون S3 تمرکز می‌کنیم. ما دو راه حل مختلف برای این مورد در اختیار شما قرار می دهیم. اولی به شما امکان می دهد یک اسکریپت پایتون را از هر سرور یا نمونه ای از جمله یک نوت بوک Jupyter اجرا کنید. این سریعترین راه برای شروع است. رویکرد دوم، استقرار کلید در دست اجزای مختلف زیرساخت با استفاده است کیت توسعه ابری AWS (AWS CDK) می سازد. ساختار AWS CDK یک چارچوب انعطاف‌پذیر و انعطاف‌پذیر برای پردازش اسناد شما و ایجاد یک خط لوله IDP سرتاسر فراهم می‌کند. از طریق استفاده از AWS CDK، می توانید عملکرد آن را گسترش دهید تا ویرایش، خروجی را در جستجوی باز آمازون ذخیره کنید، یا سفارشی اضافه کنید AWS لامبدا با منطق کسب و کار خود عمل کنید.

هر دوی این راه حل ها به شما امکان می دهند میلیون ها صفحه را به سرعت پردازش کنید. قبل از اجرای هر یک از این راه حل ها در مقیاس، توصیه می کنیم با زیرمجموعه ای از اسناد خود آزمایش کنید تا مطمئن شوید نتایج انتظارات شما را برآورده می کند. در بخش‌های بعدی، ابتدا راه‌حل اسکریپت و سپس راه‌حل ساخت AWS CDK را توضیح می‌دهیم.

راه حل 1: از اسکریپت پایتون استفاده کنید

این راه حل اسناد را برای متن خام از طریق آمازون تکست به همان سرعتی که این سرویس اجازه می دهد پردازش می کند، با این انتظار که اگر در اسکریپت شکستی وجود داشته باشد، این روند از همان جایی که متوقف شد ادامه خواهد یافت. این راه حل از سه سرویس مختلف استفاده می کند: Amazon S3، آمازون DynamoDB، و متن آمازون.

نمودار زیر توالی وقایع درون فیلمنامه را نشان می دهد. هنگامی که اسکریپت به پایان می رسد، وضعیت تکمیل به همراه زمان صرف شده به کنسول استودیو SageMaker برگردانده می شود.

نمودار

ما این راه حل را در یک بسته بندی کرده ایم اسکریپت ipynb و اسکریپت .py. شما می توانید از هر یک از راه حل های قابل استقرار بر اساس نیاز خود استفاده کنید.

پیش نیازها

برای اجرای این اسکریپت از یک نوت بوک Jupyter، هویت AWS و مدیریت دسترسی نقش (IAM) اختصاص داده شده به نوت بوک باید دارای مجوزهایی باشد که به آن اجازه می دهد با DynamoDB، Amazon S3 و Amazon Textract تعامل داشته باشد. راهنمایی کلی این است که حداقل مجوزها را برای هر یک از این خدمات به شما ارائه دهید AmazonSageMaker-ExecutionRole نقش. برای کسب اطلاعات بیشتر به ادامه مطلب مراجعه نمایید با خط‌مشی‌های مدیریت‌شده AWS شروع کنید و به سمت مجوزهای کمترین امتیاز حرکت کنید.

همچنین می توانید این اسکریپت را از محیط های دیگری مانند an اجرا کنید ابر محاسبه الاستیک آمازون نمونه یا کانتینری (Amazon EC2) که می‌توانید مدیریت کنید، مشروط بر اینکه Python، Pip3 و AWS SDK برای پایتون (Boto3) نصب می شوند. باز هم، همان سیاست های IAM باید اعمال شود که به اسکریپت اجازه می دهد تا با سرویس های مختلف مدیریت شده تعامل داشته باشد.

خرید

برای پیاده سازی این راه حل، ابتدا باید مخزن را شبیه سازی کنید GitHub.

قبل از اینکه بتوانید آن را اجرا کنید، باید متغیرهای زیر را در اسکریپت تنظیم کنید:

  • جدول_ردیابی – این نام جدول DynamoDB است که ایجاد خواهد شد.
  • ورودی_سطل – این مکان منبع شما در آمازون S3 است که حاوی اسنادی است که می خواهید برای تشخیص متن به آمازون متن ارسال کنید. برای این متغیر، نام سطل را وارد کنید، مانند mybucket.
  • خروجی_سطل - این برای ذخیره مکانی است که می خواهید متن آمازون نتایج را در آن بنویسد. برای این متغیر، نام سطل را وارد کنید، مانند 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 سند و پر کردن آن نام ها در جدول DynamoDB از روی اسکریپت تقریباً 100,000 دقیقه طول می کشد. اگر میلیون‌ها شی در یک سطل دارید، می‌توانید از ویژگی موجودی آمازون S3 استفاده کنید که یک فایل CSV از نام‌ها ایجاد می‌کند، سپس جدول DynamoDB را از این لیست با اسکریپت خود از قبل پر کنید و از تابعی به نام استفاده نکنید. fetchAllObjectsInBucketandStoreName با اظهار نظر در مورد آن برای کسب اطلاعات بیشتر به ادامه مطلب مراجعه نمایید پیکربندی موجودی Amazon S3.

همانطور که قبلا ذکر شد، هم نسخه نوت بوک و هم نسخه اسکریپت پایتون وجود دارد. نوت بوک ساده ترین راه برای شروع است. به سادگی هر سلول را از ابتدا تا انتها اجرا کنید.

اگر تصمیم دارید اسکریپت پایتون را از یک 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 استفاده کنید و از تکمیل خودکار که در اسکریپت اتفاق می‌افتد صرفنظر کنید، این دو فیلد باید پر شوند.

اکنون که جدول ایجاد شده و با ارجاعات شی سند پر شده است، اسکریپت آماده شروع فراخوانی متن آمازون است. StartDocumentTextDetection API. متن آمازون، مشابه سایر خدمات مدیریت شده، دارای یک حد پیش فرض در API هایی که تراکنش در ثانیه (TPS) نامیده می شوند. در صورت نیاز، می توانید از کنسول آمازون Textract درخواست افزایش سهمیه کنید. این کد به گونه ای طراحی شده است که هنگام فراخوانی Amazon Textract از چندین رشته به طور همزمان استفاده کند تا توان عملیاتی سرویس را به حداکثر برساند. شما می توانید این را در داخل کد با تغییر کد تغییر دهید threadCountforTextractAPICall متغیر. به طور پیش فرض، این مقدار روی 20 رشته تنظیم شده است. این اسکریپت در ابتدا 200 ردیف از جدول DynamoDB را می خواند و آنها را در لیستی در حافظه ذخیره می کند که با یک کلاس برای ایمنی رشته ها پیچیده شده است. سپس هر رشته تماس گیرنده شروع می شود و در مسیر شنای خود حرکت می کند. اساسا، رشته تماس گیرنده آمازون Texttract یک آیتم را از لیست درون حافظه که حاوی مرجع شی ما است، بازیابی می کند. سپس ناهمزمان را فراخوانی می کند 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() پس از اینکه اسکریپت متوقف شد، این احتمال وجود دارد که چند سند دوباره به متن آمازون ارسال شوند. این تعداد برابر یا کمتر از تعداد رشته هایی است که در زمان خرابی در حال اجرا بودند.

وقتی در جدول DynamoDB هیچ ردیف دیگری حاوی شناسه شغلی خالی نباشد، اسکریپت متوقف می شود. تمام خروجی JSON از متن آمازون برای همه اشیاء در آن یافت می شود output_bucket به طور پیش فرض تحت textract_output پوشه هر زیر پوشه در داخل textract_output با شناسه شغلی که مربوط به شناسه شغلی است که در جدول DynamoDB برای آن شی ذخیره شده است نامگذاری می شود. در پوشه job ID، JSON را پیدا خواهید کرد که نام عددی آن از 1 شروع می‌شود و به طور بالقوه می‌تواند فایل‌های JSON اضافی را که دارای برچسب‌های 2، 3 و غیره هستند، در بر گیرد. پوشاندن فایل‌های JSON نتیجه اسناد متراکم یا چند صفحه‌ای است که در آن میزان محتوای استخراج‌شده از اندازه پیش‌فرض JSON از Amazon Textract 1,000 بلاک بیشتر است. رجوع شود به مسدود کردن برای اطلاعات بیشتر در مورد بلوک ها این فایل‌های JSON حاوی تمام ابرداده‌های متنی Amazon، از جمله متنی است که از درون اسناد استخراج شده است.

شما می توانید نسخه و اسکریپت نوت بوک کد پایتون را برای این راه حل پیدا کنید GitHub.

پاک کردن

وقتی اسکریپت پایتون کامل شد، می‌توانید با خاموش کردن یا توقف آن در هزینه‌ها صرفه‌جویی کنید Amazon SageMaker Studio دفترچه یا ظرفی که چرخانده اید.

اکنون به راه حل دوم ما برای اسناد در مقیاس می پردازیم.

راه حل 2: از ساختار AWS CDK بدون سرور استفاده کنید

این راه حل استفاده می کند توابع مرحله AWS و لامبدا برای تنظیم خط لوله IDP عمل می کند. ما استفاده می کنیم سازه های IDP AWS CDK، که کار با Amazon Textract را در مقیاس آسان می کند. علاوه بر این، ما از a استفاده می کنیم توابع مرحله نقشه توزیع شده برای تکرار روی تمام فایل های موجود در سطل S3 و شروع پردازش. اولین تابع Lambda تعیین می کند که اسناد شما چند صفحه دارند. این امر خط لوله را قادر می سازد تا به طور خودکار از API همزمان (برای اسناد تک صفحه ای) یا ناهمزمان (برای اسناد چند صفحه ای) استفاده کند. هنگام استفاده از API ناهمزمان، یک تابع Lambda اضافی به همه فایل‌های JSON که Amazon Txtract برای همه صفحات شما در یک فایل JSON تولید می‌کند، فراخوانی می‌شود تا برنامه‌های پایین‌دستی شما بتوانند با اطلاعات کار کنند.

این محلول همچنین شامل دو تابع لامبدا اضافی است. تابع اول متن را از JSON تجزیه می کند و آن را به عنوان یک فایل متنی در آمازون S3 ذخیره می کند. تابع دوم JSON را تجزیه و تحلیل می کند و آن را برای معیارهای حجم کار ذخیره می کند.

نمودار زیر گردش کار توابع مرحله را نشان می دهد.

نمودار

پیش نیازها

این پایه کد از CDK AWS استفاده می کند و به Docker نیاز دارد. شما می توانید این را از یک استقرار دهید AWS Cloud9 به عنوان مثال، که قبلاً AWS CDK و Docker را تنظیم کرده است.

خرید

برای پیاده سازی این راه حل، ابتدا باید آن را شبیه سازی کنید مخزن

پس از کلون کردن مخزن، وابستگی ها را نصب کنید:

pip install -r requirements.txt

سپس از کد زیر برای استقرار پشته AWS CDK استفاده کنید:

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

شما باید هم سطل منبع و هم پیشوند منبع (محل فایل هایی که می خواهید پردازش کنید) را برای این راه حل ارائه کنید.

وقتی استقرار کامل شد، به کنسول Step Functions بروید، جایی که باید ماشین حالت را ببینید. ServerlessIDPArchivePipeline.

نمودار

صفحه جزئیات ماشین حالت را باز کنید و روی اعدام برگه ، انتخاب کنید شروع به اجرا کنید.

نمودار

را انتخاب کنید شروع به اجرا کنید دوباره برای اجرای ماشین دولتی.

نمودار

پس از راه‌اندازی ماشین حالت، می‌توانید با نگاه کردن به اجرای نقشه، خط لوله را کنترل کنید. یک را خواهید دید وضعیت پردازش مورد بخش مانند تصویر زیر همانطور که می بینید، این برای اجرا و پیگیری موارد موفق و شکست خورده ساخته شده است. این روند تا زمانی که همه اسناد خوانده شوند ادامه خواهد داشت.

نمودار

با استفاده از این راه حل، باید بتوانید میلیون ها فایل را در حساب AWS خود پردازش کنید، بدون اینکه نگران این باشید که چگونه به درستی تعیین کنید کدام فایل ها را به کدام API ارسال کنید یا فایل های خراب که خط لوله شما خراب می شود. از طریق کنسول Step Functions قادر خواهید بود فایل های خود را در زمان واقعی تماشا و نظارت کنید.

پاک کردن

پس از اتمام اجرای خط لوله شما، برای پاکسازی، می توانید به پروژه خود برگردید و دستور زیر را وارد کنید:

cdk destroy

با این کار هر سرویسی که برای این پروژه مستقر شده بود حذف می شود.

نتیجه

در این پست راه حلی ارائه کردیم که تبدیل تصاویر سند و فایل های PDF به فایل های متنی را آسان می کند. این یک پیش نیاز کلیدی برای استفاده از اسناد شما برای هوش مصنوعی و جستجو است. برای کسب اطلاعات بیشتر در مورد استفاده از متن برای آموزش یا تنظیم دقیق مدل‌های فونداسیون، به ادامه مطلب مراجعه کنید Llama 2 را برای تولید متن در Amazon SageMaker JumpStart تنظیم کنید. برای استفاده با جستجو، مراجعه کنید فهرست جستجوی اسناد هوشمند را با آمازون متن و جستجوی باز آمازون پیاده سازی کنید. برای کسب اطلاعات بیشتر در مورد قابلیت های پیشرفته پردازش اسناد ارائه شده توسط سرویس های هوش مصنوعی AWS، مراجعه کنید راهنمای پردازش اسناد هوشمند در AWS.


درباره نویسنده

تیم کوندلوتیم کوندلو یک معمار ارشد راه حل های هوش مصنوعی (AI) و یادگیری ماشین (ML) در خدمات وب آمازون (AWS) است. تمرکز او پردازش زبان طبیعی و بینایی کامپیوتری است. تیم از گرفتن ایده های مشتری و تبدیل آنها به راه حل های مقیاس پذیر لذت می برد.

دیوید گرلینگ یک معمار ارشد راه حل های AI/ML با بیش از بیست سال تجربه در طراحی، رهبری و توسعه سیستم های سازمانی است. دیوید بخشی از یک تیم تخصصی است که بر کمک به مشتریان در یادگیری، نوآوری و استفاده از این خدمات بسیار توانمند با داده هایشان برای موارد استفاده تمرکز دارد.

نقطه_img

جدیدترین اطلاعات

نقطه_img

چت با ما

سلام! چگونه می توانم به شما کمک کنم؟