Overview
The data preparation pipeline converts popular HuggingFace audio datasets into a standardized parquet format optimized for massively multilingual speech model training.Parquet datasets support efficient streaming, weighted sampling, and partitioning by corpus, split, and language.
Installation
1
Install Core Dependencies
pyarrow, polars, pandas2
Install HuggingFace Dependencies
For data preparation with HuggingFace datasets:
ray: Distributed processing frameworkdatasets: HuggingFace datasets library
Parquet Dataset Format
Directory Structure
Datasets are organized bycorpus, split, and language:
Filtered Loading
Load only
split=train for trainingWeighted Sampling
Sample across corpus-language combinations
Language-Specific Eval
Evaluate on specific languages
Schema
Each parquet file follows a minimal, optimized schema:- text
- audio_bytes
- audio_size
- corpus
- split
- language
Type:
stringContains the normalized text transcription of the audio sample.Normalization includes:- Lowercasing (configurable)
- Punctuation removal
- Number word removal
- Language-specific processing
Parquet files are written with
row_group_size=100 to reduce memory footprint during streaming and enable efficient shuffling.Data Processing Pipeline
Supported Datasets
The example pipeline demonstrates preparation using:- FLEURS
- MLS
Few-shot Learning Evaluation of Universal Representations of Speech
- Paper: FLEURS (2022)
- HuggingFace: google/fleurs
- Languages: 102 languages
- Use Case: Evaluation benchmark
Processing Steps
The pipeline uses Ray for distributed processing with configurable shuffling:1
Load from HuggingFace
2
Text Processing
Operations:
- Language-specific normalization
- Punctuation removal
- Lowercase conversion
- Digit-only word removal
- Language code remapping
3
Audio Processing
Operations:
- Binary conversion to byte lists
- Validation and resampling to 16kHz
- Audio size computation
- Format standardization
4
Write Parquet
Configuration:
- Partition by corpus/split/language
- Row group size: 100
- Shuffle window: 1k-10k samples
Quick Start Example
Use the provided ingestion script for automatic dataset generation:Individual Dataset Processing
- Process MLS Only
- Process FLEURS Only
- Compute Statistics
Processing Utilities
Text Processing
File:workflows/dataprep/text_tools.py
text_normalize()
text_normalize()
text: Input text to normalizeiso_code: 2-letter ISO language code (e.g., “en”, “de”, “fr”)lower_case: Apply lowercasing (default: True)remove_numbers: Remove words containing only digits (default: True)remove_brackets: Remove bracketed content (default: False)
- Language-specific punctuation handling
- Unicode normalization
- Whitespace normalization
Audio Processing
File:workflows/dataprep/audio_tools.py
AudioTableProcessor
AudioTableProcessor
Main class for processing audio data in PyArrow tables:Features:
- Automatic resampling to target rate
- Format conversion (WAV/FLAC/OGG)
- Mono-channel conversion
- Binary encoding to int8 lists
map_to_target_schema()
map_to_target_schema()
Transform batches to target parquet schema:Adds
corpus, split columns and ensures schema compliance.binary_to_list_int8()
binary_to_list_int8()
Efficiently convert PyArrow BinaryArray to ListArray of int8:Performance: Zero-copy conversion for fast processing.
bytes_to_tensor()
bytes_to_tensor()
Convert numpy array of audio bytes to waveform tensor:Output: Tensor with shape
[num_samples]Example: Custom Dataset Preparation
From HuggingFace Dataset
From Local Audio Files
Dataset Loading for Training
Using MixtureParquetAsrDataset
After preparing the dataset, load it for training:Dataloader Features
Weighted Sampling
Sample across languages/corpora with temperature control
Streaming
Efficient streaming with configurable buffering
Audio Processing
Automatic decoding, normalization, feature extraction
Dynamic Batching
Length-based batching for efficient GPU utilization
Text Tokenization
Automatic tokenization with filtering
SpecAugment
Built-in spectrum augmentation
Verification
CLI Verification Tool
Verify dataset creation and data loading:- Load the tokenizer
- Create the dataset (scan files, organize by corpus/language)
- Create a data reader with task/storage configs
- Iterate through batches and show statistics
Programmatic Verification
Integration with Training
To use your prepared dataset in training recipes:1
Create Asset Card
Define dataset at
src/omnilingual_asr/cards/datasets/my_dataset.yaml:2
Reference in Recipe Config
Update your training YAML:
3
Run Training
Performance Optimization
Shuffle Window Size
Shuffle Window Size
Recommendation: 1k-10k samples
- Too small: Poor randomization
- Too large: High memory usage
- Files consumed in row groups of 100
Row Group Size
Row Group Size
Default: 100 rows per groupBenefits:
- Lower memory during streaming
- Efficient shuffling
- Faster partition filtering
Partition Strategy
Partition Strategy
Always partition by:
corpus, split, languageEnables:- Fast train/dev/test splitting
- Language-specific loading
- Weighted corpus sampling
Distributed Processing
Distributed Processing
Use Ray for large datasets:
Citations
If using this pipeline or supported datasets, please cite:Next Steps
Training Guide
Use your prepared dataset for model training
Inference Guide
Test your data with pre-trained models
GitHub Examples
Explore more data preparation examples
HuggingFace Datasets
Browse available ASR datasets