Skip to content

رفع مجموعه‌ای از باگ‌های درستی و بهبود پایداری در ماژول‌های اصلی#200

Open
Milomilo777 wants to merge 1 commit into
hezarai:mainfrom
Milomilo777:fix/correctness-robustness-audit
Open

رفع مجموعه‌ای از باگ‌های درستی و بهبود پایداری در ماژول‌های اصلی#200
Milomilo777 wants to merge 1 commit into
hezarai:mainfrom
Milomilo777:fix/correctness-robustness-audit

Conversation

@Milomilo777

Copy link
Copy Markdown

این PR حاصل یک ممیزی عمیق و سیستماتیک روی کل کدبیس است. در مجموع ۵۶ نقص واقعی شناسایی، راستی‌آزمایی و برطرف شده‌اند. تمرکز بر درستی منطق، پایداری و رفع باگ‌های نهفته بوده است.

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

باگ‌های بحرانی

  • کرش متریک‌های برچسب‌گذاری دنباله روی بَچ اندازه ۱ — حذف بُعد بَچ توسط squeeze
  • خطای دسترسی هنگام ازسرگیری از چک‌پوینتِ نام‌دار (ارجاع به self.state پیش از مقداردهی)
  • نادیده‌گرفته‌شدن کلید درستِ خروجی توکنایزر: input_ids به‌جای token_ids
  • بازنویسیِ decoder_input_ids کاربر در ویسپر به‌خاطر or به‌جای and
  • حذف ورودی‌های صوتیِ مونو (تک‌بعدی) در پیش‌پردازشِ ویسپر
  • مقیاس‌دهیِ معکوسِ مختصاتِ جعبه‌ها در CRAFT (نسبت تغییر اندازه وارون نمی‌شد)
  • نادیده‌گرفته‌شدنِ آرگومانِ زمانِ‌فراخوانیِ الگوهای جایگزینی در نرمال‌ساز متن

ماژول‌های بهینه‌شده

trainer

  • اصلاح غلط‌املایی مقادیر شمارشی بهینه‌ساز و زمان‌بند: sgd و cosine_annealing
  • افزودن زمان‌بندِ constant و خطای روشن برای مقدار نامعتبر
  • میانگین‌گیریِ درستِ لاس برای گروهِ انباشتِ ناقصِ پایانِ اپوک
  • کاهشِ لاسِ ارزیابی پیش از تبدیل به اسکالر در حالت توزیع‌شده
  • تعیین هدف برای متریکی که کلید خروجی‌اش با نامش فرق دارد (مانند seqeval و f1)

metrics

  • احترام به n_decimals=0 و normalize=False (الگوی or این مقادیر را بی‌اثر می‌کرد)
  • اصلاح ساختار مرجع در bleu برای ورودی رشته‌ای
  • فعال‌سازیِ واقعیِ use_aggregator و n_decimals در rouge

preprocessors / tokenizers

  • اعمالِ آرگومانِ stride؛ تبدیل تنسور پیش از بررسی نوع در decode
  • جلوگیری از جهشِ درجای فهرستِ exclude_keys
  • کارکردِ درستِ آرگومان‌های nfkd و nfkc و replace_patterns در نرمال‌ساز متن
  • رفع باگ‌های رمزگشایی و آفستِ توکنایزر ویسپر

models

  • ویسپر: اصلاح بازنویسیِ پیکربندیِ تولید (نبودِ متد update روی دیتاکلاس)
  • gpt2: انتقالِ attention_mask و توقفِ آلودگیِ پایدارِ پیکربندیِ تولید
  • اصلاح حاشیه‌نویسی نوع در خروجیِ mask-filling و مقدار بازگشتیِ save

