پرامپت‌های سخت (Hard Prompts) و نرم (Soft Prompts) دو رویکرد متفاوت در تعامل با مدل‌های زبانی هستند که در سطح معماری با یکدیگر تفاوت بنیادین دارند.
پرامپت سخت، متنی است که توسط انسان نوشته می‌شود و قابل خواندن است.
پرامپت نرم، بردارهایی آموزش‌پذیر در فضای embedding مدل هستند که به‌صورت خودکار بهینه می‌شوند.
انتخاب میان این دو، به دسترسی به وزن مدل، حجم داده و نیاز دقت بستگی دارد.
این راهنما تفاوت‌ها، مزایا، معایب و کاربردهای هر یک را به‌صورت فنی بررسی می‌کند.

تفاوت پرامپت‌های سخت (Hard Prompts) و نرم (Soft Prompts) یکی از مباحث بنیادین در پرامپت نویسی پیشرفته است. این تفاوت، از یک سو در سطح نحوه نمایش ورودی به مدل و از سوی دیگر در سطح دسترسی به وزن‌های مدل ریشه دارد. برای درک این تفاوت، ابتدا باید با پرامپت نویسی چیست و تنظیم پرامپت مبتنی بر گرادیان آشنا باشیم.

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

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

پرامپت سخت و نرم دقیقاً چیستند؟

پرامپت سخت و پرامپت نرم، دو رویکرد متفاوت برای هدایت مدل‌های زبانی هستند که در سطح نمایش ورودی و نحوه بهینه‌سازی، تفاوت اساسی دارند.

پرامپت سخت (Hard Prompt)

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

You are a senior WordPress developer. Analyze this code for security issues.

این پرامپت از توکن‌های واقعی تشکیل شده و همه می‌توانند آن را بخوانند و ویرایش کنند.

پرامپت نرم (Soft Prompt)

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

پیاده‌سازی پرامپت نرم

import torch
import torch.nn as nn

class SoftPrompt(nn.Module):
    def __init__(self, n_tokens, embedding_dim):
        super().__init__()
        self.embedding = nn.Parameter(
            torch.randn(n_tokens, embedding_dim)
        )

این کد، یک پرامپت نرم با n_tokens بردار آموزش‌پذیر می‌سازد. این بردارها، در طول فرایند آموزش بهینه می‌شوند.

پرامپت سخت، قابل خواندن است. پرامپت نرم، قابل بهینه‌سازی است.

تفاوت در سطح نمایش

تفاوت اصلی پرامپت سخت و نرم، در سطح نمایش آن‌هاست.

نمایش گسسته در پرامپت سخت

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

نمایش پیوسته در پرامپت نرم

پرامپت نرم از بردارهای پیوسته در فضای embedding تشکیل شده است. این بردارها، به هیچ توکن خاصی اشاره نمی‌کنند و در فضای نمایش مدل، یک نقطه دلخواه را نشان می‌دهند.

پیامدهای معماری

نمایش پیوسته، امکان بهینه‌سازی با گرادیان را فراهم می‌کند. این ویژگی، پرامپت نرم را از پرامپت سخت متمایز می‌کند. در پرامپت سخت، بهینه‌سازی با گرادیان ممکن نیست، زیرا توکن‌ها گسسته هستند. برای جزئیات بیشتر، پست تنظیم پرامپت مبتنی بر گرادیان را ببینید.

ویژگیپرامپت سختپرامپت نرم
سطح نمایشگسسته (توکن)پیوسته (بردار)
قابل خواندنبلهخیر
قابل ویرایش مستقیمبلهخیر
قابل بهینه‌سازی با گرادیانخیربله

تفاوت در سطح آموزش

تفاوت دوم، در نحوه آموزش یا بهینه‌سازی هر رویکرد است.

آموزش پرامپت سخت

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

آموزش پرامپت نرم

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

فضای جستجو

در پرامپت سخت، فضای جستجو گسسته و بسیار بزرگ است. در پرامپت نرم، فضای جستجو پیوسته و قابل پیمایش با گرادیان است. این تفاوت، به کارایی بهتر پرامپت نرم در وظایف پیچیده منجر می‌شود.

تفاوت در نیاز به دسترسی

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

پرامپت سخت و API

پرامپت سخت، تنها به دسترسی به API مدل نیاز دارد. این ویژگی، آن را برای سامانه‌هایی که از مدل‌های تجاری استفاده می‌کنند، انتخاب اول می‌کند.

