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%以上。不要为了增强而增强,否则模型会学到噪声特征,而不是唤醒词本身。

好了,数据采集和增强就聊到这儿。下一章我们聊聊模型训练的具体技巧。记住:数据质量决定模型上限,增强只是锦上添花。