امروز، در دسترس بودن نوتبوکهای نمونهای را اعلام میکنیم که وظایف پاسخگویی به سؤال را با استفاده از رویکرد مبتنی بر بازیابی (RAG) با مدلهای زبان بزرگ (LLM) نشان میدهند. Amazon SageMaker JumpStart. تولید متن با استفاده از RAG با LLM به شما امکان میدهد با ارائه دادههای خارجی خاص به عنوان بخشی از زمینه تغذیه شده به LLM، خروجیهای متنی خاص دامنه تولید کنید.
JumpStart یک هاب یادگیری ماشینی (ML) است که می تواند به شما کمک کند سفر ML خود را تسریع کنید. JumpStart بسیاری از مدل های زبان از پیش آموزش دیده را ارائه می دهد که به آنها می گویند مدل های پایه که می تواند به شما در انجام کارهایی مانند خلاصه نویسی مقاله، پاسخگویی به سوال، و تولید مکالمه و تولید تصویر کمک کند.
در این پست، RAG و مزایای آن را شرح میدهیم و نشان میدهیم که چگونه میتوان با استفاده از یک دفترچه یادداشت نمونه برای حل یک کار پاسخگویی به سؤال با استفاده از پیادهسازی RAG با LLM در Jumpstart، سریع شروع کرد. ما دو رویکرد را نشان می دهیم:
- چگونه مشکل را با منبع باز حل کنیم LangChain کتابخانه و آمازون SageMaker نقاط انتهایی در چند خط کد
- نحوه استفاده از الگوریتم SageMaker KNN برای انجام جستجوی معنایی داده های مقیاس بزرگ با استفاده از نقاط پایانی SageMaker
LLMS و محدودیت ها
LLM ها بر روی مقادیر زیادی از داده های بدون ساختار آموزش دیده اند و در تولید متن عمومی عالی هستند. LLM ها می توانند دانش واقعی را با آموزش پارامترهای خود بر روی مجموعه بزرگی از داده های زبان طبیعی ذخیره کنند.
چند محدودیت برای استفاده از LLM های از پیش آموزش دیده خارج از قفسه وجود دارد:
- آنها معمولاً بهصورت آفلاین آموزش میبینند و مدل را نسبت به آخرین اطلاعات ناشناس میدانند (به عنوان مثال، یک ربات چت که بین سالهای 2011 تا 2018 آموزش دیده است، هیچ اطلاعاتی در مورد COVID-19 ندارد).
- آنها فقط با جستجوی اطلاعات ذخیره شده در پارامترهای آن پیش بینی می کنند که منجر به تفسیرپذیری ضعیف می شود.
- آنها عمدتاً روی مجموعههای دامنه عمومی آموزش دیدهاند، که باعث میشود آنها در کارهای خاص دامنه مؤثر نباشند. سناریوهایی وجود دارد که می خواهید مدل ها متنی را بر اساس داده های خاص به جای داده های عمومی تولید کنند. به عنوان مثال، یک شرکت بیمه سلامت ممکن است بخواهد ربات پاسخگوی سؤال خود با استفاده از آخرین اطلاعات ذخیره شده در مخزن اسناد سازمانی یا پایگاه داده آنها به سؤالات پاسخ دهد، بنابراین پاسخ ها دقیق هستند و قوانین تجاری منحصر به فرد آنها را منعکس می کنند.
در حال حاضر، دو روش رایج برای ارجاع داده های خاص در LLM وجود دارد:
- داده ها را به عنوان زمینه در اعلان مدل به عنوان راهی برای ارائه اطلاعاتی که مدل می تواند هنگام ایجاد نتیجه استفاده کند، وارد کنید
- مدل را با ارائه یک فایل با جفت های prompt و completion به خوبی اصلاح کنید
چالش رویکرد مبتنی بر زمینه این است که مدلها با اندازه زمینه محدود ارائه میشوند و شامل تمام اسناد به عنوان زمینه ممکن است در اندازه زمینه مجاز مدل قرار نگیرد. بسته به مدل مورد استفاده، ممکن است هزینه اضافی برای زمینه بزرگتر نیز وجود داشته باشد.
برای رویکرد تنظیم دقیق، تولید اطلاعات با فرمت مناسب زمانبر و مستلزم هزینه است. بعلاوه، اگر داده های خارجی مورد استفاده برای تنظیم دقیق به طور مکرر تغییر کنند، به این معنی است که تنظیم دقیق مکرر و بازآموزی برای ایجاد نتایج دقیق مورد نیاز است. آموزش مکرر بر سرعت بازار تأثیر می گذارد و به هزینه کلی راه حل می افزاید.
برای نشان دادن این محدودیتها، از مدل LLM Flan T5 XXL استفاده کردیم و سؤال زیر را پرسیدیم:
ما پاسخ زیر را دریافت می کنیم:
همانطور که می بینید، پاسخ دقیق نیست. پاسخ صحیح باید این باشد که تمام نمونههای SageMaker از آموزش نقطهای مدیریت شده پشتیبانی میکنند.
ما همین سوال را امتحان کردیم اما با زمینه اضافی همراه با سوال:
این بار پاسخ زیر را دریافت کردیم:
پاسخ بهتر است اما هنوز دقیق نیست. با این حال، در موارد استفاده واقعی از تولید، کاربران ممکن است پرس و جوهای مختلفی ارسال کنند، و برای ارائه پاسخ های دقیق، ممکن است بخواهید تمام یا بیشتر اطلاعات موجود را به عنوان بخشی از زمینه ایستا برای ایجاد پاسخ های دقیق بگنجانید. بنابراین، با این رویکرد، ممکن است به محدودیت محدودیت اندازه زمینه ضربه بزنیم زیرا حتی اطلاعات غیر مرتبط برای سؤال پرسیده شده به عنوان بخشی از زمینه ارسال می شود. اینجاست که میتوانید از رویکرد مبتنی بر RAG برای ایجاد پاسخهای مقیاسپذیر و دقیق برای درخواستهای کاربر استفاده کنید.
بازیابی نسل افزوده
برای حل محدودیت هایی که بحث کردیم، می توانیم از Retrieval Augmented Generation (RAG) با LLM ها استفاده کنیم. RAG داده ها را از خارج از مدل زبان (ناپارامتریک) بازیابی می کند و با افزودن داده های بازیابی شده مربوطه در متن، دستورات را تقویت می کند. مدل های RAG توسط لوئیس و همکاران در سال 2020 به عنوان مدلی که در آن حافظه پارامتریک یک مدل seq2seq از پیش آموزش دیده است و حافظه ناپارامتریک یک شاخص برداری متراکم ویکیپدیا است که با یک بازیابی عصبی از پیش آموزش دیده قابل دسترسی است.
در RAG، دادههای خارجی میتوانند از چندین منبع داده مانند مخزن اسناد، پایگاههای داده یا APIها به دست آیند. اولین گام این است که اسناد و درخواست کاربر را در قالب تبدیل کنید تا بتوان آنها را مقایسه کرد و جستجوی مرتبط را انجام داد. برای قابل مقایسه کردن قالبها برای انجام جستجوی مرتبط، مجموعه اسناد (کتابخانه دانش) و درخواست ارسال شده توسط کاربر با استفاده از مدلهای زبان جاسازی شده به نمایش عددی تبدیل میشوند. تعبیهها اساساً نمایشهای عددی مفهوم در متن هستند. در مرحله بعد، بر اساس جاسازی پرس و جوی کاربر، متن مربوطه آن در مجموعه سند با جستجوی مشابه در فضای جاسازی شناسایی می شود. سپس دستور ارائه شده توسط کاربر با متن مربوطه که جستجو شده است ضمیمه می شود و به متن اضافه می شود. اعلان اکنون به LLM ارسال میشود و از آنجایی که متن دارای دادههای خارجی مرتبط همراه با درخواست اصلی است، خروجی مدل مرتبط و دقیق است.
برای حفظ اطلاعات بهروز برای اسناد مرجع، میتوانید اسناد را بهطور ناهمزمان بهروزرسانی کنید و نمایش تعبیهشده اسناد را بهروزرسانی کنید. به این ترتیب، از اسناد به روز شده برای ایجاد پاسخ برای سوالات آینده برای ارائه پاسخ های دقیق استفاده می شود.
نمودار زیر جریان مفهومی استفاده از RAG با LLM ها را نشان می دهد.
در این پست نحوه پیاده سازی برنامه پاسخگویی به سوال را با مراحل زیر نشان می دهیم:
- با یک مدل جاسازی SageMaker GPT-J-6B برای هر یک از اسناد موجود در کتابخانه دانش جاسازی ایجاد کنید.
- K مرتبط ترین اسناد را بر اساس درخواست کاربر شناسایی کنید.
- برای پرس و جو خود، جاسازی پرس و جو را با استفاده از همان مدل جاسازی ایجاد کنید.
- با استفاده از جستجوی FAISS در حافظه، فهرست های مربوط به K بالای اسناد را در فضای جاسازی جستجو کنید.
- از نمایه ها برای بازیابی اسناد مربوطه استفاده کنید.
- از اسناد مربوطه بازیابی شده به عنوان متن با درخواست و سؤال استفاده کنید و آنها را برای ایجاد پاسخ به SageMaker LLM ارسال کنید.
ما رویکردهای زیر را نشان می دهیم:
- چگونه با SageMaker LLM ها و جاسازی نقاط پایانی و کتابخانه منبع باز LangChain در چند خط کد، یک کار پاسخگویی به سؤال را حل کنیم. به طور خاص، ما از دو نقطه پایانی SageMaker برای LLM (Flan T5 XXL) و مدل تعبیه شده (GPT-J 6B) استفاده می کنیم، و پایگاه داده برداری استفاده شده در حافظه است. FAISS. برای جزئیات بیشتر، نگاه کنید به GitHub repo.
- اگر FAISS در حافظه در مجموعه داده بزرگ شما قرار نمی گیرد، ما به شما یک الگوریتم SageMaker KNN برای انجام جستجوی معنایی، که همچنین از FAISS به عنوان الگوریتم جستجوی اساسی استفاده می کند. برای جزئیات، نگاه کنید به GitHub repo.
نمودار زیر معماری راه حل را نشان می دهد.
نوت بوک پیاده سازی مبتنی بر RAG با LangChain
LangChain یک چارچوب منبع باز برای توسعه برنامه های کاربردی است که توسط مدل های زبان طراحی شده است. LangChain یک رابط عمومی برای بسیاری از LLM های مختلف فراهم می کند. همچنین این کار را برای توسعه دهندگان آسان تر می کند تا LLM های مختلف را به هم متصل کنند و برنامه های قدرتمند بسازند. LangChain یک رابط استاندارد برای حافظه و مجموعه ای از پیاده سازی های حافظه برای تداوم وضعیت بین فراخوانی عامل ها یا زنجیره ها فراهم می کند.
LangChain دارای بسیاری از ویژگی های کاربردی دیگر است که می تواند به بهره وری توسعه دهندگان بیفزاید. این ویژگیها شامل یک الگوی سریع است که به سفارشیسازی درخواستها با استفاده از متغیرها در الگوی درخواست، عواملی برای ساخت برنامههای انتها به انتها، فهرستهایی برای مراحل جستجو و بازیابی زنجیره، و موارد دیگر کمک میکند. برای بررسی بیشتر قابلیتهای LangChain، به ادامه مطلب مراجعه کنید مستندات LangChain.
ایجاد مدل LLM
به عنوان اولین گام، مدل JumpStart LLM را به انتخاب خود اجرا کنید. در این دمو، ما از یک نقطه پایانی مدل Jumpstart Flan T5 XXL استفاده می کنیم. برای دستورالعمل های استقرار، مراجعه کنید درخواست صفر شات برای مدل پایه Flan-T5 در آمازون SageMaker JumpStart. بر اساس موارد استفاده خود، میتوانید مدلهای تنظیمشده دستورالعملهای دیگری مانند فلن T5 UL2 or BloomZ 7B1. برای جزئیات ، به نمونه دفترچه یادداشت.
برای استفاده از نقطه پایانی SageMaker LLM با LangChain، از آن استفاده می کنیم langchain.llms.sagemaker_endpoint.SagemakerEndpoint
، که نقطه پایانی SageMaker LLM را خلاصه می کند. همانطور که در کد زیر برای ادغام LangChain SageMaker نشان داده شده است، باید یک تبدیل برای بار درخواست و پاسخ انجام دهیم. توجه داشته باشید که ممکن است لازم باشد کد را تنظیم کنید ContentHandler
بر اساس content_type
و قالب مدل LLM را که شما انتخاب می کنید می پذیرد.
مدل تعبیه را ایجاد کنید
در مرحله بعد، باید مدل تعبیه شده خود را آماده کنیم. را مستقر می کنیم GPT-J 6B مدل به عنوان مدل تعبیه شده. اگر از یک مدل جاسازی JumpStart استفاده می کنید، باید کلاس جاسازی نقطه پایانی LangChain SageMaker را سفارشی کنید و درخواست و پاسخ مدل را برای ادغام با LangChain تغییر دهید. برای اجرای دقیق به ادامه مطلب مراجعه کنید GitHub repo.
اسناد مربوط به دامنه را با استفاده از بارگذار اسناد LangChain بارگیری کنید و یک فهرست ایجاد کنید
ما با استفاده از CSVLoader
بسته در LangChain برای بارگیری اسناد با فرمت CSV در بارگیری اسناد:
در مرحله بعد، از TextSplitter برای پیش پردازش داده ها برای اهداف جاسازی و استفاده از مدل جاسازی SageMaker استفاده می کنیم. GPT-J -6B برای ایجاد تعبیه ما embedding را در یک فروشگاه برداری FAISS ذخیره می کنیم تا یک نمایه ایجاد کنیم. ما از این نمایه برای یافتن اسناد مرتبط که از نظر معنایی شبیه به درخواست کاربر هستند استفاده می کنیم.
کد زیر نشان می دهد که چگونه تمام این مراحل توسط VectorstoreIndexCreator
کلاس فقط در چند خط کد در LangChain برای ایجاد یک پیاده سازی مختصر از پاسخگویی به سؤال با RAG:
از ایندکس برای جستجوی زمینه مرتبط و ارسال آن به مدل LLM استفاده کنید
در مرحله بعد، از روش query در نمایه ایجاد شده استفاده کنید و سوال کاربر و SageMaker endpoint LLM را ارسال کنید. LangChain چهار نزدیکترین سند را انتخاب می کند (K=4) و زمینه مربوطه استخراج شده از اسناد را برای ایجاد پاسخ دقیق ارسال می کند. کد زیر را ببینید:
با استفاده از رویکرد مبتنی بر RAG با Flan T5 XXL، پاسخ زیر را برای پرس و جو دریافت می کنیم:
پاسخ در مقایسه با پاسخی که با رویکردهای دیگری که قبلاً نشان دادیم که هیچ زمینه یا زمینه ثابتی ندارند که ممکن است همیشه مرتبط نباشد، دقیق تر به نظر می رسد.
رویکرد جایگزین برای پیاده سازی RAG با سفارشی سازی بیشتر با استفاده از SageMaker و LangChain
در این بخش، روش دیگری را برای پیاده سازی RAG با استفاده از SageMaker و LangChain به شما نشان می دهیم. این رویکرد انعطافپذیری را برای پیکربندی پارامترهای K بالا برای جستجوی ارتباط در اسناد ارائه میدهد. همچنین به شما امکان می دهد از ویژگی LangChain استفاده کنید قالب های سریع، که به شما امکان می دهد به جای کدنویسی سخت اعلان ها، ایجاد اعلان را به راحتی پارامتر کنید.
در کد زیر، ما به صراحت از FAISS برای ایجاد جاسازی برای هر یک از اسناد موجود در کتابخانه دانش با مدل جاسازی SageMaker GPT-J-6B استفاده میکنیم. سپس ما K (K=3) مرتبط ترین اسناد را بر اساس درخواست کاربر شناسایی می کنیم.
در مرحله بعد، از یک الگوی سریع استفاده می کنیم و آن را با SageMaker LLM زنجیر می کنیم:
ما سه سند مرتبط (K=3) را که به عنوان زمینه یافتیم با استفاده از زنجیره LangChain به دستور ارسال می کنیم:
با این رویکرد پیادهسازی RAG، ما توانستیم از انعطافپذیری بیشتر الگوهای سریع LangChain استفاده کنیم و تعداد اسناد جستجو شده برای مطابقت مرتبط را با استفاده از فراپارامتر K بالا سفارشی کنیم.
نوت بوک پیاده سازی مبتنی بر RAG با SageMaker KNN
در این بخش، ما رویکرد مبتنی بر RAG را با استفاده از الگوریتم KNN برای یافتن اسناد مرتبط برای ایجاد زمینه بهبودیافته پیادهسازی میکنیم. در این رویکرد، ما از LangChain استفاده نمی کنیم، اما از همان مجموعه داده استفاده می کنیم سوالات متداول Amazon SageMaker بهعنوان اسناد دانش، مدلهای GPT-J-6B و LLM Flan T5 XXL را درست همانطور که در رویکرد قبلی LangChain انجام دادیم، تعبیه کرد.
اگر مجموعه داده بزرگی دارید، الگوریتم SageMaker KNN ممکن است یک جستجوی معنایی موثر برای شما فراهم کند. الگوریتم SageMaker KNN همچنین از FAISS به عنوان الگوریتم جستجوی اساسی استفاده می کند. نوت بوک این راه حل را می توان در پیدا کرد GitHub.
ابتدا، مدلهای تعبیهشده LLM Flan T5 XXL و GPT-J 6B را به همان روشی که در بخش قبل انجام شد، اجرا میکنیم. برای هر رکورد در پایگاه داده دانش، یک بردار جاسازی را با استفاده از مدل جاسازی GPT-J ایجاد می کنیم.
بعد از a استفاده می کنیم SageMaker KNN کار آموزشی برای نمایه سازی تعبیه داده های دانش. الگوریتم اساسی مورد استفاده برای نمایه سازی داده ها است FAISS. ما می خواهیم پنج سند برتر مرتبط را پیدا کنیم، بنابراین آن را تنظیم می کنیم TOP_K
متغیر تا 5. ما برآوردگر را برای الگوریتم KNN ایجاد میکنیم، کار آموزشی را اجرا میکنیم و مدل KNN را برای یافتن نمایههای پنج سند برتر مطابق با پرس و جو به کار میبریم. کد زیر را ببینید:
سپس، با استفاده از مدل جاسازی GPT-J-6B که برای ایجاد جاسازی اسناد کتابخانه دانش از آن استفاده کردیم، یک نمایش جاسازی شده از پرس و جو ایجاد می کنیم:
سپس از نقطه پایانی KNN استفاده می کنیم و تعبیه پرس و جو را به نقطه پایانی KNN ارسال می کنیم تا نمایه های K مرتبط ترین اسناد را بدست آوریم. ما از نمایه ها برای بازیابی اسناد متنی متناظر استفاده می کنیم. در مرحله بعد، اسناد را به هم متصل می کنیم و اطمینان حاصل می کنیم که از حداکثر طول مجاز متن تجاوز نمی شود. کد زیر را ببینید:
اکنون به مرحله نهایی خود می رسیم که در آن پرس و جو، درخواست و متن حاوی متن از اسناد مربوطه را ترکیب می کنیم و آن را به مدل تولید متن LLM Flan T5 XXL ارسال می کنیم تا پاسخ را ایجاد کنیم.
با استفاده از رویکرد مبتنی بر RAG با Flan T5 XXL، پاسخ زیر را برای پرس و جو دریافت می کنیم:
پاک کردن
مطمئن شوید که نقاط پایانی را که در این نوت بوک ایجاد کردهایم در صورت عدم استفاده از آنها حذف کنید تا از هزینه مجدد جلوگیری شود.
نتیجه
در این پست، ما اجرای یک رویکرد مبتنی بر RAG را با LLMها برای وظایف پاسخگویی به سؤال با استفاده از دو رویکرد نشان دادیم: LangChain و الگوریتم داخلی KNN. رویکرد مبتنی بر RAG، دقت تولید متن را با استفاده از Flan T5 XXL با ارائه پویا زمینه مرتبط که با جستجوی فهرستی از اسناد ایجاد شده است، بهینه میکند.
شما می توانید از این نوت بوک ها در SageMaker همانطور که هست استفاده کنید یا ممکن است آنها را مطابق با نیاز خود سفارشی کنید. برای سفارشیسازی، میتوانید از مجموعه اسناد خود در کتابخانه دانش استفاده کنید، از سایر پیادهسازیهای جستجوی مرتبط مانند OpenSearch، و استفاده از سایر مدلهای جاسازی و LLMهای تولید متن موجود در JumpStart استفاده کنید.
ما مشتاقانه منتظریم ببینیم چه چیزی در JumpStart با استفاده از یک رویکرد مبتنی بر RAG ایجاد میکنید!
درباره نویسندگان
دکتر شین هوانگ یک دانشمند کاربردی ارشد برای آمازون SageMaker JumpStart و آمازون SageMaker الگوریتم های داخلی است. او بر توسعه الگوریتمهای یادگیری ماشینی مقیاسپذیر تمرکز دارد. علایق تحقیقاتی او در زمینه پردازش زبان طبیعی، یادگیری عمیق قابل توضیح بر روی داده های جدولی، و تجزیه و تحلیل قوی خوشه بندی ناپارامتری فضا-زمان است. او مقالات زیادی را در کنفرانسهای ACL، ICDM، KDD، و انجمن آماری سلطنتی: سری A منتشر کرده است.
راچنا چادا یک معمار راه حل اصلی AI/ML در حساب های استراتژیک در AWS است. Rachna خوشبین است که معتقد است استفاده اخلاقی و مسئولانه از هوش مصنوعی می تواند جامعه را در آینده بهبود بخشد و رفاه اقتصادی و اجتماعی را به ارمغان بیاورد. راچنا در اوقات فراغت خود دوست دارد با خانواده خود وقت بگذراند، پیاده روی کند و به موسیقی گوش دهد.
دکتر کایل اولریش یک دانشمند کاربردی با تیم الگوریتم های داخلی آمازون SageMaker است. علایق تحقیقاتی او شامل الگوریتم های یادگیری ماشین مقیاس پذیر، بینایی کامپیوتر، سری های زمانی، ناپارامتریک های بیزی و فرآیندهای گاوسی است. دکترای او از دانشگاه دوک است و مقالاتی در NeurIPS، Cell و Neuron منتشر کرده است.
همانت سینگ یک مهندس یادگیری ماشین با تجربه در آمازون SageMaker JumpStart و Amazon SageMaker است. او کارشناسی ارشد خود را از موسسه علوم ریاضی Courant و B.Tech از IIT دهلی دریافت کرد. او تجربه کار بر روی طیف متنوعی از مشکلات یادگیری ماشین در حوزه پردازش زبان طبیعی، بینایی کامپیوتر و تحلیل سری های زمانی را داشت.
ماناس دادکار یک مدیر توسعه نرم افزار است که مهندسی سرویس آمازون Forecast را در اختیار دارد. او علاقه زیادی به کاربردهای یادگیری ماشینی دارد و فناوریهای ML را به راحتی در دسترس همگان قرار میدهد تا آنها را بپذیرند و در تولید بکار ببرند. خارج از کار، او علایق متعددی از جمله سفر، مطالعه و گذراندن وقت با دوستان و خانواده دارد.
دکتر آشیش ختان یک دانشمند کاربردی ارشد با الگوریتم های داخلی Amazon SageMaker است و به توسعه الگوریتم های یادگیری ماشین کمک می کند. او دکترای خود را از دانشگاه ایلینویز Urbana-Champaign گرفت. او یک محقق فعال در یادگیری ماشین و استنتاج آماری است و مقالات زیادی در کنفرانس های NeurIPS، ICML، ICLR، JMLR، ACL و EMNLP منتشر کرده است.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- PlatoAiStream. Web3 Data Intelligence دانش تقویت شده دسترسی به اینجا.
- ضرب کردن آینده با آدرین اشلی. دسترسی به اینجا.
- منبع: https://aws.amazon.com/blogs/machine-learning/question-answering-using-retrieval-augmented-generation-with-foundation-models-in-amazon-sagemaker-jumpstart/