Model reference · open weights

Haas-ja

Audio third-intelligence Speech→text 1 build Open weights 637 dl/mo

Haas-ja is an open-weight audio or speech model from third-intelligence.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • Haas-ja-v1.0 is a Japanese automatic speech recognition model developed by third-intelligence that uses a FastConformer encoder and a Token-and-Duration Transducer decoder.
  • It is designed for offline transcription and achieves a character error rate of 6.12 percent on the asr-ja-bench benchmark.
  • The model contains 615.8 million parameters, supports 16 kHz mono audio input, and is released under the Apache 2.0 license.

Summary of the third-intelligence/Haas-ja-v1.0 model card, 2026-11-01

What it is

Released bythird-intelligence
Released2026-10-08

From the model card

What third-intelligence says about Haas-ja

Read the model card

Haas-ja-v1.0 is a Japanese speech recognition model built to be both fast and accurate. It is based on NVIDIA's Parakeet-TDT architecture: a FastConformer encoder and a Token-and-Duration Transducer (TDT) decoder, here with a prediction network that uses Kimi Delta Attention (KDA). The name is an acronym of Hear Anything At Speed and a nod to Helmut Haas, the acoustician behind the Haas (precedence) effect used in stereo sound and other audio technology.

At release, Haas-ja-v1.0 sits on the Pareto frontier of speed and accuracy on a benchmark built from five public Japanese datasets, and is the most accurate of the open models we evaluated (CER strict 6.12%). Its accuracy is competitive with major commercial speech-to-text APIs at a small fraction of their cost.

The blog post covers the development in more detail, including a preliminary experiment comparing prediction networks, the evaluation design and the full results.

Model details

Haas-ja-v1.0 follows Parakeet-TDT: a FastConformer encoder and a TDT decoder. TDT extends RNN-T by also predicting how long each token lasts, so decoding can jump ahead several encoder frames at a time instead of visiting every frame. Haas-ja-v1.0 replaces the LSTM in Parakeet-TDT's prediction network with Kimi Delta Attention (KDA), which improves accuracy at almost the same inference speed.

PropertyValue
Parameters615.8M (encoder 608.9M, prediction network 3.9M, joint network 3.0M)
Input16 kHz mono audio; 128-bin log-mel spectrogram (25 ms window, 10 ms hop)
EncoderFastConformer, 24 layers, hidden size 1,024, 8 attention heads, 8× subsampling (80 ms per frame), full context
Prediction networkKimi Delta Attention, 2 layers, hidden size 640, 5 heads × 64
Joint networkHidden size 640; token and duration outputs; durations 0–4 frames
TokenizerSentencePiece BPE trained on Japanese data, 3,072 tokens, byte fallback
DecodingGreedy, batched

The full architecture configuration is in config.yaml.

How to use

Requirements: Linux with an NVIDIA GPU, Python 3.11+ and NeMo 2.7. The prediction network runs on kernels from flash-linear-attention, which needs Triton and CUDA, so CPU and macOS are not supported.

Try it with the repository

Clone the GitHub repository and install it with uv, which installs the exact dependency versions we tested:

git clone https://github.com/third-intelligence/Haas-ASR.git
cd Haas-ASR
uv sync
uv run python examples/quickstart.py --model third-intelligence/Haas-ja-v1.0 example.wav

Use it in your own project

Install the inference package into your environment:

pip install "haas-asr @ git+https://github.com/third-intelligence/Haas-ASR.git"

Then transcribe:

import haas_asr

model = haas_asr.load_model("third-intelligence/Haas-ja-v1.0")
audio = haas_asr.load_audio("example.wav")
output = model.transcribe([audio])
print(output[0].text)

load_model returns a regular NeMo ASRModel and runs it in bfloat16 on a GPU, the precision used for the evaluation below. haas_asr.load_audio reads a WAV, FLAC, MP3 or OGG file, averages stereo to mono and resamples it to 16 kHz, the model's input.

For recordings longer than 30 seconds, use transcribe_longform. It splits the audio at quiet points (detected by volume) and transcribes the pieces in batches:

audio = haas_asr.load_audio("example.flac")
text = haas_asr.transcribe_longform(model, audio, batch_size=64)

Custom vocabulary

Names and terms the model rarely heard in training can be listed, so that it recognizes them more often and writes them as you want:

vocabulary = haas_asr.Vocabulary(
    {"Haas": ["ハース"], "Third Intelligence": ["サードインテリジェンス"]}
)
texts = haas_asr.transcribe(model, [audio], vocabulary=vocabulary)  # short clips
text = haas_asr.transcribe_longform(model, audio, vocabulary=vocabulary)

Each word maps its written form to its readings, the ways Haas would write it (usually in kana; several, or none if Haas already writes it as listed). The readings are boosted while decoding with NeMo's GPU phrase boosting, and replaced by the written form wherever found. Boosting can also change text where no listed word was said, so audio without speech is not boosted, and each audio is also decoded without the words: a change is kept only where it includes a whole listed word. Both decodes share one encoder pass, so a vocabulary costs about 1.3 times the time. See the repository for details.

Speaker labels

Combined with NVIDIA's speaker diarization model Nemotron-3-Diarization, Haas produces transcripts with speaker labels. The repository has a runnable example.

Training data

The model was trained on about 46,000 hours of audio from public corpora (ReazonSpeech, Common Voice 26.0 and YODAS) and internal data. An in-house filtering pipeline removed low-quality samples. To keep the evaluation fair, the benchmark

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

How it works

How audio & music work

Audio or textinputAudio modelrecognise / synthesiseText or audiooutputSpeech-to-text turns audio into text; text-to-speech and music models turn text into audio.
© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms