CoolFace
Datasetpublic

rishchen/ukrainian-tts-audiobook-pani-nina-parquet

Ukrainian TTS audiobook dataset Pani Nina (Parquet) Segmented Ukrainian audiobook speech with aligned text, prepared for training and evaluating Text-to-Speech (TTS) models. The dataset is published as Hugging Face-compatible Parquet shards so the Hub Dataset Preview can render an audio column. The dataset was prepared using whisper and ffmpeg: Whisper was used for transcription and approximate segment timing. FFmpeg was used to slice audio into short utterances (roughly 2-10… See the full description on the dataset page: https://huggingface.co/datasets/rishchen/ukrainian-tts-audiobook-pani-nina-parquet.

sourceHugging Facecc-by-nc-sa-4.0updated 5mo agoView on Hugging Face
0likes17downloads
Dataset Card

Ukrainian TTS audiobook dataset Pani Nina (Parquet)

Segmented Ukrainian audiobook speech with aligned text, prepared for training and evaluating Text-to-Speech (TTS) models. The dataset is published as Hugging Face-compatible Parquet shards so the Hub Dataset Preview can render an audio column.

The dataset was prepared using whisper and ffmpeg:

  • —Whisper was used for transcription and approximate segment timing.
  • —FFmpeg was used to slice audio into short utterances (roughly 2-10 seconds).

Motivation / use case

  • —Train Ukrainian TTS / speech synthesis models on long-form narrated speech.
  • —Use a simple tabular format (audio + text + metadata) that works with datasets.
  • —Keep a reversible pack/unpack workflow for Parquet distribution.

Dataset format

Each example is one utterance:

  • —id (int64): sequential index (0..N-1)
  • —path (string): normalized relative path used by HF Audio
  • —audio (Audio): Hugging Face audio feature stored as struct {bytes, path}
  • —original_path (string): exact original path value from source metadata
  • —text (string): Ukrainian transcript
  • —text_normalaised (string): normalized transcript (if available)
  • —text_phonemized (string): phonemized transcript (if available)
  • —text_normalaised_phonemized (string): normalized+phonemized transcript (if available)
  • —duration (float32): seconds
  • —wer (float32): quality proxy from ASR alignment
  • —source (string): original source recording name

Phonemised text

For this part of work have been used 10.18653/v1/2025.unlp-1.11, this solution: https://github.com/lang-uk/ukrainian-tts-preprocessing

@inproceedings{senyk-etal-2025-context,
    title = "Context-Aware Lexical Stress Prediction and Phonemization for {U}krainian {TTS} Systems",
    author = "Senyk, Anastasiia  and
      Lukianchuk, Mykhailo  and
      Robeiko, Valentyna  and
      Paniv, Yurii",
    editor = "Romanyshyn, Mariana",
    booktitle = "Proceedings of the Fourth Ukrainian Natural Language Processing Workshop (UNLP 2025)",
    month = jul,
    year = "2025",
    address = "Vienna, Austria (online)",
    publisher = "Association for Computational Linguistics",
    url = "https://aclanthology.org/2025.unlp-1.11/",
    doi = "10.18653/v1/2025.unlp-1.11",
    pages = "96--104",
    ISBN = "979-8-89176-269-5",
    abstract = "Text preprocessing is a fundamental component of high-quality speech synthesis. This work presents a novel rule-based phonemizer combined with a sentence-level lexical stress prediction model to improve phonetic accuracy and prosody prediction in the text-to-speech pipelines. We also introduce a new benchmark dataset with annotated stress patterns designed for evaluating lexical stress prediction systems at the sentence level.Experimental results demonstrate that the proposed phonemizer achieves a 1.23{\%} word error rate on a manually constructed pronunciation dataset, while the lexical stress prediction pipeline shows results close to dictionary-based methods, outperforming existing neural network solutions."
}

Dataset stats

  • —Rows: 138,447
  • —Total duration: ~143.6 hours
  • —Sources: 39 unique recordings (see source field)
  • —Audio format: mono, PCM16, 16 kHz WAV

Install deps

bash
python -m pip install pyarrow datasets huggingface_hub

Load with huggingface_hub (preferable)

python
import os
from huggingface_hub import snapshot_download

snapshot_download(
  repo_id="rishchen/ukrainian-tts-audiobook-pani-nina-parquet",
  repo_type="dataset",
  local_dir="hf_parquet",
  allow_patterns=["*"],
  token=os.getenv("HF_TOKEN"),
)

Load with datasets

From the Hub:

python
from datasets import load_dataset


ds = load_dataset("rishchen/ukrainian-tts-audiobook-pani-nina-parquet", split="train")

From local Parquet shards:

python
from datasets import load_dataset


ds = load_dataset("parquet", data_files={"train": "train_parquet/*.parquet"})["train"]

Unpack from Parquet

This restores audio files and regenerates metadata with matching original path key/value:

bash
python unpack_hf_parquet.py \
  --input-dir train_parquet \
  --output-dir train_unpacked \
  --overwrite

For path-only parquet, also provide original audio root:

bash
python unpack_hf_parquet.py \
  --input-dir train_parquet \
  --output-dir train_unpacked \
  --source-audio-root train \
  --overwrite

Citation

@misc{roman_ishchenko_2026,
	author       = { Roman Ishchenko },
	title        = { ukrainian-tts-audiobook-pani-nina-parquet (Revision 134807b) },
	year         = 2026,
	url          = { https://huggingface.co/datasets/rishchen/ukrainian-tts-audiobook-pani-nina-parquet },
	doi          = { 10.57967/hf/8292 },
	publisher    = { Hugging Face }
}