Download code/scripts/prepare_data.py from thegovind/weight-space-programming: direct link, hf CLI and curl.
- Browser
- Download file 2.89 kB
-
https://huggingface.co/spaces/thegovind/weight-space-programming/resolve/main/code/scripts/prepare_data.py
- Command line
-
hf download hf://spaces/thegovind/weight-space-programming/code/scripts/prepare_data.py
-
curl -L -o prepare_data.py https://huggingface.co/spaces/thegovind/weight-space-programming/resolve/main/code/scripts/prepare_data.py
2.89 kB
| #!/usr/bin/env python | |
| """Write the problem files every lab uses (run once, on a machine with internet). | |
| math500.jsonl MATH-500 test (500), gold = its 'answer' field (the paper's benchmark) | |
| gsm8k.jsonl GSM8K main test (1,319), gold = the number after #### (the paper's benchmark) | |
| ifeval.jsonl IFEval (541), graded by the official checkers (the paper's benchmark) | |
| dev256.jsonl 128 GSM8K-train + 128 MATH-train practice problems the paper's agent never used: | |
| where we measure every edit we try (same 50/50 mix as the agent's held-out sets) | |
| build128.jsonl 64 + 64 more unused practice problems: where the capstone builds its own edit | |
| """ | |
| import argparse | |
| import json | |
| import os | |
| import random | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("--exp8", required=True, help="path to lm_understand-logs/exp8_math") | |
| ap.add_argument("--out", required=True) | |
| a = ap.parse_args() | |
| os.makedirs(a.out, exist_ok=True) | |
| def dump(name, rows): | |
| with open(os.path.join(a.out, f"{name}.jsonl"), "w") as f: | |
| for r in rows: | |
| f.write(json.dumps(r, ensure_ascii=False) + "\n") | |
| print(name, len(rows)) | |
| from datasets import load_dataset # noqa: E402 | |
| dump("math500", [{"id": r["unique_id"], "source": "math500", "problem": r["problem"], "answer": r["answer"]} | |
| for r in load_dataset("HuggingFaceH4/MATH-500", split="test")]) | |
| dump("gsm8k", [{"id": f"gsm8k_test_{i}", "source": "gsm8k", "problem": r["question"], | |
| "answer": r["answer"].split("####")[-1].strip().replace(",", "")} | |
| for i, r in enumerate(load_dataset("openai/gsm8k", "main", split="test"))]) | |
| dump("ifeval", [{"id": f"ifeval_{r['key']}", "source": "ifeval", "kind": "ifeval", "prompt": r["prompt"], | |
| "instruction_id_list": r["instruction_id_list"], "kwargs": r["kwargs"]} | |
| for r in load_dataset("google/IFEval", split="train")]) | |
| used = set() | |
| for fn in ("splits.json", "fresh_splits.json"): | |
| for v in json.load(open(os.path.join(a.exp8, "runs/p50c/work_notes", fn))).values(): | |
| used |= set(v) | |
| def practice(name): | |
| with open(os.path.join(a.exp8, "practice", f"{name}.jsonl")) as f: | |
| return [json.loads(line) for line in f if line.strip()] | |
| rng = random.Random(0) | |
| pools = {} | |
| for name in ("gsm8k_train", "math_train"): | |
| rows = [r for r in practice(name) if r["id"] not in used] | |
| rng.shuffle(rows) | |
| pools[name] = rows | |
| print(name, "unused by the paper's agent:", len(rows)) | |
| def pick(rows): | |
| return [{"id": r["id"], "source": r["source"], "problem": r["problem"], "answer": r["answer"], | |
| **({"level": r["level"], "subject": r["subject"]} if "level" in r else {})} for r in rows] | |
| dump("dev256", pick(pools["gsm8k_train"][:128] + pools["math_train"][:128])) | |
| dump("build128", pick(pools["gsm8k_train"][128:192] + pools["math_train"][128:192])) | |