پرامپتنویسی با چند نمونه
Few-Shot Prompting
مدلهای زبان بزرگ در انجام کارهای ساده بدون هیچ نمونهای (که بهش میگیم “زیرو شات”) خیلی خوب عمل میکنند، اما وقتی پای کارهای پیچیدهتر به وسط میاد، کم میارن. روش “چند شات” میتونه کمک کنه که یادگیری در متن بهتر انجام بشه؛ یعنی ما میتونیم چند نمونه توی پرامپتهامون بدیم تا مدل رو برای بهتر عمل کردن هدایت کنیم. این نمونهها برای مدل یه جور مقدمهچینی هستند تا بتونه پاسخهای بهتری به نمونههای بعدی بده.
طبق تحقیقات Touvron و همکارانش در سال ۲۰۲۳، ویژگیهای چند شات وقتی ظهور پیدا کردند که مدلها به اندازه کافی بزرگ شدند.
بیایید با یه مثال نشون بدیم که “پرامپت با چند نمونه” چجوری کار میکنه. این مثال از Brown و همکارانش در سال 2020 گرفته شده. در این مثال، وظیفه اینه که یه کلمه جدید رو درست توی جمله به کار ببری.
پرامپت:
یک “واتپو” یه حیوان کوچیک و پشمالو است که مختص تانزانیا هست. یه جملهای که از کلمه واتپو استفاده میکنه اینه:
ما در سفر آفریقا بودیم و این واتپوهای خیلی ناز رو دیدیم.
“فاردادل” کنی یعنی خیلی سریع بپری بالا و پایین. یه جملهی دیگه که از کلمه فاردادل استفاده میکنه اینه:
خروجی:
وقتی بازی رو بردیم، همهمون شروع کردیم به فاردادل کردن تا جشن بگیریم.
میتوانیم ببینیم که مدل به نوعی یاد گرفته چطور این کار رو انجام بده و فقط با یه مثال (یعنی ۱ شات) این کار رو میکنه. برای کارهای سختتر، میتوانیم با افزایش تعداد نمونهها (مثلاً ۳ شات، ۵ شات، ۱۰ شات و غیره) امتحان کنیم. طبق یافتههای Min و همکارانش (۲۰۲۲)، چند تا نکته بیشتر در مورد نمونهها و نحوه ارائه اونها برای کارهای کم شات وجود داره:
بیایید چند نمونه رو امتحان کنیم. اول یه مثال با برچسبهای تصادفی امتحان میکنیم (یعنی برچسبهای منفی و مثبت به صورت تصادفی به ورودیها اختصاص داده شده):
پرامپت:
این فوقالعاده است! // منفی
این بده! // مثبت
وای، اون فیلم خیلی باحال بود! // مثبت
چه فیلم وحشتناکی! //
خروجی:
منفی
در فرمت بالا، هیچ ثباتی در لیبل مثالها وجود نداره، اما با این حال مدل تونست برچسب درست رو پیشبینی کنه. ما باید یک تحلیل دقیقتری انجام بدیم تا ببینیم آیا این روش، برای وظایف مختلف و پیچیدهتر هم صدق میکنه یا نه، به خصوص وقتی که تغییرات مختلفی در پرسشها داشته باشیم.
محدودیتهای "پرامپت با چند نمونه"
روش استاندارد پرسشهای چند-shot برای بسیاری از کارها خوب عمل میکند، اما هنوز هم یک تکنیک کامل نیست، بهخصوص وقتی که با کارهایی با استدلال پیچیدهتر مواجه میشویم. بیایید ببینیم چرا این طور است. یادتون میاد مثالی که اونجا داشتیم؟ سؤال این بود:
عددهای فردی که در این گروه وجود دارند، مجموعشان یک عدد زوج میشود: ۱۵، ۳۲، ۵، ۱۳، ۸۲، ۷، ۱.
حالا اگر این را از مدل بپرسیم، مدل به ما پاسخ میدهد:
بله، عددهای فرد در این گروه مجموعشان میشود ۱۰۷، که یک عدد زوج است.
این پاسخ درستی نیست و نه تنها محدودیتهای این سیستمها رو نشون میده، بلکه به ما میگه که به مهندسی پرامپت پیشرفتهتری نیاز داریم. بذارین یکم مثال بزنیم تا ببینیم که آیا این روش با استفاده از چند نمونه، نتایج رو بهتر میکنه یا نه.
پرامپت:
1. مجموع اعداد فرد در این گروه یه عدد زوج میشوند: ۴، ۸، ۹، ۱۵، ۱۲، ۲، ۱.
جواب: نادرست است.
2. مجموع اعداد فرد در این گروه یه عدد زوج میشوند: ۱۷، ۱۰، ۱۹، ۴، ۸، ۱۲، ۲۴.
جواب: درست است.
3. مجموع اعداد فرد در این گروه یه عدد زوج میشوند: ۱۶، ۱۱، ۱۴، ۴، ۸، ۱۳، ۲۴.
جواب: درست است.
4. مجموع اعداد فرد در این گروه یه عدد زوج میشوند: ۱۷، ۹، ۱۰، ۱۲، ۱۳، ۴، ۲.
جواب: نادرست است.
5. مجموع اعداد فرد در این گروه یه عدد زوج میشوند: ۱۵، ۳۲، ۵، ۱۳، ۸۲، ۷، ۱.
جواب: درست است.
خروجی:
درست است.
این روش جواب نداد. به نظر میرسه که استفاده از نمونههای کمکی (few-shot prompting) برای این نوع مسائل منطقی، کافی نیست و به نتایج قابل اعتمادی نمیرسه.
اگه به مثالی که بالا آوردیم، دقیقتر نگاه کنیم، نوع کاری که معرفی کردیم نیاز به چند مرحلهی استدلال بیشتری داره.به عبارت دیگه، اگه مسئله رو به بخشهای کوچکتر تقسیم کنیم و این مراحل رو به مدل نشون بدیم شاید کمککننده باشه. اخیراً، استفاده از زنجیرهی تفکر (chain-of-thought یا CoT) برای حل مسائل ریاضی پیچیدهتر، مسائل منطقی خیلی رایج شده.
به طور کلی، ارائه مثالها برای حل بعضی از کارها خیلی مفیده. وقتی که از روشهای “بدون نمونه” و “با نمونه کم” نتیجه نمیگیریم، ممکنه نشون بده که اونچیزی که مدل از نمونهها یاد گرفته، برای انجام کار، کافی نیست. از اینجا به بعد باید به فکر اصلاح مدل یا آزمایش تکنیکهای پیشرفتهتر باشیم. حالا قرار است درباره یکی از تکنیکهای پرطرفدار به نام “زنجیره تفکر” صحبت کنیم که خیلی مورد توجه قرار گرفته.