Model reference · open weights
tedlium2_streaming_transformer is an open-weight audio or speech model from espnet. tedlium2_streaming_transformer (BF16) weighs 140 MB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the espnet/tedlium2_streaming_transformer model card, 2026-10-01
What it is
| Released by | espnet |
|---|---|
| Released | 2026-09-20 |
| VRAM | 140 MB for the weights |
What it runs on
| Card | One stream | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
From the model card
espnet/tedlium2_streaming_transformerA streaming Transformer: it decodes while the audio is still arriving, a block
at a time, rather than waiting for the end of the utterance. Trained on
TED-LIUM 2 with the egs2/tedlium2/asr1 recipe and
conf/train_asr_streaming_transformer.yaml,
with a BPE-500 language model beside it.
Trained and originally published by Keqi Deng,
as
D-Keqi/espnet_asr_train_asr_streaming_transformer_raw_en_bpe500_sp_valid.acc.ave.
This copy is here so that the demo notebooks and the documentation point at a
model the organization keeps alive; the weights are the same ones.
import soundfile as sf
from espnet2.bin.asr_inference_streaming import Speech2TextStreaming
s2t = Speech2TextStreaming.from_pretrained(
"espnet/tedlium2_streaming_transformer",
device="cpu",
beam_size=20,
ctc_weight=0.5,
penalty=0.0,
nbest=1,
disable_repetition_detection=True,
)
speech, rate = sf.read("audio.wav", dtype="float32") # 16 kHz, one channel
# 640 samples is 40 ms: the hypothesis comes back after each slice, and grows
chunk = 640
slices = len(speech) // chunk
for i in range(slices):
results = s2t(speech=speech[i * chunk : (i + 1) * chunk], is_final=False)
if results:
print(results[0][0])
results = s2t(speech=speech[slices * chunk :], is_final=True)
print(results[0][0])
There is a notebook that runs this end to end:
Demos/asr_streaming_demo.ipynb.
For non-streaming recognition, OWSM-CTC is far more accurate and covers 150+ languages.
TED-LIUM 2, decoded with the language model in this repository.
| dataset | WER | CER |
|---|---|---|
| dev | 11.4 | 5.4 |
| test | 10.8 | 5.3 |
The full tables are in
exp/asr_train_asr_streaming_transformer_raw_en_bpe500_sp/RESULTS.md.
Trained with espnet 0.9.8 and pytorch 1.5.1, in November 2021, and loaded by
current ESPnet through the meta.yaml in this repository.
@inproceedings{watanabe2018espnet,
author={Shinji Watanabe and Takaaki Hori and Shigeki Karita and Tomoki Hayashi and Jiro Nishitoba and Yuya Unno and Nelson {Enrique Yalta Soplin} and Jahn Heymann and Matthew Wiesner and Nanxin Chen and Adithya Renduchintala and Tsubasa Ochiai},
title={{ESPnet}: End-to-End Speech Processing Toolkit},
year={2018},
booktitle={Proceedings of Interspeech},
pages={2207--2211},
doi={10.21437/Interspeech.2018-1456},
url={http://dx.doi.org/10.21437/Interspeech.2018-1456}
}
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.
How it works