پرامپت نرم و وزن مدل

پرامپت نرم، نیازمند دسترسی به وزن‌های مدل است. این ویژگی، آن را محدود به مدل‌های متن‌باز یا مدل‌هایی که در زیرساخت خود سازمان اجرا می‌شوند، می‌کند.

پیامدهای عملی

اگر از مدل‌های تجاری مانند GPT-4 استفاده می‌کنید، پرامپت نرم در دسترس نیست. اگر از مدل‌های متن‌باز مانند Llama استفاده می‌کنید، پرامپت نرم یک گزینه جدی است.

محیطپرامپت سختپرامپت نرم
API تجاریبلهخیر
مدل متن‌باز محلیبلهبله
مدل خصوصی سازمانیبلهبله

تفاوت در دقت و کارایی

تفاوت چهارم، در دقت و کارایی هر رویکرد است.

دقت در وظایف ساده

در وظایف ساده، پرامپت سخت می‌تواند عملکرد قابل‌قبولی ارائه دهد. مدل‌های بزرگ‌تر، حتی با پرامپت سخت، دقت بالایی دارند.

دقت در وظایف تخصصی

در وظایف تخصصی، پرامپت نرم معمولاً دقت بالاتری ارائه می‌دهد. دلیل این تفاوت، توانایی پرامپت نرم در کشف الگوهای پنهان است که با پرامپت سخت قابل دستیابی نیستند.

کارایی

پرامپت نرم، از نظر محاسباتی کارآمدتر است، زیرا به تعداد توکن کمتری نیاز دارد. یک پرامپت نرم با ۱۰ بردار، می‌تواند عملکردی مشابه یک پرامپت سخت با ۱۰۰ توکن داشته باشد.

نتایج پژوهش‌ها

پژوهش‌ها نشان می‌دهد که در برخی وظایف، پرامپت نرم می‌تواند عملکردی مشابه یا بهتر از Fine-tuning کامل ارائه دهد، در حالی که تنها بخش کوچکی از پارامترها را آموزش می‌دهد.

تفاوت در تفسیرپذیری

تفاوت پنجم، در قابلیت تفسیرپذیری است.

تفسیرپذیری پرامپت سخت

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

تفسیرپذیری پرامپت نرم

پرامپت نرم، غیرقابل خواندن است. بردارهای پرامپت، در فضای embedding قرار دارند و معادل توکن‌های واقعی نیستند. این ویژگی، تفسیر را دشوار می‌کند.

پیامدهای عملی

در سامانه‌هایی که به تفسیرپذیری نیاز دارند، پرامپت سخت انتخاب بهتری است. در سامانه‌هایی که دقت اولویت اول است، پرامپت نرم می‌تواند انتخاب بهتری باشد.

تفاوت در هزینه

تفاوت ششم، در هزینه هر رویکرد است.

هزینه پرامپت سخت

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

هزینه پرامپت نرم

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

تحلیل تعادل هزینه

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

معیارپرامپت سختپرامپت نرم
هزینه آموزشپایینبالا
هزینه هر اجرابالاپایین
هزینه نگهداریپایینمتوسط

تفاوت در انتقال‌پذیری

تفاوت هفتم، در قابلیت انتقال‌پذیری میان مدل‌هاست.

انتقال‌پذیری پرامپت سخت

پرامپت سخت، قابل انتقال میان مدل‌هاست. یک پرامپت خوب که برای GPT-4 طراحی شده، معمولاً با Claude یا Llama نیز کار می‌کند، اگرچه ممکن است نیازمند تنظیم باشد.

انتقال‌پذیری پرامپت نرم

پرامپت نرم، به مدل خاص خود گره خورده است. بردارهای پرامپت، در فضای embedding یک مدل خاص آموزش دیده‌اند و در مدل دیگر قابل استفاده نیستند.

پیامدهای عملی

در محیط‌هایی که ممکن است مدل تغییر کند، پرامپت سخت انتخاب مطمئن‌تری است. در محیط‌های پایدار با مدل ثابت، پرامپت نرم انتخاب بهتری است.

کاربردهای هر رویکرد

هر یک از این رویکردها، در سناریوهای خاصی کاربرد دارند.

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

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

