ZFTurbo/asr_consilium

A repository for Automatic Speech Recognition (ASR) that ensembles multiple open-source models to achieve SOTA quality of recognition. Useful if you need to get the maximum quality of recognition despite the computational time.

23

stars

22

commits

Python

primary language

Jul 28, 2026

updated

README

ASR Consilium

A repository for Automatic Speech Recognition (ASR) that ensembles multiple open-source models to achieve SOTA quality of recognition. Useful if you need to get the maximum quality of recognition despite the computational time.

Usage

pip install asr-consilium 

or copy folder asr_consilium into your project. After:

from asr_consilium import inference as asr_inference

jsonl_dataset = 'markdown.jsonl' # Dataset in jsonl format
out_file = 'result.jsonl' # File where results will be stored in JSONL format
asr_inference(
    jsonl_file=jsonl_dataset, # input dataset for processing
    out_file=out_file, # Outputs file
    batch_size=16, # Batch size
    model_list=None, # Models for ensemble - see usage below
    weights=None, # Weights for models
    language='English', # Language
    normalize=True, # Normalize texts before ensemble
    char_level=False, # ensemble on char or word level
    ensemble_type='median_extended', # Type of ensemble ('greedy', 'median', 'median_extended')
    skip_existed=True, # if some model already calculated the results they will not recalculate
)

Or with command line:

python3 inference.py --input_data "samples/markdown.jsonl" --output "result.jsonl" --batch_size 16

Supported models

  • The Cohere Transcribe (03-2026) model requires a newer version of the transformers library (>= 5.4), as well as granted access to the model itself.

Requirements

  • Python >= 3.12 (primarily due to compatibility limitations with the nemo_toolkit[asr,tts] package; all other components are compatible with Python 3.10).

Format of markdown.jsonl

markdown.jsonl must contain 2 fields:

  • 'audio' - name of audio file in wav format and 16000 Hz sample rate. It must be in the same folder with markdown.jsonl file.
  • 'duration' - duration of audio in seconds (needed for sorting and for tokens approximation)
  • 'text' (optional) - needed for validation. If you have real speech text. Code will automatically calculate WER and CER metrics for your data.
...
{"audio": "483_0.wav", "duration": 2.079875}
{"audio": "461_1.wav", "duration": 9.6599375}
{"audio": "243_2.wav", "duration": 7.3400625}
...

You can find sample here

Choose models for ensembling

List of models and their weights are chosen with parameters model_list and weights. You may leave it None. So default list of models and default weights will be used.

Default models and weights

model_list = [
    'nvidia/parakeet-tdt-0.6b-v2',
    'nvidia/parakeet-tdt-0.6b-v3',
    'Qwen/Qwen3-ASR-1.7B',
    'nvidia/canary-qwen-2.5b',
    'ibm-granite/granite-speech-3.3-8b',
    'ibm-granite/granite-4.0-1b-speech',
    'ibm-granite/granite-speech-4.1-2b',
    'ZFTurbo/Phi-4-multimodal-instruct',
]

weights = [4.5, 4.2, 8.4, 9.8, 8.7, 3.5, 8.9, 9.4]

Results for different datasets

Note: WER/CER metric calculation slightly different from Open ASR Leaderboard

WER table (English language)

Model nameavgAMIEarnings22GigaSpeechLibriSpeech (clean)LibriSpeech (other)SPGISpeechTED-LIUM v3VoxPopuli
Nvidia Parakeet v26.0911.2711.289.781.703.192.143.425.94
Nvidia Parakeet v36.3611.5911.299.591.923.603.992.826.10
Qwen3-ASR-1.7B5.8211.1610.258.741.623.382.842.306.33
Canary Qwen 2.5B5.5710.1710.349.241.623.121.922.585.62
IBM Granite Speech 4.0-1B5.678.588.8710.371.442.914.153.145.97
IBM Granite Speech 3.3-8B5.818.8310.1210.211.432.903.863.405.73
Granite-Speech-4.1-2B5.438.168.569.981.292.554.103.045.79
Microsoft-Phi-46.0111.2210.289.301.683.942.872.885.98
Whisper Large v37.3116.6110.859.971.913.852.963.868.47
Ensemble (Default parameters)4.667.327.778.671.152.242.682.215.24

CER Table (English language)

Model nameavgAMIEarnings22GigaSpeechLibriSpeech (clean)LibriSpeech (other)SPGISpeechTED-LIUM v3VoxPopuli
Nvidia Parakeet v23.517.187.675.150.501.150.972.033.50
Nvidia Parakeet v33.637.487.474.940.591.332.061.543.63
Qwen3-ASR-1.7B3.256.506.894.470.501.291.481.193.75
Canary Qwen 2.5B3.105.776.954.700.511.140.891.473.40
IBM Granite Speech 4.0-1B3.175.125.555.560.451.152.191.763.60
IBM Granite Speech 3.3-8B3.235.336.155.370.441.122.041.933.46
Granite-Speech-4.1-2B3.054.855.405.330.430.982.241.723.47
Microsoft-Phi-43.386.896.694.780.541.651.431.453.66
Whisper Large v34.4911.217.465.510.661.711.472.325.58
Ensemble (Default parameters)2.614.435.054.450.350.861.411.173.18
  • Tables for the French, German, Spanish, Italian, Portuguese, and Russian languages are available in a separate document.

Contributors

ZFTurbo

22 commits

