Automatic Speech Recognition
NeMo
Safetensors
English
parakeet
whisper
qwen3
ctranslate2
text-generation
air-traffic-control
atc
singapore
military
Instructions to use aether-raid/astra-atc-models with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- NeMo
How to use aether-raid/astra-atc-models with NeMo:
import nemo.collections.asr as nemo_asr asr_model = nemo_asr.models.ASRModel.from_pretrained("aether-raid/astra-atc-models") transcriptions = asr_model.transcribe(["file.wav"]) - Notebooks
- Google Colab
- Kaggle
metadata
language:
- en
license: other
tags:
- nemo
- parakeet
- tdt
- automatic-speech-recognition
- air-traffic-control
- atc
- singapore
- military
base_model: nvidia/parakeet-tdt-0.6b-v2
pipeline_tag: automatic-speech-recognition
metrics:
- wer
model-index:
- name: parakeet-tdt-0.6b-v2-atc-singapore
results:
- task:
type: automatic-speech-recognition
metrics:
- name: Validation WER
type: wer
value: 0.72
Parakeet-TDT 0.6B v2 - Singapore Military ATC
Fine-tuned NVIDIA Parakeet-TDT 0.6B v2 for Singapore Air Force air traffic control speech recognition.
Performance
| Checkpoint | Validation WER | Notes |
|---|---|---|
model.ckpt |
0.72% | Best checkpoint from epoch 76 |
epoch=100-val_wer=0.0073-last.ckpt |
0.73% | Final checkpoint, not published here |
Model Details
| Key | Value |
|---|---|
| Base model | nvidia/parakeet-tdt-0.6b-v2 |
| Framework | NeMo |
| Model class | EncDecRNNTBPEModel |
| Format | Raw .ckpt checkpoint + tokenizer artifacts |
| Checkpoint size | 7.0 GB |
| Domain | Singapore military ATC (Tengah WSAT, Paya Lebar WSAP) |
| Training data | Clean originals plus mild ATC radio, speed, and stress augmentations |
Included Files
model.ckpt- best fine-tuned checkpointartifacts/705f11d22dc04b169effc35ce5cd1361_tokenizer.modelartifacts/a4715c7f6b2d4c2bb709306073d0c0a4_tokenizer.vocabartifacts/4cf78c8ca4ca44fca36c3754478fb188_vocab.txt
Usage
This repo currently publishes the fine-tuned model as a raw NeMo checkpoint rather than a packaged .nemo archive. The tokenizer artifact paths therefore need to be pointed at the local artifacts/ folder before restore.
from pathlib import Path
import torch
from omegaconf import OmegaConf
from nemo.collections.asr.models import EncDecRNNTBPEModel
model_dir = Path("ASR/parakeet")
ckpt_path = model_dir / "model.ckpt"
artifacts_dir = model_dir / "artifacts"
bundle = torch.load(ckpt_path, map_location="cpu", weights_only=False)
cfg = bundle["hyper_parameters"]["cfg"]
cfg = OmegaConf.create(OmegaConf.to_container(cfg, resolve=False))
cfg.tokenizer.model_path = str(
artifacts_dir / "705f11d22dc04b169effc35ce5cd1361_tokenizer.model"
)
cfg.tokenizer.vocab_path = str(
artifacts_dir / "4cf78c8ca4ca44fca36c3754478fb188_vocab.txt"
)
cfg.tokenizer.spe_tokenizer_vocab = str(
artifacts_dir / "a4715c7f6b2d4c2bb709306073d0c0a4_tokenizer.vocab"
)
model = EncDecRNNTBPEModel.load_from_checkpoint(str(ckpt_path), cfg=cfg)
model.eval().cuda()
hypotheses = model.transcribe(
["audio.wav"],
return_hypotheses=True,
timestamps=True,
)
if isinstance(hypotheses, tuple):
hypotheses = hypotheses[0]
hyp = hypotheses[0]
print(hyp.text)
print(hyp.timestamp["word"])
Tested in ASTRA with nemo_toolkit[asr]==2.7.3.
Output Format
The model outputs normalized spoken text intended for downstream ATC formatting:
| Input audio says | Model outputs |
|---|---|
| "CAMEL climb flight level zero nine zero" | camel climb flight level zero nine zero |
| "Contact Tengah Approach one three zero decimal zero" | contact tengah approach one three zero decimal zero |
| "Squawk four five two one" | squawk four five two one |
ASTRA then applies a deterministic formatter to convert normalized speech into display text such as CAMEL climb FL090.