فاز 19 · درس 55

حلقه ناقد در سیستم‌های زبانی: مهندسی همگرایی و بازنگری ساختاریافته

نوع
ساختنی
زمان
حدود 90 دقیقه
زبان‌ها
Python
یک لوپ فیدبک فلزی متشکل از چرخ‌دنده‌های دقیق و یک ترازوی سنجش برداری روی میز کار مهندسی
فهرست مطالب
  1. اهداف یادگیری
  2. چرا پنج بُعد مشخص؟
  3. ساختار نقد
  4. قوانین همگرایی، به ترتیب اولویت
  5. چرا تشخیص حالت یکنواخت طی دو دور بررسی می‌شود؟
  6. ناقد قطعی در این درس
  7. قرارداد کامل حلقه
  8. خروجی ردگیری محاسبات
  9. بودجه‌هایی برای مهار ناقدهای بدقلق
  10. راهنمای خواندن کد
  11. گام بعدی

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

در این درس یاد می‌گیرید که چگونه یک حلقه ناقد (Critic Loop) مهندسی‌شده بسازید که به‌جای اظهارنظرهای کلی، کیفیات متن را در قالب بردارهای امتیازی چندبُعدی بررسی کند. با جداسازی شفاف وظایف میان ناقد، بازنگر و بستر آزمایشی (harness)، سیستم قادر خواهد بود با قوانینی صریح میان رسیدن به هدف، توقف روی فلات و پایان بودجه تصمیم بگیرد.

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

ناقدی که بار اول بگوید «خوب به نظر می‌رسد»، به درد نمی‌خورد. ناقدی هم که همیشه بگوید «نیاز به کار دارد»، باز هم ناکارآمد است. ناقد به دردبخور ناقدی است که همگرا شود، و این همگرایی را شما باید مهندسی کنید.

اهداف یادگیری

  • امتیازدهی به پیش‌نویس مقاله در پنج بُعد مشخص: شفافیت (clarity)، نوآوری (novelty)، شواهد (evidence)، روش‌شناسی (methodology) و پیشینه پژوهش (related-work).
  • اعمال نقدِ هر دور در قالب تفاوت‌های ساختاریافته‌ی بازنگری (revision diff)، به جای بازنویسی آزاد و ساختارنیافته.
  • تشخیص همگرایی با مقایسه‌ی امتیازات در طول دورها؛ توقف هنگام رسیدن به حالت یکنواخت (plateau)، تحقق هدف، یا پایان بودجه.
  • محدود کردن تعداد دورها با یک سقف تکرار (budget)، تا ناقدی که همگرا نمی‌شود تا ابد اجرا نشود.
  • تولید یک ردگیری محاسبات (trace) در هر دور، تا داشبورد یا مرحله‌ی بعدی بتواند مسیر کامل اجرا (trajectory) امتیازات را رسم کند.
حلقه ناقدهمگرایی پنج بعد یا توقف
CRITIC LOOPEach round the critic returns a five-dimension score vector, the revision applies as a structured diff, and the trajectories climb toward the target band. Convergence is engineered, not hoped for: the loop stops on plateau, on target met, or on budget exhausted, and a dimension that regresses is caught because the score is a vector, not a paragraph.هدف 8+دور 1دور 2دور 3دور 4وضوحنوآوریشواهدروش‌شناسیپیشینه پژوهششناسایی فلات: توقف
در هر دور، ناقد یک بردار امتیاز پنج‌بعدی برمی‌گرداند، بازنگری به‌صورت یک diff ساختاریافته اعمال می‌شود، و مسیرها به‌سمت محدوده هدف صعود می‌کنند. همگرایی به‌صورت مهندسی‌شده حاصل می‌شود، نه بر پایه امید: حلقه با رسیدن به فلات، محقق شدن هدف، یا اتمام بودجه متوقف می‌شود؛ و پس‌رفت در هر بُعد شناسایی خواهد شد چون امتیاز یک بردار است، نه یک پاراگراف متن آزاد.

چرا پنج بُعد مشخص؟

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

این پنج بُعد یک قرارداد مشخص به بستر آزمایشی (harness) می‌دهند.

پیش‌نویس مقالهناقدامتیازهاوضوح 0-10نوآوری 0-10شواهد 0-10روش‌شناسی 0-10کارهای مرتبط 0-10پیشنهادهای بازنگری

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

