KWS(唤醒词检测)

简介

KWS 是用于检测音频中特定唤醒词的模块。它通常是语音交互的第一步,设备检测到唤醒词后,会进入等待语音指令状态。

AIVoice 支持固定唤醒词,自定义唤醒词两种方案。固定唤醒词模型,可以在低资源的情况下,取得不错的性能,而自定义唤醒词模型,则可以满足用户随意修改唤醒词的需求。

方案

训练数据

可选唤醒词

方案特点

固定唤醒词

特定唤醒词

训练数据所用唤醒词

性能更好,模型更小

自定义唤醒词

通用数据

与训练数据相同语种的任意自定义唤醒词

更灵活

当前 SDK 中提供了一个中文固定唤醒词模型和一个中文自定义唤醒词模型。

固定唤醒词

  • 支持唤醒词 小强小强你好小强

  • 其他唤醒词支持,可以通过定制服务提供。

自定义唤醒词

  • 语种,只支持中文。

  • 唤醒词个数,支持同时设置最多 5 个唤醒词。

  • 唤醒词字数,一个词包含 3-6 个字,不在此范围为无效。

  • 唤醒词选择建议

    • 字拼音不包含零声母,比如,

    • 不要选择日常用语,比如,穿衣服吃早饭

    • 相临声韵母区分度大。

KWS 模式

AIVoice 支持单路,多路两种模式。单路即以一路音频作为输入,而多路可以同时输入多路音频。多路模式相比单路可以提升 KWS 和 ASR 的准确率,但同时计算资源和内存使用也会上升。两种模式可以针对不同场景使用。

KWS模式

函数

特点

单路模式

void rtk_aivoice_set_single_kws_mode(void)

更少的计算量和内存占用

多路模式

void rtk_aivoice_set_multi_kws_mode(void)

更高的唤醒率和识别率

注意

在这些流程中,创建实例之前必须设置 KWS 模式:

  • aivoice_iface_full_flow_v1

  • aivoice_iface_afe_kws_v1

  • aivoice_iface_afe_kws_vad_v1

算法流程

  • 单路模式

../../../rst_ai/aivoice/aivoice_kws/figures/kws_flow_single_channel.svg
  • 多路模式

../../../rst_ai/aivoice/aivoice_kws/figures/kws_flow_multi_channel.svg

配置

KWS 可配参数

keywords:

唤醒关键字, 可选的关键字取决于 KWS 模型。如果 KWS 模型是固定唤醒词方案,则只能从训练过的单词中选择。对于自定义唤醒词方案,可以使用该语言建模单元的任意组合来定制关键字(例如中文拼音)。示例:xiao-qiang-xiao-qiang

thresholds:

唤醒阈值,范围[0, 1]。值越高,误唤醒越少,但更难唤醒。如果要使用灵敏度,该值需要设为 0。

sensitivity:

提供预先调好阈值的三档灵敏度,灵敏度越高,更容易唤醒,但误唤醒也越多。 灵敏度仅在阈值设置为 0 时有效。

详情请参考 ${aivoice_lib_dir}/include/aivoice_kws_config.h

阈值调整建议

  • 阈值从小变大,唤醒率逐渐变小,误唤醒也变少,即灵敏度从高到低变化。用户可以根据实际使用需要,选择合适的阈值。

  • 固定唤醒词模型,提供三档灵敏度高,中,低分别对应误唤醒 1 次/12h,1 次/24h,1 次/48h。如需更精细的调整,用户可以设置 thresholds 适配使用场景,建议调整步长为 0.02。

  • 自定义唤醒词模型,相比固定唤醒词,阈值通常较低,建议调整步长为 0.005。

../../../rst_ai/aivoice/aivoice_kws/figures/kws_roc.svg