از یک مدل پایه هوش مصنوعی مولد برای جمع بندی و پاسخ به سؤال با استفاده از داده های خود استفاده کنید | خدمات وب آمازون

از یک مدل پایه هوش مصنوعی مولد برای جمع بندی و پاسخ به سؤال با استفاده از داده های خود استفاده کنید | خدمات وب آمازون

از مدل های زبان بزرگ (LLM) می توان برای تجزیه و تحلیل اسناد پیچیده و ارائه خلاصه و پاسخ به سؤالات استفاده کرد. پست تطبیق با دامنه تنظیم دقیق مدل‌های بنیاد در Amazon SageMaker JumpStart در داده‌های مالی نحوه تنظیم دقیق یک LLM با استفاده از مجموعه داده خود را شرح می دهد. هنگامی که یک LLM جامد دارید، می‌خواهید آن LLM را در معرض دید کاربران تجاری قرار دهید تا اسناد جدید را پردازش کنند، که ممکن است صدها صفحه باشد. در این پست، نحوه ایجاد یک رابط کاربری بلادرنگ را نشان می‌دهیم تا به کاربران تجاری اجازه دهیم یک سند PDF با طول دلخواه را پردازش کنند. پس از پردازش فایل، می توانید سند را خلاصه کنید یا در مورد محتوا سؤال بپرسید. راه حل نمونه شرح داده شده در این پست در دسترس است GitHub.

کار با اسناد مالی

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

LLMهایی که برای خلاصه‌سازی استفاده می‌شوند محدودیتی در تعداد نشانه‌ها (نویسه‌های) ارسال شده به مدل دارند و به استثنای برخی موارد، اینها معمولاً بیش از چند هزار توکن نیستند. این معمولاً از توانایی خلاصه کردن اسناد طولانی تر جلوگیری می کند.

راه حل ما اسنادی را مدیریت می کند که از حداکثر طول توکن نشانه LLM بیشتر است و آن سند را برای پاسخگویی به سؤال در اختیار LLM قرار می دهد.

بررسی اجمالی راه حل

طراحی ما دارای سه قطعه مهم است:

  • این یک برنامه وب تعاملی برای کاربران تجاری برای آپلود و پردازش PDF دارد
  • از کتابخانه langchain برای تقسیم یک PDF بزرگ به تکه های قابل مدیریت تر استفاده می کند
  • از تکنیک تولید افزوده بازیابی استفاده می کند تا به کاربران اجازه دهد در مورد داده های جدیدی که LLM قبلاً ندیده سؤال بپرسند.

همانطور که در نمودار زیر نشان داده شده است، ما از یک فرانت اند استفاده می کنیم که با جاوا اسکریپت React میزبانی شده است سرویس ذخیره سازی ساده آمازون (Amazon S3) سطل جلو آمازون CloudFront. نرم افزار جلویی به کاربران اجازه می دهد اسناد PDF را در آمازون S3 آپلود کنند. پس از تکمیل آپلود، می توانید یک کار استخراج متن را فعال کنید متن آمازون. به عنوان بخشی از پس پردازش، یک AWS لامبدا تابع نشانگرهای خاصی را در متن وارد می کند که مرزهای صفحه را نشان می دهد. هنگامی که آن کار انجام شد، می توانید یک API را فراخوانی کنید که متن را خلاصه می کند یا به سؤالات مربوط به آن پاسخ می دهد.

Use a generative AI foundation model for summarization and question answering using your own data | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

از آنجا که برخی از این مراحل ممکن است مدتی طول بکشد، معماری از یک رویکرد ناهمزمان جدا شده استفاده می کند. به عنوان مثال، فراخوانی برای خلاصه کردن یک سند، یک تابع Lambda را فراخوانی می کند که پیامی را به یک ارسال می کند سرویس صف ساده آمازون صف (Amazon SQS). یکی دیگر از تابع های Lambda آن پیام را دریافت می کند و یک را شروع می کند سرویس کانتینر الاستیک آمازون (Amazon ECS) AWS Fargate وظیفه. وظیفه Fargate را فرا می خواند آمازون SageMaker نقطه پایان استنتاج ما در اینجا از یک کار Fargate استفاده می کنیم زیرا خلاصه کردن یک PDF بسیار طولانی ممکن است زمان و حافظه بیشتری نسبت به یک تابع Lambda در دسترس داشته باشد. وقتی خلاصه‌سازی انجام شد، برنامه front-end می‌تواند نتایج را از یک برنامه دریافت کند آمازون DynamoDB جدول.

