Spaces:
Running on Zero
Running on Zero
File size: 885 Bytes
9d24374 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from __future__ import annotations
import random
def grouped_concept_split(rows: list[dict], test_fraction: float = 0.25, seed: int = 42):
"""Split paraphrase groups within each concept so paired prompts never leak across splits."""
rng = random.Random(seed)
train_ids: list[int] = []
test_ids: list[int] = []
concepts = sorted({row['concept'] for row in rows})
for concept in concepts:
concept_rows = [(idx, row) for idx, row in enumerate(rows) if row['concept'] == concept]
pair_ids = sorted({row['pair_id'] for _, row in concept_rows})
rng.shuffle(pair_ids)
n_test = max(1, round(len(pair_ids) * test_fraction))
test_pairs = set(pair_ids[:n_test])
for idx, row in concept_rows:
(test_ids if row['pair_id'] in test_pairs else train_ids).append(idx)
return sorted(train_ids), sorted(test_ids)
|