---
title: speech_sanm_kws_phone-xiaoyun-commands-offline
canonical_url: "https://www.modelscope.cn/models/iic/speech_sanm_kws_phone-xiaoyun-commands-offline"
md_url: "https://www.modelscope.cn/models/iic/speech_sanm_kws_phone-xiaoyun-commands-offline.md"
repository: iic/speech_sanm_kws_phone-xiaoyun-commands-offline
chinese_name: "SANM语音唤醒-移动端-单麦-16k-小云-多命令词-offline"
last_updated: 2024-10-08
pipeline_tag: auto-speech-recognition
tasks:
  - auto-speech-recognition
library_name:
  - pytorch
frameworks:
  - Pytorch
downloads: 6467
stars: 9
---

# speech_sanm_kws_phone-xiaoyun-commands-offline

> speech_sanm_kws_phone-xiaoyun-commands-offline - iic 在 ModelScope 开源的模型。移动端语音多命令词模型，支持“小云小云”、“你好小云”、“小宝小宝”、“你好问问”、“嗨小问”以及30+常见命令词识别。模型网络采用SANM结构，基于开源FunASR项目进行训练，采用离线方式推理。

- **Repository**: iic/speech_sanm_kws_phone-xiaoyun-commands-offline
- **Tasks**: auto-speech-recognition
- **Downloads**: 6467
- **Stars**: 9
- **Last updated**: 2024-10-08

Source: https://www.modelscope.cn/models/iic/speech_sanm_kws_phone-xiaoyun-commands-offline

---

