آموزش ۳۰ اردیبهشت ۱۴۰۵ ۲۲ دقیقه مطالعه متین لب‌خندق

تفاوت Zero-shot، One-shot و Few-shot Learning
راهنمای کامل پرامپت‌نویسی فارسی

چهار سطح یادگیری درون متن (In-Context Learning) چه فرقی دارند و کدام را برای تسک خود انتخاب کنید؟

وقتی با ChatGPT یا Claude کار می‌کنید، شیوه‌ای که مثال‌ها را در پرامپت می‌چینید تعیین می‌کند خروجی چقدر دقیق و قابل اعتماد باشد. سه اصطلاح Zero-shot، One-shot و Few-shot دقیقاً همین موضوع را توصیف می‌کنند و چهارمی هم اخیراً اضافه شده: Many-shot. هر کدام نقطه قوت و ضعف خودشان را دارند و انتخاب درست بین آنها یکی از مهم‌ترین تصمیم‌های هر پروژه‌ی مهندسی پرامپت است.

خلاصه سریع (TL;DR)

روش تعداد مثال بهترین کاربرد
Zero-shot ۰ تسک‌های عمومی، ترجمه، خلاصه‌سازی، پرسش و پاسخ ساده
One-shot ۱ صرفاً نشان دادن فرمت خروجی
Few-shot ۲ تا ۸ تسک‌های دقیق، طبقه‌بندی، استخراج اطلاعات، تبدیل سبک
Many-shot ده‌ها تا صدها تسک‌های پیچیده با کلاس‌های زیاد و مدل‌های long-context
پاسخ کوتاه: تفاوت Zero-shot و Few-shot در تعداد مثال‌هایی است که در پرامپت می‌دهید. در Zero-shot هیچ مثالی نمی‌دهید و فقط دستور می‌دهید؛ در One-shot یک مثال و در Few-shot چند مثال می‌آورید. هرچه مثال‌ها بیشتر و دقیق‌تر باشند، مدل خروجی هماهنگ‌تری از نظر فرمت و سبک تولید می‌کند.

In-Context Learning چیست؟

قبل از اینکه وارد جزئیات هر روش شویم، باید بفهمیم پایه‌ی مشترک هر چهار سطح چیست. اصطلاح In-Context Learning یا یادگیری درون متن، توانایی شگفت‌انگیز مدل‌های زبانی بزرگ برای آموختن الگو از روی مثال‌های موجود در پنجره‌ی ورودی است. مهم‌ترین نکته این است که در این فرایند هیچ گرادیانی محاسبه نمی‌شود و هیچ وزنی از مدل تغییر نمی‌کند. مدل فقط در همان جلسه‌ی گفت‌وگو و فقط تا زمانی که آن مکالمه باز است، الگو را به یاد می‌سپارد.

این پدیده اولین بار به‌صورت رسمی در مقاله‌ی مرجع «Language Models are Few-Shot Learners» از Brown و همکاران در سال ۲۰۲۰ معرفی شد. در آن مقاله نشان داده شد که GPT-3 با ۱۷۵ میلیارد پارامتر، صرفاً با چند مثال درون پرامپت می‌تواند در بسیاری از بنچمارک‌ها از مدل‌های کوچک‌تر اما fine-tune شده پیشی بگیرد. این یافته بود که باعث شد مهندسی پرامپت به یک مهارت کلیدی تبدیل شود.

وقتی این مفهوم را به سه (یا چهار) سطح می‌شکنیم، ملاک تقسیم‌بندی فقط یک عدد است: تعداد مثال‌هایی که در پرامپت می‌گذارید. صفر مثال یعنی Zero-shot، یک مثال یعنی One-shot، چند مثال (معمولاً بین ۲ تا ۸) یعنی Few-shot و ده‌ها یا صدها مثال یعنی Many-shot. حالا هر کدام را با جزئیات و مثال فارسی بررسی می‌کنیم.

نکته کلیدی: این چهار اصطلاح در یادگیری ماشین کلاسیک معنی متفاوتی داشتند و به meta-learning و آموزش با داده‌ی کم اشاره می‌کردند. در پرامپت‌نویسی مدرن، این اصطلاحات فقط به تعداد نمونه‌های درون پرامپت اشاره دارند و ربطی به فرایند آموزش مدل ندارند.

