Download code/training/build_synth.py from Modularcomputing/dynamic-asr: direct link, hf CLI and curl.
- Browser
- Download file 1.55 kB
-
https://huggingface.co/Modularcomputing/dynamic-asr/resolve/main/code/training/build_synth.py
- Command line
-
hf download hf://Modularcomputing/dynamic-asr/code/training/build_synth.py
-
curl -L -o build_synth.py https://huggingface.co/Modularcomputing/dynamic-asr/resolve/main/code/training/build_synth.py
1.55 kB
| """Merge synth parts, split held-out synthetic test (every 25th text id), and (after eval_asr.py --hyp_only) filter TTS failures. | |
| python3 build_synth.py merge -> /scratch/asr/synth/all.jsonl | |
| python3 build_synth.py filter -> /scratch/asr/synth/{manifest.jsonl (train), test.jsonl} (keep clips the stock v2 model reads at CER <= 0.35)""" | |
| import json, glob, sys, collections | |
| D = "/scratch/asr/synth" | |
| if sys.argv[1] == "merge": | |
| R = [json.loads(l) for f in sorted(glob.glob(f"{D}/parts/part_*.jsonl")) for l in open(f)] | |
| R = [r for r in R if 1.0 <= r["dur"] <= 20 and r["text"]] | |
| with open(f"{D}/all.jsonl", "w") as f: | |
| for r in R: f.write(json.dumps(r, ensure_ascii=False) + "\n") | |
| print("merged", len(R), "hours", round(sum(r["dur"] for r in R) / 3600, 2)) | |
| else: | |
| R = [json.loads(l) for l in open(f"{D}/all.jsonl")]; H = {json.loads(l)["id"]: json.loads(l) for l in open(f"{D}/all.jsonl.hyp.jsonl")} | |
| tr, te, drop = [], [], collections.Counter() | |
| for r in R: | |
| c = H[r["id"]]["cer"]; r["base_cer"] = c | |
| if c > 0.35: drop[r["pair"]] += 1; continue | |
| (te if int(r["id"][2:]) % 25 == 0 else tr).append(r) | |
| for name, X in (("manifest", tr), ("test", te)): | |
| with open(f"{D}/{name}.jsonl", "w") as f: | |
| for r in X: f.write(json.dumps(r, ensure_ascii=False) + "\n") | |
| print("train", len(tr), round(sum(r["dur"] for r in tr) / 3600, 2), "h; test", len(te), "; dropped (base CER>0.35)", sum(drop.values()), dict(drop)) | |
| print("pairs train", collections.Counter(r["pair"] for r in tr)) | |