## <strong>[FunASR开源项目介绍](https://github.com/alibaba-damo-academy/FunASR)</strong>
<strong>[FunASR](https://github.com/alibaba-damo-academy/FunASR)</strong>希望在语音识别的学术研究和工业应用之间架起一座桥梁。通过发布工业级语音识别模型的训练和微调，研究人员和开发人员可以更方便地进行语音识别模型的研究和生产，并推动语音识别生态的发展。让语音识别更有趣！

[**github仓库**](https://github.com/alibaba-damo-academy/FunASR)
| [**最新动态**](https://github.com/alibaba-damo-academy/FunASR#whats-new) 
| [**环境安装**](https://github.com/alibaba-damo-academy/FunASR#installation)
| [**服务部署**](https://www.funasr.com)
| [**模型库**](https://github.com/alibaba-damo-academy/FunASR/tree/main/model_zoo)
| [**联系我们**](https://github.com/alibaba-damo-academy/FunASR#contact)


# 语音唤醒模型介绍


## 模型描述

&nbsp;&nbsp;移动端语音多命令词模型，我们根据以往项目积累，挑选了多个场景常用命令词数据进行模型迭代，所得单一模型支持30+关键词的快速检测：  
&nbsp;&nbsp;&nbsp;&nbsp;主唤醒词：小云小云，你好小云，你好问问，嗨小问  
&nbsp;&nbsp;&nbsp;&nbsp;音乐场景命令词：播放音乐，增大音量，减小音量，继续播放，暂停播放，上一首，下一首，单曲循环，随机模式，列表循环  
&nbsp;&nbsp;&nbsp;&nbsp;地图场景命令词：取消导航，退出导航，放大地图，查看全程，缩小地图，不走高速，躲避拥堵，避免收费，高速优先  
&nbsp;&nbsp;&nbsp;&nbsp;家电场景命令词：返回桌面，睡眠模式，蓝牙模式，打开灯光，关闭灯光，打开空调，关闭空调，拍照拍照，我要拍照  
&nbsp;&nbsp;&nbsp;&nbsp;通用场景命令词：上一页，下一页，上一个，下一个，换一批，打开录音，关闭录音  

&nbsp;&nbsp;模型网络主体为6层SANM结构(如下图所示)，参数量约3.28M，量化后适用于移动端设备运行。SANM结构巧妙结合了自注意力机制SAN和DFSMN memory block的优势，使得模型具有捕捉序列数据长程依赖的能力，同时还兼顾局部特征的学习，在语音识别任务上取得良好效果。  
&nbsp;&nbsp;模型输入采用Fbank特征，训练阶段使用ctc-loss计算损失并更新参数，输出为基于char建模的中文全集token预测，token数共2602个。本模型训练使用offline模式，推理时需要一条音频的完整特征作为网络输入，得到所有特征的后验概率输出，最后对输出进行后处理获得关键词检测结果。  
&nbsp;&nbsp;模型训练采用"basetrain + finetune"的模式，basetrain过程使用大量内部移动端数据。在此基础上，混合每个命令词数据进行微调，得到最终面向业务的“主唤醒+多命令词”模型。在finetune阶段，一并加入了[出门问问开源数据](https://www.openslr.org/87/)。  本模型同时训练的命令词个数较多，而内部保有的各命令词数据量差别较大，采集场景各异，最终各选取了3000~30000条录音进行融合训练。  
&nbsp;&nbsp;由于采用了中文char全量token建模，并使用充分数据进行basetrain，本模型也支持基本的唤醒词/命令词自定义功能，但具体性能无法评估。如用户想验证更多命令词，可以通过页面右侧“在线体验”板块自定义设置并录音测试。  
&nbsp;&nbsp;目前最新ModelScope版本已支持用户在basetrain模型基础上，使用其他关键词数据进行微调，得到新的语音唤醒模型。欢迎您通过[小云小云](https://modelscope.cn/models/damo/speech_charctc_kws_phone-xiaoyun/summary)模型了解唤醒模型定制的方法。  

<p align="center">
<img src="fig/Illustration_of_SANM.png" alt="SANM网络框图" width="400" />
<p align="left">

更详细的细节见：
- 论文： [SAN-M: Memory Equipped Self-Attention for End-to-End Speech Recognition](https://api.semanticscholar.org/CorpusID:219179819)

## 使用方式和范围

运行范围：
- 支持Linux-x86_64、Mac和Windows运行。

使用方式：
- 推理：基于FunASR开源项目，部署环境后，直接对输入音频进行推理和解码，输出关键词检测结果。
- 微调：基于FunASR开源项目，部署环境后，加载训练好的base模型，采用私有或者开源关键词数据及负样本，进行模型训练。

使用范围:
- 移动端设备，Android/iOS型号或版本不限，使用环境不限，采集音频为16K单通道。
- 暂未提供移动端设备端的推理方案和Demo。

目标场景:
- 移动端APP用到的关键词检测场景。


## 如何使用

### 环境依赖

funasr>=1.1.7

### 基于ModelScope推理代码范例

```python
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

inference_pipeline = pipeline(
    task=Tasks.auto_speech_recognition,
    model='iic/speech_sanm_kws_phone-xiaoyun-commands-offline', model_revision="master",
    keywords="小云小云",
    output_dir="./outputs/debug",
    device='cpu'
)

rec_result = inference_pipeline(input='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/KWS/pos_testset/kws_xiaoyunxiaoyun.wav')
print(rec_result)
```

### 基于FunASR项目推理代码范例

```python
from funasr import AutoModel
# paraformer-zh is a multi-functional asr model
# use vad, punc, spk or not as you need

model = AutoModel(model="iic/speech_sanm_kws_phone-xiaoyun-commands-offline",
                  keywords="小云小云",
                  output_dir="./outputs/debug",
                  device='cpu'
                 )

res = model.generate(input='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/KWS/pos_testset/kws_xiaoyunxiaoyun.wav')
```

### 模型局限性以及可能的偏差

- 考虑到单一模型同时支持的命令词较多，测试数据缺乏，正负样本测试集覆盖场景不够全面，可能有特定场合/特定人群唤醒率偏低或误唤醒偏高问题。


## 训练数据介绍

- basetrain使用内部移动端ASR数据5000+小时，finetune使用合并37个命令词共约30万条混合场景数据，以及约5万条移动端ASR数据。


## 模型训练流程

- 模型训练采用"basetrain + finetune"的模式，finetune过程使用目标场景的特定唤醒词数据并混合一定比例的ASR数据。如训练数据与应用场景不匹配，应当针对性做数据模拟。


### 预处理

- finetune模型直接使用各命令词混合场景数据进行训练，未做数据模拟或扩充。


## 数据评估及结果

- “你好问问”、“嗨小问”两个主唤醒词测试使用同一批开源的正负样本测试集。
- 针对其他关键词，从训练数据中随机预留10%作为每个命令词的正样本测试集，其中部分词测试数据量较少，可能导致实际体验有偏差；误唤醒依旧使用内部自建的移动端40小时负样本测试集，数据来源于导航场景的ASR。详细测试结果如下：  

<div style="text-align: center;">

|    命令词    |    唤醒率    | 误唤醒/小时 | 正样本(条) | 负样本(小时) |
|:------------:|:------------:|:------------:|:------------:|:------------:|
|  小云小云  |  100.00%  |  0.000   |  1043  |  62.23  |
|  你好小云  |  98.52%  |  0.000   |  1550  |  62.70  |
|  你好问问  |  98.98%  |  0.248   |  10641  |  68.49  |
|  嗨小问  |  98.51%  |  0.248   |  10641  |  68.62  |
|  播放音乐  |  90.82%  |  0.000   |  686  |  62.98  |
|  增大音量  |  98.94%  |  0.112   |  1503  |  62.45  |
|  减小音量  |  98.82%  |  0.096   |  1526  |  62.43  |
|  继续播放  |  98.41%  |  0.096   |  2079  |  62.55  |
|  暂停播放  |  98.44%  |  0.097   |  2439  |  62.16  |
|  上一首  |  94.63%  |  1.001   |  1937  |  61.96  |
|  下一首  |  94.99%  |  0.680   |  1975  |  61.72  |
|  单曲循环  |  94.77%  |  0.000   |  153  |  63.54  |
|  随机模式  |  97.96%  |  0.016   |  98  |  63.57  |
|  列表循环  |  95.95%  |  0.016   |  74  |  63.58  |
|  取消导航  |  95.97%  |  0.096   |  1364  |  62.77  |
|  退出导航  |  96.06%  |  0.096   |  2157  |  62.52  |
|  放大地图  |  96.32%  |  0.095   |  1115  |  62.90  |
|  缩小地图  |  97.52%  |  0.096   |  1857  |  62.93  |
|  查看全程  |  96.98%  |  0.048   |  993  |  62.62  |
|  不走高速  |  96.55%  |  0.000   |  58  |  63.58  |
|  躲避拥堵  |  97.14%  |  0.000   |  140  |  63.56  |
|  避免收费  |  96.00%  |  0.000   |  50  |  63.59  |
|  高速优先  |  85.19%  |  0.000   |  162  |  63.53  |
|  上一页  |  93.49%  |  0.095   |  384  |  63.46  |
|  下一页  |  96.63%  |  0.095   |  445  |  63.41  |
|  换一批  |  97.01%  |  0.095   |  368  |  63.47  |
|  返回桌面  |  96.72%  |  0.032   |  335  |  63.46  |
|  睡眠模式  |  100.00%  |  0.000   |  246  |  63.28  |
|  蓝牙模式  |  99.23%  |  0.032   |  259  |  63.27  |
|  拍照拍照  |  98.71%  |  0.032   |  928  |  62.98  |
|  我要拍照  |  100.00%  |  0.016   |  451  |  62.99  |
|  上一个  |  93.28%  |  0.320   |  952  |  62.58  |
|  下一个  |  98.38%  |  0.406   |  2039  |  61.52  |
|  打开灯光  |  100.00%  |  0.000   |  264  |  63.25  |
|  关闭灯光  |  100.00%  |  0.000   |  210  |  63.33  |
|  打开录音  |  100.00%  |  0.000   |  459  |  62.97  |
|  关闭录音  |  100.00%  |  0.000   |  416  |  63.03  |
|  打开空调  |  87.23%  |  0.000   |  141  |  63.49  |
|  关闭空调  |  85.62%  |  0.016   |  153  |  63.47  |

</div>

## 相关论文以及引用信息

```BibTeX
@inproceedings{Gao2020SANMME,
  title={SAN-M: Memory Equipped Self-Attention for End-to-End Speech Recognition},
  author={Zhifu Gao and Shiliang Zhang and Ming Lei and Ian Mcloughlin},
  booktitle={Interspeech},
  year={2020},
  url={https://api.semanticscholar.org/CorpusID:219179819}
}
```

```BibTeX
@article{DBLP:journals/spl/HouSOHX19,
  author    = {Jingyong Hou and
               Yangyang Shi and
               Mari Ostendorf and
               Mei{-}Yuh Hwang and
               Lei Xie},
  title     = {Region Proposal Network Based Small-Footprint Keyword Spotting},
  journal   = {{IEEE} Signal Process. Lett.},
  volume    = {26},
  number    = {10},
  pages     = {1471--1475},
  year      = {2019},
  url       = {https://doi.org/10.1109/LSP.2019.2936282},
  doi       = {10.1109/LSP.2019.2936282}
}
```