Zero-shot Learning

در Zero-shot Learning شما به مدل هیچ مثالی نمی‌دهید. فقط دستور می‌نویسید و انتظار دارید مدل بر اساس دانش پیشین خود تسک را انجام دهد. این ساده‌ترین، سریع‌ترین و کم‌توکن‌ترین حالت ممکن است و در بسیاری از کاربردهای روزمره دقیقاً همین کفایت می‌کند.

چرا Zero-shot کار می‌کند؟

مدل‌های بزرگ روی حجم عظیمی از متن آموزش دیده‌اند که شامل میلیون‌ها مثال از تسک‌های گوناگون است. وقتی شما می‌نویسید «این متن را به انگلیسی ترجمه کن»، مدل میلیون‌ها بار قبلاً جفت‌های ترجمه را دیده و می‌داند الگوی مورد انتظار چیست. به همین دلیل، برای تسک‌های پرتکرار و عمومی، Zero-shot معمولاً پاسخ قابل قبولی می‌دهد.

مثال فارسی کامل

فرض کنید می‌خواهیم لحن یک نظر کاربر را تشخیص دهیم. در حالت Zero-shot فقط دستور می‌دهیم:

دستور: لحن کلی نظر زیر را در یکی از سه دسته «مثبت»، «منفی» یا «خنثی» تعیین کن. فقط نام دسته را برگردان.

نظر: «بسته‌بندی محصول خیلی خوب بود ولی متاسفانه دیر به دستم رسید.»
دسته:

در این پرامپت هیچ مثالی به مدل نداده‌ایم. مدل با توجه به فهم زبانی خود، باید تشخیص دهد که این نظر دو وجه دارد (یکی مثبت و یکی منفی) و معمولاً آن را به «خنثی» نسبت می‌دهد. این کار در مدل‌های روز با دقت قابل قبولی انجام می‌شود.

کاربردهای ایده‌آل Zero-shot

محدودیت‌های Zero-shot

وقتی تسک شما خاص، اختصاصی یا حساس به فرمت است، Zero-shot ضعف نشان می‌دهد. مثلاً اگر بخواهید مدل خروجی JSON با نام فیلدهای فارسی و ترتیب خاص بدهد، با Zero-shot هر بار خروجی متفاوتی می‌گیرید. در این موارد باید سراغ One-shot یا Few-shot بروید. برای راهنمایی کلی‌تر درباره ساختاردهی پرامپت‌ها، مقاله‌ی اصول پرامپت‌نویسی را مطالعه کنید.

قانون اول: همیشه با Zero-shot شروع کنید. اگر خروجی قابل قبول بود، نیازی به اضافه کردن مثال نیست. فقط وقتی Zero-shot ضعف نشان داد، یک پله بالاتر بروید.

One-shot Learning

One-shot Learning پل بین Zero-shot و Few-shot است. در این حالت دقیقاً یک مثال در پرامپت قرار می‌دهید و سپس سوال اصلی را می‌پرسید. هدف این روش معمولاً نشان دادن فرمت دقیق خروجی است؛ یعنی به مدل می‌گویید «خروجی باید این شکلی باشد، حالا برای ورودی جدید همان کار را بکن».

مثال فارسی One-shot

دستور: نام، شغل و شهر را از متن استخراج کن و در قالب نشان داده شده برگردان.

متن: «سلام، من سارا هستم، طراح گرافیک و ساکن تبریز.»
خروجی: نام=سارا | شغل=طراح گرافیک | شهر=تبریز

متن: «اسمم حامد است، مهندس عمران، الان شیراز زندگی می‌کنم.»
خروجی:

در این مثال، یک نمونه برای نشان دادن فرمت دقیق (با علامت | و کلیدواژه‌های فارسی) آورده‌ایم. مدل احتمالاً همان قالب را برای ورودی دوم تکرار می‌کند. اما اگر متن ورودی پیچیده‌تر باشد، مثلاً چندین شغل یا چند شهر داشته باشد، با یک مثال مدل نمی‌داند چطور رفتار کند.

چرا One-shot معمولاً ضعیف‌تر است؟

