Self-supervised speech · Masked prediction

HuBERT

HuBERT 先把完整语音聚类成离散伪标签,再遮住一部分输入,让 Transformer 根据上下文预测被遮蔽位置的类别。理解它的关键,是不要把“生成目标”和“预测目标”混成同一条路径。

两条路径完整语音离线生成目标;遮蔽语音在线学习预测。两者只在 loss 处对齐。
问题架构伪标签训练 Loss迭代训练边界资料

一、没有文字标注,语音模型预测什么

BERT 可以遮住一个词,再用原句中的词作为答案;语音却是连续波形,没有天然的词表,也没有现成的音素边界。HuBERT 的解决办法,是先用无监督聚类构造一个临时的离散词表。

对每个时间位置,聚类器给出类别编号 z_t。这个编号不要求等于真实音素,只要在相似声学片段上足够一致,就能作为 masked prediction 的监督信号。模型由此同时学习两件事:把可见语音变成有用的声学表示,并利用长程上下文推断被遮蔽片段。

一句话定义:HuBERT 是一种用离线聚类标签监督遮蔽预测的自监督语音表征学习方法。

二、HuBERT 的训练架构

HuBERT 的离线目标分支与在线模型分支 完整语音在上方经过 MFCC 或上一轮 HuBERT 特征和 k-means,得到逐帧聚类标签。相同语音在下方经过卷积编码、连续片段遮蔽、Transformer、投影和 softmax,预测被遮蔽位置的标签,两条分支在交叉熵损失处汇合。 离线目标分支:输入完整、不做遮蔽 在线模型分支:卷积编码后遮蔽连续片段 完整语音 X不含人工标签 特征提取首轮:MFCC后续:上一轮隐藏层 k-means离线聚类 聚类标签 Zz₁, z₂, …, zₜ 原始波形 X16 kHz audio 7 层 CNN512 channels约 20 ms / step Span mask得到 X̃ Transformer双向上下文输出 o₁ … oₜ Projection+ softmax p(zₜ)预测 仅比较被遮蔽位置 t ∈ M Masked cross-entropy
概念图:目标分支先于当前轮训练离线完成;模型分支只接收经过遮蔽的连续表示。图中没有画出特征与标签时间分辨率的对齐细节。

论文中的卷积波形编码器由 7 个 512 通道层组成,总下采样倍数为 320;对 16 kHz 音频,输出约为每 20 ms 一步。随后随机选择起点并遮蔽连续长度为 10 的 span,再送入 Transformer。Base、Large 和 X-Large 分别使用 12、24 和 48 层 Transformer。

三、ground truth 到底从哪里来

可以把 z_t 理解成训练答案,但它不是人工标注的真实音素。更准确的名字是聚类伪标签hidden-unit target:它由未遮蔽的完整语音所提取的特征离线计算得到。

训练轮次用于聚类的输入论文设置当前模型看到什么
第一轮完整语音的 39 维 MFCCk-means,100 类卷积编码后被部分遮蔽的序列
第二轮第一轮 HuBERT 第 6 层隐藏表示k-means,500 类同样只看到当前轮的遮蔽输入
Large / X-Large第二轮 Base HuBERT 第 9 层表示可视为第三轮目标当前大模型的遮蔽输入

“未编码时聚类”并不准确。聚类不是直接作用在原始波形采样值上,而是作用在完整语音提取出的 MFCC 或上一轮模型隐藏表示上。“未遮蔽”描述输入是否完整,“未编码”描述是否经过特征提取,两者不是一回事。

四、训练 Loss 如何计算

设语音序列为 X,被遮蔽位置集合为 M,遮蔽后的输入为 X̃ = r(X,M),离线聚类标签为 Z = [z₁,…,zₜ]。Transformer 在位置 t 输出 o_t,再用投影矩阵 A 与各聚类码字嵌入 e_c 的余弦相似度产生类别概率:

pf(c | X̃,t) = exp(sim(Aot,ec)/τ) / Σc′=1…C exp(sim(Aot,ec′)/τ)
论文取温度系数 τ = 0.1。

论文把目标写成需要最大化的 masked log-likelihood:

Lm = Σt∈M log pf(zt | X̃,t)

在常见深度学习代码中,我们最小化负对数似然,因此等价的 loss 写作:

HuBERT = − Σt∈M log pf(zt | X̃,t)

论文也定义了未遮蔽位置的项 L_u,一般形式是 L = αL_m + (1−α)L_u。HuBERT 的关键设置是 α=1:只在被遮蔽位置上计算预测目标,迫使模型依靠周围上下文,而不只是复刻当前帧的聚类器输出。

为什么模型不会直接偷看目标标签?

目标标签在离线分支中生成,只用于 loss;它不作为 Transformer 输入。位置 t 被遮蔽后,模型只能看到 mask embedding 和其他未遮蔽位置的表示,再去预测该位置原本对应的 z_t

五、为什么还要重新聚类

第一轮 MFCC 更接近局部声学特征,聚类目标可能含有说话人、环境和短时频谱差异。经过一轮 masked prediction 后,HuBERT 的中间层已经结合了上下文;用这些表示重新聚类,可以为下一轮提供更有结构的离散目标。

完整语音 → MFCC 聚类 → HuBERT 第 1 轮 → 隐藏表示聚类 → HuBERT 第 2 轮

这不是在同一个优化 step 内做端到端聚类。聚类器先离线拟合并冻结,生成整套标签后,下一轮 HuBERT 才开始训练。因此伪标签不会随着每个梯度 step 同时漂移。

六、这套目标的能力边界

  • 类别编号没有语言学语义保证:某个聚类可能近似音素,也可能混合多个声学因素。
  • 一致性比“绝对正确”更重要:论文的核心观察是,即使初始聚类不完美,稳定的帧级目标仍能支持上下文学习。
  • 目标质量仍然重要:迭代聚类通常能改善目标,但选择哪一层、多少类和哪些数据都会改变伪标签。
  • 预训练不是最终 ASR loss:用于语音识别微调时,论文移除聚类预测头,换成字符 softmax,并使用 CTC loss。

因此,HuBERT 的“ground truth”最好理解为当前预训练任务的确定答案,而不是语音世界中的真实类别。它的价值在于提供一个可学习、可迭代的离散接口。

评论加载中...