AUBIN-12B-Control / code /td_skill.py
emrevrg's picture
AUBIN-Learn: instant self-learning memory, fast skills, self-calibration + reports
b707206 verified
Raw History Blame Contribute Delete
2.93 kB
"""typed-decisions için AUBIN-Learn hızlı becerisi: soru-anahtarı başına bge gömmesi → softmax sınıflandırıcı (saniyeler, CPU).
train için NIVEN ile AYNI 5 kat (random.Random(7) karıştırma, i::5) → örnek-dışı (OOF) tahmin; test için tüm train'le eğitilir.
Girdi yalnız durum + soru metni ('factors' YOK). Çıktı td_fuse.py'nin üçüncü uzmanı.
python td_skill.py --out /kaggle/working/td_skill.json
"""
import argparse, json, os, random, sys
import numpy as np
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
from td_eval import load_td
from kev_llm import items
from learn_skill import SoftmaxProbe
from learn_eval import bge_embed_factory
def text(it):
return f"{it['state']} || {it['q']}"
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--out", default="td_skill.json"); ap.add_argument("--work", default="")
ap.add_argument("--C", type=float, default=1.0)
a = ap.parse_args()
tr, te = items(load_td("train")), items(load_td("test"))
emb = bge_embed_factory()
Vtr, Vte = emb([text(x) for x in tr]), emb([text(x) for x in te])
cid = lambda it: it["key"].split("/", 1)[1].rsplit("/", 1)[0]
qk = lambda it: f"{it['src']}/{it['key'].rsplit('/', 1)[1]}"
order = list(dict.fromkeys(cid(x) for x in tr)) # veri seti sırası (NIVEN: range(len(tr)) karıştırılır)
perm = list(range(len(order))); random.Random(7).shuffle(perm)
fold = {order[perm[k]]: k % 5 for k in range(len(order))} # NIVEN: folds[f] = ids[f::5]
out = {"oof": {}, "test": {}, "C": a.C}
for q in sorted({qk(x) for x in tr}):
I = [i for i, x in enumerate(tr) if qk(x) == q]; J = [j for j, x in enumerate(te) if qk(x) == q]
lab = lambda it: str(it["keys"][it["y"]])
for f in range(5):
trn = [i for i in I if fold[cid(tr[i])] != f]; val = [i for i in I if fold[cid(tr[i])] == f]
m = SoftmaxProbe(C=a.C).fit(Vtr[trn], [lab(tr[i]) for i in trn])
P = m.predict_proba(Vtr[val])
for i, p in zip(val, P):
out["oof"].setdefault(cid(tr[i]), {})[q] = {str(c): float(v) for c, v in zip(m.classes_, p)}
m = SoftmaxProbe(C=a.C).fit(Vtr[I], [lab(tr[i]) for i in I])
for j, p in zip(J, m.predict_proba(Vte[J])):
out["test"].setdefault(cid(te[j]), {})[q] = {str(c): float(v) for c, v in zip(m.classes_, p)}
print(q, len(I), len(J), flush=True)
def acc(split, its):
h = []
for it in its:
d = out[split].get(cid(it), {}).get(qk(it))
if d:
h.append(max(d, key=d.get) == str(it["keys"][it["y"]]))
return round(float(np.mean(h)), 4)
out["acc"] = {"train_oof": acc("oof", tr), "test": acc("test", te)}
json.dump(out, open(a.out, "w"))
print("TD_SKILL", out["acc"], flush=True)
if __name__ == "__main__":
main()