Qwen3-ASR 课程 · 第 6 课(路线第 4 站)

Qwen3-ASR 架构精读 —— 拆开两大件

⏱ 约 25 分钟 · 前置:梅尔频谱 · 本课目标:把前五课的零件装成整机——跟着 10 秒音频走完从波形到文字的每一站,拿到全部确切数字(来自技术报告与 config.json)

地基打完了。现在你知道注意力怎么工作(第 2 课)、声音怎么变成 mel 频谱(第 3-5 课)。今天把它们装进 Qwen3-ASR 的真实机箱——所有数字都提取自技术报告和 模型仓库的 config.json,不是我的记忆。

一、整机:三件套,不是两大件

第 1 课我们说"编码器 + 解码器"两大件。精读版是三件:

Qwen3-ASR = AuT 音频编码器 + 投影器 + Qwen3 语言模型 技术报告原话:模型由 Qwen3-1.7B、一个 projector(投影器)、和 AuT 编码器构成。两个尺寸:1.7B(Qwen3-1.7B + AuT 300M)与 0.6B(Qwen3-0.6B + AuT 180M)。
🎤 波形 160,000 个数 mel 频谱 128 维 × 1000 帧 (25ms 窗 / 10ms 移) AuT 编码器 24 层自注意力(1.7B) 8 倍下采样 → 80ms/嵌入 300M 参数 投影器 1024→2048 Qwen3 LLM 28 层 · GQA 16/8 头 自回归出字 词表 151,936 language Chinese<asr_text>今天…… 以 1.7B 版、10 秒音频为例;0.6B 版数字见下表
整机数据流(数字为 1.7B 版、10 秒音频):波形 → mel → AuT 压成 125 个音频嵌入 → 投影进语言模型的空间 → LLM 自回归成文。

二、跟着 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 个嵌入:

看完动画,再玩下面的数字版(改时长,看三站的形状怎么联动):

形状表是死的,代码是活的——改时长,看三站的形状怎么联动:

def pipeline(seconds, fs=16000, n_mels=128, win=400, hop=160): samples = int(fs * seconds) frames = 1 + (samples - win) // hop # 切帧:25ms 窗 / 10ms 移 embeds = frames // 8 # AuT 8 倍下采样 print(f"{seconds:>4} 秒: 波形 {samples:>7,} 个数 -> mel {frames:>5} 帧 x 128 -> 音频嵌入 {embeds:>4} x 2048") for s in [3, 10, 30, 1200]: pipeline(s) print("1200 秒 = 官方单次转写上限;改秒数/帧移自己玩")
压缩的故事 每秒 100 帧 mel → 每秒 12.5 个音频嵌入(12.5Hz token 率)。10 秒的声音被压成 125 个"听觉词元",这就是 LLM 眼里的语音。你第 3 课的直觉"帧序列做注意力",在这里具体化为"每 80 毫秒合出一颗听觉词元"。

三、AuT 编码器:单独预训练的耳朵

AuT 是 Qwen 自研的语音编码器,在与主模型会师之前自己先受过完整 ASR 预训练(约 4000 万小时伪标签数据,中英文为主)。结构就是你在第 2 课学的东西堆起来:

1.7B 版的 AuT0.6B 版的 AuT
层数(自注意力堆叠)24 层18 层
隐藏维 d_model1024896
注意力头16 头14 头
FFN 维40963584
参数量约 300M约 180M
输出维(接投影器)20481024

两个关键设计:

四、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 的动态注意力窗口统一:

六、它怎么练成的:四阶段流水线

这是你"预训练级"目标的第一张地图,技术报告给的训练分四步:

阶段做什么数据规模
① AuT 预训练把耳朵单独练好:AED 式 ASR 预训练约 4000 万小时(伪标签,中英为主)
② Omni 预训练接上 Qwen3-Omni 基座做多模态预训练3 万亿 token
③ ASR SFT专职听写微调:多语种、流式增强、热词偏置数据;刻意做成"只听写不聊天"(防提示注入)多语精选集(与预训练不重叠)
④ ASR RL强化学习打磨:GSPO 算法,鲁棒性/功能性数据约 5 万条
checkpoint 现在再看第 1 课那张管道图,每个框你都能说出数字了:16kHz → 128 维 mel(25/10ms)→ 24 层 AuT ×8 下采样 → 投影 → 28 层 Qwen3 GQA → language X<asr_text>…。配套的架构速查卡已建好,后面推理课、微调课都靠它查数。

检索练习

本课主读材料

去读(约 15 分钟)

HF 模型卡:Qwen3-ASR-1.7B-hf

读法:对照今天的模板图,看模型卡里的 Quickstart 代码(找找 apply_transcription_request 和输出解析)和 Chat template 小节——那是下一课跑推理的预告。技术报告(§2)留给想深挖时读。

本课新术语已入 术语表:投影器、GQA、对话模板、伪标签、AED、非自回归(NAR)。

我是你的老师,别客气 这一课数字多,不用背——速查卡都在。真正要过关的是数据流:拿一张纸,不看答案,画出 10 秒音频从 160,000 个数到 125 个嵌入再到文字的全过程,卡在哪一站就问我哪一站。