amoe-lora / src /amoe /train /guards.py
AbstractPhil's picture
amoe-lora 0.1.0: working-state framework β€” attach/toggle/detach invariant-tested (toggle law + bit-exact detach), checkpoint v1 + legacy import verified against shipped campaign artifacts, reference-grade train/align with guards, DDP-aware, honesty diagnostics first-class
906715b verified
Raw
History Blame Contribute Delete
1.88 kB
"""Training-data guards β€” the campaign's honesty instruments.
check_dataset: the question-space / overlap guard (research line
exp013b): an answer-diversity check alone does NOT protect against
question-space exhaustion β€” an expert trained on more draws than the
space holds distinct questions memorizes the space and posts fake
generalization.
"""
from __future__ import annotations
import warnings
from typing import Callable, Sequence
class MemorizationRiskWarning(UserWarning):
pass
def check_dataset(train_rows: Sequence[dict],
eval_rows: Sequence[dict] | None = None,
key: Callable[[dict], str] | None = None) -> dict:
key = key or (lambda r: str(r.get("messages", r.get("ids"))))
train_keys = [key(r) for r in train_rows]
space = len(set(train_keys))
report = {"train_draws": len(train_keys),
"distinct_questions": space,
"space_over_draws": round(space / max(len(train_keys), 1), 3)}
if space < len(train_keys):
warnings.warn(
f"question space ({space}) is smaller than the training "
f"draw ({len(train_keys)}): the adapter can memorize the "
"space and any in-distribution gain may be fake "
"generalization. Widen the space or shrink the draw "
"(research line: sequences 480 < 800 -> memorized).",
MemorizationRiskWarning, stacklevel=2)
if eval_rows is not None:
ek = {key(r) for r in eval_rows}
overlap = sum(1 for k in train_keys if k in ek) / max(len(ek), 1)
report["train_eval_overlap"] = round(overlap, 4)
if overlap > 0.05:
warnings.warn(
f"train/eval question overlap {overlap:.2%} β€” eval "
"gains are contaminated above ~5%",
MemorizationRiskWarning, stacklevel=2)
return report