کاربردهای پرامپت نرم

  • مدل‌های متن‌باز محلی: در محیط‌هایی که به وزن مدل دسترسی داریم.
  • وظایف تخصصی: در وظایفی که به دقت بالاتری نیاز داریم.
  • بهینه‌سازی هزینه در مقیاس: در سامانه‌های پرترافیک که هزینه توکن مهم است.
  • حریم خصوصی: در سامانه‌هایی که داده‌ها نباید از سازمان خارج شوند.
  • پروژه‌های تحقیقاتی: در پژوهش‌هایی که به دقت بالاتر نیاز دارند.

رویکردهای ترکیبی

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

Prefix Tuning

در این رویکرد، یک پیشوند متنی (پرامپت سخت) با یک پیشوند بردار (پرامپت نرم) ترکیب می‌شود. برای جزئیات، پست تنظیم پیشوند در پرامپت نویسی را ببینید.

P-Tuning

در این رویکرد، پرامپت نرم با ساختار پویا طراحی می‌شود. برای جزئیات، پست روش P-tuning در پرامپت نویسی را ببینید.

Prompt Tuning

در این رویکرد، یک پرامپت نرم ساده در ابتدای ورودی قرار می‌گیرد و آموزش داده می‌شود.

ترکیب با LoRA

پرامپت نرم می‌تواند با LoRA ترکیب شود تا دقت را بیشتر کند. این رویکرد، در پروژه‌های پیشرفته رایج است.

پیشوند متنی برای زمینه

در سامانه‌های عملی، می‌توان از پرامپت سخت برای زمینه و از پرامپت نرم برای هدایت مدل استفاده کرد.

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

تفاوت اصلی پرامپت سخت و نرم چیست؟

پرامپت سخت از توکن‌های واقعی و قابل خواندن تشکیل شده، در حالی که پرامپت نرم از بردارهای پیوسته و آموزش‌پذیر تشکیل شده است.

آیا می‌توان پرامپت نرم را با API استفاده کرد؟

خیر. پرامپت نرم نیازمند دسترسی به وزن‌های مدل است و با API قابل استفاده نیست.

آیا پرامپت نرم همیشه بهتر است؟

خیر. در وظایف ساده و عمومی، پرامپت سخت می‌تواند عملکرد مشابهی با هزینه کمتر ارائه دهد.

آیا پرامپت نرم قابل انتقال است؟

خیر. پرامپت نرم به مدل خاص خود گره خورده است و در مدل دیگر قابل استفاده نیست.

چطور می‌توان پرامپت سخت را بهینه کرد؟

با روش‌های جستجوی گسسته، الگوریتم‌های ژنتیک یا روش‌های مبتنی بر گرادیان گسسته.

آیا پرامپت نرم بر هزینه اثر دارد؟

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

آیا پرامپت نرم برای همه مدل‌ها کاربرد دارد؟

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

آیا پرامپت سخت و نرم قابل ترکیب هستند؟

بله. رویکردهایی مانند Prefix Tuning و P-Tuning ترکیبی از هر دو هستند.

آیا پرامپت نرم برای امنیت مشکلی ایجاد می‌کند؟

پرامپت نرم غیرقابل خواندن است و بررسی امنیتی آن دشوارتر است. برای جزئیات، پست بهترین روش‌های امنیت پرامپت را ببینید.

آیا پرامپت نرم برای تنظیم دقیق جایگزین است؟

پرامپت نرم نوعی تنظیم دقیق پارامتر-کارآمد است که بخش کوچکی از پارامترها را آموزش می‌دهد. برای تفاوت‌ها، پست تفاوت پرامپت نویسی و تنظیم دقیق را ببینید.

چطور بفهمم کدام رویکرد برای پروژه‌ام مناسب است؟

سه معیار: دسترسی به وزن مدل، نیاز به دقت و بودجه. اگر به API دسترسی دارید، پرامپت سخت. اگر وزن مدل در اختیار دارید و دقت اولویت است، پرامپت نرم.

نتیجه‌گیری کاربردی

تفاوت پرامپت سخت و نرم، در سطح نمایش، آموزش، دسترسی، دقت، تفسیرپذیری، هزینه و انتقال‌پذیری است. پرامپت سخت، متنی و قابل خواندن است و به API اکتفا می‌کند. پرامپت نرم، بردارهای آموزش‌پذیر در فضای embedding است و نیازمند دسترسی به وزن مدل است. انتخاب میان این دو، یک تصمیم معماری است که بر اساس دسترسی، نیاز و بودجه گرفته می‌شود.

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

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