CoolFace
Datasetpublic

neversi123/omnilora-kazakh-child-mvp

OmniLoRA Kazakh Child-Voice TTS — Cleaned & Emotion-Labeled Subset A 535-clip Kazakh child-speech subset derived from galammadin-asr/child-asr-kazakh, cleaned through a 3-stage automatic filter and hand-labeled with one of six emotion categories. Built for fine-tuning a LoRA adapter on top of OmniVoice (Method 5 of a 5-method Kazakh TTS benchmark, CSCI 595 final project). Dataset summary Clips 535 Language Kazakh (kk) Sample rate 16 kHz (inherits… See the full description on the dataset page: https://huggingface.co/datasets/neversi123/omnilora-kazakh-child-mvp.

sourceHugging Faceotherupdated 5mo agoView on Hugging Face
0likes47downloads
Dataset Card

OmniLoRA Kazakh Child-Voice TTS — Cleaned & Emotion-Labeled Subset

A 535-clip Kazakh child-speech subset derived from `galammadin-asr/child-asr-kazakh`, cleaned through a 3-stage automatic filter and hand-labeled with one of six emotion categories. Built for fine-tuning a LoRA adapter on top of OmniVoice (Method 5 of a 5-method Kazakh TTS benchmark, CSCI 595 final project).

Dataset summary

Clips535
LanguageKazakh (kk)
Sample rate16 kHz (inherits from source)
Audio formatmono 16-bit PCM WAV
Total duration~30–45 minutes (varies by clip; see source for distribution)
Speakerschild voices, no speaker IDs (see Limitations)

Emotion balance

EmotionCount
neutral390
happy66
surprise41
sad23
angry9
fear6

Heavy neutral skew reflects the natural class distribution in elicited child speech and was not rebalanced by oversampling.

Schema

dataset.jsonl — one JSON object per line:

json
{
  "id": "kk_0000",
  "audio_path": "wavs/kk_0000.wav",
  "text": "Балалар, неге отырмыз, дайындық жасамаймыз ба?",
  "language_id": "kk",
  "emotion": "surprise"
}
FieldTypeNotes
idstringSequential, zero-padded (kk_0000 … kk_0534)
audio_pathstringRelative to dataset.jsonl (i.e. wavs/<id>.wav)
textstringKazakh transcript, post-labeling correction where applicable
language_idstringAlways "kk"
emotionstringOne of neutral, happy, sad, angry, fear, surprise

How it was built

Three automatic filter stages followed by a manual labeling pass.

  1. 1.Duration + integrity — drops corrupted, silent, or out-of-range clips (CPU; deterministic).
  2. 2.ASR round-trip CER filter — transcribes each clip with a Kazakh ASR model, computes CER against the provided transcript, and drops clips above a CER threshold of 0.25 (NeMo on GPU).
  3. 3.Child-voice filter — keeps clips with estimated age ≤ 16 and F0 mean ≥ 200 Hz, using audeering/wav2vec2-large-robust-6-ft-age-gender for age and a pyworld-based F0 estimator. Predicate is exposed as is_child_voice(est_age, f0_mean) and unit-tested.
  4. 4.Manual emotion labeling — survivors of stage 3 were played back via a local web UI and tagged with one of six emotions; clips with ambiguous or unusable audio were dropped at this step.

balance_report.txt ships alongside dataset.jsonl with the per-emotion counts above.

Usage

Loading with datasets

python
from datasets import load_dataset, Audio

ds = load_dataset("<repo-id>", split="train")
ds = ds.cast_column("audio_path", Audio(sampling_rate=16000))
print(ds[0]["text"], ds[0]["emotion"])

Direct JSONL access

python
import json
from pathlib import Path

root = Path("/path/to/repo")
records = [json.loads(l) for l in (root / "dataset.jsonl").read_text().splitlines()]
wav_path = root / records[0]["audio_path"]

Intended use

  • —Fine-tuning small TTS adapters (LoRA, prefix-tuning) for Kazakh child-voice synthesis.
  • —Emotion-conditioned TTS research where transcript + emotion pairs are needed.
  • —Probe / evaluation set for low-resource Kazakh speech models.

Out-of-scope use

  • —Speaker recognition or verification — there are no speaker labels and splits are utterance-level (the same child may appear multiple times).
  • —Absolute child-age estimation — the upstream age model is English-trained and produces unreliable absolute ages on Kazakh audio.
  • —Production deployment without additional safety / consent review.

Limitations

A subset of the project-level limitations relevant to dataset users; the full list is in `docs/limitations.md` of the source repo.

  • —16 kHz ceiling. No spectral content above 8 kHz exists in any clip. Models trained on this data cannot synthesize wideband audio without bandwidth-extension post-processing.
  • —No speaker-disjoint splits. The source dataset exposes no speaker IDs; consumers building train/test splits should expect speaker overlap and account for inflated speaker-similarity scores.
  • —Mixed-gender. No gender filter was applied — this is a general Kazakh child-voice subset, not female- or male-only.
  • —Class imbalance. Emotion distribution is heavily neutral-skewed (73%); minority classes (fear, angry) have <10 clips each and are not sufficient for class-balanced training without augmentation.
  • —Single annotator per clip. No inter-annotator agreement was measured; emotion labels are one labeler's judgment.

License & attribution

This subset is a derivative work of `galammadin-asr/child-asr-kazakh` and inherits that dataset's license terms — please review them before redistribution. The cleaning pipeline, emotion annotations, and dataset.jsonl schema are released under the same terms.

If you use this subset, please cite both the source dataset and this project.

Citation

bibtex
@misc{omnilora-kazakh-child-mvp,
  title  = {OmniLoRA Kazakh Child-Voice TTS — Cleaned and Emotion-Labeled Subset},
  author = {Akhmetgali, Abdarrakhman},
  year   = {2026},
  note   = {CSCI 595 final project, Method 5 of a 5-method Kazakh TTS benchmark}
}