【飞桨PaddleSpeech语音技术课程】— 语音唤醒

article/2025/9/13 2:50:12

(以下内容搬运自飞桨PaddleSpeech语音技术课程,点击链接可直接运行源码)

1. KWS 概述

随着人工智能的飞速发展,市场上推出了各式各样的智能设备,AI 语音的发展更是使得语音助手成为各大智能终端设备必不可少的软件。语音是人类与设备最直接的交互方式,不需要和实物接触,可远程操控,对于人们来说是最方便自然的交流方式。

自动语音识别(Automatic Speech Recognition, ASR)是一种将语音转化为文字的技术,是人与机器、人与人自然交流的关键技术之一。ASR 是人与智能设备交互的入口,它的功能就是让设备”听懂“人类的语言,从而能够根据识别到的内容去完成人类想要让它做的事情。

语音唤醒(Keyword Spotting, KWS)是语音识别的入口,如何高效、准确地对用户指令给出反应成为这一技术的最重要的目标。

下图是 IPhone 中 Siri 语音助手的交互示意图,总体上可分为以下三个步骤:

  1. 麦克风持续检测声音信号
  2. 逐帧对声音信号进行特征提取和模型预测
  3. 当接收到一个完整的 “Hey Siri” 的语音时,此刻模型的得分达到最大值,触发唤醒事件
图片来源:https://machinelearning.apple.com/research/hey-siri
图片来源:https://machinelearning.apple.com/research/hey-siri

1.1 产品应用

Apple 广告中 Siri 语音助手的交互演示视频。
点击播放

1.2 KWS、ASR 和声音检测

KWS、ASR 和声音检测的关系:

  • KWS VS ASR:KWS 可以看作是一类特殊的 ASR,他只识别声音中的固定的关键词。ASR 需要语言模型来理解一段声音中的文字,而 KWS 仅需关注固定样式的发音。从模型输入输出的角度看,KWS 输入音频,输出是判别结果;ASR 输入音频,输出是文字序列。
  • KWS VS 声音检测:KWS 和声音检测都是捕获特定的声音,KWS 注重语音中的关键词,而声音检测的范围更为宽泛,可以是自然界中的语音,工业领域里机器产生的声音,人类的哭声,尖叫声等异常声音。从模型输入输出的角度看,KWS 和声音检测都是输入音频,输出判别结果。
图片来源:http://speech.ee.ntu.edu.tw/~tlkagk/courses/DLHLP20/Speaker%20(v3).pdf
图片来源:http://speech.ee.ntu.edu.tw/~tlkagk/courses/DLHLP20/Speaker%20(v3).pdf

2. 适用于 KWS 的模型

2.1 传统 HMM 模型

与语音识别 ASR 类似,KWS 可以用传统的 HMM 模型完成建模和识别,模型结构上是也是声学模型加解码器。

基于 HMM 的 KWS 模型和传统 ASR 模型的区别:

  • 声学模型:KWS 只需关注少量的音素,对于其他发音可以当作 Filler 处理,因此声学模型的类别数可以做到很低,譬如在单音素建模下只需要 10 个以内;而 ASR 面向所有的发音,音素全,因此声学模型类别数会大很多。
  • 解码器:ASR 的解码器是一个 FST,输入声学模型的结果输出文字序列;而 KWS 的解码器是一个 FSA,如果到达最终状态可以给出一个得分作为唤醒词的分数,解码图的大小相对于 ASR 会小很多。
图片来源:https://developer.nvidia.com/blog/how-to-build-domain-specific-automatic-speech-recognition-models-on-gpus
图片来源:https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/42537.pdf

2.2 端到端模型

2.2.1 基于后验概率平滑的模型

