前言
wav2vec 2.0 和 HuBERT 作为大规模自监督预训练模型,利用少量标注微调后,可以在 ASR 任务上得到很好的效果。
WavLM(Chen et al.,Microsoft,2022)将这套范式应用到了声纹验证(ASV,Automatic Speaker Verification)和说话人日志(SD, Speaker Diarization)等任务。架构上 WavLM 几乎完全沿用 HuBERT,只额外加了门控相对位置偏置,数据从 Libri-Light 6 万小时扩到 9.4 万小时。结果是拿下 SUPERB 全栈榜首,并且到 2026 年仍是声纹与说话人日志领域最常用的自监督底座。
一、Masked Speech Denoising and Prediction
掩码语音去噪预测是 WavLM 的核心创新点。
1.1 输入弄脏,答案干净
text
一条训练语音 u(主说话人)
│
├─ 80% 概率保持干净(照旧 HuBERT 式训练)
├─ 20% 概率做「模拟」:
│ ├─ 混人声:从同 batch 随机抽另一条语音,随机截一段、随机能量比叠加
│ └─ 混噪声:从 DNS 挑战赛噪声库抽一段,随机信噪比叠加
│ (污染区域 < 50%,主说话人在时长上占优)
▼
掩码(同 HuBERT:p=8%、span=10、替换成可学习 mask 向量)
▼
Transformer + 分类头
▼
预测目标:【原始干净 u】的 k-means 单元 ← 灵魂在这一行

