File size: 2,006 Bytes
35d483e | 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #!/usr/bin/env python3
"""Generate deterministic speaker-disjoint Hinglish recording assignments."""
from __future__ import annotations
import argparse
import json
from collections import Counter
from pathlib import Path
from turn_detection.collection import build_assignments
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--speakers", type=int, default=30)
parser.add_argument("--items-per-speaker", type=int, default=30)
parser.add_argument("--seed", type=int, default=20260823)
parser.add_argument("--output", default="data/collection/assignments.jsonl")
return parser.parse_args()
def main() -> None:
args = parse_args()
assignments = build_assignments(
speaker_count=args.speakers,
items_per_speaker=args.items_per_speaker,
seed=args.seed,
)
destination = Path(args.output)
destination.parent.mkdir(parents=True, exist_ok=True)
with destination.open("w", encoding="utf-8") as handle:
for assignment in assignments:
handle.write(
json.dumps(assignment.to_dict(), ensure_ascii=False, sort_keys=True) + "\n"
)
summary = {
"assignments": len(assignments),
"speakers": len({item.speaker_id for item in assignments}),
"split_examples": Counter(item.split for item in assignments),
"split_speakers": {
split: len({item.speaker_id for item in assignments if item.split == split})
for split in ("train", "dev", "test")
},
"targets": Counter(item.target for item in assignments),
"scenarios": Counter(item.scenario for item in assignments),
"seed": args.seed,
}
summary_path = destination.with_suffix(".summary.json")
summary_path.write_text(json.dumps(summary, indent=2, sort_keys=True) + "\n", encoding="utf-8")
print(json.dumps(summary, indent=2, sort_keys=True))
if __name__ == "__main__":
main()
|