Qwen3-ASR 架构精读 —— 拆开两大件
地基打完了。现在你知道注意力怎么工作(第 2 课)、声音怎么变成 mel 频谱(第 3-5 课)。今天把它们装进 Qwen3-ASR 的真实机箱——所有数字都提取自技术报告和 模型仓库的 config.json,不是我的记忆。
一、整机:三件套,不是两大件
第 1 课我们说"编码器 + 解码器"两大件。精读版是三件:
二、跟着 10 秒音频走:每一站的形状
工程师视角,最好的读法是看张量形状怎么变。10 秒音频,一路走:
| 站 | 发生了什么 | 形状(10 秒音频) |
|---|---|---|
| 输入波形 | 16kHz 采样(第 3 课) | 160,000 个数 |
| mel 频谱 | 128 维 Fbank,窗 25ms、帧移 10ms(第 5 课的装桶) | 1,000 帧 × 128 |
| AuT 编码器 | 24 层自注意力 + 8 倍下采样 → 每 80ms 一个嵌入 | 125 个嵌入 × 2048 |
| 投影器 | 把编码器输出对齐到 LLM 的输入空间 | 125 × 2048(1.7B 版 LLM 隐藏维恰为 2048) |
| Qwen3 LLM | 音频嵌入当作"听到的词元",自回归生成文字 | 输出 token 序列 |
表格是结果,过程看这里——四幕动画,把「160,000 个采样点怎么一步步变成 100 多个音频嵌入」完整演一遍:滑窗怎么跳、帧怎么铺满、8 帧怎么并成 1 个嵌入:
看完动画,再玩下面的数字版(改时长,看三站的形状怎么联动):
形状表是死的,代码是活的——改时长,看三站的形状怎么联动:
三、AuT 编码器:单独预训练的耳朵
AuT 是 Qwen 自研的语音编码器,在与主模型会师之前自己先受过完整 ASR 预训练(约 4000 万小时伪标签数据,中英文为主)。结构就是你在第 2 课学的东西堆起来:
| 1.7B 版的 AuT | 0.6B 版的 AuT | |
|---|---|---|
| 层数(自注意力堆叠) | 24 层 | 18 层 |
| 隐藏维 d_model | 1024 | 896 |
| 注意力头 | 16 头 | 14 头 |
| FFN 维 | 4096 | 3584 |
| 参数量 | 约 300M | 约 180M |
| 输出维(接投影器) | 2048 | 1024 |
两个关键设计:
- 8 倍下采样:注意力逐层聚合后,每 8 个 mel 帧合成 1 个嵌入 → 80ms 粒度,序列短 8 倍,LLM 读得又快又省。
- 动态注意力窗口(1–8 秒):AuT 的注意力窗口大小可变——这是"一个模型同时支持流式和离线"的全部秘密(第五节展开)。
四、Qwen3 LLM 解码器 + 对话模板
LLM 部分就是 Qwen3-1.7B / Qwen3-0.6B 本尊(28 层,词表 151,936,RoPE 位置编码——第 2 课埋的伏笔;1.7B 隐藏维 2048、FFN 6144)。一个新词:GQA(分组查询注意力)——16 个查询头共享 8 组 K/V,是第 2 课多头注意力的省显存变体,推理更快。
音频以连续向量(不是离散 token)进入对话的 user 消息,热词放在 system 消息,输出在 assistant 消息。整张对话模板长这样(你会反复见到它,微调时也要按它造数据):
<|im_start|>system
Vocabulary: 幂等、回调、Qwen3-ASR ← 热词/上下文(自由文本,可选)
<|im_end|>
<|im_start|>user
<|audio_start|><|audio_pad|><|audio_end|> ← 音频占位符,训练/推理时被
<|im_end|> 125 个音频嵌入替换
<|im_start|>assistant
language Chinese<asr_text>今天我们发布…… ← 模型生成的部分
<|im_end|>
language 中文<asr_text> 开头(语言标签 + 转写标记词元),processor 可以自动解析掉。语言也能强制:预填 language Chinese<asr_text> 让模型续写即可。特殊词元都是有编号的真 token(如 <asr_text>=151704、<|audio_pad|>=151676),详见架构速查卡。
五、流式与离线:一个窗口解决
传统上流式(边说边出)和离线(整段转写)要两套模型。Qwen3-ASR 靠 AuT 的动态注意力窗口统一:
- 离线:窗口开大(最长 8 秒,长音频分段滑窗),每帧看到充分上下文 → 精度最高;
- 流式:窗口收小(1 秒级),音频按 2 秒一块喂入,最近几块"不封死"(算出初步结果、允许被后续上下文回改);首字延迟约 92ms(0.6B,vLLM 实测);
- 代价:流式比离线平均损失约 0.6–0.9 个 WER 点——上下文看得少,自然略差,但换来实时性。
六、它怎么练成的:四阶段流水线
这是你"预训练级"目标的第一张地图,技术报告给的训练分四步:
| 阶段 | 做什么 | 数据规模 |
|---|---|---|
| ① AuT 预训练 | 把耳朵单独练好:AED 式 ASR 预训练 | 约 4000 万小时(伪标签,中英为主) |
| ② Omni 预训练 | 接上 Qwen3-Omni 基座做多模态预训练 | 3 万亿 token |
| ③ ASR SFT | 专职听写微调:多语种、流式增强、热词偏置数据;刻意做成"只听写不聊天"(防提示注入) | 多语精选集(与预训练不重叠) |
| ④ ASR RL | 强化学习打磨:GSPO 算法,鲁棒性/功能性数据 | 约 5 万条 |
检索练习
本课主读材料
读法:对照今天的模板图,看模型卡里的 Quickstart 代码(找找 apply_transcription_request 和输出解析)和 Chat template 小节——那是下一课跑推理的预告。技术报告(§2)留给想深挖时读。
本课新术语已入 术语表:投影器、GQA、对话模板、伪标签、AED、非自回归(NAR)。