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.
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 withdatasets. - 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 Audioaudio(Audio): Hugging Face audio feature stored as struct{bytes, path}original_path(string): exact original path value from source metadatatext(string): Ukrainian transcripttext_normalaised(string): normalized transcript (if available)text_phonemized(string): phonemized transcript (if available)text_normalaised_phonemized(string): normalized+phonemized transcript (if available)duration(float32): secondswer(float32): quality proxy from ASR alignmentsource(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:
39unique recordings (seesourcefield) - Audio format: mono, PCM16, 16 kHz WAV
Install deps
python -m pip install pyarrow datasets huggingface_hubLoad with huggingface_hub (preferable)
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:
from datasets import load_dataset
ds = load_dataset("rishchen/ukrainian-tts-audiobook-pani-nina-parquet", split="train")From local Parquet shards:
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:
python unpack_hf_parquet.py \
--input-dir train_parquet \
--output-dir train_unpacked \
--overwriteFor path-only parquet, also provide original audio root:
python unpack_hf_parquet.py \
--input-dir train_parquet \
--output-dir train_unpacked \
--source-audio-root train \
--overwriteCitation
@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 }
}