TTS 训练的短板
大多数唤醒词模型的训练数据靠 TTS 生成。
找几个发音人,设定不同的语速、音调、语气,批量合成几百上千条音频,再混上噪声和远场模拟,训练集就有了。这套流程最简单。
但 TTS 只能生成标准发音。
标准普通话、标准语速、标准语调。训出来的模型面对标准输入表现很好,实验室准确率能到 90% 以上。
问题是真实用户不是播音员。有人带口音,有人语速忽快忽慢,有人咬字习惯和标准差得远。TTS 覆盖不到,模型就不认识。
这也是为什么很多人说"训练时看着好好的,一用就拉胯"。
为什么加几句真人录音就解决了
TTS 覆盖了大概 95% 的标准发音,剩下那 5% 的真实发音差异,模拟不了。
但真人可以。
让用户录 10 句自己的唤醒词,混入 TTS 数据一起训。真人的声学特征把模型的"决策边界"拓宽了——从只认识标准发音,扩展到也认识你的发音。模糊判断少了,准确率就上来了。
实测数据:
带口音用户
- 纯 TTS:召回率约 50%
- TTS + 10 句真人:召回率 90% 以上
不是边际改善,是质的差距。10 句话的事。
训练上两个细节:
- 50 倍权重,不是增加轮数。只加 epoch,TTS 数据量太大,会把模型注意力拉回标准发音,真人效果被稀释。50 倍权重让真人梯度信号更突出。
- 真人不做过度增强。TTS 需要加噪加混响因为那是干净的合成声音。真人录音本身就是真实环境录的,底噪和混响都是真的,再增强反而失真。只做语速微调和少量加噪就够了。
另外真人录音还能降误触发率,实测降了约一成。边界清晰了,模糊区里的背景噪声不再被误判。
怎么用
听词的语音增强款(¥99)做的就是这件事。
和基础款(纯 TTS,¥39)的区别就是加入了你自己的 10 句录音。APP 端引导你说 10 次关键词,VAD 自动切分,上传后大约半小时出模型。同样导出 100KB 左右的 ONNX,不限制部署数量,接 onnx-wakeword 在 Android、Linux、Web、ESP32 上直接跑。
发音比较标准的,基础款就够了。带口音的、语速偏快的、怎么调都差点意思的——加 10 句话,比调参数管用得多。