--- language: - en license: other tags: - nemo - parakeet - whisper - qwen3 - ctranslate2 - automatic-speech-recognition - text-generation - air-traffic-control - atc - singapore - military - par pipeline_tag: automatic-speech-recognition --- # ASTRA ATC Models Fine-tuned models for Singapore military air traffic control, built for two training simulators: - [astra/](./astra) - [ASTRA](https://github.com/aether-raid), the ATC training simulator (ASR and display formatter) - [par/](./par) - the Precision Approach Radar (PAR) talkdown simulator (ASR) The ASTRA and PAR models were developed separately for their own phraseology and callsigns, so they are not a single model: use the ASTRA ASR for ASTRA and the PAR ASR for PAR. Future work may train one ASR model that handles both. ```text astra/ ASR/whisper/ Whisper Large v3 (legacy CTranslate2 backend) ASR/parakeet/ Parakeet-TDT 0.6B v2 (NeMo checkpoint) LLM/ Qwen3-1.7B display formatter (legacy) par/ ASR/ Parakeet-TDT 0.6B v2 (NeMo .nemo) ``` # ASTRA ## Pipeline ```text Audio --> VAD (Silero) --> ASR (Whisper or Parakeet) --> Rule Formatter --> Display Text "camel climb flight level zero nine zero" "CAMEL climb FL090" ``` The production pipeline uses a deterministic rule-based formatter instead of the legacy LLM formatter. ## Models ### [astra/ASR/whisper/](./astra/ASR/whisper) - Whisper Large v3 (Legacy CTranslate2 backend) Fine-tuned for Singapore military ATC speech. Uses CTranslate2 float16 format for fast inference with [faster-whisper](https://github.com/SYSTRAN/faster-whisper). | Metric | Value | |--------|-------| | WER | **0.66%** | | Base model | `openai/whisper-large-v3` | | Size | 2.9 GB | | Runtime | `faster-whisper` / CTranslate2 | ### [astra/ASR/parakeet/](./astra/ASR/parakeet) - Parakeet-TDT 0.6B v2 (NeMo checkpoint) Fine-tuned NeMo Parakeet model for Singapore military ATC speech. Published as a raw checkpoint together with the tokenizer artifacts required to restore it. | Metric | Value | |--------|-------| | Validation WER | **0.72%** | | Base model | `nvidia/parakeet-tdt-0.6b-v2` | | Size | 7.0 GB | | Runtime | `nemo_toolkit[asr]` | ### [astra/LLM/](./astra/LLM) - Qwen3-1.7B Display Formatter (Legacy) > **Legacy.** Superseded by the deterministic rule formatter. Retained for reference only. Converts normalized ASR output into structured ATC display text. | Metric | Value | |--------|-------| | Exact match | **100%** (161/161) | | Base model | `unsloth/Qwen3-1.7B` | | Size | 3.3 GB | ## Architecture ```text Audio --> VAD (Silero) --> ASR backend --> Post-processing --> Rule Formatter --> Display Text ``` | Component | Technology | Notes | |-----------|------------|-------| | VAD | Silero VAD | Shared frontend for both ASR backends | | ASR (legacy) | Whisper Large v3 (CTranslate2) | Lower-memory legacy backend | | ASR (current NeMo path) | Parakeet-TDT 0.6B v2 | Fine-tuned NeMo checkpoint | | Formatter | Deterministic rules | Converts normalized speech to ATC display text | ## Domain Singapore military ATC covering Tengah and Paya Lebar operations, military phraseology, 100+ callsigns, and approach / recovery / emergency traffic. ## Training History ### ASR | Run | WER | Base | Key Change | |-----|-----|------|------------| | ct2_run5 | 0.48% | jacktol/whisper-large-v3-finetuned-for-ATC | Initial fine-tune | | ct2_run6 | 0.40% | jacktol/whisper-large-v3-finetuned-for-ATC | +augmentation, weight decay | | ct2_run7 | 0.24% | jacktol/whisper-large-v3-finetuned-for-ATC | Frozen encoder, +50 real recordings | | ct2_run8 | 0.66% | openai/whisper-large-v3 | Full retrain from base, enhanced augmentation | | parakeet_atc | 0.72% | nvidia/parakeet-tdt-0.6b-v2 | NeMo fine-tune with ATC radio augmentation, best checkpoint at epoch 76 | ### LLM | Run | Accuracy | Key Change | |-----|----------|------------| | llm_run3 | 98.1% (Qwen3-8B) | QLoRA 4-bit, 871 examples | | llm_run4 | 100% (Qwen3-1.7B) | bf16 LoRA, 1,915 examples with ASR noise augmentation | ## Quick Start ### Whisper ASR ```python from faster_whisper import WhisperModel model = WhisperModel("./astra/ASR/whisper", device="cuda", compute_type="float16") segments, info = model.transcribe("audio.wav", language="en", beam_size=5) text = " ".join(seg.text.strip() for seg in segments) ``` ### Parakeet ASR See [astra/ASR/parakeet/README.md](./astra/ASR/parakeet/README.md) for the NeMo restore example and tokenizer artifact requirements. # PAR ## [par/ASR/](./par/ASR) - Parakeet-TDT 0.6B v2 (NeMo .nemo) Fine-tuned for PAR talkdown speech: fast, clipped controller calls and pilot replies. Self-contained `.nemo`, so no tokenizer artifacts are needed. Details, results per test set and training stats in [par/ASR/README.md](./par/ASR/README.md). | Metric | Value | |--------|-------| | PAR held-out WER | **0.17%** | | Base model | `nvidia/parakeet-tdt-0.6b-v2` | | Size | 2.5 GB | | Runtime | `nemo_toolkit[asr]` | # Download ```bash # Full repo huggingface-cli download aether-raid/astra-atc-models --local-dir ./models # ASTRA Whisper ASR only huggingface-cli download aether-raid/astra-atc-models --include "astra/ASR/whisper/*" --local-dir ./models # ASTRA Parakeet ASR only huggingface-cli download aether-raid/astra-atc-models --include "astra/ASR/parakeet/*" --local-dir ./models # ASTRA LLM only (legacy) huggingface-cli download aether-raid/astra-atc-models --include "astra/LLM/*" --local-dir ./models # PAR ASR only huggingface-cli download aether-raid/astra-atc-models --include "par/ASR/*" --local-dir ./models ```