JSONSchemaBench: پیچیدگی شمای دنیای واقعی، تضمینهای خروجی ساختاریافته LLM را میشکند
بیشتر تیمها با رمزگشایی محدود شده (constrained decoding) به عنوان یک مسئله حل شده برخورد میکنند — یک شمای JSON اضافه کنید و JSON معتبر دریافت کنید. JSONSchemaBench (arXiv:2501.10868) اولین تلاش سیستماتیک برای آزمایش این فرض در برابر ۹,۵۵۸ شمای دنیای واقعی است، و نتایج آن کمتر از آنچه تبلیغات نشان میدهند، اطمینانبخش است.
مقاله
سایبو گنگ، هادسون کوپر، میخال موسکال و همکارانشان در بخش تحقیقات مایکروسافت، JSONSchemaBench را معرفی کردند؛ بنچمارکی شامل ۹,۵۵۸ شما که از منابع واقعی تولیدی استخراج شدهاند: امضاهای فراخوانی تابع GlaiveAI، مخازن گیتهاب که بر اساس پیچیدگی از ساده تا بسیار پیچیده دستهبندی شدهاند، پیکربندیهای API کوبرنتیز، شماهای تحلیل رویداد Snowplow و مجموعه JSONSchemaStore. آنها شش چارچوب رمزگشایی محدود شده — Guidance، Outlines، Llamacpp، XGrammar، OpenAI Structured Outputs و Gemini — را در سه محور ارزیابی کردند: پوشش (چه بخشی از شماها توسط چارچوب قابل مدیریت است)، کارایی (سربار توکن در ثانیه در مقایسه با تولید نامحدود)، و کیفیت (دقت وظایف پاییندستی). جدول ارزیابی همچنین شامل مجموعه تست رسمی JSON Schema است که ۴۵ دستهبندی ویژگی را که هر موتور منطبقی باید از آنها پشتیبانی کند، مستند میکند.
ادعای اصلی این است که پیچیدگی شِما، متغیر تعیینکنندهای است که چارچوبهای توانمند را از چارچوبهای شکننده جدا میکند و هیچ چارچوب واحدی در هر سه محور برتری ندارد.
ایدههای کلیدی
- فروپاشی پوشش تحت پیچیدگی شِما. در شماهای ساده GlaiveAI، تمام چارچوبها امتیازی بالای ۸۶٪ کسب کردند. اما در شماهای پیچیده گیتهاب (GitHub-Hard) — که شامل تودرتویی چندسطحی، تعاریف بازگشتی و محدودیتهای الگوی پیچیده هستند — پوشش Guidance به ۴۱٪، Llamacpp به ۳۹٪، XGrammar به ۲۸٪ و Outlines به مقدار فاجعهبار ۳٪ سقوط کرد. OpenAI تنها به ۹٪ در GitHub-Hard رسید و Gemini در شماهای با پیچیدگی متوسط یا بالاتر، هیچ خروجی معتبری تولید نکرد.
- کوبرنتیز ضعف خاصی را در XGrammar آشکار میکند. علیرغم ادعاهای سرعت XGrammar، این چارچوب تنها به ۷٪ پوشش در شماهای کوبرنتیز دست یافت؛ احتمالاً به این دلیل که این شماها به الگوهای وابسته به متن متکی هستند که پیشمحاسبات مستقل از متن XGrammar نمیتواند آنها را مدیریت کند. پوشش در برابر بنچمارکی که شامل پیکربندیهای کوبرنتیز است، برای عوامل تولیدی (production agents) اختیاری نیست.
- محدودیت ناقص خطرناکتر از خطای کامپایل است. XGrammar در برابر مجموعه تست JSON Schema، دچار ۳۸ مورد شکست در اعمال محدودیت شد — به این معنی که خروجی JSON تولید کرد که شِمای اعلام شده را نقض میکرد، اما وضعیت موفقیت را گزارش داد. Guidance تنها ۱ مورد از این شکستها را داشت. برای یک عامل بازنویسی (write-back agent)، خطای کامپایل در زمان طراحی شناسایی میشود؛ اما شکست در اعمال محدودیت باعث فاسد شدن دادهها در زمان اجرا بدون هیچ سیگنالی میشود.
- قابلیت fast-forwarding در Guidance بهبود واقعی ۵۰ درصدی سرعت را به همراه دارد. زمانی که توالیهای قطعی طولانی وجود داشته باشند (مثلاً نام فیلدها در یک ساختار ثابت شیء)، Guidance میتواند چندین توکن را در هر مرحله رمزگشایی به جلو ببرد. در مدل Llama-3.1-8B روی کارت A100، اجرای Guidance حدود ۶ تا ۹ میلیثانیه به ازای هر توکن خروجی طول میکشد، در حالی که تولید نامحدود ۱۵ تا ۱۶ میلیثانیه زمان میبرد. Outlines با ۳۰ تا ۴۶ میلیثانیه از تولید نامحدود کندتر است که عمدتاً به دلیل کامپایل اولیه خودکار (automaton compilation) است که ۳ تا ۸ ثانیه برای هر شِما زمان میبرد.
- رمزگشایی محدود شده به میزان کمی دقت استدلال را بهبود میبخشد. در بنچمارک GSM8K (ریاضی)، Guidance دقت را از ۸۰.۱٪ (نامحدود) به ۸۳.۸٪ افزایش داد. در وظایف Last Letter و Shuffle Objects، بهبودها در محدوده ۱ تا ۳ واحد بود. این موضوع با نگرانیهای گسترده مبنی بر اینکه اجبار به فرمت JSON کیفیت پاسخ را کاهش میدهد، در تضاد است — اما اندازه اثر به قدری کوچک است که انتخاب فرمت نباید عامل اصلی در انتخاب چارچوب باشد.
- هیچ چارچوبی تمام ۴۵ دستهبندی ویژگی JSON Schema را پوشش نمیدهد. Guidance تعداد ۱۳ دسته، Llamacpp و XGrammar هر کدام ۱ دسته و Outlines صفر دسته را پوشش میدهند. پیامد عملی این است که هر شمایی که از
if/then/else،unevaluatedPropertiesیا تعاریف بازگشتی$refاستفاده میکند، بسته به اینکه چه موتوری در پسزمینه است، رفتاری غیرقابل پیشبینی خواهد داشت.
چه چیزی درست است و چه چیزی نیست
قویترین سهم این بنچمارک، تامین منابع شِما است. ارزیابیهای قبلی از شماهای اسباببازی یا مجموعههای تکمنبعی استفاده میکردند. گنجاندن پیکربندیهای کوبرنتیز در کنار امضاهای فراخوانی تابع، نوع درستی از تنوع تقابلی است. دستهبندی پیچیدگی (از بدیهی تا فوقپیچیده) همچنین به متخصصان یک منحنی کالیبراسیون میدهد: اگر شماهای شما شبیه فراخوانیهای تابع GlaiveAI هستند، XGrammar یا Guidance هر دو مناسب هستند؛ اما اگر شبیه مانیفستهای کوبرنتیز هستند، گزینههای شما به سرعت محدود میشوند.
نقطه ضعف اصلی، ارزیابی حریصانه (greedy) تکنمونهای است. اندازهگیری پوشش با تنها یک بار تولید به ازای هر شِما، توانایی واقعی را کمتر از حد نشان میدهد — یک چارچوب ممکن است ۲۰٪ مواقع شکست بخورد اما در تلاش مجدد موفق شود. مقاله به این موضوع اذعان دارد اما اعداد pass@k نمونهبرداری شده با دما (temperature-sampled) را گزارش نمیدهد، که برای سیستمهای تولیدی که در صورت شکست دوباره تلاش میکنند، اهمیت دارد.
همچنین این مقایسه مدلهای غیرقابل مقایسه را با هم ترکیب میکند. چارچوبهای متنباز (Guidance, Outlines, Llamacpp, XGrammar) روی Llama-3.2-1B تست شدهاند، در حالی که OpenAI و Gemini مدلهای افشا نشده خود را اجرا میکنند. پوشش ۹ درصدی OpenAI در GitHub-Hard ممکن است به اندازه معماری رمزگشایی محدود شده، بازتابدهنده توانایی مدل باشد. یک مقایسه منصفانه مستلزم دسترسی کنترلشده به مدل است — که نویسندگان بدیهی است نمیتوانند ارائهدهندگان انحصاری را به آن مجبور کنند.