One-shot یک مشکل بنیادین دارد: مدل نمی‌داند کدام ویژگی مثال مهم است و کدام تصادفی. وقتی فقط یک نمونه می‌بیند، ممکن است ویژگی‌های فرعی همان نمونه را به‌جای الگوی اصلی تقلید کند. مثلاً اگر در مثال شما نام «سارا» (مونث) بود، مدل ممکن است فکر کند فقط برای نام‌های مونث این الگو معتبر است. این پدیده به‌خصوص در تسک‌های دارای کلاس‌های متعدد آزاردهنده است.

تحقیقات نشان داده‌اند که در بسیاری از بنچمارک‌ها، جهش بزرگ از Zero-shot به One-shot کوچک است و جهش اصلی بین One-shot و Few-shot (با ۳ تا ۵ مثال) اتفاق می‌افتد. به همین دلیل، اگر تصمیم گرفتید مثال اضافه کنید، معمولاً ارزش دارد به‌جای یک مثال، حداقل سه مثال بگذارید.

کاربردهای واقعی One-shot

هشدار رایج: اگر تسک شما طبقه‌بندی چندکلاسه است و فقط یک مثال می‌دهید، مدل تقریباً همیشه کلاس همان مثال را برای ورودی جدید پیش‌بینی می‌کند. این یکی از پرتکرارترین اشتباه‌ها در پرامپت‌نویسی است.

Few-shot Learning

Few-shot Learning نقطه‌ی شیرین (sweet spot) بیشتر کاربردهای حرفه‌ای است. در این روش بین ۲ تا ۸ مثال در پرامپت می‌گذارید (معمولاً ۳ تا ۵ نمونه) تا مدل الگو را به‌خوبی تشخیص دهد و مرز بین کلاس‌ها یا حالت‌های مختلف را بفهمد.

چرا Few-shot بهترین تعادل است؟

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

مثال کوتاه Few-shot فارسی

دستور: قصد پیام مشتری را در یکی از سه دسته «خرید»، «شکایت» یا «اطلاعات» تعیین کن.

پیام: «این محصول چقدر گارانتی داره؟»
دسته: اطلاعات

پیام: «می‌خوام دو تا از این کفش رو سفارش بدم.»
دسته: خرید

پیام: «سفارشم رو اشتباه فرستادید، خیلی ناراحتم.»
دسته: شکایت

پیام: «هزینه ارسال به اصفهان چقدر می‌شه؟»
دسته:

این مقاله صرفاً تفاوت روش‌ها را پوشش می‌دهد و وارد جزئیات Few-shot نمی‌شود. اگر می‌خواهید عمیق‌تر یاد بگیرید (انتخاب مثال‌ها، ترتیب، توازن، اشتباهات رایج و سناریوهای پیشرفته)، راهنمای کامل Few-shot Learning چیست و چطور حرفه‌ای پیاده‌سازی شود را ببینید.

نکته: در اکثر تسک‌های دنیای واقعی، Few-shot با ۳ تا ۵ مثال متعادل، نقطه‌ی بازگشت سرمایه‌ی توکن است. بعد از این عدد، اضافه کردن مثال معمولاً بهبود کوچکی به همراه دارد.

Many-shot Learning

Many-shot Learning پدیده‌ی نسبتاً جدیدی است که با ظهور مدل‌های با پنجره متن بسیار طولانی (۲۰۰ هزار توکن و بیشتر) قابل اجرا شد. در این روش، به‌جای ۳ تا ۸ نمونه، ده‌ها یا حتی صدها مثال درون پرامپت قرار می‌گیرد.

مقاله‌ی مرجع Anthropic

مقاله‌ی «Many-Shot In-Context Learning» منتشرشده توسط Google DeepMind و سپس مطالعات گسترده‌ی Anthropic در سال ۲۰۲۴ نشان دادند که افزودن صدها مثال در پرامپت می‌تواند دقت مدل را در تسک‌های دشوار به‌شدت افزایش دهد، گاهی به سطح Fine-tuning نزدیک شود. این یک تغییر پارادایم بود: قبلاً تصور می‌شد بعد از ۸ تا ۱۰ مثال، بازدهی کاهشی است؛ اما با مدل‌های long-context این فرض شکست.

چه زمانی Many-shot ارزش دارد؟

محدودیت‌های Many-shot

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

توصیه عملی: Many-shot را زمانی در نظر بگیرید که Few-shot به سقف رسیده، Fine-tuning ممکن نیست و دقت بالا برای کسب‌وکار حیاتی است. برای ۹۰ درصد تسک‌های روزمره، Few-shot کافی است.

