چیتشیت
نگارش، نقد و تکرار مقاله
Paper Writer, Critic and Iteration
اسکژول کردن آزمایشها با UCB، تکرار پیشنویس با ناقد پنجامتیازی، و تولید LaTeX، BibTeX و یک مانیفست.
فهرست مطالب
دموی سرتاسری پژوهش
معماریاجرای درسها
دستورها| دستور | عملکرد |
|---|---|
`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) |
| فقط رندر LaTeX | render_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
دور ناقد و قواعد توقف
گامبهگام- ناقدامتیازدهی به clarity، novelty، evidence، methodology و related_work از 0 تا 10.
- ناقدارائهی یک پیشنهاد برای هر بُعد زیر 8.0.
- بستر آزمایشیرسیدن هر پنج بُعد به
target_scoreیا بالاتر، توقف با دلیل target. - بستر آزمایشیمیانگین بهبود حداکثر
plateau_epsilonدر 2 دور، توقف با حالت یکنواخت (plateau). - بازبیناعمال هر ویرایش، مثل
expand-bodyیاadd-method-section. - بستر آزمایشیپس از
max_rounds، توقف وضعیت با دلیل budget. - اولویت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_rounds | 5 | بودجهی ناقد؛ کمتر از 1 خطای ValueError میدهد |
target_score | 8.0 | برای تکتک ابعاد، نه میانگین |
plateau_epsilon | 0.1 | برای plateau_window به مدت 2 دور |
slots | 3 | تسکهای موازی asyncio |
max_experiments | 50 | مقدار max_seconds برابر 30.0 است |
exploration_c | sqrt(2) | وزن کاوش در UCB |
paper_threshold | 0.7 | اجرای paper.trigger |
prune_floor | 0.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را تنظیم کرده و درسهای قبلی را ترکیب میکند.