在 2014 年的文章 Small-footprint keyword spotting using deep neural networks 中,作者提出了一种基于神经网络加后验概率平滑的 KWS 方法,该方法利用词粒度来建模声学模型,可分为以下四个执行步骤:

  • 特征提取和重叠:对音频信号进行逐帧的特征提取,预测每一帧的声学概率分布时,加入了上下文信息(前30帧+后10帧)后作为模型输入。
  • 声学模型:对叠加了上下文信息的频域特征进行声学概率分布的预测,模型总共有 N 个标签,其中标签 0 为 Filler,将与唤醒词的发音无关的归类至此。
  • 后验概率平滑:从声学模型得到整段音频的声学概率分布后,采用滑窗的进行后验概率平滑的计算,这么做可以去除一些噪音,增强鲁棒性。
  • 唤醒词得分计算:引入一个得分窗口,在窗口内统计除 Filler 外的所有声学概率的最大值,通过累乘和开方的计算方式得到最终得分。
图片来源:https://ieeexplore.ieee.org/document/6854370

2.2.2 基于 Max-Pooling Loss 的模型

在 2017 年的文章 Max-Pooling Loss Training of Long Short-Term Memory Networks for Small-Footprint Keyword Spotting 中,作者提出了一种基于 Max-Pooling Loss 的 KWS 模型训练方法。

这种方法可以看作是从帧级别的训练方式转向段级别的训练方式,如下图所示,蓝色填充的帧是唤醒词,在训练阶段,模型对于唤醒词片段的得分取决于某一帧中的最高的得分;而非唤醒词片段,为了保证所有帧的得分都足够低,则需要关注所有的帧。这种得分可以看作是基于声学得分的 Max-Pooling。

有了这个训练方式,我们直接地对唤醒词进行端到端的建模,具体模型可以采取 RNN-based、CNN-based 和 Attention-based 可对音频特征序列建模的模型。PaddleSpeech 中的 examples/hey_snips 采用了
Multi-scale Dilated Temporal Convolutional 模型,通过 Max-Pooling Loss 的训练方法实现了在 Snips 数据集上的训练和评估。

图片来源:https://arxiv.org/pdf/1705.02411.pdf
图片来源:https://arxiv.org/pdf/2102.13552.pdf

3. 实践:KWS模型训练和评估

PaddleSpeech 提供了 MDTC 模型在 Snips 数据集上的从训练到评估的全流程脚本,在此章节中将对一些重要步骤做讲解,如需完整执行训练和评估,可以根据 example 中的文档提示运行脚本,详情请参考:examples/hey_snips/kws0

3.1 环境准备

下载 PaddleSpeech 代码并安装所需依赖:

本教程要求paddlepaddle >= 2.2.2的环境,并需要 Clone PaddleSpeech Repo的代码(因网络访问问题可能需要等待较长时间,此处直接提供 PaddleSpeech r1.0 分支的代码压缩包):

!unzip work/PaddleSpeech-r1.0.zip

额外依赖:

!pip install scipy resampy soundfile tqdm colorlog pathos dtaidistance sklearn yacs loguru matplotlib

进入 example 目录:

%cd PaddleSpeech-r1.0/examples/hey_snips/kws0/

3.1 数据集准备

Snips 数据集需要用户自行申请下载:keyword-spotting-research-datasets

该数据集包含不同英语口音的约 11,000 “Hey Sinips” 的关键词的音频和 86,500(约96小时) 的其他发音的负样本。正负样本的音频均在相同的说话人、录音设备和环境噪音等条件下录制的,防止模型在训练的过程中关注非关键词相关的特征。数据集的切分和具体数量由下表所示:

TrainDevTest
PositiveUtterances5,8762,50425,88
Speakers1,179516520
max / speaker101010
NegativeUtterances45,34420,32120,821
Speakers3,3301,4741,469
max / speaker303030

数据集下载完成后,解压至/PATH/TO/DATA/hey_snips_research_6k_en_train_eval_clean_ter目录。

3.2 训练

修改conf/mdtc.yaml中的data_dir'/PATH/TO/DATA/hey_snips_research_6k_en_train_eval_clean_ter' ,只想数据集目录,配置CUDA_VISIBLE_DEVICES启动 CPU/单卡/多卡训练。

CUDA_VISIBLE_DEVICES=0,1 ./run.sh conf/mdtc.yaml

3.3 指标

