|语音交互:从语音唤醒(KWS)聊起( 二 )


本文插图

2. 基于隐马尔可夫模型
用隐马尔可夫模型来做唤醒模型 , 一般会为唤醒词和其他声音分别建立一个模型 , 然后将输入的信号(会对音频信息进行切割处理)分别传入两个模型进行打分 , 最后对比两个模型的分值 , 决定是该唤醒 , 还是保持休眠 。
简单理解就是分别对唤醒词和非唤醒词作了一个模型 , 根据两个模型的结果对比 , 决定是否唤醒 。
|语音交互:从语音唤醒(KWS)聊起
本文插图

3. 基于神经网络
用神经网络来做唤醒模型 , 可以分为多种:

  1. 有将模版匹配中的特征提取 , 改为神经网络作为特征提取器;
  2. 也有在隐马尔可夫模型中 , 某个步骤使用神经网络模型的;
  3. 还有基于端到端的神经网络方案 。
凡是用到神经网络原理的 , 都可以说是基于神经网络的方案 。
|语音交互:从语音唤醒(KWS)聊起
本文插图

其实唤醒模型工作原理很简单 , 就是一直在等一个信号 , 等到这个信号就切换到工作状态 , 只是判断信号的内部逻辑不同而已 。
四、如何训练一个唤醒模型
一般训练语音唤醒模型大概需要四个步骤 , 包括:
1. 定义唤醒词
首先我们需要定义一个唤醒词:
定义唤醒词也是有讲究的 , 一般会定义3-4个音节的词语作为唤醒词 。 像我们常见的“天猫精灵”、“小爱同学”、“小度小度” , 全部都是4个音节 , 由于汉语的发音和音节的关系 , 你也可以简单的把音节理解为字数 。
唤醒词字数越少 , 越容易误触发;字数越多 , 越不容易记忆——这也是一般定义在4个字的原因 。
另外这3-4个字要避开一些常见的发音 , 避免和其他发音出现竞合 , 要不然会频繁的误唤醒 。
一般唤醒词会做这样一个处理 , 就是唤醒词中的连续3个字也可以唤醒 , 比如你喊“小爱同” , 同样可以唤醒你的小爱同学 。 这是为了提高容错率所做设定的规则 。
2. 收集发音数据
然后就需要收集这个唤醒词的发音 , 理论上来说发音人越多、发音场景越丰富 , 训练的唤醒效果越好 。
一般按照发音人数和声音时长进行统计 , 不同的算法模型对于时长的依赖不一样 。 基于端到端神经网络的模型 , 一个体验良好的唤醒词可能需要千人千时 , 就是一千个人的一千个小时 。
收集唤醒词发音的时候 , 一定要注意发音的清晰程度 , 有时候甚至要把相近的音也放到训练模型中 , 防止用户发音问题导致无法进行唤醒 。
如果用户群体庞大 , 甚至考虑该唤醒词在各种方言下的发音 。
3. 训练唤醒模型
数据都准备好了 , 就到了训练模型的阶段了 , 这里常见的算法有:
  1. 基于模板匹配的KWS
  2. 基于马尔可夫模型的KWS
  3. 基于神经网络的方案
这三种方案对比如下:
|语音交互:从语音唤醒(KWS)聊起
本文插图

4. 测试并迭代
最后就是测试并上线 , 一般分为性能测试和效果测试 , 性能测试主要包括响应时间、功耗、并发等 , 这个一般交给工程师来解决 。
产品会更关注效果测试 , 具体的效果测试我们会考虑唤醒率、误唤醒率这两个指标 , 后面的测试环节我们会详细测试的流程和指标 。
产品上线后 , 我们就可以收集用户的唤醒数据 , 唤醒词的音频数据就会源源不断 。 我们需要做的就是对这些唤醒音频进行标注、收集badcase , 然后不断的进行训练 , 再上线 , 就是这么一个标注、训练、上线的循环过程 。
直到边际成本越来越高的时候 , 一个好用的唤醒模型就形成了 。


推荐阅读