多关键词语音识别方案 — 一个模型同时识别10个命令词
一个设备通常不止需要一个词
大多数语音控制产品需要的不只是一个唤醒词。智能开关需要"开灯""关灯""调亮""调暗"四个指令。智能音箱需要"播放""暂停""下一首""声音大一点"等十个命令。车载助手需要"导航""电话""音乐"等场景切换。
过去做这件事,得训 N 个模型、部署 N 个 ONNX 文件、跑 N 次推理。模型多了,推理延迟叠上去,资源受限的平台上(ESP32、树莓派)直接撑不住。
现在不用了——多关键词语音识别,一个模型搞定全部。
一个模型 vs 一堆模型
| 10 个独立模型 | 1 个多关键词模型 | |
|---|---|---|
| 总参数 | ~250,000 | ~31,000 |
| 总体积 | ~1.28 MB | 167 KB |
| 推理次数 | 10 次 | 1 次 |
| 跨词误触发 | 需后处理抑制 | 接近 0% |
| 加新命令词 | 训一个新模型 | 只加一个分类头 |
参数减少 8 倍,推理快 10 倍。关键在于架构设计。
怎么做到的:共享 Backbone + 独立分类头
核心思路很简单:所有命令词共享同一个特征提取网络(Backbone),每个词只挂一个微型分类头。推理的时候,Backbone 只跑一遍,所有分类头同时出结果。
音频输入 → 共享 Backbone (23K参数) → 特征向量
│
┌───────────────┼───────────────┐
▼ ▼ ▼
分类头: 播放 分类头: 暂停 ... 分类头: 静音
(770参数) (770参数) (770参数)
│ │ │
▼ ▼ ▼
[B, 10] — 10个独立概率,1次推理
Backbone 只需要学一次"怎么从 Mel 频谱提取声学特征"。分类头只负责判断自己那个词:"这个特征像不像'播放'?" 每个头才 770 个参数。
你实际上能拿到什么
以 10 命令词模型为例:
| 指标 | 数值 |
|---|---|
| 模型体积 | 167 KB |
| 总参数 | 30,946 |
| 关键词数 | 10 个 |
| 推理方式 | 1 次前向传播出 10 个结果 |
| 负样本准确率 | 96.5% |
| 跨词误触发 | 几乎全部 0% |
| 部署平台 | Android / Linux / ESP32 / Web |
哪些场景适合多关键词
| 场景 | 命令词举例 | 推荐词数 |
|---|---|---|
| 智能开关 | 开灯/关灯/调亮/调暗/全开/全关 | 4-6 个 |
| 智能音箱 | 播放/暂停/下一首/上一首/音量+/-/静音 | 8-10 个 |
| 车载助手 | 导航/电话/音乐/回家/去公司 | 5-8 个 |
| 老人呼叫器 | 呼叫/喝水/紧急 | 2-3 个 |
| 工业设备 | 开始/停止/急停/确认/取消 | 3-5 个 |
怎么拿到模型
跟单关键词一样简单——在 听词 Voicute 上输入多个命令词,逗号分隔(比如"播放,暂停,下一首,声音大一点"),十来分钟自动出 ONNX 模型。3 词 ¥169,5 词 ¥199,8 词 ¥249,10 词 ¥299。一次付费,不限设备。
模型是标准 ONNX 格式,配合 开源推理引擎 onnx-wakeword 部署到所有平台。更多细节见 自定义唤醒词在线训练指南。
免费生成一个多关键词模型 →