针对使用场景和训练样本不均衡问题,通常对 KWS 模型通常关注 False Reject 和 False Alarm 指标。在测试集中,通过对不同的唤醒得分阈值下,对模型的指标进行考察。得到每个阈值的样本判别结果后,可以绘制 DET(Detection Error Tradeoff) 曲线:

在此 example 中,我们考察模型在 False Reject 为每小时1次的前提下,False Alarm 的情况,该数值越小则表示模型越好。在下图的结果中,可以确定唤醒阈值为 0.83,此时的 False Alarm Rate为 0.003559(数据由 example 中训练后的模型得到,重新跑后可能会有细微不同):

## 3.4 预测

通过上述的训练后得到模型的 checkpoint,并确定了唤醒阈值为 0.83,在此通过正负样本两段音频的输入进行预测,感兴趣的朋友也可以尝试自己提供录音音频进行预测(采样率为 16000 的单通道 wave 文件)。

3.4.1 音频预览

  • keyword.wav: 正样本,包含唤醒词 Hey Snips 的发音。
  • non-keyword.wav: 负样本。
import IPython
IPython.display.Audio('/home/aistudio/work/keyword.wav')
IPython.display.Audio('/home/aistudio/work/non-keyword.wav')

3.4.2 模型加载

加载从上述训练过程中得到的模型参数文件,完成预测模型的加载。

加入 Python Package 的搜索路径。

import os
import syssys.path.insert(0, os.path.abspath('../../..'))
sys.path.insert(0, os.path.abspath('../../../audio'))

加载 MDTC 模型,模型结构的参数与 /examples/hey_snips/kws0/conf/mdtc.yaml 保持一致。

import paddle
from paddlespeech.kws.models import MDTC
from paddlespeech.kws.models.mdtc import KWSModel# Model
backbone = MDTC(stack_num=3,stack_size=4,in_channels=80,res_channels=32,kernel_size=5,
)
model = KWSModel(backbone=backbone, num_keywords=1)
kws_checkpoint = '/home/aistudio/work/kws.pdparams'
model.set_state_dict(paddle.load(kws_checkpoint))
model.eval()

3.4.3 获取预测结果

通过对测试音频进行特征提取和模型前向计算,获取唤醒得分,并通过对比唤醒阈值得到判别结果。
特征提取的参数与 /examples/hey_snips/kws0/conf/mdtc.yaml 保持一致。

音频加载和特征计算:

import paddleaudio
from paddleaudio.compliance.kaldi import fbankfeat_func = lambda waveform, sr: fbank(waveform=paddle.to_tensor(waveform).unsqueeze(0), sr=sr, frame_shift=10, frame_length=25, n_mels=80)keyword_feat = feat_func(*paddleaudio.load('/home/aistudio/work/keyword.wav'))
non_keyword_feat = feat_func(*paddleaudio.load('/home/aistudio/work/non-keyword.wav'))print(keyword_feat.shape, non_keyword_feat.shape)

获取音频的预测得分:

keyword_logits = model(keyword_feat.unsqueeze(0))
keyword_score = paddle.max(keyword_logits).numpy().item()
print(keyword_score)
non_keyword_logits = model(non_keyword_feat.unsqueeze(0))
non_keyword_score = paddle.max(non_keyword_logits).numpy().item()
print(non_keyword_score)

从阈值( 0.83)和音频的预测得分的比较重容易看出,keyword.wav 判别为唤醒,而 non-keyword.wav 为非唤醒。

4. 参考文献

[1] https://machinelearning.apple.com/research/hey-siri

[2] Chen, Guoguo et al. “Small-footprint keyword spotting using deep neural networks.” 2014 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (2014): 4087-4091.

[3] Wang, Zhiming et al. “Small-footprint Keyword Spotting Using Deep Neural Network and Connectionist Temporal Classifier.” ArXiv abs/1709.03665 (2017): n. pag.

[4] Coucke, Alice et al. “Efficient Keyword Spotting Using Dilated Convolutions and Gating.” ICASSP 2019 - 2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (2019): 6351-6355.

[5] Hou, Jingyong et al. “The NPU System for the 2020 Personalized Voice Trigger Challenge.” ArXiv abs/2102.13552 (2021): n. pag.

[6] Sun, Ming et al. “Max-pooling loss training of long short-term memory networks for small-footprint keyword spotting.” 2016 IEEE Spoken Language Technology Workshop (SLT) (2016): 474-480.

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

5. 关注 PaddleSpeech

请关注我们的 Github Repo,非常欢迎加入以下微信群参与讨论:

  • 扫描二维码
  • 添加运营小姐姐微信
  • 通过后回复【语音】
  • 系统自动邀请加入技术群

P.S. 欢迎关注我们的 github repo PaddleSpeech, 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型。


http://chatgpt.dhexx.cn/article/NTsfsPFT.shtml

相关文章

语音唤醒的具体技术方案

\qquad 昨天的文章说的是不同的语音激活检测技术,传送门今天要说的是这个技术中间的具体的语音唤醒技术。语音唤醒技术到目前已经经过了三代的发展了。 第一代的技术很好理解,就是先构建一些模板,然后遇到语音,和模板进行匹配&…

26、使用友善NanoPi NEO和外设硬件实现语音唤醒功能、目标检测功能、语音播报功能

基本思想:使用友善开发板进行目标检测和测试 第一步:查看教程和进行刷机http://wiki.friendlyelec.com/wiki/index.php/NanoPi_NEO/zh#.E4.B8.8B.E8.BD.BD.E7.B3.BB.E7.BB.9F.E5.9B.BA.E4.BB.B6 小开发板子还是蛮不错的~,友善也开始卷了。。…

科大讯飞Windows麦克风监听语音唤醒+语音识别demo

最近在学习如何应用API来实现语言交互系统的功能,所以打算写一篇文章来整理和记录自己了解API使用的过程。 有很多平台提供语音识别等功能的API,文章使用的是科大讯飞开发的API。使用讯飞开放平台SDK实现一个Windows语音交互demo 讯飞开放平台简介SDK的下…

讯飞语音——唤醒

讯飞语音唤醒 唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情。 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q4878802/9023213 步…

说话就能轻松操控,科大讯飞语音唤醒技术带来便利体验!

如果,紧箍咒失灵了,孙悟空还会听唐僧的话吗? 如果,专注驾驶途中,一声呼唤便可响应需求是否很方便? 如果,手机落在卧室的某个角落,轻轻唤醒便能找到是否心情舒畅? 现实生…

Android——百度语音唤醒

这篇文章我们主要介绍一下,百度语音唤醒。所谓语音唤醒是指说出指定的语音指令(自定义的唤醒词),使程序激活某个功能的能力。百度语音唤醒支持自定义唤醒词。我做过讯飞的语音唤醒,这两个比较起来,讯飞的语音唤醒整体效果比百度要好。百度的语音唤醒功能需要使用唤醒词评…

androidstudio的语音唤醒功能

Manifest配置 写在application之外 <uses-permission android:name"android.permission.RECORD_AUDIO" /><uses-permission android:name"android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name"android.permiss…

国内那几家语音唤醒技术做的比较好? 语音唤醒技术哪家强?

编辑导语&#xff1a; 随着语音交互技术的日渐成熟&#xff0c;越来越多的智能硬件都选择增加语音能力作为产品卖点之一。但是&#xff0c;设备在进入语音交互工作状态的时候&#xff0c;需要先进行唤醒操作。 常见的唤醒语音交互的操作有按键或者触屏形式&#xff0c;但是&…

语音唤醒工具:WeKWS

1 简介 本文根据2022年10月《WEKWS: A PRODUCTION FIRST SMALL-FOOTPRINT END-TO-END KEYWORD SPOTTING TOOLKIT 》翻译总结的。作者为西北工业大学航海学院张晓雷老师团队、西工大音频语音与语言处理研究组谢磊老师团队、WeNet 开源社区等。 WeKWS是一个可以投入生产使用、容…

讯飞语音开发之语音唤醒