جدول مقایسه جامع

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

ویژگی Zero-shot One-shot Few-shot Many-shot
تعداد مثال ۰ ۱ ۲ تا ۸ ده‌ها تا صدها
دقت در تسک ساده بالا بالا بالا بالا (اتلاف توکن)
دقت در تسک پیچیده پایین پایین تا متوسط بالا خیلی بالا
کنترل فرمت خروجی ضعیف قابل قبول عالی عالی
مصرف توکن حداقل کم متوسط زیاد
سرعت پاسخ بالاترین بالا متوسط پایین
نیاز به مدل long-context خیر خیر خیر بله
زمان طراحی پرامپت کوتاه کوتاه متوسط طولانی
مناسب برای production تسک‌های عمومی به‌ندرت بله، انتخاب رایج موارد خاص
هزینه‌ی API کم کم متوسط بالا

مثال‌های عملی: یک تسک با چهار روش

برای اینکه تفاوت در عمل را ملموس کنیم، یک تسک ثابت را با هر چهار روش پیاده می‌کنیم. تسک: تشخیص لحن نظر مشتری در سه کلاس مثبت، منفی و خنثی.

نسخه ۱: Zero-shot

دستور: لحن کلی نظر زیر را در یکی از سه دسته «مثبت»، «منفی» یا «خنثی» تعیین کن. فقط نام دسته را برگردان.

نظر: «خیلی سریع رسید ولی متاسفانه یکی از قطعاتش شکسته بود.»
دسته:

نتیجه: مدل احتمالاً «منفی» می‌گوید چون آخر جمله حال و هوای منفی دارد، در حالی که جنبه‌ی مثبت هم وجود دارد. دقت در این حالت معمولاً حدود ۷۰ تا ۷۵ درصد است.

نسخه ۲: One-shot

دستور: لحن کلی نظر زیر را در یکی از سه دسته «مثبت»، «منفی» یا «خنثی» تعیین کن. فقط نام دسته را برگردان.

نظر: «کیفیت بسته‌بندی خوب بود و کالا سالم رسید. ممنون.»
دسته: مثبت

نظر: «خیلی سریع رسید ولی متاسفانه یکی از قطعاتش شکسته بود.»
دسته:

نتیجه: مدل می‌بیند کلاس «مثبت» قابل قبول است و فرمت را یاد می‌گیرد. ولی چون فقط یک کلاس را دیده، ممکن است گرایش به همان داشته باشد. دقت معمولاً ۷۵ تا ۸۰ درصد است.

نسخه ۳: Few-shot

دستور: لحن کلی نظر زیر را در یکی از سه دسته «مثبت»، «منفی» یا «خنثی» تعیین کن. فقط نام دسته را برگردان.

نظر: «کیفیت بسته‌بندی خوب بود و کالا سالم رسید. ممنون.»
دسته: مثبت

نظر: «دو هفته معطل شدم تا فقط مشکی‌ش رو بفرستن، اونم اشتباه.»
دسته: منفی

نظر: «قیمت متوسطی داره؛ نه ارزون نه گرون. کیفیتش هم در همین حد.»
دسته: خنثی

نظر: «خیلی سریع رسید ولی متاسفانه یکی از قطعاتش شکسته بود.»
دسته:

نتیجه: مدل هر سه کلاس را دیده، تنوع هم رعایت شده و نمونه‌ی نهایی (که چندپهلو است) را معمولاً «منفی» یا «خنثی» با احتمال درست تشخیص می‌دهد. دقت معمولاً ۹۰ تا ۹۲ درصد است.

نسخه ۴: Many-shot (خلاصه)

دستور: لحن کلی نظر زیر را در یکی از سه دسته «مثبت»، «منفی» یا «خنثی» تعیین کن.

[۵۰ نظر مثبت متنوع با برچسب «مثبت»]
[۵۰ نظر منفی متنوع با برچسب «منفی»]
[۳۰ نظر خنثی و چندپهلو با برچسب «خنثی»]

نظر: «خیلی سریع رسید ولی متاسفانه یکی از قطعاتش شکسته بود.»
دسته:

