import json, jiwer ROWS=[json.loads(l) for l in open("/root/devhard/devhard_linsna.jsonl")] H=json.load(open("/root/devhard_allhyps.json",encoding="utf-8")) L=json.load(open("/root/lid_devhard.json")) pred=L["pred"] def comb(R,Hy): pr=[(r,h) for r,h in zip(R,Hy) if r.strip()] r=[x for x,_ in pr]; h=[x for _,x in pr] w=jiwer.wer(r,h); c=jiwer.cer(r,h); return w,c,0.5*w+0.5*c R=[r["text"] for r in ROWS] def route(linm,snam,use_lid=True): out=[] for r in ROWS: lg = (pred[r["id"]] if use_lid else r["lang"]) if lg=="lug": lg="lin" # lug absent du test -> repli lin (toutes les confusions viennent du lin) out.append(H[snam][r["id"]] if lg=="sna" else H[linm][r["id"]]) return out print("=== avec LID REEL (99.21%) ===") for linm,snam,tag in [("lin_s4_best","sna_ps_best","HYBRIDE NEUF"), ("joint_cont2_best","sna_ps_best","cont2+sna_ps"), ("mms1b_lin_best","sna_ps_best","ANCIEN routeur (LB 0.7347)")]: w,c,m=comb(R,route(linm,snam)) wo,co,mo=comb(R,route(linm,snam,use_lid=False)) print(f" {m:.4f} {tag:28s} lin<-{linm:18s} (oracle {mo:.4f}, cout LID {m-mo:+.4f})") w,c,m=comb(R,[H["joint_cont_best"][r["id"]] for r in ROWS]); print(f" {m:.4f} joint_cont (LB 0.7449)") w,c,m=comb(R,[H["joint_cont2_best"][r["id"]] for r in ROWS]); print(f" {m:.4f} joint_cont2 (LB 0.7408)")