data

  • RangedSampler.__len__ اکنون تعداد واقعیِ نمونه‌های پیمایش‌شده را برمی‌گرداند
  • رفع نشتِ cache_dir روی صفتِ کلاس و پشتیبانی از مسیرهای محلیِ حاوی دونقطه (ویندوز)
  • بریدن/پُرکردنِ برچسب‌های خلاصه‌سازی با labels_max_length
  • گاردِ max_length=None در دیتاستِ OCR و رفعِ جهشِ درجایِ برچسب‌ها در کلکتور

utils

  • احترام به قراردادِ dtype در spectrogram
  • رفعِ تقسیم‌بر‌صفر در normalize_image برای تصاویرِ صحیح (uint8)
  • فیلترِ زیرپوشه با پیشوندِ مسیر به‌جای زیررشته
  • بارگذاریِ امن‌ترِ وزن‌ها با map_location و سازگاری با نسخه‌های جدیدِ تورچ

اعتبارسنجی

  • لینتِ ruff با پیکربندی پروژه: بدون خطا
  • بایت‌کامپایلِ کاملِ بسته: موفق
  • منطقِ خالصِ پایتون با تست‌های مستقل پوشش داده شد

توجه: مجموعه‌تستِ کامل که به دانلودِ مدل و دیتاست از هاب و نصبِ وابستگی‌های سنگین نیاز دارد در محیطِ توسعه اجرا نشد. تغییرات محافظه‌کارانه، بدونِ شکستِ API و هر یک به‌صورت مستقل بازبینی شده‌اند.

🤖 Generated with Claude Code

A comprehensive audit fixing real, verified defects across metrics, trainer,
tokenizers, datasets, models, preprocessors and utils. No public API breaks
(legacy enum spellings kept as backward-compatible aliases).

Trainer:
- SequenceLabeling metrics crashed on eval batch size 1 (bare np.squeeze
  collapsed the batch dim); use argmax(-1) without squeeze.
- AttributeError on resume from a named checkpoint dir (referenced self.state
  before assignment).
- Objective resolution failed for metrics whose output key differs from the
  metric name (e.g. seqeval -> f1).
- OptimizerType "sdg"->"sgd" and LRSchedulerType "cosine_anealing"->
  "cosine_annealing" typos; CONSTANT scheduler now mapped; unknown
  optimizer/scheduler now raise clear errors (old values still accepted).
- Final partial accumulation group now divides by the real micro-batch count.
- Distributed eval loss reduced with .mean() before .item().

Tokenizers:
- Wrong "input_ids" key -> "token_ids" (overflow mapping and OCR processor).
- User-supplied `stride` was ignored.
- decode() converts tensors/arrays before the int check; empty-offsets guard.
- pad_encoded_batch no longer mutates the caller's exclude_keys list.
- Whisper ASR: decode()[0] for language tokens, offset text as string.

Metrics:
- n_decimals=0 / normalize=False now honored (None-sentinel instead of `or`).
- BLEU wraps string references into a list-of-references for NLTK.
- ROUGE honors use_aggregator and n_decimals; seqeval drops dead format().

Models / preprocessors:
- Whisper: don't overwrite user decoder_input_ids; keep mono numpy audio;
  fix generation_config override (dataclass has no .update()).
- GPT2: forward attention_mask and stop polluting the persistent gen config.
- CRAFT: invert the forward resize ratio for box coordinates; sync get_ratio
  overrides; honor 0.0 thresholds.
- TextNormalizer: per-call nfkd/nfkc/replace_patterns overrides now work.
- CharLevelOCR collator: no in-place mutation of sample label lists.
- AudioFeatureExtractorConfig gains the return_attention_mask field.

Utils:
- spectrogram() honors the dtype contract for non-log spectrograms.
- normalize_image() promotes to float (no uint8 truncation / div-by-zero).
- list_repo_files() filters subfolders by path prefix, not substring.
- get_state_dict_from_hub() uses map_location="cpu" (torch>=2.6 safe).
- Dataset.load() no longer leaks per-call cache_dir onto the class.

Validated with ruff (project config) and full byte-compilation; pure-python
logic covered by standalone tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant