苹果siri语音唤醒词是啥(苹果发布长文揭秘)

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(1)

来源:machinelearning.apple.com

编译:Tom R

苹果Siri的唤醒功能大家想必都不陌生了——只需要对它说“Hey Siri”,就可以在待机状态下唤醒设备,随后进行相关的操作。这一功能十分方便,特别是在做饭或者开车等双手不便的情况下让我们可以方便的打开设备处理事务。

但你可知道平常使用十分顺手Siri的背后其实是一个十分复杂的系统,利用基于深度神经网络的检测器,将你的声音转换为一系列概率分布,并利用时域积分来计算置信得分,从而根据得分来判断是我们是在呼唤Siri。如果这一得分足够高那么Siri就会启动响应主人的唤醒。这篇文章苹果就详细阐述了Siri背后的技术,如果你有机器学习的基础知识,那么这篇文章将会让你能更深入地理解语音识别。

接入Siri的免提操作

我们要唤醒Siri时并不需要按键,只需要说“Hey Siri”就可以了。虽然是一句简单的两个词,但后面支撑它的是十分复杂的系统。Siri十分迅速和高效,正是软硬件和网络服务间紧密的配合协同才让我们体验到了如此畅快的交互。

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(2)

图1 Siri在iPhone上的工作流程

如上图所示,Siri由很多部分构成,其中有由云端提供的服务,包括自动语音识别、自然语言翻译以及各种不同的信息服务。同时还包括一系列能够提供升级和语音模型的服务器。这篇文章主要的部分会集中在运行在你的设备上的程序部分,特备是siri的检测器,它时时刻刻在聆听着你的呼唤,以及时醒来响应你的需求。

检测器:竖起耳朵听“Siri”

检测器的工作过程主要按照下面的步骤进行:

  • 首先,利用设备麦克风收集声音并转换成波形样本流,采样率在16000/s;

  • 随后,通过频谱分析将波形转换为一系列的信息帧,每一帧包含了大概0.01s的声音信息;

  • 接下来以二十帧为一组(0.2s)将这些信息帧送入到声学模型中,利用深度神经网络将其中的声学模式转换成一系列语音分类的概率分布,其中包括了Siri、安静环境一起其他的语音约20个类别;

其中深度神经网络主要由一系列矩阵乘法和非线性逻辑回归组成。其中每一个隐藏层都可视为对声音的一种表示和抽象,而最后的非线性分类一般采用Softmax函数来实现。其主要结构如下图所示:

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(3)

图2 用于检测Siri的深度神经网络,其中隐藏层实际进行了全连接,同时在网络的顶端进行了时域积分。实际的DNN在图中用虚线框出。

当Siri运行的时候,会选择隐藏层中的一些单元来匹配实际的计算资源。通常的神经网络拥有5层隐藏层的结构,每一层的大小相同,通常每层包括的神经元个数为:32、128、192个单元,根据实际的内存和功耗限制来进行选择。在iPhone中实际使用了两个神经网络来进行检测,分别是初始检测网络后续验证网络。通常初始网络的规模会小于二次验证网络。

这一声学模型网络的输出是每一帧在不同的语音分类信息上的分布得分。

如上图所示,如果声学模型的输出较高的话我们就很有可能检测到了“Hey Siri”。 通常我们在时域上对每一帧上的有效序列进行累加。上图中的最后两层循环神经网络与同一单元和下一序列进行了连接,其中每一个单元的计算包括最大化操作和加和操作:

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(4)

· Fi,t表示状态i的累加得分;

· qi,t表示声学模型的输出,在时间t和相应i状态下分类的对数得分;

· si,状态i下的损失函数;

· mi,从状态i转移的损失函数。

si和mi都与相关的训练数据标签分割与分析有关(这一过程可以利用隐试马尔科夫模型的思想来理解,输入动态编程的范畴)。

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(5)

图3 公式的可视化

在这一检测中,几乎所有的计算都在声学模型中进行,而后续的时序积分所消耗的计算一般都会予以忽略。所以一般在评估计算资源和速度时主要考虑声学模型而忽略后面的积分计算。

在图4中我们描述了声音信号在不同阶段的形貌,以帮助你理解上述这一检测过程。最底部是输入的音频波形,其中越亮的部分表示对应的声音强度越大。

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(6)

图4 声音模式通过检测器的各个阶段

从下往上第二条波形表示通过滤波器后的波形,通过对不同频率分量赋予不同权重而得来。这一过程对输入的声音进行了平滑,降低的输入的噪音。

中间从H1到H5的蓝绿条纹表示的是检测器中五层隐藏层的激活值,每层的32个单元都在图中表示了出来。

接下来的一部分显示了一个类似对角线的模式,这是整个声学模型的输出。对应每一帧在每一个位置有一个输出,同时考虑了安静状态和其他说话的声音。在最上部表示的是沿对角线将所有的值利用公式累加得到最后的分数。我们可以看到,在声音被完全送入系统后,分数到达了峰值。

随后,通过将分数与阈值比较来决定是否唤醒Siri。实际上这一阈值并不是一成不变的,在设计时加入了一定的灵活性来使siri在一些复杂困难的条件下激活变得更加容易,同时保持足够低的误唤醒率。在实际结构中,包括了两个阈值,一个是主要的正常阈值,同时还包括一个稍低一点的唤醒阈值。如果分数处于两个阈值之间,Siri就会进入更加灵敏的模式,来再次确认用户是否会再次重复唤醒次来唤醒siri。这样的二次机制避免了一些复杂情况的漏检,同时也保证了误检率不会增加(通过提高灵敏度来增强检测效果)。

响应和功耗:检测的两个方面

Hey Siri的检测器需要考虑的不仅仅是精度,同时需要考虑速度和功耗的影响。同时我们还需要最小化内存和处理器的使用,以便不影响其他程序的正常工作和待机时间。

为了避免总是运行处理器来检测唤醒,iPhone使用了AOP(always on Processor,一种低功耗的复杂处理器)来接收麦克风信号。技术人员利用的AOP的一小部分来运行一个精简缩小版本的检测器,从而限制了功耗。当微型检测器的分数超过一定阈值的时候唤醒主处理器,来利用大型的网络进行进一步处理。

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(7)

图5 两层结构的检测流程

但由于Apple Watch的电池容量更小,这一检测方式面临着新的挑战。所以在

Watch上只运行了单一的检测器,其模型大小介于上面两种类型之间。同时这一检测器只有在检测到手腕转动的手势时才会启动。所以一般只会占用到很小的一部分(~%5)计算资源和电池。同时为了克服语音捕捉的不完整性,在初始化检测器的时候可以进行一定的截取操作和补偿。

“Hey Siri”的个性化定制

“Hey Siri”检测器会一直在线并响应周围人做出的唤醒。为了减少不必要的误唤醒,我们会邀请用户来对这一检测器进行一些个性化设置来提供它的准确率。通常需要用户提供五句以Hey Siri开头的短语,并保存在设备中。

在后面的检测过程中,我们会利用已有的这些样本来和新的Hey Siri样本进行比较。通过检测器将输入的声音信号转换为固定长度的矢量后,利用一个新的独立的神经网络来将其转换到“说话人空间”中去,通过输出的向量距离来判断是否时在这一设备中存储过声音的用户,从而根据这些信息决定是否需要唤醒设备。这一过程不仅降低了iPhone被其他人误唤醒的概率,同时减小了其他类似声音唤醒Siri的概率。

再次确认

如果唤醒声音通过了前面所说的各个部分,波形同时会被发送到Siri的服务器。如果服务器判断这是一次误唤醒,例如“hey serious”,那么服务器会向设备发送一条取消指令,使其进入睡眠状态从而减小误唤醒。

声学模型:训练

DNN声学模式是检测器的核心,接下来让我们来看看我们是如何训练的。在最开始的时候,一部分用户会按下按键来录制一系列Hey Siri的音频来训练最初的美国英语模型。我们通过自动录音和转录工具来进行训练,随后会对训练样本的子集进行检查来获取训练的精度。

随后,我们建立起了一系列语言学的规范来进一步提高Hey Siri的检测精度。在美国英语中,有两个很相似的变体会对识别造成很到的影响,Serious 和 Syria两个词。所以我们会在文本中写下一个逗号来尽量分隔两个音节Hey,Siri,所以整个短语就包含了开始、中间和结尾三个部分,在声学模型中对应不同的输出。

我们利用了丰富的语料库来对主识别器进行了训练,这一识别器可以提供上千类分类标签,但其中只有20类是需要用到的,而其他可以归到另一大类中去。训练的目的是希望声学模型可以为输入的声音准确的输出对应的分类标签。训练过程中需要不断调整网络的结构参数,主要使用了BP算法和随机梯度下降法。开发人员在训练的过程中使用的不同的软件,包括Theano,Tensorflow和Kaldi。

