EXLLM-ONI5M / eval /heldout_gate.py
ToTo
Publish EXLLM-ONI5M model package
8d47318 unverified
Raw History Blame Contribute Delete
2.87 kB
#!/usr/bin/env python3
import random,json,sys
from pathlib import Path
import torch
sys.path.insert(0,str(Path(__file__).resolve().parents[1]))
from src.infer import load_model,generate
from eval.q12_roundtrip import load_q12
ANGRY=['ไฝ•ใ‚’','ๅˆ†ใ‹ใ‚‰ใ‚“','ใผใ‚“ใ‚„ใ‚Š','่€ƒใˆใ‚','ไฝ•ๅบฆ','่ฉฑใ‚’่žใ‘','ใฐใ‹ใ‚‚ใฎ','่ณชๅ•ใ™ใ‚‹ๅ‰','ไปŠ่žใ','ไธ€ๅบฆ','ๆ•™็ง‘ๆ›ธ']
# All probes below are generated after training and are not appended to any training file.
rng=random.Random(773311)
kana=list('ใ‚ใ„ใ†ใˆใŠใ‹ใใใ‘ใ“ใ•ใ—ใ™ใ›ใใŸใกใคใฆใจใชใซใฌใญใฎใฏใฒใตใธใปใพใฟใ‚€ใ‚ใ‚‚ใ‚„ใ‚†ใ‚ˆใ‚‰ใ‚Šใ‚‹ใ‚Œใ‚ใ‚ใ‚“ใŒใŽใใ’ใ”ใ–ใ˜ใšใœใžใ ใงใฉใฐใณใถในใผใฑใดใทใบใฝ')
train_prompts=set()
for fn in ['data/stage1.jsonl','data/train_balanced.jsonl','data/stage3.jsonl','data/stage4_repair.jsonl','data/stage5_mathop.jsonl']:
for ln in open(fn,encoding='utf8'): train_prompts.add(json.loads(ln)['prompt'])
nonces=[]
while len(nonces)<120:
s=''.join(rng.choice(kana) for _ in range(rng.randint(5,11)))
q=s+rng.choice(['ใจใฏ','ใฃใฆใชใซ','ใฎใ„ใฟใฏ','ใ‚’ใ›ใคใ‚ใ„ใ—ใฆ'])
if q not in train_prompts: nonces.append(q)
known=[
('ใซใปใ‚“ใฎใ—ใ‚…ใจใ‚’ใ“ใŸใˆใ‚','ๆฑไบฌ'),('ใจใ†ใใ‚‡ใ†ใฏใซใปใ‚“ใฎใ—ใ‚…ใจใ‹','ๆฑไบฌ'),
('ใฟใšใŒใ“ใŠใ‚‹ใฎใฏใชใ‚“ใฉใ ','0โ„ƒ'),('ใฟใšใฎใ“ใŠใ‚‹ใŠใ‚“ใฉใ‚’ใ„ใˆ','0โ„ƒ'),
('ใญใ“ใฏใˆใ„ใ”ใงใชใ‚“ใจใ„ใ†','cat'),('ใ„ใฌใ‚’ใˆใ„ใ”ใซใชใŠใ›','dog'),
('ใปใ‚“ใฏใˆใ„ใ”ใงใชใ‚“ใ ','book'),('ใŒใฃใ“ใ†ใ‚’ใˆใ„ใ”ใงใ„ใˆ','school'),
('5ใซ9ใ‚’ใใ‚ใˆใ‚‹ใจ','14'),('6ใ‚’7ใ‹ใ„ใถใ‚“ใŸใ™ใจ','42'),
]
def run(kind):
if kind=='fp32':m,tok,_=load_model('weights/EXLLM-ONI5M-v1.0-final.pt')
else:m,tok,_=load_q12('weights/oni5m.q12')
nr=[]
for q in nonces:
a,_=generate(m,tok,q,56);nr.append({'prompt':q,'output':a,'reject':'ไธๆ˜Ž' in a,'persona':any(x in a for x in ANGRY)})
kr=[]
for q,needle in known:
a,_=generate(m,tok,q,56);kr.append({'prompt':q,'required':needle,'output':a,'pass':needle in a,'persona':any(x in a for x in ANGRY)})
return {'nonce_count':len(nr),'nonce_reject_rate':sum(x['reject'] for x in nr)/len(nr),'nonce_persona_rate':sum(x['persona'] for x in nr)/len(nr),'known_count':len(kr),'known_paraphrase_pass_rate':sum(x['pass'] for x in kr)/len(kr),'known_persona_rate':sum(x['persona'] for x in kr)/len(kr),'nonce_samples':nr[:10],'known':kr}
def main():
torch.set_num_threads(5);out={'note':'post-training probes; exact prompts absent from training files','fp32':run('fp32'),'q12':run('q12')};Path('eval/heldout_gate_results.json').write_text(json.dumps(out,ensure_ascii=False,indent=2),encoding='utf8');print(json.dumps({k:{kk:vv for kk,vv in v.items() if not isinstance(vv,list)} if isinstance(v,dict) else v for k,v in out.items()},ensure_ascii=False,indent=2))
if __name__=='__main__':main()