برای خلاصه‌سازی، از مدل خلاصه AI21، یکی از مدل‌های پایه موجود از طریق استفاده می‌کنیم. Amazon SageMaker JumpStart. اگرچه این مدل اسناد تا 10,000 کلمه (تقریباً 40 صفحه) را مدیریت می‌کند، ما از تقسیم‌کننده متن langchain استفاده می‌کنیم تا مطمئن شویم که هر فراخوانی خلاصه‌سازی به LLM بیش از 10,000 کلمه نباشد. برای تولید متن، از مدل Cohere's 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 

جواب سوال

در روش تولید افزوده بازیابی، ابتدا سند را به بخش های کوچکتر تقسیم می کنیم. ما تعبیه‌هایی را برای هر بخش ایجاد می‌کنیم و آنها را در پایگاه داده منبع باز Chroma vector از طریق رابط langchain ذخیره می‌کنیم. ما پایگاه داده را در یک ذخیره می کنیم سیستم فایل الاستیک آمازون سیستم فایل (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 شروع می کند. پس از ذخیره سند در آمازون S3، کاربر می تواند کار استخراج متن را شروع کند. وقتی این کار کامل شد، کاربر می‌تواند کار خلاصه‌سازی را فراخوانی کند یا سؤال بپرسد. رابط کاربری برخی از گزینه های پیشرفته مانند اندازه تکه و همپوشانی تکه را در معرض نمایش قرار می دهد که برای کاربران پیشرفته ای که برنامه را روی اسناد جدید آزمایش می کنند مفید است.

رابط کاربری

مراحل بعدی

LLM ها قابلیت های قابل توجهی برای بازیابی اطلاعات ارائه می دهند. کاربران تجاری نیاز به دسترسی راحت به این قابلیت ها دارند. دو جهت برای کار آینده وجود دارد که باید در نظر گرفته شود:

  • از LLM های قدرتمند موجود در مدل های فونداسیون Jumpstart استفاده کنید. تنها با چند خط کد، برنامه نمونه ما می تواند از LLM های پیشرفته AI21 و Cohere برای خلاصه سازی و تولید متن استفاده کرده و استفاده کند.
  • این قابلیت ها را برای کاربران غیر فنی در دسترس قرار دهید. یک پیش نیاز برای پردازش اسناد PDF استخراج متن از سند است و کارهای خلاصه سازی ممکن است چند دقیقه طول بکشد تا اجرا شوند. این نیاز به یک رابط کاربری ساده با قابلیت‌های پردازش باطن ناهمزمان دارد که طراحی آن با استفاده از سرویس‌های بومی ابری مانند Lambda و Fargate آسان است.

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

نتیجه

در این پست، نحوه ساخت یک برنامه وب تعاملی را نشان دادیم که به کاربران تجاری اجازه می دهد اسناد PDF را برای خلاصه و پاسخ به سؤالات آپلود و پردازش کنند. ما دیدیم که چگونه می توان از مدل های پایه Jumpstart برای دسترسی به LLM های پیشرفته استفاده کرد و از تکنیک های تقسیم متن و بازیابی تولید افزوده برای پردازش اسناد طولانی تر و در دسترس قرار دادن آنها به عنوان اطلاعات برای LLM استفاده کرد.

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


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

عکس نویسندهرندی دیفاو یک معمار ارشد راه حل در AWS است. او دارای مدرک MSEE از دانشگاه میشیگان است، جایی که روی بینایی کامپیوتری برای وسایل نقلیه خودران کار می کرد. او همچنین دارای مدرک MBA از دانشگاه ایالتی کلرادو است. رندی موقعیت های مختلفی را در فضای فناوری از مهندسی نرم افزار گرفته تا مدیریت محصول داشته است. In در سال 2013 وارد فضای Big Data شد و به کاوش در آن منطقه ادامه می دهد. او به طور فعال روی پروژه هایی در فضای ML کار می کند و در کنفرانس های متعددی از جمله Strata و GlueCon ارائه کرده است.

تمبر زمان:

بیشتر از آموزش ماشین AWS