ساختار نقد

نقددیکشنری امتیازهافهرست پیشنهادهاپیشنهاد: بعد، هدف، ویرایشدور (int)دلیل کلی (str)

هر پیشنهاد مشخص می‌کند که کدام بُعد را بهبود می‌دهد، کدام بخش از مقاله را هدف می‌گیرد و شامل یک دستور edit است که بازنگر (reviser) می‌تواند آن را اعمال کند. بازنگر خودش یک شیء قابل فراخوانی (callable) است. در این درس، یک بازنگر قطعی (deterministic) ارائه داده‌ایم که دستور ویرایش را به شکل عملیاتِ الحاق به بخش مربوطه تفسیر می‌کند. بازنگری که متکی به مدل زبانی باشد، همین فیلد را به چشم یک پرامپت می‌بیند؛ قرارداد میان اجزا هیچ تغییری نمی‌کند.

قوانین همگرایی، به ترتیب اولویت

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

بلهخیربلهخیربلهخیردور n کامل شدهمه 5 بعد ≥ هدف؟همگرا شده: هدفتوقف پیشرفت شناسایی شد؟همگرا شده: رکوددور ≥ حداکثر؟متوقف شد: بودجهاجرای دور n+1

رسیدن به هدف، سخت‌گیرانه‌ترین حالت است: تمام این پنج بُعد (clarity ،novelty ،evidence ،methodology ،related_work) باید به امتیاز target_score =< (پیش‌فرض 8.0) برسند تا حلقه وضعیت موفقیت را برگرداند. میانگینِ بالا وقتی حتی یکی از ابعاد ضعیف باشد کافی نیست. در مرحله‌ی بعد، تشخیص حالت یکنواخت، میانگین دور فعلی را با میانگین دور قبل مقایسه می‌کند. اگر میزان پیشرفت برای دو دور پیاپی کمتر از plateau_epsilon (پیش‌فرض 0.1) باشد، حلقه با وضعیت plateau خارج می‌شود. بودجه هم یک سقف سخت‌گیرانه روی تعداد دورها است (پیش‌فرض 5) که با رسیدن به آن، حلقه با وضعیت budget به پایان می‌رسد.

ترتیب اولویت‌ها مهم است: رسیدن به هدف بر حالت یکنواخت اولویت دارد و حالت یکنواخت بر پایان بودجه. اگر در دور سوم به هدف برسید و همان تکرار شرطِ حالت یکنواخت را هم فعال کند، نتیجه target خواهد بود، نه plateau.

چرا تشخیص حالت یکنواخت طی دو دور بررسی می‌شود؟

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

ناقد قطعی در این درس

در این درس هیچ مدلی فراخوانی نمی‌شود. ناقدی که پیاده کرده‌ایم یک شیء قابل فراخوانی است که پیش‌نویس را بر اساس سه سیگنال امتیازدهی می‌کند: میانگین طول متن بخش‌ها (شفافیت)، تعداد نمودارها و ارجاعات (شواهد)، و یک فیلد originality_tag در متادیتای مقاله (نوآوری). بازنگر دقیقاً می‌داند چطور هر امتیاز را push کند و بالاتر ببرد.

clarity      grows when the average section body length increases
novelty      grows when originality_tag is set to "high"
evidence     grows when a section's figure_refs is non-empty
methodology  grows when a section titled "Method" exists with body
related-work grows when a section titled "Related Work" exists with body

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

قرارداد کامل حلقه

بازنگرناقدبستر آزمایشیبازنگرناقدبستر آزمایشیalt[همگرا شد][ادامه]critique(draft, round=1)1Critique{scores, suggestions}2revise(draft, suggestions)3پیش‌نویس بازنگری‌شده4بررسی همگرایی5توقف با ذکر دلیل6critique(draft, round=2)7

بستر آزمایشی مدیریت شمارنده‌ی دورها، ردگیری محاسبات و بررسی همگرایی را بر عهده دارد. امتیازدهی دست ناقد است، و اعمال تغییرات (diff) هم دست بازنگر. هیچ‌کدام از این سه جزء به وضعیت داخلی دیگر اجزا کاری ندارند.

خروجی ردگیری محاسبات

