Downloads · 30 days
19
10% of all-time downloads
harphool17/whisper-large-v3-children-asr
whisper-large-v3-children-asr is a machine learning model from harphool17. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
🎙️ 🎙️ Whisper Large v3 — Fine-tuned for Children's Speech Recognition
Downloads · 30 days
19
10% of all-time downloads
All-time downloads
197
Public
Parameters
1.5B
3.1 GB on disk
Likes
2
Public
Click a slice to open those files.
.safetensors3.1 GB · 100%
From the Hugging Face model README
🎙️ # 🎙️ Whisper Large v3 — Fine-tuned for Children's Speech Recognition
Imagine a smart assistant that can listen to a child speak and write down exactly what they said. That is what this model does!
Most speech recognition systems are trained on adult voices — they struggle to understand children because:
This model is a fine-tuned version of OpenAI's Whisper Large v3 — one of the world's best speech recognition models — specially adapted to understand children's speech.
This model was built for the "On Top of Pasketti: Children's Speech Recognition Challenge" on DrivenData.
| Metric | Score |
|---|---|
| Validation WER | 0.1030 (10.30%) 🔥 |
| Public Leaderboard WER | 0.4432 |
| Competition Leaderboard #1 | 0.1914 |
WER = Word Error Rate — Lower is better! If a child says 10 words and the model gets 1 wrong, WER = 10%.
This section explains every single file in this repository, what it contains, and why it exists.
model.safetensors ⭐ (Most Important File!)What it is: The "brain" of the model — contains all the learned knowledge.
What's inside:
How it's used:
from_pretrained()Simple analogy: Think of it like a student's brain after years of studying. All the knowledge is stored here.
model.safetensors.index.jsonWhat it is: A "table of contents" for the model weights.
What's inside:
{
"metadata": {"total_size": 3000000000},
"weight_map": {
"encoder.layers.0.weight": "model.safetensors",
"decoder.layers.0.weight": "model.safetensors",
...
}
}
How it's used:
Simple analogy: Like an index page in a textbook — tells you which page (file) contains which chapter (weight).
config.json ⭐ (Architecture Blueprint)What it is: The blueprint that describes how the model is built.
What's inside:
{
"model_type": "whisper",
"d_model": 1280,
"encoder_layers": 32,
"decoder_layers": 32,
"encoder_attention_heads": 20,
"num_mel_bins": 128,
"vocab_size": 51866,
...
}
Key settings explained:
| Setting | Value | Meaning |
|---|---|---|
model_type | whisper | This is a Whisper model |
num_mel_bins | 128 | Uses 128 frequency bands (Large v3 specific!) |
encoder_layers | 32 | 32 layers for processing audio |
decoder_layers | 32 | 32 layers for generating text |
vocab_size | 51,866 | Knows 51,866 different word pieces |
How it's used:
model.safetensorsSimple analogy: Like an architect's blueprint — describes the structure before the building (weights) fills it.
generation_config.jsonWhat it is: Settings that control how the model generates (writes) text.
What's inside:
{
"forced_decoder_ids": null,
"suppress_tokens": [1, 2, 7, 8, ...],
"task": "transcribe",
"language": "en",
"max_new_tokens": 225
}
Key settings explained:
| Setting | Meaning |
|---|---|
task: "transcribe" | Convert speech to text (not translate) |
language: "en" | English language only |
max_new_tokens: 225 | Generate at most 225 words |
suppress_tokens | List of tokens to never generate |
How it's used:
generate()Simple analogy: Like rules given to a writer — "write in English", "keep it under 225 words", "don't use these specific words".
preprocessor_config.json ⭐ (Audio Processing Settings)What it is: Settings for converting raw audio into a format the model understands.
What's inside:
{
"feature_size": 128,
"sampling_rate": 16000,
"hop_length": 160,
"n_fft": 400,
"padding_value": 0.0,
"return_attention_mask": false
}
Key settings explained:
| Setting | Value | Meaning |
|---|---|---|
feature_size | 128 | Uses 128 mel frequency bins |
sampling_rate | 16000 | Audio must be at 16kHz |
hop_length | 160 | Slide window by 160 samples |
n_fft | 400 | FFT window size of 400 samples |
How it's used:
WhisperFeatureExtractor reads this to process audio correctlySimple analogy: Like settings on a camera — resolution, brightness, zoom. Must be set correctly to get a good picture.
processor_config.jsonWhat it is: Configuration for the complete processor (feature extractor + tokenizer combined).
What's inside:
{
"auto_map": {
"AutoProcessor": "transformers.WhisperProcessor"
},
"feature_extractor_type": "WhisperFeatureExtractor",
"tokenizer_class": "WhisperTokenizer"
}
How it's used:
AutoProcessor which classes to useWhisperProcessor.from_pretrained()Simple analogy: Like a connector cable — links the audio processing part with the text processing part.
tokenizer.json ⭐ (Language Dictionary)What it is: The complete tokenizer — converts between text and numbers.
What's inside:
<|startoftranscript|>, <|en|>, <|endoftext|>Example of tokenization:
"children" → [1200, 303] (converted to numbers)
[1200, 303] → "children" (converted back to text)
How it's used:
Simple analogy: Like a codebook used by spies — converts messages to secret codes and back.
tokenizer_config.jsonWhat it is: Configuration settings for the tokenizer.
What's inside:
{
"tokenizer_class": "WhisperTokenizer",
"language": "english",
"task": "transcribe",
"bos_token": "<|endoftext|>",
"eos_token": "<|endoftext|>",
"pad_token": "<|endoftext|>"
}
Key settings explained:
| Setting | Meaning |
|---|---|
language: "english" | Transcribe in English |
task: "transcribe" | Speech to text task |
bos_token | Token that starts a sequence |
eos_token | Token that ends a sequence |
pad_token | Token used for padding |
Simple analogy: Like grammar rules for the codebook — when to start, when to stop, what punctuation to use.
vocab.json ⭐ (Vocabulary List)What it is: Complete list of all words/pieces the model knows.
What's inside:
{
"!": 0,
"\"": 1,
"#": 2,
...
"children": 5234,
"speech": 8901,
...
"<|endoftext|>": 50256
}
How it's used:
Simple analogy: Like a dictionary — each word has a unique page number (ID).
merges.txtWhat it is: Rules for how to combine smaller pieces into larger words.
What's inside:
#version: 0.2
Ġ t
Ġ a
h e
i n
r e
...
How it's used:
Simple analogy: Like rules for combining LEGO pieces — small pieces combine into larger meaningful shapes.
added_tokens.jsonWhat it is: Special tokens added specifically for Whisper's speech recognition tasks.
What's inside:
{
"<|endoftext|>": 50256,
"<|startoftranscript|>": 50258,
"<|en|>": 50259,
"<|transcribe|>": 50359,
"<|notimestamps|>": 50363,
...
}
Key tokens explained:
| Token | Meaning |
|---|---|
| `< | startoftranscript |
| `< | en |
| `< | transcribe |
| `< | endoftext |
| `< | notimestamps |
Simple analogy: Like stage directions in a play — "BEGIN SCENE", "SPEAK IN ENGLISH", "END SCENE".
normalizer.jsonWhat it is: Rules for cleaning and standardizing text output.
What's inside:
How it's used:
Simple analogy: Like a proofreader who standardizes all text before grading — removes extra spaces, fixes capitalization.
special_tokens_map.jsonWhat it is: Maps special token names to their actual token strings.
What's inside:
{
"bos_token": "<|endoftext|>",
"eos_token": "<|endoftext|>",
"pad_token": "<|endoftext|>",
"additional_special_tokens": [
"<|startoftranscript|>",
"<|en|>",
"<|transcribe|>",
...
]
}
How it's used:
Simple analogy: Like a legend on a map — explains what each special symbol means.
Step 1 — Install Python:
python.orgStep 2 — Install Required Libraries: Open terminal/command prompt and run:
pip install transformers torch torchaudio soundfile librosa
This installs:
| Library | Purpose |
|---|---|
transformers | Loads and runs the Whisper model |
torch | Deep learning framework |
torchaudio | Audio processing |
soundfile | Read audio files |
librosa | Audio analysis |
from transformers import pipeline
# Load model directly from HuggingFace
transcriber = pipeline(
"automatic-speech-recognition",
model="harphool17/whisper-large-v3-children-asr"
)
# Transcribe audio file
result = transcriber("your_audio_file.wav")
print(result["text"])
That's it! 🎉
import torch
import soundfile as sf
import librosa
import numpy as np
from transformers import WhisperProcessor, WhisperForConditionalGeneration
# ── Step 1: Load Model ──
print("Loading model...")
processor = WhisperProcessor.from_pretrained(
"harphool17/whisper-large-v3-children-asr"
)
model = WhisperForConditionalGeneration.from_pretrained(
"harphool17/whisper-large-v3-children-asr"
)
# Use GPU if available (much faster!)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
model.eval()
print(f"Model loaded on: {device}")
# ── Step 2: Load Audio ──
def load_audio(audio_path):
"""Load audio file and convert to 16kHz mono"""
audio, sr = sf.read(audio_path, dtype="float32")
# Convert stereo to mono if needed
if audio.ndim > 1:
audio = audio.mean(axis=1)
# Resample to 16kHz if needed
if sr != 16000:
audio = librosa.resample(audio, orig_sr=sr, target_sr=16000)
return audio
# ── Step 3: Transcribe ──
def transcribe(audio_path):
"""Transcribe children's speech from audio file"""
# Load audio
audio = load_audio(audio_path)
# Process audio into model input
inputs = processor(
audio,
sampling_rate=16000,
return_tensors="pt"
)
# Move to GPU if available
input_features = inputs.input_features.to(device)
# Generate transcription
with torch.no_grad():
predicted_ids = model.generate(
input_features,
language="en",
task="transcribe",
max_new_tokens=225,
)
# Convert numbers back to text
transcription = processor.batch_decode(
predicted_ids,
skip_special_tokens=True
)[0]
return transcription.lower().strip()
# ── Step 4: Use It! ──
audio_file = "child_speech.wav" # Replace with your audio file path
result = transcribe(audio_file)
print(f"Child said: {result}")
| Format | Extension | Supported |
|---|---|---|
| WAV | .wav | ✅ Yes |
| FLAC | .flac | ✅ Yes |
| MP3 | .mp3 | ✅ Yes |
| OGG | .ogg | ✅ Yes |
Best format: WAV or FLAC (lossless quality)
Required: 16kHz sample rate, mono channel (code above handles this automatically!)
| Error | Cause | Fix |
|---|---|---|
ModuleNotFoundError: transformers | Library not installed | Run pip install transformers |
CUDA out of memory | GPU memory full | Add model = model.to("cpu") |
RuntimeError: Input size mismatch | Wrong audio format | Use the load_audio() function above |
OSError: model not found | Wrong model name | Check spelling: harphool17/whisper-large-v3-children-asr |
| Parameter | Value |
|---|---|
| Base Model | OpenAI Whisper Large v3 |
| Training Data | 82,490 children's speech samples |
| Training Hours | ~185 hours of audio |
| Age Groups | 3-4, 5-7, 8-11 years |
| Training Steps | 2,576 steps |
| Batch Size | 4 (effective: 64 with gradient accumulation) |
| Learning Rate | 1e-5 |
| Optimizer | AdamW with cosine schedule |
| Precision | bfloat16 |
| GPU | 2x NVIDIA RTX 4500 Ada (24GB each) |
| Split | WER | Description |
|---|---|---|
| Validation | 0.1030 | 10.3% word error rate |
| Public Test | 0.4432 | Competition test set |
Note: The gap between validation and public test WER is due to distribution shift — the test set contains more challenging audio conditions than the training data.
| Resource | Link |
|---|---|
| GitHub Code | harphool-singh/whisper-children-asr |
| Competition | DrivenData Pasketti Challenge |
| Base Model | openai/whisper-large-v3 |
| Demo Website | Coming Soon |
If you use this model in your work, please cite:
@misc{whisper-children-asr-2026,
author = {Harphool Singh},
title = {Whisper Large v3 Fine-tuned for Children's Speech Recognition},
year = {2026},
publisher = {HuggingFace},
url = {https://huggingface.co/harphool17/whisper-large-v3-children-asr}
}
Harphool Singh
Built with ❤️ for improving children's education technology