大模型 ASR 语音识别原理分析
Qwen3 在2026年初开源了ASR语音识别模型,据官方称是state-of-the-art效果,引起Redis作者antirez的注意,他用C语言重写了语音识别推理的代码[1],这个项目第三方依赖很少,通过它可以方便地理解大模型语音识别的过程。
下面是在CPU上测试一段12.76s的音频文件离线识别的耗时分布,可以大致了解各阶段的消耗占比。
| Phase | Time | % |
|---|---|---|
| Tokenizer load (vocab.json) | 76ms | 1.4% |
| Mel spectrogram (1276 frames) | 30ms | 0.5% |
| Encoder (166 tokens) | 2370ms | 42.6% |
| Prefill (181 tokens into KV cache) | 2352ms | 42.2% |
| Decode (21 tokens, 34.3ms/tok) | 720ms | 12.9% |
| Overhead | ~20ms | 0.4% |
Real-time factor: 5.57s / 12.76s = 0.44
涉及代码中的主要函数
qwen_transcribe_audio
transcribe_segment
qwen_mel_spectrogram
qwen_encoder_forward
qwen_decoder_prefill
qwen_decoder_forward
source: https://sourcegraph.com/r/github.com/antirez/qwen-asr@main/-/blob/qwen_asr.c?L590
下面将介绍以上运行过程,标题后面的百分比是耗时占比,有的细节没有展开说,只记录了要点,主要是我的学习笔记,重点讲解大模型 Transformer 架构。
1. 音频预处理(PCM变换为频谱) 1%
过程:预加重、分帧、加窗;短时FFT;Mel滤波。
分帧:每帧25ms,为防止割裂保持平滑性,取帧时与前后帧边界重叠, 窗口每次移动10ms,所以 100 frames/s。
