Views
No views yet
TL;DR ARK-ASR-0.6B is an automatic speech recognition model trained with teacher-data adaptation and on-policy distillation, using a compact 0.6B-scale decoder LLM together with a dedicated audio encoder and adapter. The accompanying training, inference, and evaluation code is available at AutoArk/open-audio-opd.
open-audio-opd.Ark-Base+TD+OPD model reported in the open-audio-opd results.
arkasr remote codesafetensorsscripts/infer/ark_asr_transformers.pytrust_remote_code=True. The official inference script handles the processor, tokenizer, audio prompt format, generation cleanup, and ASR token filtering.open-audio-opd evaluation. Lower CER/WER is better.| Model | AMI | Earnings22 | GigaSpeech | LS Clean | LS Other | SPGISpeech | VoxPopuli | Avg |
|---|---|---|---|---|---|---|---|---|
| Ark-ASR | 11.54% | 10.07% | 8.95% | 1.87% | 3.89% | 2.89% | 6.63% | 6.55% |
| Qwen3-ASR-0.6B | 11.66% | 11.06% | 9.14% | 2.13% | 4.45% | 3.03% | 7.07% | 6.93% |
| Qwen3-ASR-1.7B | 10.56% | 10.25% | 8.74% | 1.63% | 3.40% | 2.84% | 6.35% | 6.25% |
| Model | AISHELL-1 | Wenet-meeting | Wenet-net | Avg |
|---|---|---|---|---|
| Ark-ASR | 2.02% | 5.92% | 4.96% | 4.30% |
| Qwen3-ASR-0.6B | 2.07% | 5.57% | 5.45% | 4.36% |
| Qwen3-ASR-1.7B | 1.50% | 4.69% | 4.55% | 3.58% |
Ark-ASR is the 0.6B-scale ASR checkpoint trained with teacher-data adaptation and on-policy distillation from open-audio-opd.1import torch
2from transformers import AutoModelForCausalLM, AutoProcessor, AutoTokenizer
3
4model_path = "AutoArk-AI/ARK-ASR-0.6B"
5audio_path = "assets/libai.wav"
6
7device = "cuda" if torch.cuda.is_available() else "cpu"
8torch_dtype = torch.float16 if device == "cuda" else torch.float32
9
10processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
11tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
12model = AutoModelForCausalLM.from_pretrained(
13 model_path,
14 trust_remote_code=True,
15 torch_dtype=torch_dtype,
16 attn_implementation="sdpa",
17).to(device)
18model.eval()
19
20
21def build_bad_words_ids(tokenizer):
22 eos_ids = tokenizer.eos_token_id
23 keep_ids = {eos_ids} if isinstance(eos_ids, int) else set(eos_ids or [])
24 bad_ids = set(tokenizer.all_special_ids) - keep_ids
25 bad_ids.update(
26 token_id
27 for token, token_id in tokenizer.get_added_vocab().items()
28 if token.startswith("<") and token.endswith(">") and token_id not in keep_ids
29 )
30 return [[token_id] for token_id in sorted(bad_ids)]
31
32conversation = [
33 {
34 "role": "user",
35 "content": [
36 {"type": "audio", "path": audio_path},
37 {"type": "text", "text": "Please transcribe this audio."},
38 ],
39 }
40]
41
42inputs = processor.apply_chat_template(
43 conversation,
44 add_generation_prompt=True,
45 return_tensors="pt",
46 sampling_rate=16000,
47 audio_padding="longest",
48 text_kwargs={"padding": "longest"},
49 audio_max_length=30 * 16000,
50)
51inputs = inputs.to(device)
52if "audios" in inputs:
53 inputs["audios"] = inputs["audios"].to(dtype=torch_dtype)
54
55bad_words_ids = build_bad_words_ids(tokenizer)
56with torch.inference_mode():
57 outputs = model.generate(
58 **inputs,
59 do_sample=False,
60 max_new_tokens=256,
61 pad_token_id=tokenizer.pad_token_id,
62 eos_token_id=tokenizer.eos_token_id,
63 bad_words_ids=bad_words_ids,
64 )
65decoded_outputs = tokenizer.batch_decode(
66 outputs[:, inputs.input_ids.shape[1] :],
67 skip_special_tokens=True,
68)
69print(decoded_outputs)1git clone https://github.com/AutoArk/open-audio-opd
2cd open-audio-opd
3pip install -e .{"audio":"/path/to/audio.wav","text":"","task":"asr","begin_time":-1,"end_time":-1}1python scripts/infer/ark_asr_transformers.py \
2 --input /path/to/input.jsonl \
3 --output runs/infer/predictions.jsonl \
4 --model_path AutoArk-AI/ARK-ASR-0.6B \
5 --processor_path AutoArk-AI/ARK-ASR-0.6B \
6 --batch_size 40 \
7 --dtype float16 \
8 --attn_impl sdpapred_text: cleaned prediction text for downstream evaluationpred_text_raw: raw decoded generation before cleanup1python scripts/eval/eval_jwer_ark_asr_transformers.py \
2 --input /path/to/test.jsonl \
3 --output runs/eval/result.jsonl \
4 --model_path AutoArk-AI/ARK-ASR-0.6B \
5 --processor_path AutoArk-AI/ARK-ASR-0.6B \
6 --batch_size 40 \
7 --dtype float16 \
8 --attn_impl sdpa1@misc{lin2026dataefficientopd,
2 title={Data-Efficient On-Policy Distillation for Automatic Speech Recognition},
3 author={Lin, Yu and Wang, Yiming and Cai, Runyuan and Zeng, Xiaodong},
4 year={2026},
5 eprint={2605.28139},
6 archivePrefix={arXiv},
7 primaryClass={cs.AI},
8 url={https://arxiv.org/abs/2605.28139}
9}