قسمت دوم : یک قدم عقب تر ، صورت مسئله و انتخاب بین fine tuning و prompt engineering
در حقیقت موضوع پروژه من بازی دوز (XO) است ، به نحوی که حریف ما در این بازی یک هوش مصنوعی مولد (generative ai) باشد.
طی تحقیق برای این پروژه دو راه پیدا کردم که راه اول مهندسی دستورات ورودی (prompt engineering) و راه دوم fine tuning (ترجمه تحت الفظی آن "تنظیم دقیق") یا همان آموزش به هوش مصنوعی مولد بود که در ادامه این دو راه را برسی میکنیم :
در ابتدا تفاوت های این دو را برسی میکنم :
در روش fine tuning به generative ai آموزش میدهیم که خروجی مورد نظر ما را به کاربر برگرداند.
در مقابل در روش prompt engineering ما با مهندسی دستورات ورودی تلاش میکنیم به جواب مورد نظر خود دست پیدا کنیم . در این روش ما نه generative ai را آموزش میدهیم و نه داده ای به او اضافه میکنیم فقط سعی میکنیم که به نوعی او را مدیریت کنیم تا داده صحیح مد نظر ما را برای ما برگرداند.
روش استفاده و نحوه آموزش در fine tuning را در ادامه به صورت کامل تر توضیح میدهم اما برای استفاده از روش prompt engineering نیاز بود افزونه ای (chrome extension) بر روی سایت chat.openai.com برای مرورگر توسعه داده شود که این افزونه کار مدیریت دستورات برای بازی را انجام دهد.
استفاده از روش prompt engineering طبیعتا فقط نیاز به یک اکانت chat GPT و توسعه افزونه مرورگر دارد و رایگان است اما برای روش fine tuning به جز چالش های آموزشی ، به ازای هر token برای آموزش و گرفتن ورودی و خروجی باید هزینه پرداخت کرد.
با توجه به موارد بالا و رایگان بودن روش prompt engineering ، این روش را برای توسعه پروژه پیش گرفتم اما در ادامه برای تکمیل کردن موارد بالا یافته های خودم را در مورد fine tuning با شما به اشتراک میگذارم:
به صورت دقیق تر fine tuning چیست ؟
طی یافته های من fine tuning یک روش در یادگیری عمیق یا (deep learning) است که در آن وزن های یک مدل از پیش آموزش دیده بر روی داده های جدید آموزش داده می شود.
طبیعتا زمانی از این روش استفاده میشود که داده به اندازه کافی برای آموزش مدل داشته باشیم تا به نتیجه مد نظر برسیم. در این روش میتوان حتی به generative ai آموزش داد که اگر در ازای درخواست کاربر نیاز به برگرداندن مقدار ثابت مثل ایمیل یا آدرس بودی همیشه مقدار hi@ai.com یا "تهران ، میدان آزادی"را برای او برگردان . خوبی این روش در chat GPT open ai به نسبت بقیه روش های آموزش در سایر GPT ها این است که شما فقط داده های آموزش را ایجاد میکنید و پردازش داده ها در سرور ها و منابع سخت افزاری خود open ai انجام میشود. در طی تست های من برای آموزش دو خط داده ساده و کوتاه زمان پردازش تقریبا 10 الی 15 دقیقه خواهد بود.
برای مثال از کاربرد های این روش تصور کنید که یک کسب و کار انلاین داده ها، سوالات متداول و لیست قوانین خود را به مدل های gpt آموزش بدهد. اگر این کسب و کار این آموزش را به خوبی انجام داده باشد میتواند از مدل (که در open ai به آن دستیار یا assistant گفته میشود) به عنوان پیشنهاد دهنده به ادمین ها در چت های تیکت پشتیبانی استفاده کند.
داده های آموزشی باید به شکل json و به صورت زیر ایجاد شوند : (این یک نمونه ابتدایی است.)
{"messages": [{"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}
در داده های بالا messages ها شامل یک role ایجاد کننده مسیج و content که شامل محتوای فرستاده شده است. البته مقدار weight هم میتواند وجود داشته باشد که فقط شامل اعداد 0 و 1 میشود و مشخص میکند که برای این نمونه عمل پردازش fine tuning انجام شود یا خیر.
امکان آپلود و پردازش داده ها هم از طریق پنل platform.openai.com وجود دارد و هم از طریق API امکان پذیر است .
نمونه کد آپلود و پردازش و استفاده : https://github.com/msuliot/open_ai_fine_tuning
آموزش youtube مربوط به کد بالا : https://youtu.be/Q1VfJwLk3hg