File size: 1,410 Bytes
67ebcef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""Compare two graded runs over the same items: per-task accuracy (mean over samples), item-level paired difference
with a bootstrap 95% CI, plus mean generated tokens.  usage: cmp.py <tagA> <tagB> [--file graded.jsonl]"""
import collections
import json
import random
import sys


def load(tag):
    d = collections.defaultdict(list)
    for g in map(json.loads, open(f"results/{tag}/graded.jsonl", encoding="utf-8")):
        t = "code" if g["task"].startswith("code") else g["task"]
        d[(t, g["id"])].append((g["correct"], g["n_tokens"]))
    return d


a, b = load(sys.argv[1]), load(sys.argv[2])
keys = [k for k in a if k in b]
rng = random.Random(0)
for task in sorted({k[0] for k in keys}) + ["ALL"]:
    ks = [k for k in keys if task in ("ALL", k[0])]
    da = [sum(c for c, _ in a[k]) / len(a[k]) for k in ks]
    db = [sum(c for c, _ in b[k]) / len(b[k]) for k in ks]
    diff = [y - x for x, y in zip(da, db)]
    boots = sorted(sum(rng.choice(diff) for _ in diff) / len(diff) for _ in range(2000))
    ta = sum(n for k in ks for _, n in a[k]) / sum(len(a[k]) for k in ks)
    tb = sum(n for k in ks for _, n in b[k]) / sum(len(b[k]) for k in ks)
    print(f"{task:8s} n={len(ks):3d}  {100 * sum(da) / len(ks):5.1f} -> {100 * sum(db) / len(ks):5.1f}  "
          f"d={100 * sum(diff) / len(ks):+5.1f} [{100 * boots[50]:+.1f}, {100 * boots[1949]:+.1f}]  "
          f"tok {ta:.0f} -> {tb:.0f}")