4、唤醒词数据集构建:数据采集规范与增强技巧
做唤醒词定制,第一步就是搞数据集。这事儿我踩过不少坑,今天跟你聊聊数据采集的规范和增强方法。说白了,数据集的质量直接决定了模型能不能用。
4.1 数据采集规范:采样率、位深、通道数
先说说硬件参数。这三个指标,一个都不能错。
采样率:16kHz 是黄金标准
我个人习惯用16kHz。为什么?因为人声的主要能量集中在4kHz以下,16kHz的采样率完全够用。你想想看,电话语音才8kHz,不也能听清吗?
我在项目中遇到过有人用44.1kHz采集唤醒词数据,结果模型大了两倍,效果没提升。白白浪费存储和算力。
核心建议:
- 唤醒词数据:16kHz 单声道,16bit 位深
- 不要用44.1kHz或48kHz,除非你有特殊需求
- 8kHz也可以,但高频信息会丢失,影响远场唤醒
位深:16bit 就够了
位深决定了动态范围。16bit能提供96dB的信噪比,对于唤醒词来说绰绰有余。我曾经试过24bit,效果没差别,文件却大了50%。
嗯,这里要注意:如果你的设备麦克风质量很差,背景噪声很大,24bit也救不了你。先解决硬件问题。
通道数:单声道是王道
唤醒词模型通常处理单声道。多声道会增加计算量,而且大部分嵌入式设备只有一个麦克风。
| 参数 | 推荐值 | 不推荐 |
|---|---|---|
| 采样率 | 16kHz | 44.1kHz, 48kHz |
| 位深 | 16bit | 24bit, 32bit |
| 通道数 | 单声道 | 立体声 |
4.2 数据标注格式:时间戳与标签
标注是数据构建中最头疼的环节。我见过太多团队因为标注不规范,导致模型训练失败。
时间戳标注:精确到帧
唤醒词标注需要精确到起始和结束时间。格式一般是:
# 标准格式
[起始时间(秒)] [结束时间(秒)] [标签]
# 示例
0.00 0.85 wake_word
1.20 2.05 wake_word
3.50 3.55 non_wake # 非唤醒词也要标
我个人习惯用毫秒级精度。为什么?因为唤醒词通常很短,比如"小爱同学"才0.8秒,差100ms就可能把"小"字切掉一半。
避坑指南:
我曾经因为时间戳精度不够,导致模型把"你好"的"你"字当成了唤醒词。后来发现是标注时把起始时间写成了0.0秒,实际应该是0.12秒。差这120ms,模型就学歪了。
标签设计:简单明了
标签不要搞复杂。我建议用两类:
wake_word:唤醒词本身non_wake:非唤醒词(包括静音、其他语音、噪声)
你可能会问:要不要标多个唤醒词?可以,但每个唤醒词至少需要1000条样本。否则模型学不好。
4.3 数据增强方法:加噪、变速、音量扰动
数据不够?增强来凑。但增强不是乱加,要有策略。
加噪:模拟真实场景
我常用的噪声类型:
- 白噪声:模拟电子噪声
- 粉红噪声:模拟环境风声
- 人声噪声:模拟多人说话场景
- 厨房噪声:模拟家电运行
加噪时信噪比(SNR)控制在5-20dB之间。太低了语音被淹没,太高了没效果。
# 加噪示例(Python伪代码)
def add_noise(audio, noise, snr_db=15):
# 计算语音和噪声的能量
audio_power = np.mean(audio**2)
noise_power = np.mean(noise**2)
# 调整噪声能量到目标SNR
scale = np.sqrt(audio_power / (noise_power * 10**(snr_db/10)))
noisy_audio = audio + scale * noise
return noisy_audio
个人经验:
我建议每个唤醒词样本至少加3种不同噪声。比如:安静环境+白噪声、办公室环境+人声噪声、户外环境+风声。这样模型才能适应各种场景。
变速:让模型学会快慢
变速范围控制在0.8x到1.2x之间。太快了语音失真,太慢了听着别扭。
我记得有一次,用户说"小爱同学"说得特别快,模型死活不响应。后来发现是训练数据里没有快速版本。加了1.1x变速后,问题解决了。
音量扰动:应对不同距离
音量扰动范围:-6dB到+6dB。模拟用户在不同距离说话的情况。
- -6dB:模拟远场(3米外)
- 0dB:正常距离(1米)
- +6dB:模拟近场(10厘米)
你想想看,用户可能贴着麦克风喊,也可能在房间另一头说。模型都得能识别。
4.4 数据增强的组合策略
增强不是单独用的,要组合。我常用的组合方式:
| 场景 | 增强组合 | 样本比例 |
|---|---|---|
| 安静环境 | 音量扰动 + 轻微变速 | 30% |
| 噪声环境 | 加噪 + 音量扰动 | 40% |
| 远场环境 | 加噪 + 变速 + 音量降低 | 30% |
核心原则:
增强后的数据要能覆盖真实场景的80%以上。不要为了增强而增强,否则模型会学到噪声特征,而不是唤醒词本身。
好了,数据采集和增强就聊到这儿。下一章我们聊聊模型训练的具体技巧。记住:数据质量决定模型上限,增强只是锦上添花。