Skip to main content
Comprehensive guide to converting, formatting, and optimizing audio datasets for efficient multilingual ASR training.

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

This installs: pyarrow, polars, pandas
2

Install HuggingFace Dependencies

For data preparation with HuggingFace datasets:
  • ray: Distributed processing framework
  • datasets: HuggingFace datasets library

Parquet Dataset Format

Directory Structure

Datasets are organized by corpus, split, and language:
Benefits:

Filtered Loading

Load only split=train for training

Weighted Sampling

Sample across corpus-language combinations

Language-Specific Eval

Evaluate on specific languages

Schema

Each parquet file follows a minimal, optimized schema:
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:
Few-shot Learning Evaluation of Universal Representations of Speech

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

Processing Utilities

Text Processing

File: workflows/dataprep/text_tools.py
Parameters:
  • text: Input text to normalize
  • iso_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)
Features:
  • Language-specific punctuation handling
  • Unicode normalization
  • Whitespace normalization

Audio Processing

File: workflows/dataprep/audio_tools.py
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
Transform batches to target parquet schema:
Adds corpus, split columns and ensures schema compliance.
Efficiently convert PyArrow BinaryArray to ListArray of int8:
Performance: Zero-copy conversion for fast processing.
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:
This will:
  1. Load the tokenizer
  2. Create the dataset (scan files, organize by corpus/language)
  3. Create a data reader with task/storage configs
  4. 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

Recommendation: 1k-10k samples
  • Too small: Poor randomization
  • Too large: High memory usage
  • Files consumed in row groups of 100
Default: 100 rows per groupBenefits:
  • Lower memory during streaming
  • Efficient shuffling
  • Faster partition filtering
Always partition by: corpus, split, languageEnables:
  • Fast train/dev/test splitting
  • Language-specific loading
  • Weighted corpus sampling
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