도구
JSONL을 train·val·test로 나누기
시드와 FNV-1a로 0–9999 구간에 넣습니다. 같은 instruction이나 첫 user 턴은 한 분할에만 갑니다. 원본 줄은 기어델로 가지 않습니다.
나누기는 이 탭에서만 합니다. JSONL은 기어델로 가지 않습니다.
한 줄이 나뉘는 방식
남긴 객체마다 시드 + NUL + 묶는 키를 FNV-1a 32비트로 해시한 뒤 10,000으로 나눕니다. train%는 앞의 train%×100칸, val%는 그다음 val%×100칸, 나머지는 test입니다. 같은 시드와 키는 항상 같은 분할에 갑니다.
기본 묶는 키는 프롬프트입니다. Alpaca는 instruction과 input, OpenAI messages와 ShareGPT는 첫 user/human 턴입니다. 그 문자열이 같은 줄은 한쪽으로만 가서 프롬프트가 분할을 넘지 않습니다.
JSON 줄 전체로 묶으면 JSON.stringify가 키입니다. 프롬프트는 같고 답만 다른 두 줄은 서로 다른 분할에 갈 수 있습니다.
NFC를 켜면 해시 전에 String.normalize('NFC')를 합니다. NFD와 NFC로만 다른 한글은 같은 칸에 들어갑니다.
같은 객체 버리기는 첫 JSON.stringify만 남깁니다. 빈 줄은 세고 건너뜁니다. 맨 앞이 JSON 배열이면 거절합니다. 이 페이지는 JSONL입니다.
하지 않는 일
- 라벨로 층화하지 않고, 클래스 균형을 보장하지 않습니다. 해시는 파일의 통계 표본이 아닙니다.
- 메모리에서 섞은 뒤 자르지 않습니다. 비율은 칸 너비라서, 줄이 적으면 val이나 test가 비어 있을 수 있습니다.
- Hugging Face datasets.splits와 통신하지 않습니다. 파일이 필요하면 이 탭에서 세 JSONL을 받습니다.
- 한 번에 2만 줄, 또는 약 200만 글자까지입니다.