نتیجه: با این تعداد مثال، مدل دقیقاً مرز بین کلاس‌ها (به‌خصوص کلاس‌های مرزی مثل «خنثی») را یاد می‌گیرد. دقت معمولاً به ۹۵ تا ۹۸ درصد می‌رسد، اما هزینه‌ی هر درخواست ۲۰ تا ۵۰ برابر بیشتر است.

درس عملی: در این مثال، جهش بزرگ بین One-shot و Few-shot است (از حدود ۷۵٪ به ۹۲٪). جهش از Few-shot به Many-shot کوچک‌تر است (از ۹۲٪ به ۹۸٪) ولی هزینه‌ی توکن ۲۰ برابر می‌شود. این تصمیم همیشه یک معامله‌ی هزینه به دقت است.

کدام روش را کی استفاده کنیم؟

برای تصمیم‌گیری سریع، از این درخت تصمیم استفاده کنید:

درخت تصمیم انتخاب روش

  1. آیا تسک عمومی و رایج است؟ (مثل ترجمه، خلاصه‌سازی، اصلاح املا)
    • بله → از Zero-shot شروع کنید.
    • خیر → به سوال بعدی برو.
  2. آیا فقط می‌خواهید فرمت خروجی را قفل کنید؟
    • بله → از One-shot استفاده کنید.
    • خیر → به سوال بعدی برو.
  3. آیا کمتر از ۱۰ کلاس یا حالت دارید؟
    • بله → از Few-shot با ۳ تا ۵ مثال متعادل استفاده کنید.
    • خیر → به سوال بعدی برو.
  4. آیا مدل long-context دارید و هزینه برایتان مهم نیست؟
    • بله → Many-shot با ۵۰ تا ۲۰۰ مثال متنوع.
    • خیر → برگردید به Few-shot و Fine-tuning را برای آینده بررسی کنید.

قانون‌های سرانگشتی

ترکیب با Chain-of-Thought

تکنیک Chain-of-Thought (زنجیره تفکر) یعنی به مدل می‌گویید قبل از پاسخ نهایی، مراحل استدلال خود را به‌صورت متنی بنویسد. این تکنیک با هر چهار روش بالا قابل ترکیب است و تقریباً همیشه دقت را افزایش می‌دهد.

ترکیب Zero-shot + CoT

ساده‌ترین حالت این است که در پایان دستور بنویسید «مرحله به مرحله فکر کن، سپس جواب نهایی را بده». این کار حتی بدون هیچ مثالی، در تسک‌های منطقی و ریاضی جهش بزرگی ایجاد می‌کند.

دستور: محصول ۸۵۰,۰۰۰ تومان است با ۱۵٪ تخفیف بعلاوه ۹٪ مالیات. قیمت نهایی چقدر است؟ مرحله به مرحله فکر کن.

پاسخ:

ترکیب Few-shot + CoT

قدرتمندترین ترکیب، Few-shot با Chain-of-Thought است. در هر مثال، علاوه بر ورودی و خروجی نهایی، مسیر استدلال را هم نشان می‌دهید. مقاله‌ی Wei و همکاران (۲۰۲۲) نشان داد این ترکیب می‌تواند دقت مدل‌های بزرگ را در تسک‌های ریاضی از حدود ۱۸ درصد به بالای ۵۰ درصد برساند.

سوال: محصول ۲۰۰,۰۰۰ تومان است با ۲۰٪ تخفیف. قیمت نهایی؟
استدلال: مبلغ تخفیف = ۲۰۰,۰۰۰ × ۰.۲ = ۴۰,۰۰۰. قیمت نهایی = ۲۰۰,۰۰۰ − ۴۰,۰۰۰ = ۱۶۰,۰۰۰.
جواب: ۱۶۰,۰۰۰ تومان

سوال: محصول ۵۰۰,۰۰۰ تومان است با ۱۰٪ تخفیف و سپس ۵٪ تخفیف اضافی روی مبلغ بعد از تخفیف. قیمت نهایی؟
استدلال:

این ترکیب در تسک‌های زنجیره‌ای، تصمیم‌گیری چندمرحله‌ای، تحلیل حقوقی و حسابداری بسیار پربازده است.

اشتباهات رایج

در دوره جامع مهندسی پرامپت بارها می‌بینم که حتی کاربران باتجربه در همین چهار اشتباه گرفتار می‌شوند.

۱. زیادی پریدن به Few-shot

