2. 唤醒词技术基础

各位同学,咱们直接进入正题。唤醒词模型能不能做好,数据是地基。我见过太多团队花几个月调模型结构,最后发现是数据采集阶段埋了雷。这一章,我就把数据采集和标注的坑,一个一个给你们指出来。

2.1 麦克风阵列选型:别只看参数,要看场景

选麦克风阵列,说白了就是选「耳朵」。你想想看,唤醒词模型要在什么样的环境下工作?是放在客厅茶几上,还是嵌在智能音箱里,又或者是车载环境?场景不同,阵列的选型逻辑完全不同。

我个人习惯把阵列分成三类:

阵列类型 典型配置 适用场景 我踩过的坑
线性阵列 2~4 颗 MEMS 麦克风一字排开 电视、会议音箱(水平方向定位) 垂直方向无区分,人站着和坐着唤醒率差 15%
环形阵列 4~8 颗均匀分布在圆周上 智能音箱、桌面设备(360° 唤醒) 直径太小(< 4cm)时,低频波束形成效果极差
球形阵列 多颗分布在球面 机器人、会议全向拾音 算法复杂度高,嵌入式芯片跑不动
注意: 别迷信「麦克风越多越好」。我曾经在一个项目里用了 8 颗麦克风的环形阵列,结果因为间距太小,高频段出现严重的空间混叠。最后换回 6 颗,间距拉到 4.5cm,效果反而更好。阵列的物理孔径比数量更重要。

2.2 远场/近场数据采集规范

数据采集这块,我把它拆成两个维度:距离和角度。很多团队只关注距离,忽略了角度覆盖,结果模型在侧面唤醒时直接「装死」。

2.2.1 近场采集(0.1m ~ 0.5m)

近场数据主要用于模拟用户贴近设备说话的场景,比如对着智能音箱的顶部喊「小爱同学」。近场采集相对简单,但有几个细节容易翻车:

  • 距离梯度: 至少采集 0.1m、0.2m、0.3m、0.5m 四个距离点。我习惯在 0.3m 处多采 30% 的数据,因为这个距离是用户最自然的交互距离。
  • 角度覆盖: 0°(正对)、±30°、±60°、±90°。注意,±90° 时人的嘴巴几乎对着麦克风的侧面,高频衰减严重,这个角度数据一定要够。
  • 呼吸和喷麦: 近场采集时,呼吸声和「p」「t」等爆破音会被放大。我建议在麦克风前加一层防风海绵,否则模型会学到「喷麦特征」,导致误唤醒。

2.2.2 远场采集(0.5m ~ 5m)

远场才是真正考验功底的地方。远场数据要模拟真实家居环境,混响、背景噪声、人声干扰一个都不能少。

我总结了一套远场采集的「铁三角」规范:

  1. 混响时间(RT60)控制: 在消声室(RT60 < 0.1s)、普通客厅(RT60 ≈ 0.3~0.5s)、混响房间(RT60 > 0.8s)三种环境下分别采集。比例建议 1:2:1。
  2. 信噪比(SNR)梯度: 采集 SNR 从 -5dB 到 +20dB 的数据。我遇到过最坑的情况是,模型在安静环境下唤醒率 99%,但一开空调(SNR ≈ 5dB)直接掉到 60%。
  3. 干扰声类型: 电视声、音乐声、厨房碗碟声、儿童哭闹声。每种干扰声至少采集 30 分钟。
我的经验: 远场采集时,一定要同步录制一条「近场参考通道」。具体做法是在距离说话人 10cm 处放一个独立麦克风,同步录音。这条参考通道可以用来做后期数据对齐和信噪比计算,非常实用。

2.3 标注工具与质量把控

数据采完了,标注才是真正的「体力活+技术活」。我见过不少团队用开源工具凑合,结果标注质量一塌糊涂,模型训练出来全是「幻觉」。

2.3.1 标注工具选型

我个人推荐以下三款工具,各有侧重:

工具名称 核心功能 适合团队规模 我的评价
Praat 语音标注、频谱分析、边界微调 1~5 人小团队 免费、轻量,但多人协作困难
Audacity + LabelMe 波形标注、标签管理、批量导出 5~20 人 组合使用,成本低,但需要写脚本
专业标注平台(如标贝、海天瑞声) 全流程管理、质检、自动预标注 20 人以上或商业项目 贵,但省心。我建议预算充足时直接上

2.3.2 标注规范:边界决定成败

唤醒词标注最核心的就是「边界」。唤醒词的起始点和结束点标偏了,模型学到的特征就是错的。

我制定了一套标注规范,你可以直接拿去用:

  • 起始边界: 从唤醒词第一个音节的声母爆发点开始。比如「小爱同学」的「x」音,要从摩擦声开始的地方标起。
  • 结束边界: 到最后一个音节的韵母能量衰减到背景噪声水平为止。注意,不要包含尾音的气声。
  • 模糊区域处理: 如果唤醒词被背景噪声部分掩盖,标注员要在备注中写明「部分被掩蔽」,并给出置信度(高/中/低)。
小技巧: 标注完成后,我习惯随机抽取 10% 的数据做二次校验。如果二次校验的边界偏差超过 20ms 的比例大于 5%,整批数据退回重标。这个阈值是我从多个项目中试出来的,能有效保证模型训练效果。

2.3.3 质量把控:用数据说话

质量把控不能只靠「感觉」。我建立了一套量化指标:

  1. 标注一致性(Cohen's Kappa): 两个标注员对同一段数据的标注结果,Kappa 值必须 ≥ 0.8。低于这个值,说明标注规范没对齐。
  2. 边界偏差分布: 统计所有标注样本的边界偏差,偏差在 ±10ms 内的样本占比应 ≥ 90%。
  3. 误标率: 随机抽取 500 条数据,人工复核,误标率(包括漏标、多标、边界错误)应 ≤ 2%。

嗯,这里要注意,误标率 2% 听起来不高,但如果你有 10 万条数据,那就是 2000 条错误数据。这些错误数据会直接拉低模型的唤醒率,尤其是那些「边界标错」的样本,会让模型学到错误的时序特征。

2.4 数据采集与标注全流程框架

下面这张图是我自己总结的数据采集与标注全流程,你可以把它贴在工位上:

数据采集与标注全流程框架 麦克风阵列选型 线性 / 环形 / 球形 近场数据采集 0.1m~0.5m / 多角度 远场数据采集 0.5m~5m / 多混响 数据标注 工具选型 → 边界标注 → 备注与置信度 质量把控 一致性校验 → 边界偏差分析 → 误标率统计 反馈修正 说明:远场和近场数据采集完成后,统一进入标注流程;质量把控不通过则返回标注阶段修正

这张图的核心逻辑是:阵列选型决定数据采集的上限,近场和远场数据要分开采集但统一标注,质量把控是最后的「守门员」。反馈回路意味着,如果质量把控发现标注问题,整批数据要退回重新标注,而不是「凑合用」。

再次强调: 数据采集和标注阶段省下的时间,会在模型调优阶段加倍还回来。我见过最惨的一个项目,团队花了两周采集数据,标注只用了一天,结果模型训练了三个月都达不到唤醒率指标。最后排查发现,标注边界偏差平均达到 50ms,相当于模型一直在学「错位的唤醒词」。所以,这一章的内容,值得你反复看。