۱۰. خروجی ساختاریافته
در محصول واقعی خروجی مدل را اغلب برنامهٔ دیگری میخواند، پس باید قالب مشخصی داشته باشد. این درس پنج جای پشتهٔ هوش مصنوعی را نشان میدهد که میشود قالب را آنجا تضمین کرد — از چسب زخم تا درمان جدی.
خروجی ساختاریافته
در محصول واقعی خیلی وقتها خروجی مدل باید یک قالب مشخص داشته باشد. دو حالت اصلی هست:
- خود کار ساختاریافته است. مثلاً تبدیل زبان طبیعی به یک قالب ماشینی: «میانگین درآمد ماهانه در شش ماه گذشته چقدر بوده؟» ← یک دستور SQL معتبر. یا دستهبندی، که خروجی باید دقیقاً یکی از برچسبهای مجاز باشد.
- خروجی را برنامهٔ دیگری میخواند. نوشتن ایمیل ذاتاً ساختار نمیخواهد، ولی اگر برنامهٔ شما ایمیل را به شکل
{"title": ..., "body": ...}لازم دارد، خروجی باید همین شکل را داشته باشد. در ایجنتها (فصل ۶) این حیاتی است، چون خروجی مدل مستقیم ورودی یک ابزار میشود.
مهمترین دستهٔ حالت اول تجزیهٔ معنایی (semantic parsing) است: تبدیل زبان طبیعی به قالبی که ماشین بخواند، تا کاربر بتواند با API با زبان خودش کار کند. نمونهٔ کتاب، تبدیل متن به عبارت منظم با GPT-4o است؛ مدل از روی یک مثال، الگوی ایمیل را مینویسد:
System prompt:
Given an item, create a regex that represents all the ways
the item can be written. Return only the regex.
Example: US phone number -> \+?1?\s?(\()?(\d{3})(?(1)\))[-.\s]?(\d{3})[-.\s]?(\d{4})
User prompt: Email address ->
GPT-4o: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}پنج جای مختلف در پشتهٔ هوش مصنوعی میشود قالب را تضمین کرد. سهتای اول بیشتر چسب زخماند و وقتی خوب کار میکنند که مدل خودش تقریباً بلد است؛ دو تای آخر درمان جدیاند:
| روش | چه میکند | نقطهٔ ضعف |
|---|---|---|
| پرامپت | در دستور مینویسید «فقط JSON برگردان» | هیچ تضمینی نیست؛ چند درصد خروجی خراب برای خیلی کاربردها قابلقبول نیست |
| پسپردازش | یک اسکریپت اشتباههای تکراری را خودکار درست میکند | فقط وقتی کار میکند که اشتباهها کوچک و قابلحدس باشند |
| محاسبه در زمان آزمون | آنقدر تولید کن تا یک خروجی معتبر بیاید | هر تلاش دوباره هزینه و تأخیر دارد |
| نمونهبرداری محدودشده | توکنهای غیرمجاز اصلاً اجازهٔ انتخاب ندارند | برای هر قالب یک گرامر لازم است؛ ممکن است کندتر شود |
| تنظیم دقیق | مدل را روی نمونههایی با همان قالب آموزش میدهید | داده و هزینهٔ آموزش (فصل ۷) |
پرامپت خط اول دفاع است. بعضی برای بالا بردن درصد خروجی معتبر، از یک مدل دوم میخواهند خروجی را چک یا اصلاح کند — ولی این یعنی هر درخواست دستکم دو فراخوانی، و دو برابر هزینه.
پسپردازش ساده و ارزان است و بهطرز عجیبی خوب کار میکند. نویسندهٔ کتاب از تجربهٔ تدریسش میگوید دانشجوها اشتباههای خیلی شبیه به هم میکنند؛ مدلها هم همینطور. اگر اشتباه رایج را پیدا کنید — مثلاً جا انداختن آکولاد بسته — یک اسکریپت کوچک درستش میکند. لینکدین با یک تجزیهگر دفاعی برای قالب YAMLYAML Ain't Markup Languageیَمِل، درصد خروجی سالم را از ۹۰٪ به ۹۹٫۹۹٪ رساند. (آنها YAML را بهجای JSON انتخاب کردند چون کمحرفتر است و توکن کمتری مصرف میکند.)
ابزارهایی که خروجی ساختاریافته را پشتیبانی میکنند: guidance، outlines، instructor و llama.cpp. هر ارائهدهنده هم روش خودش را دارد؛ OpenAI اولین کسی بود که حالت JSON را به API تولید متن آورد. کتاب میگوید بسته به کار و مدل، درصد JSON درست از صفر تا بالای ۹۰٪ دیده است.
نمونهبرداری محدودشده
یادتان هست مدل برای هر توکن واژگان یک لاجیت میدهد؟ نمونهبرداری محدودشده قبل از قرعه، لاجیت توکنهایی را که با قالب سازگار نیستند حذف میکند. مدل نه اینکه «قول بدهد» خارج از قالب حرف نزند — نمیتواند.
در این مثال فیلتر کردن ساده است. ولی برای قالبی مثل JSON باید یک گرامر داشته باشید که بگوید در هر قدم چه چیزی مجاز است — مثلاً بعد از { آکولاد باز دیگری نمیتواند بیاید، مگر داخل یک رشته. ساختن این گرامر سخت است و برای هر قالب (JSON، YAML، CSV، عبارت منظم) جدا. بعضی معتقدند این زحمت بهتر است صرف آموزش مدل در پیروی از دستور شود.
تنظیم دقیق روی نمونههایی با قالب دلخواه، مؤثرترین و عمومیترین راه است. برای بعضی کارها میشود حتی معماری مدل را عوض کرد: مثلاً برای دستهبندی، یک سر دستهبند (classifier head) به انتهای مدل میچسبانند که فقط و فقط یکی از برچسبهای مشخص را خروجی میدهد. در فصل ۷ به آن برمیگردیم.
هنگام تنظیم دقیق میشود کل مدل را سرتاسری دوباره آموزش داد یا فقط بخشی مثل همین سر را. آموزش سرتاسری منابع بیشتری میخواهد ولی نتیجهٔ بهتری نوید میدهد. کتاب پیشبینی میکند با قویتر شدن مدلها در پیروی از دستور، این فنون کماهمیتتر شوند. در درس ۱۳ دو ابزار از همینها را خودتان میسازید.
خودآزمایی
مرور فلشکارتهای این درس
نمونهبرداری محدودشده (constrained sampling) چیست؟
برای دیدن پاسخ کلیک کنید یا Space بزنید
کارت ۱ از ۶