برخی برای هر تسکی، چه ساده و چه پیچیده، مستقیم سراغ Few-shot می‌روند. این کار توکن هدر می‌دهد و گاهی حتی نتیجه را بدتر می‌کند (به‌خاطر سوگیری مثال‌ها). همیشه با Zero-shot شروع کنید.

۲. استفاده از One-shot برای تسک چندکلاسه

وقتی فقط یک مثال می‌دهید، مدل گرایش پیدا می‌کند کلاس همان مثال را پیش‌بینی کند. اگر تسک شما ۳ یا بیشتر کلاس دارد، حتماً حداقل یک مثال از هر کلاس بیاورید (یعنی Few-shot).

۳. خلط Few-shot و Many-shot

گاهی افراد فکر می‌کنند «هرچه مثال بیشتر، بهتر» و پرامپت‌های ۲۰ مثاله می‌سازند بدون آنکه از مزیت‌های Many-shot واقعی استفاده کنند. ۲۰ مثال نه به اندازه Few-shot سبک است و نه به اندازه Many-shot دقیق. یا ۵ مثال خوب بدهید یا ۱۰۰ مثال متنوع.

۴. تست نکردن سیستماتیک

بدون داشتن مجموعه‌ی ارزیابی، نمی‌توانید بفهمید کدام روش برای تسک شما بهتر است. حداقل ۱۰ تا ۲۰ نمونه‌ی متنوع را با هر روش تست کنید و دقت را اندازه بگیرید. این کار را با ابزارهایی مثل Promptfoo یا LangSmith می‌توان خودکار کرد.

۵. کپی کردن مثال‌ها از داده‌های تست

اگر مثال‌های پرامپت شما همان نمونه‌هایی باشد که می‌خواهید روی آنها ارزیابی کنید، نتایج اعتبار ندارد. مثال‌های پرامپت و نمونه‌های ارزیابی باید کاملاً مجزا باشند.

۶. نادیده گرفتن هزینه‌ی توکن در production

در محیط توسعه شاید تفاوت بین Zero-shot و Many-shot برایتان مهم نباشد. اما در production با هزاران درخواست در روز، هزینه‌ی Many-shot به‌سرعت سرسام‌آور می‌شود. روش بهینه را با محاسبه هزینه به‌ازای هر پاسخ انتخاب کنید.

هشدار آماری: در یک مطالعه‌ی داخلی، حدود ۶۰ درصد پرامپت‌های production که مهندسان «Few-shot» می‌نامیدند، در واقع One-shot بودند (فقط یک مثال داشتند) و عملکردشان به همین دلیل ضعیف بود. تعداد مثال‌های خود را دوبار بشمارید.

نکات حرفه‌ای انتخاب روش

چند توصیه‌ی عملی که از تجربه‌ی پروژه‌های واقعی فارسی به دست آمده‌اند:

تنوع زبانی فارسی را در نظر بگیرید

زبان فارسی در محاوره و رسمی تفاوت زیادی دارد. اگر هدف شما کار با متن‌های محاوره‌ای است (مثل پیام‌های مشتری در شبکه‌های اجتماعی)، حتماً مثال‌های Few-shot شما هم باید محاوره‌ای باشند. این یکی از مهم‌ترین تنظیمات است که اکثر تیم‌ها فراموش می‌کنند.

ZWNJ و نیم‌فاصله در مثال‌ها

اگر می‌خواهید مدل خروجی فارسی استاندارد با نیم‌فاصله‌ی درست بدهد، باید نمونه‌های شما هم از نیم‌فاصله درست استفاده کنند. مدل دقیقاً همان الگوی نگارشی مثال‌ها را تقلید می‌کند.

کلمات خاص دامنه را در مثال بیاورید

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

پرامپت‌ها را نسخه‌بندی کنید

وقتی روی Few-shot کار می‌کنید، هر تغییر در مثال‌ها می‌تواند خروجی را عوض کند. مثل کد، پرامپت‌ها را در Git یا یک سیستم نسخه‌بندی نگه دارید تا بدانید کدام نسخه چه دقتی داشت.

از Hybrid استفاده کنید

گاهی پاسخ بهینه ترکیبی است: برای ۸۰ درصد ورودی‌های آسان از Zero-shot استفاده کنید و فقط برای ۲۰ درصد ورودی‌های دشوار Few-shot را فعال کنید. این روش هزینه را پایین و دقت را بالا نگه می‌دارد.

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

