NVIDIA's Parakeet-TDT-CTC-110M model converted to CoreML format for efficient inference on Apple Silicon.
Model Description
This is a hybrid ASR model with a shared Conformer encoder and two decoder heads:
CTC Head: Fast greedy decoding, ideal for keyword spotting
TDT Head: Token-Duration Transducer for high-quality transcription
Architecture
Component
Description
Size
Preprocessor
Mel spectrogram extraction
~1 MB
Encoder
Conformer encoder (shared)
~400 MB
CTCHead
CTC output projection
~4 MB
Decoder
TDT prediction network (LSTM)
~25 MB
JointDecision
TDT joint network
~6 MB
Total size: ~436 MB
Performance
Benchmarked on Earnings22 dataset (772 audio files):
Metric
Value
Keyword Recall
100% (1309/1309)
WER
17.97%
RTFx (M4 Pro)
358x real-time
Requirements
macOS 13+ (Ventura or later)
Apple Silicon (M1/M2/M3/M4)
Python 3.10+
Installation
bash
1# Using uv (recommended)2uv sync34# Or using pip5pip install -e .67# For audio file support (WAV, MP3, etc.)8pip install -e ".[audio]"
Usage
Python Inference
python
1from scripts.inference import ParakeetCoreML
23# Load model (from current directory with .mlpackage files)4model = ParakeetCoreML(".")56# Transcribe with TDT (higher quality)7text = model.transcribe("audio.wav", mode="tdt")8print(text)910# Or use CTC for faster keyword spotting11text = model.transcribe("audio.wav", mode="ctc")12print(text)
Command Line
bash
1# TDT decoding (default, higher quality)2uv run scripts/inference.py --audio audio.wav
34# CTC decoding (faster, good for keyword spotting)5uv run scripts/inference.py --audio audio.wav --mode ctc
Model Conversion
To convert from the original NeMo model:
bash
1# Install conversion dependencies2uv sync --extra convert
34# Run conversion5uv run scripts/convert_nemo_to_coreml.py --output-dir ./model
This will:
Download the original model from NVIDIA (nvidia/parakeet-tdt_ctc-110m)