--- license: other license_name: openmdw-1.1 license_link: https://openmdw.ai/license/1-1/ language: - th - en library_name: nemo pipeline_tag: automatic-speech-recognition base_model: nvidia/nemotron-3.5-asr-streaming-0.6b tags: - automatic-speech-recognition - speech - streaming - FastConformer - Transducer - Thai - NeMo --- # Typhoon ASR Streaming Nemotron 0.6B Cache-aware **streaming** Thai ASR (FastConformer-Transducer, 0.6B params, prompt-conditioned) — the **best-accuracy model** of the Typhoon ASR Streaming release. Adapted to Thai from NVIDIA's Nemotron streaming ASR base: the multilingual tokenizer is **extended** (not replaced) with the multi-character Thai BPE from Typhoon ASR Real-time, keeping the other languages recoverable, followed by Thai adaptation and a numeric fine-tuning stage. ## At a glance | | | |---|---| | Architecture | FastConformer-Transducer (RNN-T), cache-aware streaming, prompt-conditioned | | NeMo class | `EncDecRNNTBPEModelWithPrompt` | | Tokenizer | aggregate 15,135 = Nemotron multilingual 13,087 + Thai BPE 2,048 | | Language prompt | **required**: `target_lang="th-TH"` | | Latency knob | `chunk_size` × 80 ms → 1040 / 480 / 80 ms | | Streaming CER | **14.1%** TVSpeech · **9.3%** GigaSpeech2-Thai @1040 ms (13.0% TVSpeech @3200 ms) | | Steering (TVSpeech held-out, 1040 ms) | keyword recall 16.6% → **20.7%** (phrase boost) at no CER cost | | RTF (batch-1, H100 @1040 ms) | 0.024 (~42× real time); batch-16 ≈ 300 concurrent streams/GPU | | Paired n-gram | [`typhoon-ai/typhoon-asr-streaming-nemotron-0.6b-ngram`](https://huggingface.co/typhoon-ai/typhoon-asr-streaming-nemotron-0.6b-ngram) | ## Usage Requires NVIDIA NeMo with cache-aware streaming and `EncDecRNNTBPEModelWithPrompt` support (see the [project repo](https://github.com/warit-s/typhoon-asr-streaming) for the pinned commit and the full streaming loop / server / demo): ```python import nemo.collections.asr as nemo_asr model = nemo_asr.models.ASRModel.restore_from( "typhoon-asr-streaming-nemotron-0.6b.nemo", map_location="cuda") model.eval() model.set_inference_prompt("th-TH") # required (prompt-conditioned) model.decoding.set_strip_lang_tags(True) # strip the tag from output # offline (whole file) text = model.transcribe(audio=["clip.wav"], target_lang="th-TH", return_hypotheses=True)[0].text # true streaming: setup_streaming_params + conformer_stream_step — see the repo. ``` Decode-time steering (phrase boosting / n-gram fusion) works inside the streaming decoder; with this aggregate-tokenizer model set `boosting_tree.source_lang="th-TH"` and use the paired `.nemo` n-gram — see the repo's `docs/SHALLOW_FUSION.md`. ## License & attribution Released under **OpenMDW-1.1** (see [`LICENSE`](LICENSE) in this repository), following the base model: **[NVIDIA Nemotron 3.5 ASR Streaming 0.6B](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b)** (OpenMDW-1.1). The base model's copyright and origin notices are preserved in this repository as required by the license. Modifications in this release: aggregate tokenizer extension with Thai BPE, Thai adaptation on the ~11k-hour Typhoon corpus, and numeric fine-tuning. > **Trademark note:** "Nemotron" is a trademark of NVIDIA Corporation. It is used here > nominatively, solely to identify the base model this checkpoint derives from. This > release is not affiliated with, sponsored by, or endorsed by NVIDIA.