چیت‌شیت

نگارش، نقد و تکرار مقاله

Paper Writer, Critic and Iteration

اسکژول کردن آزمایش‌ها با UCB، تکرار پیش‌نویس با ناقد پنج‌امتیازی، و تولید LaTeX، BibTeX و یک مانیفست.

  • ۱۰ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. دموی سرتاسری پژوهش
  2. اجرای درس‌ها
  3. فراخوانی‌ها در کد
  4. تعریف اسکلت ساختاری مقاله
  5. اجرای اسکژولر UCB
  6. دور ناقد و قواعد توقف
  7. فرمول‌ها و امتیازها
  8. پیش‌فرض‌های حلقه
  9. خطاها و راه‌حل‌ها
  10. پرسش‌ها

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

معماری
توزیع کارنتیجهآمار UCBpaper.triggerMiniPapermini_to_full_paperمانیفستفرضیه‌های اولیهآلفا، بتا، گاماIterationSchedulerانتخاب‌گر UCB3 جایگاه موازیتسک‌های asyncioگذرگاه نتایجپاداش به ازای هر branchpick_best_branchبیشترین میانگین پاداشCriticLoopپنج امتیاز در هر دورPaperWritertex، bib، مانیفستDemoReportstop_reason

اجرای درس‌ها

دستورها
دستورعملکرد
`python3 code/main.py` (54)نوشتن paper.tex، references.bib و manifest.json در یک مسیر موقت
`python3 code/main.py` (55)چاپ خروجی حلقه ناقد و ردگیری محاسبات در هر دور
`python3 code/main.py` (56)چاپ stop_reason، تریگرهای مقاله و آمار branch
`python3 code/main.py` (57)چاپ بهترین branch، وضعیت ناقد و بخش‌های مقاله

فراخوانی‌ها در کد

کار و کد
وظیفهکد
نمودارها از خروجی‌های آزمایشfigs = read_experiment_manifest(experiments, out_dir)
فقط رندر LaTeXrender_latex(paper)
نگارش متن و تولید سه فایلmanifest = PaperWriter(prose=prose).write(paper, out_dir)
جفت کردن ناقد و بازبینcritic, reviser = make_deterministic_critic_pair()
تکرار و بهبود پیش‌نویسCriticLoop(critic=critic, reviser=reviser, max_rounds=6, target_score=8.0)
شبیه‌سازی آزمایش‌هاmake_deterministic_runner(base_rewards, noise=0.04, delay_ms=2.0, seed=seed)
اسکژول کردن و انتظارreport = await sched.run(seed)
انتخاب و ارتقا`pick_best_branch(sched_report)`, then `mini_to_full_paper(critic_result.paper, branch)`

تعریف اسکلت ساختاری مقاله

کد
python
paper = Paper(
    title="<title>", authors=["Lab Bot"], abstract="<abstract>",
    sections=[
        Section(id="method", title="Method", cites=["jones2021"],
                figure_refs=[figs[0].id]),  # برچسب sec:method
    ],
    figures=figs,                           # برچسب fig:<id>
    bibliography=[
        BibEntry(key="jones2021", entry_type="article",
                 fields={"title": "On loops", "author": "Jones", "year": "2021"}),
    ],
)
prose = MockProseGenerator(outlines={"method": "<outline>"})
writer = PaperWriter(prose=prose)           # اجرای گیت‌های کنترلی پیش از ایجاد هر فایل

اجرای اسکژولر UCB

کد
python
seed = [Hypothesis(id="h-a-1", branch="branch-a"),
        Hypothesis(id="h-b-1", branch="branch-b")]
runner = make_deterministic_runner(
    base_rewards={"branch-a": 0.85, "branch-b": 0.55},
    seed=7, delay_ms=2.0,
)                                      # پاداش به صورت پایه + N(0, noise)
sched = IterationScheduler(
    runner=runner, slots=3, max_experiments=20,
    paper_threshold=0.7, prune_floor=0.25, prune_after_runs=3,
    expander=deterministic_expander,   # دو کار تکمیلی به ازای هر پاداش بالا
)
report = asyncio.run(sched.run(seed))  # SchedulerReport
report.to_dict()                       # stop_reason، paper_triggers