只有前面讲到的语音合成&#xff0c;语音理解&#xff0c;语义理解&#xff0c;语音识别确实可以实现人机交流。但是还不能实现完全智能&#xff0c;不能狗做到实时问道&#xff0c;间歇式问答。要实现实时问答&#xff0c;切不用手动操作。这时候语音唤醒功能就大选伸手了。下…

百度语音唤醒

一&#xff1a;前期准工作 &#xff08;1&#xff09;进入百度开放平台&#xff0c;注册账号&#xff0c;创建应用&#xff0c;拿到应用相对应的 AppID&#xff0c;API密钥&#xff0c;密钥 &#xff08;2&#xff09;配置相关信息 <uses-permission android:name"an…

语音唤醒原理

百度语音唤醒时的日志 D/audio_hw_primary: adev_open_input_stream is_karaoke_fastcapture0 D/audio_hw_primary: adev_open_input_stream: enter: sample_rate(16000) channel_mask(0x10) devices(0x80000004) stream_handle(0xf3439a00) io_handle(454) source(1) …

语音唤醒功能篇

语音唤醒功能 语音唤醒使得系统中的各个功能模块能够很好的分隔开来。用户通过唤醒词“依米”唤醒系统&#xff0c;发送语音指令&#xff0c;系统检测到语音指令中的关键词&#xff0c;然后去执行相对应的功能。当系统执行完成后&#xff0c;便进入等待下一次被唤醒状态&#…

语音唤醒

语音唤醒 前言一、语音唤醒相关环境搭建二、使用步骤1.使用流程2.示例代码 总结 前言 针对语音交互过程&#xff0c;提供了一种语音唤醒的方法供大家参考&#xff0c;语音交互采用snowboy离线语音唤醒引擎&#xff0c;snowboy已经被kitt.AI团队下架&#xff0c;但我们仍能够在…

语音唤醒简单说明

随着 Echo 出现,all in one 音响类产品雏形开始显现,语音交互成为最直接的控制方式,Amazon Echo作为最佳代表,智能语音交互成为互联网入口的新价值所在。ABI Research 在 2017 年収布的预测报告指出,估计到 2022 年,支持语音控制的装置出货量将达到 7500万台,其中智能喇…

语音唤醒技术的原理是什么?

https://www.toutiao.com/a6644766450860950024/ 2019-01-10 15:27:29 “天猫精灵。”“哎&#xff0c;在的&#xff0c;你说” “小爱同学&#xff0c;定明天早上8点的闹钟。”“好的&#xff0c;已经帮你定好明天早上8点的闹钟” 不少同学家里都有AI智能音箱产品&#xff0…

android系统看片软件,真正的手机看片神器 和视界手机APP评测

播放界面支持丰富的手势操作&#xff0c;我们可以通过上下左右的滑动手指来调整影片进度以及音量大小。和视界还可以选择不同的输出设备——只要硬件设备支持&#xff0c;我们可以通过手机将和视界中的视频内容投射到电视上观看。 注重影片的口碑效应&#xff0c;支持用户打分与…

FreeRTOS时间片调度

一、FreeRTOS时间片调度概述 FreeRTOS支持多个任务同时拥有一个优先级&#xff0c;这些任务的调度就可以使用时间片来进行调度。在FreeRTOS中允许一个任务允许一个时间片&#xff08;一个时钟节拍的长度&#xff09;后让出CPU的使用权&#xff0c;让拥有同优先级的下个任务运行…

MongoDB 分片集群技术

在了解分片集群之前&#xff0c;务必要先了解复制集技术&#xff01; 1.1 MongoDB复制集简介 一组Mongodb复制集&#xff0c;就是一组mongod进程&#xff0c;这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性&#xff0c;这是生产部署的基础。 1.1.1 复制集的…

片偏移怎么计算_计算机网络学习笔记(四)之网络层

点击蓝字关注我吧 越努力越幸运!!! 1 网络层的功能 1.1异构网络互联 网络的互联:指将两个以上的计算机网络,通过一定的方法, 用一种或多种通信处理设备(即中间设备)相互联接起来,以构成更大的网络系统。中间设备又称为中间系统或中继系统。根据中继系统所在…