ZFTurbo/asr_consilium

A repository for Automatic Speech Recognition (ASR) that ensembles multiple open-source models to achieve SOTA quality of recognition. Useful if you need to get the maximum quality of recognition despite the computational time.

23

stars

22

commits

Python

primary language

Jul 28, 2026

updated

README

ASR Consilium

A repository for Automatic Speech Recognition (ASR) that ensembles multiple open-source models to achieve SOTA quality of recognition. Useful if you need to get the maximum quality of recognition despite the computational time.

Usage

pip install asr-consilium 

or copy folder asr_consilium into your project. After:

from asr_consilium import inference as asr_inference

jsonl_dataset = 'markdown.jsonl' # Dataset in jsonl format
out_file = 'result.jsonl' # File where results will be stored in JSONL format
asr_inference(
    jsonl_file=jsonl_dataset, # input dataset for processing
    out_file=out_file, # Outputs file
    batch_size=16, # Batch size
    model_list=None, # Models for ensemble - see usage below
    weights=None, # Weights for models
    language='English', # Language
    normalize=True, # Normalize texts before ensemble
    char_level=False, # ensemble on char or word level
    ensemble_type='median_extended', # Type of ensemble ('greedy', 'median', 'median_extended')
    skip_existed=True, # if some model already calculated the results they will not recalculate
)

Or with command line:

python3 inference.py --input_data "samples/markdown.jsonl" --output "result.jsonl" --batch_size 16

Supported models

  • The Cohere Transcribe (03-2026) model requires a newer version of the transformers library (>= 5.4), as well as granted access to the model itself.

Requirements

  • Python >= 3.12 (primarily due to compatibility limitations with the nemo_toolkit[asr,tts] package; all other components are compatible with Python 3.10).

Format of markdown.jsonl

markdown.jsonl must contain 2 fields:

  • 'audio' - name of audio file in wav format and 16000 Hz sample rate. It must be in the same folder with markdown.jsonl file.
  • 'duration' - duration of audio in seconds (needed for sorting and for tokens approximation)
  • 'text' (optional) - needed for validation. If you have real speech text. Code will automatically calculate WER and CER metrics for your data.
...
{"audio": "483_0.wav", "duration": 2.079875}
{"audio": "461_1.wav", "duration": 9.6599375}
{"audio": "243_2.wav", "duration": 7.3400625}
...

You can find sample here

Choose models for ensembling

List of models and their weights are chosen with parameters model_list and weights. You may leave it None. So default list of models and default weights will be used.

Default models and weights

model_list = [
    'nvidia/parakeet-tdt-0.6b-v2',
    'nvidia/parakeet-tdt-0.6b-v3',
    'Qwen/Qwen3-ASR-1.7B',
    'nvidia/canary-qwen-2.5b',
    'ibm-granite/granite-speech-3.3-8b',
    'ibm-granite/granite-4.0-1b-speech',
    'ibm-granite/granite-speech-4.1-2b',
    'ZFTurbo/Phi-4-multimodal-instruct',
]

weights = [4.5, 4.2, 8.4, 9.8, 8.7, 3.5, 8.9, 9.4]

Results for different datasets

Note: WER/CER metric calculation slightly different from Open ASR Leaderboard

WER table (English language)

Model nameavgAMIEarnings22GigaSpeechLibriSpeech (clean)LibriSpeech (other)SPGISpeechTED-LIUM v3VoxPopuli
Nvidia Parakeet v26.0911.2711.289.781.703.192.143.425.94
Nvidia Parakeet v36.3611.5911.299.591.923.603.992.826.10
Qwen3-ASR-1.7B5.8211.1610.258.741.623.382.842.306.33
Canary Qwen 2.5B5.5710.1710.349.241.623.121.922.585.62
IBM Granite Speech 4.0-1B5.678.588.8710.371.442.914.153.145.97
IBM Granite Speech 3.3-8B5.818.8310.1210.211.432.903.863.405.73
Granite-Speech-4.1-2B5.438.168.569.981.292.554.103.045.79
Microsoft-Phi-46.0111.2210.289.301.683.942.872.885.98
Whisper Large v37.3116.6110.859.971.913.852.963.868.47
Ensemble (Default parameters)4.667.327.778.671.152.242.682.215.24

CER Table (English language)

Model nameavgAMIEarnings22GigaSpeechLibriSpeech (clean)LibriSpeech (other)SPGISpeechTED-LIUM v3VoxPopuli
Nvidia Parakeet v23.517.187.675.150.501.150.972.033.50
Nvidia Parakeet v33.637.487.474.940.591.332.061.543.63
Qwen3-ASR-1.7B3.256.506.894.470.501.291.481.193.75
Canary Qwen 2.5B3.105.776.954.700.511.140.891.473.40
IBM Granite Speech 4.0-1B3.175.125.555.560.451.152.191.763.60
IBM Granite Speech 3.3-8B3.235.336.155.370.441.122.041.933.46
Granite-Speech-4.1-2B3.054.855.405.330.430.982.241.723.47
Microsoft-Phi-43.386.896.694.780.541.651.431.453.66
Whisper Large v34.4911.217.465.510.661.711.472.325.58
Ensemble (Default parameters)2.614.435.054.450.350.861.411.173.18
  • Tables for the French, German, Spanish, Italian, Portuguese, and Russian languages are available in a separate document.

Contributors

ZFTurbo

22 commits

Languages

Python

100.0%