دور ناقد و قواعد توقف

گام‌به‌گام
  1. ناقدامتیازدهی به clarity، novelty، evidence، methodology و related_work از 0 تا 10.
  2. ناقدارائه‌ی یک پیشنهاد برای هر بُعد زیر 8.0.
  3. بستر آزمایشیرسیدن هر پنج بُعد به target_score یا بالاتر، توقف با دلیل target.
  4. بستر آزمایشیمیانگین بهبود حداکثر plateau_epsilon در 2 دور، توقف با حالت یکنواخت (plateau).
  5. بازبیناعمال هر ویرایش، مثل expand-body یا add-method-section.
  6. بستر آزمایشیپس از max_rounds، توقف وضعیت با دلیل budget.
  7. اولویتtarget مقدم بر plateau؛ plateau مقدم بر budget.

فرمول‌ها و امتیازها

مفهوم‌ها
UCB1
میانگین پاداش + c ضرب در sqrt(ln(total_runs) / runs).
branch بررسی‌نشده
تابع ucb_score مقدار float("inf") برمی‌گرداند، بنابراین اول اجرا می‌شود.
هرس
میانگین زیر prune_floor پس از prune_after_runs آزمایش.
تریگر مقاله
میانگین branch در حد paper_threshold یا بالاتر، یک‌بار به ازای هر branch.
وضوح (Clarity)
min(10.0, 3.0 + avg_body / 50.0).
شواهد (Evidence)
min(10.0, 2.0 + 2.0 * fig_refs + 1.5 * cites).
نوآوری (Novelty)
9.0 برای زیاد، 6.0 برای متوسط، 3.0 برای کم در originality_tag.
نوآوری دمو
بالا در پاداش 0.8 یا بیشتر، متوسط در 0.6 یا بیشتر.

پیش‌فرض‌های حلقه

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
max_rounds5بودجه‌ی ناقد؛ کمتر از 1 خطای ValueError می‌دهد
target_score8.0برای تک‌تک ابعاد، نه میانگین
plateau_epsilon0.1برای plateau_window به مدت 2 دور
slots3تسک‌های موازی asyncio
max_experiments50مقدار max_seconds برابر 30.0 است
exploration_csqrt(2)وزن کاوش در UCB
paper_threshold0.7اجرای paper.trigger
prune_floor0.2پس از prune_after_runs به تعداد 3 آزمایش

خطاها و راه‌حل‌ها

عیب‌یابی
  • PaperValidationError: ارجاع به کلید نامشخص کتاب‌نامه

    علت
    ارجاع بخش بدون BibEntry است
    راه‌حل
    افزودن مدخل به bibliography
  • PaperValidationError: ارجاع به شناسه نامشخص تصویر

    علت
    figure_refs تصویری ناموجود را نام برده است
    راه‌حل
    ابتدا تصویر را اضافه کنید
  • NoTriggerError

    علت
    هیچ branchی به paper_threshold نرسید
    راه‌حل
    بررسی پاداش‌های branch در برابر آستانه
  • پنج دور بدون تغییر، حکم ارزیابی budget

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

    علت
    branch هرس شده است
    راه‌حل
    بررسی prune_floor و prune_after_runs
  • خطای نوع رویداد ردگیری محاسبات

    علت
    تسک اجراکننده خطا داده است
    راه‌حل
    خواندن repr مربوط به استثنا در ردگیری محاسبات

پرسش‌ها

پرسش و پاسخ
چرا ابتدا اسکلت ساختاری؟
گیت‌های کنترلی پیش از هر متنی، تصاویر، ارجاعات و بخش‌ها را بررسی می‌کنند.
ناقد چه چیزی را می‌خواند؟
فایل manifest.json را؛ LaTeX را پارس نمی‌کند.
چرا UCB؟
روش حریصانه هرگز کاوش نمی‌کند؛ روش یکنواخت هرگز بهره‌برداری نمی‌کند.
چرا import به جای کپی؟
دمو مسیر sys.path را تنظیم کرده و درس‌های قبلی را ترکیب می‌کند.