هر دور یک رویداد ردگیری محاسبات ثبت می‌کند که شامل شماره‌ی دور، بردار امتیازات، تعداد پیشنهادها و حکم همگرایی است. کل ردگیری محاسبات در کنار پیش‌نویس نهایی برگردانده می‌شود. داشبورد مراحل بعدی می‌تواند نمودار امتیاز به ازای هر دور را رسم کند. در درس بعد، اسکژولر تکرار (iteration scheduler) این ردگیری را می‌خواند تا تصمیم بگیرد آیا branch ارزش نگه داشتن دارد یا نه.

بودجه‌هایی برای مهار ناقدهای بدقلق

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

راهنمای خواندن کد

فایل code/main.py شامل تعاریف Critique ،Suggestion، پروتکل Critic، پروتکل Reviser، کلاس CriticLoop و فکتوریِ make_deterministic_critic_pair است که جفت ناقد قطعی و بازنگر متناسب با آن را برمی‌گرداند. یک ساختار حداقلی از Paper هم اضافه شده است تا این درس کاملاً مستقل و خودکفا اجرا شود.

فایل code/tests/test_critic_loop.py این سناریوها را پوشش می‌دهد: بهبود یکنواخت پس از دور اول، همگرایی به هدف روی پیش‌نویس تنظیم‌شده، تشخیص حالت یکنواخت پس از دو دور بدون رشد، تمام شدن بودجه در صورت عدم پیشرفت با پیشنهادها، نحوه‌ی اعمال پیشنهادها توسط بازنگر، و ساختار خروجی ردگیری محاسبات.

گام بعدی

در یک پیاده‌سازی واقعی دو توسعه مد نظر قرار می‌گیرد. اول، وزن‌دهی به ابعاد: برای مقاله‌ای که به یک کارگاه فرستاده می‌شود، نوآوری وزن بیشتری نسبت به روش‌شناسی دارد؛ در ژورنال‌ها قضیه برعکس است. در این حالت، بررسی همگرایی به یک میانگین وزنی تبدیل می‌شود. دوم، ناقدهای جفتی: یک ناقد امتیاز می‌دهد و ناقد دوم پیشنهادها را پیش از رسیدن به دست بازنگر بررسی و غربال می‌کند. هر دو مورد ارزش‌افزوده دارند و هر دو روی همان ساختار Critique سوار می‌شوند.

برگ برنده‌ی این طراحی، بردار امتیازات است. وقتی نقد ساختاریافته باشد، همه‌ی اجزای دیگر — از قوانین همگرایی و داشبوردها گرفته تا ناقدهای جفتی — بدون دست زدن به حلقه‌ی اصلی، خیلی راحت به سیستم اضافه می‌شوند.

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسچرا ناقد به‌جای بازگرداندن یک پاراگراف آزاد، بر اساس پنج بُعد ثابت امتیازدهی می‌کند؟
  2. پیش از درسدر پایان یک دور، حلقه شرایط توقف را با چه ترتیبی بررسی می‌کند؟
  3. حین درسچرا تشخیص فلات به‌جای یک دور، به دو دور پیاپی بدون تغییر نیاز دارد؟
  4. حین درسبازنگر در هر دور چه ورودی‌هایی دریافت می‌کند؟
  5. پس از درسردگیری محاسبات (trace) برای هر دور شامل چه مواردی است؟
  6. پس از درسناقدی که مدام پیشنهادهایی ارائه دهد که هیچ امتیازی را بهبود نمی‌بخشند، چه حکم پایانی تولید خواهد کرد؟

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

چرا امتیازدهی برداری پنج‌بُعدی بهتر از نقد متنی آزاد است؟

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

شرط توقف در حلقه ناقد به چه ترتیبی ارزیابی می‌شود؟

ابتدا شرط دستیابی به هدف بررسی می‌شود؛ در صورت برآورده نشدن، وضعیت یکنواخت (plateau) طی دو دور پیاپی ارزیابی می‌شود؛ و در نهایت در صورت اتمام تعداد دورها، حلقه با وضعیت پایان بودجه متوقف می‌شود.

چرا تشخیص حالت یکنواخت (Plateau) نیازمند دو دور متوالی است؟

یک دور عدم رشد ممکن است ناشی از نویز در اعمال تغییرات باشد؛ بررسی دو دور پیاپی اطمینان می‌دهد که پیشرفت متن واقعاً متوقف شده است.

ما رو توی گوگل بیشتر ببین

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