从“打开灯光”看 KWS 多关键词语音控制是怎么工作的

很多语音控制 Demo 一上来就使用 ASR:录音、转文字、字符串匹配、执行动作。这个流程当然能工作,但如果设备只需要"开灯、关灯、调亮、调暗"几个固定命令,使用完整 ASR 可能有些重。

这篇文章从一个智能灯场景出发,拆开唤醒词、关键词识别和 ASR 的分工。

1. 先区分三条链路

唤醒链路

text 复制代码
连续音频 → 唤醒词模型 → 检测到"你好小灯" → 打开后续控制

唤醒词模型只负责判断一个短语是否出现。它通常需要低功耗常驻运行,不能太大。

固定命令链路

text 复制代码
连续音频 → KWS 多关键词模型 → command_id → 执行动作

例如:

text 复制代码
打开灯光 → LIGHT_ON
关闭灯光 → LIGHT_OFF
调亮     → BRIGHTNESS_UP
调暗     → BRIGHTNESS_DOWN

模型不需要先生成文字,应用层拿到命令 ID 后直接执行动作。

自由语音链路

text 复制代码
音频 → ASR → 文本 → 意图识别 → 参数提取 → 执行动作

例如"把客厅灯调到 50%",除了识别文本,还要提取房间、设备和亮度参数。这就已经不是单纯关键词识别的问题了。

2. KWS 为什么适合固定命令

KWS 的目标不是理解所有语言,而是在音频流中判断某个预定义短语是否出现。它的输出更接近一个按钮:

text 复制代码
检测到目标词 → 返回 true / command_id
没有检测到 → 继续监听

对于固定命令,KWS 有几个工程优势:

  • 模型可以比通用 ASR 小很多;
  • 常驻运行的功耗更容易控制;
  • 不需要维护大量文本匹配规则;
  • 可以完全离线运行;
  • 适合 MCU、手机后台和边缘设备。

但它也有边界:命令词需要预先定义,不能自然理解用户从未训练过的表达。

3. 多关键词单模型的意义

传统做法可能是每个词一个模型:四个命令就加载四个模型,或者依次运行四次推理。

多关键词单模型可以让一套模型同时输出多个结果:

text 复制代码
输入一段音频
        ↓
一次特征提取和推理
        ↓
LIGHT_ON / LIGHT_OFF / UP / DOWN

这样可以减少重复加载和重复特征提取。但工程上仍然要关注:

  • 关键词之间是否容易混淆;
  • 每个命令的召回率是否均衡;
  • 相似词是否容易互相触发;
  • 模型大小是否适合目标芯片;
  • 多个输出的阈值和冷却时间怎么设置。

4. 召回率和误触发不是同一个指标

召回率回答的是:用户真的说了目标词,模型能不能检测到。

误触发回答的是:用户没说目标词,模型会不会错误触发。

调低阈值通常会提高召回,但也可能增加误触发;调高阈值则可能漏掉真实命令。实际产品不能只展示一个"识别率",而应该在真实设备上记录:

  • 正确触发次数;
  • 漏唤醒次数;
  • 每小时误触发次数;
  • 不同距离和角度;
  • 不同说话人和口音;
  • 音乐、风扇和人声背景噪声。

5. 一个最小的产品架构

text 复制代码
麦克风
  ↓
音频缓冲区
  ↓
Mel 特征提取
  ↓
KWS 模型
  ↓
连续帧判断 / 冷却时间 / 能量过滤
  ↓
命令 ID
  ↓
产品业务逻辑

这里最容易被忽略的是最后两层。模型输出一个分数,不等于产品应该立刻执行动作。还需要连续帧确认、冷却时间、背景能量和业务状态判断,避免一次语音触发多次操作。

6. KWS、ASR 怎么选

可以用下面的规则快速判断:

需求 方案
唤醒设备 Wake Word / KWS
少量固定命令 多关键词 KWS
自由表达 ASR
数字、地点、参数 ASR + 意图解析
电池设备常驻监听 小型 KWS

如果设备只需要十个以内的固定命令,不一定要先部署几十 MB 的 ASR。先用 KWS 做一个可验证的 PoC,通常更容易判断这条路线是否适合产品。

7. 如何快速做 PoC

一个可执行的验证顺序是:

  1. 列出产品真正需要的关键词;
  2. 删除可以由按钮或状态机解决的命令;
  3. 为剩余关键词生成单模型或多关键词模型;
  4. 在浏览器或电脑麦克风上测试;
  5. 在目标设备和真实噪声中测试;
  6. 再决定是否加入真人录音和困难负样本优化。

Voicute 的在线流程就是把训练和第一次验证前置:输入自定义关键词,训练后直接测试,再导出标准 ONNX/TFLite 模型。配合开源推理代码,可以继续接入 Web、Android、Python、ESP32-S3 等运行环境。

相关推荐
ppiero1 小时前
AI 助手聊着聊着就失忆?先分清"上下文"和"记忆"(五步装长期记忆)
前端
打呵欠的猫1 小时前
用 AI 做性能分析:一行命令找出拖慢页面的 5 个组件,优化后首屏快了 40%
前端·性能优化·ai编程
用户5080070546281 小时前
芯飞云用了两个月,说说我的真实感受
前端
Amos_Web1 小时前
Rspack 源码解析(二十一):Cacheable 与 Storage 如何持久化编译结果
前端·rust·前端框架
青烟小生1 小时前
前端性能优化实战:从指标监控到极致体验
前端
deli0071 小时前
0.1 加 0.2 为什么不等于 0.3?IEEE 754 双精度逐位实测
前端
Momo__1 小时前
前端 Code Review 实战:识别 AI 写代码的 15 个常见坑
前端·vibecoding
拖孩2 小时前
全程 AI 写的小程序,刚接上会员虚拟支付,上线第二天就有人真金白银买单了|双签名、定价、iOS 的坑我全踩了一遍
前端·后端·微信小程序
小蚂蚁i2 小时前
React 基础
前端