一、没有文字标注,语音模型预测什么
BERT 可以遮住一个词,再用原句中的词作为答案;语音却是连续波形,没有天然的词表,也没有现成的音素边界。HuBERT 的解决办法,是先用无监督聚类构造一个临时的离散词表。
对每个时间位置,聚类器给出类别编号 z_t。这个编号不要求等于真实音素,只要在相似声学片段上足够一致,就能作为 masked prediction 的监督信号。模型由此同时学习两件事:把可见语音变成有用的声学表示,并利用长程上下文推断被遮蔽片段。
一句话定义:HuBERT 是一种用离线聚类标签监督遮蔽预测的自监督语音表征学习方法。
二、HuBERT 的训练架构
论文中的卷积波形编码器由 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 维 MFCC | k-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 的余弦相似度产生类别概率:
论文取温度系数 τ = 0.1。
论文把目标写成需要最大化的 masked log-likelihood:
在常见深度学习代码中,我们最小化负对数似然,因此等价的 loss 写作:
论文也定义了未遮蔽位置的项 L_u,一般形式是 L = αL_m + (1−α)L_u。HuBERT 的关键设置是 α=1:只在被遮蔽位置上计算预测目标,迫使模型依靠周围上下文,而不只是复刻当前帧的聚类器输出。
为什么模型不会直接偷看目标标签?
目标标签在离线分支中生成,只用于 loss;它不作为 Transformer 输入。位置 t 被遮蔽后,模型只能看到 mask embedding 和其他未遮蔽位置的表示,再去预测该位置原本对应的 z_t。
五、为什么还要重新聚类
第一轮 MFCC 更接近局部声学特征,聚类目标可能含有说话人、环境和短时频谱差异。经过一轮 masked prediction 后,HuBERT 的中间层已经结合了上下文;用这些表示重新聚类,可以为下一轮提供更有结构的离散目标。
这不是在同一个优化 step 内做端到端聚类。聚类器先离线拟合并冻结,生成整套标签后,下一轮 HuBERT 才开始训练。因此伪标签不会随着每个梯度 step 同时漂移。
六、这套目标的能力边界
- 类别编号没有语言学语义保证:某个聚类可能近似音素,也可能混合多个声学因素。
- 一致性比“绝对正确”更重要:论文的核心观察是,即使初始聚类不完美,稳定的帧级目标仍能支持上下文学习。
- 目标质量仍然重要:迭代聚类通常能改善目标,但选择哪一层、多少类和哪些数据都会改变伪标签。
- 预训练不是最终 ASR loss:用于语音识别微调时,论文移除聚类预测头,换成字符 softmax,并使用 CTC loss。
因此,HuBERT 的“ground truth”最好理解为当前预训练任务的确定答案,而不是语音世界中的真实类别。它的价值在于提供一个可学习、可迭代的离散接口。
评论加载中...