图 1 模型结构
如图 1 所示,架构、掩码策略、分类头(投影 + 单元 embedding 余弦 + 温度 softmax + 交叉熵)、只在被掩位置算损失,**和 HuBERT一致**;伪标签沿用 HuBERT 中间层 embedding k-means 聚类得到,具体来说,Base 用 HuBERT 第 1 轮模型的第 6 层,Base+ 和 Large 用 HuBERT 第 2 轮(官方发布版)的第 9 层。论文试过用训好的 WavLM 来出伪标签,但效果比用 HuBERT 标签略差一点。**WavLM 的创新全在训练数据处理。**
下面具体说明训练时数据处理的方式和参数。
text
算法 1
输入:batch U = {u¹..u^B}(波形,长度 L)、混叠概率 p、
DNS 噪声库 N(M 条)、噪声概率 p_n
L2 从 batch 里用伯努利(p=20%)抽出子集 U^S → 只有这 20% 会被弄脏
L3 对每条主语音 u^pri ∈ U^S:
L4 抽随机数 v ~ U(0,1)
L5-7 若 v > p_n:【混人声】从 batch 里等概率(1/B)抽一条 u^sec
抽能量比 r ~ U(-5, +5) dB
L8-10 否则: 【混噪声】从 DNS 噪声库等概率(1/M)抽一条
抽能量比 r ~ U(-5, +20) dB
L12 抽混叠长度 l ~ 均匀{1, ..., L/2} ← 不超过 50%
L13 抽主语音的插入起点 s^pri ~ 均匀{1, ..., L-l}
L14 抽干扰源的裁剪起点 s^sec ~ 均匀{1, ..., L-l}
L15 算主语音能量 E^pri = Σ(u^pri)²/L
L16 算干扰源能量 E^sec = Σ(u^sec)²/L
L17 算缩放系数 scl = sqrt( E^pri / (10^(r/10) · E^sec) ) ← 缩放系数对应信噪比
L18 u^pri[s^pri : s^pri+l] += scl · u^sec[s^sec : s^sec+l] ← 只在这一段叠加
超参的实际取值:
| 符号 | 含义 | 取值 |
|---|---|---|
| p p p | 一个 batch 中被做模拟的语音比例 | 20% |
| p n p_n pn | 模拟时选噪声(而非选人声)的概率 | Base:0 / Base+ 与 Large:10% |
| l l l | 混叠段长度 | U { 1 , ... , L / 2 } \mathcal{U}\{1,\dots,L/2\} U{1,...,L/2},即 ≤ 50%,期望 25% |
| r r r | 混叠能量比,实际就是 SNR(dB) | 人声: U ( − 5 , 5 ) \mathcal{U}(-5,5) U(−5,5) dB;噪声: U ( − 5 , 20 ) \mathcal{U}(-5,20) U(−5,20) dB |
| 干扰源个数 | 每条语音加几段 | 1 段、1 个干扰源(人声与噪声不叠加) |
| 噪声来源 | DNS 挑战赛(Deep Noise Suppression)噪声库 | |
| 人声来源 | 同一个 batch 里随机另一条语音 |
WavLM 标签是混合前干净原句的单元,模型在掩码位置要填的是主说话人在这里说了什么单元,它需要依次做到 ① 判断谁是主说话人;② 把干扰说话人或噪声从表示里剥离;③ 再做内容预测。
1.2 波形混叠 vs 特征掩码
混叠和掩码不是在同一层做的。
| 机制 | 作用域 | 干什么 | 比例 |
|---|---|---|---|
| Mixing(混叠/加噪) | 波形域(采样点) | 把别人的语音或噪声加进来,把输入弄脏 | 污染区域 ≤ 50%,期望约 25% |
| Mask(掩码) | CNN 输出的帧 | 把帧替换成可学习 mask 向量,做完形填空 | 沿用 HuBERT, p = 8 % p=8\% p=8%、span=10,实际约 57% 帧 |
先在波形上混叠,再在 CNN 特征上挖空。
1.3 混叠比例
| 干净 | 混人声 | 混噪声 | |
|---|---|---|---|
| WavLM Base | 80% | 20% | 0% |
| WavLM Base+ / Large | 80% | 20 % × 90 % = 20\%\times 90\% = 20%×90%= 18% | 20 % × 10 % = 20\%\times 10\% = 20%×10%= 2% |
- WavLM Base 没混过噪声,只做了说话人混叠;
- 加噪只占全部数据的 2%;
- 80% 的语音全程干净,照常做 HuBERT 训练。
所以 WavLM 主要靠混叠来学习声纹信息,去掉混叠说话人日志相对退化 32.5%。
1.4 r r r(SNR)
算法 1 中,缩放后干扰的能量是
s c l 2 E s e c = E p r i 10 r / 10 scl^2 E^{sec} = \frac{E^{pri}}{10^{r/10}} scl2Esec=10r/10Epri
于是
SNR = E p r i s c l 2 E s e c = 10 r / 10 ⟹ SNR(dB) = r \text{SNR} = \frac{E^{pri}}{scl^2 E^{sec}} = 10^{r/10} \quad\Longrightarrow\quad \text{SNR(dB)} = r SNR=scl2EsecEpri=10r/10⟹SNR(dB)=r
mixing energy ratio r r r 就是目标信噪比(dB)。
| 场景 | r r r 范围 | 实际含义 |
|---|---|---|
| 混人声 | − 5 ∼ + 5 -5 \sim +5 −5∼+5 dB | 一半概率下干扰说话人比主说话人更响 ( r < 0 r<0 r<0) |
| 混噪声 | − 5 ∼ + 20 -5 \sim +20 −5∼+20 dB | 多数情况噪声较轻 |
由于混叠人声可能会很响,所以算法限制污染区域必须小于 50%,这样模型才能根据说话人时长来判断谁是主说话人。
二、两个配套升级
2.1 门控相对位置偏置(gated relative position bias)
wav2vec 2.0/HuBERT 用卷积位置嵌入(输入端加一次)。WavLM 在每层注意力打分里加相对位置偏置:
α i j ∝ exp ( q i ⋅ k j d + r i − j ) \alpha_{ij} \propto \exp\Big(\frac{q_i \cdot k_j}{\sqrt{d}} + r_{i-j}\Big) αij∝exp(d qi⋅kj+ri−j)
- r i − j r_{i-j} ri−j 只依赖相对距离 i − j i-j i−j(T5 式分桶共享,近处逐桶精细、远处对数粗分);
- 门控 : r i − j r_{i-j} ri−j 不是纯查表的常数,还会被当前帧内容算出的门调制,门控让位置偏置随内容自适应。
加入后 ASR 稳定小涨,但对声纹等任务没提升。注意,卷积位置嵌入没有被替换,而是并存。
这个偏置提升有限,后来的 SSL 模型也没有用。现代 LLM 全部走 RoPE 路线(完全没参数,外推能力强)。
2.2 数据:960h/6 万小时 → 9.4 万小时
| 模型 | 层数/维度 | 参数量 | 预训练数据 |
|---|---|---|---|
| WavLM Base | 12 层 / 768 | ~95M | LS-960(960 小时朗读) |
| WavLM Base+ | 12 层 / 768 | ~95M | 94k 小时混合 |
| WavLM Large | 24 层 / 1024 | ~317M | 94k 小时混合 |
94k 小时 = Libri-Light 60k(有声书)+ VoxPopuli 24k(欧洲议会演讲)+ GigaSpeech 10k(播客/YouTube/有声书)。增加了训练数据的多样性,增强了鲁棒性。
三、结果分析
3.1 三档官方模型
| Base | Base+ | Large | |
|---|---|---|---|
| Transformer 层数 | 12 | 12 | 24 |
| 隐藏维 | 768 | 768 | 1024 |
| 参数量 | 94.70M | 94.70M | 316.62M |
| 预训练数据 | LS-960 | Mix 94k | Mix 94k |
| 训练步数 | 400k | 1M | 700k |
| 加噪概率 p n p_n pn | 0 | 10% | 10% |
| HuggingFace 名称 | microsoft/wavlm-base |
microsoft/wavlm-base-plus |
microsoft/wavlm-large |
Base 与 Base+ 架构完全相同,只差数据。实操上直接用 Base+,几乎全面强于 Base。
注意,论文 V.A 写 Base 8 头、Large 12 头,但 HuggingFace config 是 Base+ 12 头、Large 16 头。实际跑的是 HuggingFace 的配置。
3.2 评测榜单
SUPERB(Speech processing Universal PERformance Benchmark,2021)是一个评测,共 15 个任务,分属五个方面:
| 方面 | 任务 |
|---|---|
| 内容 | 音素识别 PR、语音识别 ASR、跨域语音识别 OOD-ASR、关键词检出 KS、按例查询 QbE |
| 说话人 | 说话人辨识 SID、声纹验证 ASV、说话人日志 SD |
| 语义 | 意图分类 IC、槽位填充 SF、语音翻译 ST |
| 副语言 | 情感识别 ER |
| 生成 | 语音增强 SE、源分离 SS、语音转换 VC |
其中后四项(ST、SE、SS、VC)来自扩展版 SUPERB-SG,把基准从纯判别任务扩到了语义与生成任务。
SUPERB 有官网 superbbenchmark.org 和可提交的排行榜,但挑战赛是一次性的(AAAI SAS 2022 workshop),榜单基本冻结在 2022 年,可以将 SUPERB 当作 2021--2022 年自监督表示能力的快照。
3.3 消融实验
| 参数 | SID Acc↑ | ASV EER↓ | SD DER↓ | PR PER↓ | ASR WER↓ | Overall↑ | |
|---|---|---|---|---|---|---|---|
| HuBERT Base | 94.68M | 81.42 | 5.11 | 5.88 | 5.41 | 6.42 | 70.9 |
| WavLM Base | 94.70M | 84.51 | 4.69 | 4.55 | 4.84 | 6.21 | 72.0 |
| − w/o structure modification | 94.68M | 84.74 | 4.61 | 4.72 | 5.22 | 6.80 | 71.9 |
| − w/o denoising task | 94.70M | 84.39 | 4.91 | 6.03 | 4.85 | 6.08 | 71.7 |
去掉门控相对位置偏置(第 3 行):
- PR 从 4.84 涨到 5.22(相对退化 7.9% )、ASR 从 6.21 涨到 6.80(相对退化 9.5%);
- 但 SID 从 84.51 变成 84.74(更好) 、ASV 从 4.69 变成 4.61(更好)。
去掉混叠去噪(第 4 行):
- SD 从 4.55 涨到 6.03,相对退化 32.5%,比 HuBERT Base 差;
- 但 ASR 从 6.21 降到 6.08(更好)。
| 创新点 | 主要受益 | 在对方地盘上 |
|---|---|---|
| 门控相对位置偏置 | 内容类(PR、ASR) | 说话人任务略微变差 |
| 掩码去噪 + 混叠 | 说话人类(SD、SID、ASV) | ASR 略微变差 |
SUPERB 的层加权提供了可解释性:
- SID / ASV / SD(说话人) :权重集中在底层和中浅层;
- PR / ASR / IC / SF(内容与语义) :权重集中在顶层。
总结
WavLM 在 HuBERT 的基础上将输入混叠或加噪,答案保持干净,把说话人辨别和去噪变成了掩码预测的前置子任务。在声纹、说话人日志、语音分离任务有明显提升,说话人日志相对 HuBERT 提升 22.6%。