模型的训练时间一般在一天左右,我们会生成三个版本的模型,包括第一层检测的小模型和第二次复核的大模型,以及Watch上使用的中等大小模型。

测试和调优

一个理想的探测器是会在用户说“Hey Siri”时被唤醒,而不是在其他场合被唤醒。我们用两种错误来描述探测器的准确性:在错误的时间启动,和在正确的时间没有启动。错误接受率(FAR or 假报警率)是每小时 (或者是在激活期间的平均时间) 的虚假激活次数,而假拒绝率(FRR)是尝试激活却失败的比例。需要注意的是,我们使用测量FAR的单位与我们使用的FRR的单位不一样。甚至维度都是不同的,所以这里没有相等的错误率。

对于给定的模型,我们可以通过改变激活阈值来改变这两种误差之间的平衡。图6显示了这种权衡的例子,有两种大小的早期开发模型,沿曲线移动改变阈值。

在开发过程中,我们尝试通过使用一个大型的测试集来估计系统的准确性,这种测试集的手机成本很高但却必不可少,其中包含有“正”数据和“负”数据,“正”数据包含了目标短语。你可能会认为我们可以使用“Hey Siri” 系统提取的语音,但遗憾的是系统并没有捕捉到这种触发失败的尝试,我们希望改进系统以尽量地包含尽可能多的失败尝试。

起初我们使用的是来自“Hey Siri”的一些用户在按下Home键时说下的语音,但是这些用户其实并没有想唤起Siri的注意,像home键和麦克风一样,都只能是在一臂之内的范围才可以使用。而我们希望“Hey Siri”可以覆盖一个房间来工作。我们在各种各样的条件下制作了录音,比如在厨房(近距离和远处)、汽车、卧室和餐厅,这些录音都是来自母语为英语的人。

我们使用“负”数据来测试虚假的激活(和假醒)。这些数据代表了数千小时、来自千奇百怪地方的录音,包括播客和非“Hey Siri”输入到Siri的多种语言,以及用来表示背景声音(尤其是语音)和可能是一个用户与他人对话时所说的短语等。我们之所以需要这么多的数据,是因为我们正试图将假警报率的评估值尽可能的降低,直到为一周一次。(如果在负数据中出现了目标短语,我们将其标记为如下这样,这样我们就不会将其响应视为错误)

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(8)

图6探测器的精度针对小的和大的DNN检测器阈值的权衡折中

调优在很大程度上取决于使用什么阈值。在图6中,更大模型中较低的折中曲线上的两个点显示了正常的和第二次机会阈值。较小的(第一个)模型的操作点是在右边。这些曲线仅用于检测器的两个阶段,不包括个性化的阶段或后续的检查。

虽然我们相信在测试集中表现更好的模型可能确实更好,但是很难将脱机测试结果转换成有用的用户体验的预测。除了先前描述的离线测量, 我们还每周通过从最新的iOS设备上和Apple Watch的生产数据抽样,评估了错误报警率(即当Siri在没有用户说“Hey Siri”时便自主启动)和冒名接受率(imposter-accept rates,即当除用户之外的其他人在训练检测器说“Hey Siri”时,Siri正常启动)。这并没有给我们拒绝率(即当系统不能响应一个有效的“Hey Siri”时),但是我们可以从有效的阈值之上的激活率评估出拒绝率,以及从开发人员携带的设备上刚刚低于阈值的事件中抽样。

我们不断地评估和改进“Hey Siri”,并通过文本描述的方法来进行训练和测试,我们也在多种不同的语言和条件下进行了多种训练来强化它的能力。下次你再说“Hey Siri”的时候,你可能就会想到它要对这个短语做出反应所经历的整个过程,但我们希望的是它可以表现正常的工作就好了~

-END-

欢迎加入将门技术社群!

现已涵盖CV、机器人、NLP、ML、IoT等多个当下火热的技术话题。我们每周邀请来自产学研的优秀技术人进行线上分享,目前群里已汇聚数千位上述领域的技术从业者。

入群方式>>关注“将门创投”(id:thejiangmen)微信公众号,在后台回复关键词“技术社群”,提交入群申请表。通过审核后,我们会在第一时间发出邀请。

苹果siri语音唤醒词是啥(苹果发布长文揭秘)(9)

点击右上角,把文章朋友圈

将门创投

让创新获得认可!

thejiangmen

service@thejiangmen.com

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页