چک‌لیست انتخاب روش

قبل از قطعی کردن انتخاب، این لیست را مرور کنید:

  1. آیا با Zero-shot تست کرده‌اید و دقت قابل قبول نبود؟
  2. آیا تعداد کلاس‌ها یا حالت‌های ممکن را شمرده‌اید؟
  3. برای هر کلاس حداقل یک مثال در Few-shot دارید؟
  4. توازن بین مثال‌ها رعایت شده است؟
  5. ترتیب مثال‌ها متنوع و غیر تکراری است؟
  6. مثال نهایی یک نمونه‌ی نماینده‌ی معمولی است؟
  7. مجموعه‌ای از ۱۰ تا ۲۰ نمونه‌ی تست جدا دارید؟
  8. هزینه توکن هر درخواست را محاسبه کرده‌اید؟
  9. اگر Many-shot استفاده می‌کنید، prompt caching فعال است؟
  10. پرامپت‌های مختلف را با هم مقایسه کرده‌اید؟

می‌خواهید پرامپت‌نویسی را اصولی و حرفه‌ای یاد بگیرید؟

در دوره جامع مهندسی پرامپت آکادمی متین لب‌خندق، Zero-shot، One-shot، Few-shot، Many-shot و ترکیب آنها با Chain-of-Thought را با پروژه‌های واقعی فارسی تمرین می‌کنید.

ثبت‌نام در دوره مهندسی پرامپت

سوالات متداول

Zero-shot Learning چیست؟
Zero-shot Learning در پرامپت‌نویسی یعنی به مدل زبانی هیچ مثالی نمی‌دهید و فقط با توضیح دستور (instruction) از او می‌خواهید تسک را انجام دهد. مدل بر اساس دانش پیشین و توانایی تعمیم خود پاسخ تولید می‌کند.
تفاوت Zero-shot و Few-shot چیست؟
در Zero-shot هیچ مثالی به مدل داده نمی‌شود و خروجی صرفاً بر اساس توصیف تسک تولید می‌شود. در Few-shot چند مثال (معمولاً ۳ تا ۵ نمونه) درون پرامپت قرار می‌گیرد تا مدل الگوی دقیق ورودی و خروجی را در همان جلسه بیاموزد. Few-shot برای تسک‌های دقیق و ساختاریافته بهتر است؛ Zero-shot برای تسک‌های ساده و عمومی.
One-shot Learning چیست و کی استفاده می‌شود؟
One-shot Learning یعنی فقط یک مثال در پرامپت قرار دهید. این روش وقتی مفید است که هدف فقط نشان دادن فرمت خروجی است و توصیف کلامی کافی نیست. اما در عمل، One-shot معمولاً ضعیف‌تر از Few-shot است چون مدل با یک نمونه نمی‌تواند الگو را تعمیم بدهد.
In-Context Learning چیست؟
In-Context Learning توانایی مدل‌های زبانی بزرگ برای یادگیری الگو از روی مثال‌های موجود در پنجره ورودی است، بدون اینکه وزن‌های مدل تغییر کند. این پدیده اولین بار در مقاله GPT-3 (Brown و همکاران، ۲۰۲۰) به‌صورت رسمی معرفی شد و پایه‌ی Zero-shot، One-shot و Few-shot Learning محسوب می‌شود.
Many-shot Learning چیست و چه تفاوتی با Few-shot دارد؟
Many-shot Learning روشی است که در آن ده‌ها تا صدها مثال درون پرامپت قرار می‌گیرد. این روش با ظهور مدل‌های با پنجره متن بسیار طولانی (۲۰۰ هزار توکن و بیشتر) عملی شده است. مقاله Anthropic در سال ۲۰۲۴ نشان داد Many-shot می‌تواند در تسک‌های دشوار به دقت Fine-tuning نزدیک شود.
کدام روش برای ChatGPT و Claude بهتر است؟
هر دو مدل از هر چهار روش پشتیبانی می‌کنند. برای تسک‌های عمومی Zero-shot کافی است. برای تسک‌های نیمه‌اختصاصی و دقیق Few-shot بهترین انتخاب است. Claude به دلیل پنجره متن بزرگ‌تر برای Many-shot مناسب‌تر است. ChatGPT در Zero-shot رفتار قوی‌تری در مکالمه دارد.
آیا Zero-shot به Fine-tuning نیاز دارد؟
خیر. هیچ‌کدام از روش‌های Zero-shot، One-shot، Few-shot یا Many-shot نیازی به Fine-tuning ندارند. این چهار روش فقط در زمان استنتاج (inference) و درون پرامپت اجرا می‌شوند و هیچ تغییری در وزن‌های مدل ایجاد نمی‌کنند.
چرا One-shot معمولاً ضعیف‌تر از Few-shot است؟
با یک مثال، مدل ممکن است ویژگی‌های فرعی همان نمونه را به‌جای الگوی اصلی تقلید کند. علاوه بر این، مدل نمی‌داند الگو در حالت‌های مختلف چه شکلی تغییر می‌کند. Few-shot با چند نمونه متنوع، مرز کلاس‌ها و تنوع را به مدل نشان می‌دهد و معمولاً جهش بزرگ‌تری در دقت ایجاد می‌کند.
چه زمانی Zero-shot کافی است؟
برای تسک‌های عمومی که مدل به‌خوبی روی آنها آموزش دیده مثل ترجمه، خلاصه‌سازی، اصلاح غلط املایی، توضیح مفاهیم پایه و پاسخ به سوالات عمومی، Zero-shot معمولاً کافی است. اضافه کردن مثال در این تسک‌ها فقط توکن مصرف می‌کند بدون بهبود محسوس.

جمع‌بندی

چهار روش Zero-shot، One-shot، Few-shot و Many-shot Learning در پرامپت‌نویسی، تفاوت ساده‌ای دارند: تعداد مثال‌هایی که به مدل می‌دهید. اما همین تفاوت ساده می‌تواند تعیین‌کننده‌ی موفقیت یا شکست یک محصول AI باشد.

قانون طلایی این است: ساده‌ترین روشی که کار می‌کند را انتخاب کنید. Zero-shot برای تسک‌های عمومی. Few-shot با ۳ تا ۵ مثال متعادل برای تسک‌های اختصاصی. One-shot را معمولاً فقط برای قفل کردن فرمت استفاده کنید. Many-shot را زمانی که Few-shot به سقف رسیده و دقت برای کسب‌وکار حیاتی است.

برای عمیق‌تر شدن در هر یک از این روش‌ها، مقالات تخصصی Few-shot Learning، Chain-of-Thought و اصول پرامپت‌نویسی را در بلاگ ما مطالعه کنید.

نکات کلیدی برای یادآوری

  • تفاوت چهار روش فقط در تعداد مثال‌های درون پرامپت است؛ نه در آموزش مدل.
  • همیشه با Zero-shot شروع کنید و فقط در صورت نیاز مثال اضافه کنید.
  • One-shot برای قفل کردن فرمت خوب است، نه برای کلاس‌بندی چندحالته.
  • Few-shot با ۳ تا ۵ مثال نقطه‌ی شیرین اکثر کاربردهای حرفه‌ای است.
  • Many-shot برای موارد خاص با مدل‌های long-context طراحی شده.
  • هر روش را با هر چهار سطح Chain-of-Thought می‌توانید ترکیب کنید.
  • قبل از انتخاب نهایی، حداقل ۱۰ نمونه‌ی متنوع را با هر روش تست کنید.

قدم بعدی

اگر آماده‌اید مهندسی پرامپت را به‌صورت اصولی و با پروژه‌های واقعی فارسی یاد بگیرید، سرفصل‌های دوره را ببینید.

مشاهده سرفصل‌های دوره
متین لب‌خندق

متین لب‌خندق

برنامه‌نویس ارشد و متخصص هوش مصنوعی

مهندس هوش مصنوعی با ۱۰ سال تجربه برنامه‌نویسی و ۵ سال تخصص در AI. مدرس دوره جامع مهندسی پرامپت.

نویسنده: متین لب‌خندق — مهندس هوش مصنوعی با ۱۰ سال برنامه‌نویسی و ۵ سال تمرکز روی مدل‌های زبانی (LLM)؛ سازنده‌ی سیستم‌های واقعیِ production با ChatGPT، Claude و Gemini و بنیان‌گذار آکادمی متین لب‌خندق. مقاله‌ی پایه: راهنمای جامع مهندسی پرامپت.