人工智能siri的使用方法(苹果最新ML研究详解)(1)

原文来源:machinelearning.apple.com

作者:Apple Siri Team

「雷克世界」编译:BaymaxZ、嗯~阿童木呀

“嘿Siri”功能允许用户利用Siri实现免提。一个非常小的语音识别器一直在运行,而且只听这两个单词。当它检测到“嘿Siri”时,Siri会将接下来的语音解析为命令或查询。“嘿Siri”检测器使用深度神经网络(DNN),它将声音声学模式转换成语音的概率分布。然后,它使用时间整合过程计算你所发出的短语为“嘿Siri”的置信度分数。如果得分足够高,Siri就会被唤醒。本文将介绍Siri的基础技术。

Siri的免提方式

要获得Siri的帮助,我们一般会说“嘿Siri”。我们没有必要按下按钮,使用“嘿Siri”语音就能使Siri开免提。这看起来很简单,但是在简单的表面背后,想要快速有效地唤醒Siri还需要很多操作。硬件、软件和互联网服务必须无缝协作,才能提供很好的体验。

人工智能siri的使用方法(苹果最新ML研究详解)(2)

图1:iPhone的“嘿Siri”流程图

当你的手正处于忙碌状态,例如正在烹饪或驾驶,或正在使用Apple Watch而无暇做其他事情的时候,能够使用Siri而不需要按按钮就变得尤为重要了。如图1所示,整个系统有几个部分。Siri的大部分操作“在云中”,包括主要的自动语音识别、自然语言解释和各种信息服务。还有可以为检测器使用的声学模型提供更新的服务器。本文主要介绍本地设备上运行的部分,例如iPhone或Apple Watch。特别要说明的是,它主要集中于检测器上:一个专门的语音识别器,它听声音始终只是为了找到唤醒语句(在最近的iPhone上启用的“嘿Siri”功能)。

检测器:听“嘿Siri”

iPhone或Apple Watch中的麦克风将你的声音转换成瞬时波形采样流,速率为每秒16000。频谱分析阶段将波形采样流转换成帧序列,每个帧描述大约0.01秒的声谱。将这些帧中的大约二十个(0.2秒的音频)馈送到声学模型,然后深度神经网络(DNN)便会将这些声学模式中的每一个转换成一组语音声音类的概率分布:这些类主要用于“嘿Siri”短语,加上静音,以及其他语音等,大约共有20个声音类。见图2:

人工智能siri的使用方法(苹果最新ML研究详解)(3)

图2:深度神经网络用来检测“嘿,Siri”,隐藏层实际上是完全连接的,上面的层执行时间整合,实际上DNN是由虚线框表示的。

DNN主要由矩阵乘法和逻辑非线性组成。每个“隐藏”层是DNN在训练期间发现的将过滤器组输入转换为声音类的中间表示。最终的非线性本质上是一个Softmax函数(也就是通用逻辑或归一化指数),但是由于我们要的是对数概率,所以实际的数学更简单一些。

我们选择DNN的每个隐藏层中的单位数,以适应“嘿Siri”检测器运行时可用的计算资源。我们所使用的网络通常具有五个隐藏层,大小全部相同:32、128或192个单位,具体取决于内存和功率限制。在iPhone上,我们使用两个网络——一个用于初始检测,另一个用作辅助检查器。初始检测器使用的单位数要比辅助检查器少一些。

声学模型的输出提供了每个帧的语音分类的分数。一个语音类通常是像“一个较高前元音和一个前元音中间的/s/的第一部分”。

如果声学模型的输出对于目标短语的正确序列高度一致,我们就会检测到“嘿Siri”。为了产生每个帧的单个分数,随着时间,我们以有效的顺序累积那些本地值。这在图2的最后(顶部)层中表示为具有连接到相同单位并且顺序连接的循环网络。每个单位内都有一个最大化操作和一个加法:

人工智能siri的使用方法(苹果最新ML研究详解)(4)

其中:

•Fi,t是模型状态i的积分

•qi,t是声学模型的输出——在时间t周围的给定声学模式的与第i个状态相关联的语音类的对数分数

•si是与状态i相关联的成本

•mi是从状态i开始的成本

si和mi都是基于训练数据中具有相关标签的片段的持续时间的分析。(此过程是动态编程的应用,可以基于隐马尔可夫模型HMM的想法导出。)

人工智能siri的使用方法(苹果最新ML研究详解)(5)

图3:以图形描述方程式

每个累积分数Fi,t与具有状态的先前帧的标签相关联,如给定的最大操作的决策序列。每个帧的最终得分为Fi,t,其中短语的最后状态是状态I,并且在导致该分数的帧序列中存在N个帧。(N可以通过追溯最大决定的顺序找到,但实际上是通过传播转发数量的帧来完成的,因为路径进入了短语的第一个状态)。

“嘿Siri”检测器中几乎所有的计算都在声学模型中。时间积分计算相对简单,所以在评估大小或计算资源时,我们将它忽略。

人工智能siri的使用方法(苹果最新ML研究详解)(6)

图4.穿过检测器时的声学图案

假设我们使用最小的DNN,你可以通过查看图4更好地了解检测器的工作原理,图4显示了各个阶段的声信号。最底端是麦克风波形的波形图。在这种情况下,有人在说“嘿Siri什么...”时,更亮的部分就是这句话中最响亮的部分。嘿Siri图案是垂直的蓝线之间的部分。

从底部开始的第二个水平条带显示了用mel滤波器组(mel filter bank)分析相同波形的结果,该滤波器组基于感知测量给予对频率的权重。这种转换还能使光谱图中可见的细节平滑,并且由于声道激发的精细结构——随机的周期性的——看作垂直条纹。

标记为H1至H5的交替绿色和蓝色水平条显示五个隐藏层中每个隐藏层中的单位的数值(激活)。已经安排了每一层的32个隐藏单元,以将具有相似输出的单元放在一起。

下一张(黄色对角线)显示声学模型的输出。在每个帧上,短语中的每个位置都有一个输出,另外还有一个输出用于静音和其他语音。根据方程1,通过将沿着明亮对角线的局部分数相加来获得顶部显示的最终得分。注意,在整个短语进入系统之后,得分上升到峰值。

我们将分数与阈值进行比较,以决定是否激活Siri。实际上阈值不是固定值。我们建立了一些灵活性,使其更容易在困难的条件下激活Siri,而不会显着增加虚假激活的数量。有一个主要或正常的门槛和一个通常不会触发Siri的下限阈值。如果分数超过下限,但不是上限,那么可能是我们错过了一个真正的“嘿Siri”事件。当分数在此范围内时,系统进入更敏感的状态几秒钟,这样,如果用户重复该短语,即使没有做出更多的尝试,Siri也会触发。这种第二次机会机制显着提高了系统的可用性,而不会由于在短时间内处于这种非常敏感状态而不会增加虚假警报率。(稍后我们讨论测试和调整准确性。)

响应性和电力:双通道检测

“嘿Siri”探测器不但要准确,而且需要快速而且不会对电池寿命产生重大影响。我们还需要尽量减少内存使用和处理器需求,特别是峰值处理器需求。

为避免运行主处理器整天只是为了听触发短语,iPhone的Always On Processor(AOP)(一个小型的低功耗辅助处理器,即嵌入式运动协处理器)可以访问麦克风信号6S及更高版本)。 我们使用一小部分AOP的有限处理能力来运行具有小型声学模型(DNN)的检测器。当分数超过阈值时,运动协处理器唤醒主处理器,主处理器使用较大的DNN分析信号。在支持AOP的第一个版本中,第一个检测器使用具有5层32个隐藏单元的DNN,第二个检测器具有5层192个隐藏单元。

人工智能siri的使用方法(苹果最新ML研究详解)(7)

图5 双通道检测

Apple Watch提出了一些特殊的挑战,因为电池电量要小得多。Apple Watch使用单通“嘿Siri”检测器,其声学模型的尺寸介于其他iOS设备上的第一次和第二次通道之间。“嘿Siri”检测器只有在手表运动协处理器检测到手腕提起手势时才会运行,这会打开屏幕。在这一点上,WatchOS有很多功能,准备屏幕等,所以系统分配“嘿Siri”只有相当有限的计算资源的一小部分(约5%)。及时启动音频捕获是一个挑战,以捕获触发短语的开始,因此我们以初始化检测器的方式对可能的截词进行限制。

个性化“嘿Siri”

我们设计了永远在线的“嘿Siri”检测器,以响应每当有人在附近说触发短语。为了减少错误触发的烦恼,我们邀请用户进行简短的登入会话。在登入期间,用户说出每个以“Hey Siri”开头的五个短语。我们将这些例子保存在设备上。

我们比较任何可能的新的“嘿Siri”话语与存储的例子如下。(第二遍)检测器产生定时信息,用于将声学图案转换成固定长度的向量,通过取得与每个状态对齐的帧上的平均值。一个独立的、经过特别训练的DNN将该向量转换成“扬声器空间”,其中通过设计,来自同一扬声器的图案倾向于接近,而来自不同扬声器的图案倾向于进一步分开。我们将与登入期间创建的参考模式的距离与另一个阈值进行比较,以确定触发检测器的声音是否可能是登入用户所说的“嘿Siri”。

这个过程不仅降低了另一个人所说的“嘿Siri”会触发iPhone的可能性,而且降低了其他类似声音的短语触发Siri的速度。

进一步检查

如果iPhone上的各个阶段都已通过,那么波形就会到达Siri服务器。如果主语音识别器听到了除了“嘿Siri”之外的一些其他声音(例如“Hey Seriously”),那么服务器将会向手机发送一个取消信号,使其恢复睡眠状态,如图1所示。在某些系统上,我们会在设备上运行一个主识别器的精简版本,以便在更早的时候提供额外的检查。

声学模型:训练

DNN声学模型是“嘿Siri”检测器的核心。所以来看看我们是如何训练它的。在嘿Siri功能初出现之前,有一小部分用户在开始请求时就会说“嘿Siri”,这是通过按下按钮开始的。我们使用这种“嘿Siri”的话语来进行美国英语检测器模型的初始训练。我们还使用了一些用于训练主语音识别器的通用语音示例。在这两种情况下,我们在训练短语上使用自动转录。 Siri团队成员出于准确度的考虑,对录音进行了检查。

我们创建了一个用于“嘿Siri”短语特定语言的语音规范。在美式英语中,我们有两个变体,即在“Siri”中存在两个不同的第一元音,一个是“serious”中的那样,另一个是“Syria”中的那样。我们还试图在这两个词之间短暂的停顿,特别是当这个短语经常用逗号写的时候:“Hey, Siri”,每一个语音音标都会产生三个语音类(开始、中间、结束),且每个语音类都会有各自的来自声学模型的输出。

我们用语料库来对DNN进行训练,因为它的主Siri识别器为每一帧提供了一个声音类标签,主识别器会用到数千个声音类,但只有约20%会用于描述目标短语(包括最初的静音模式),以及一个可以用于其他所有内容的大型类。该训练过程试图生成帧接近为1的DNN输出,且会根据当地的声音模式,标记有相关的国家和电话。训练过程采用标准的反向传播和随机梯度下降法对权重进行调整。我们使用了各种各样的神经网络训练软件工具包,包括Theano、Tensorflow和Kaldi。

在给定本地声学观察的基础上,该训练过程产生了相关电话和国家概率的估计值,但是这些估计值包括训练集(先验)中的电话频率,这可能非常不均匀的,并且几乎与检测器使用的环境没有什么关联。所以在声学模型的输出被投入使用之前我们会对先前结果进行补偿。

训练一个模式大概需要一天的时间,并且在任何一个时间中通常都会有一些模型在进行训练。我们通常会训练三个版本:一个是第一次通过移动处理器的小模型,另一个是第二次通过的较大尺寸的模型,而第三个是用于Apple Watch的中型模型。

对于Siri所支持的所有语言,“嘿Siri”都是可以进行很好的工作的,目标“嘿Siri”不一定是Siri最开始听的句子。讲法语的用户需要说“Dis Siri”,而讲韩语的用户说“Siri 야”(听起来像“Siri Ya”),在俄罗斯它是“привет Siri”(听起来像“Privet Siri”),在泰国是“หวัดดีSiri”(听起来像“Wadi Siri”)。

测试和调优

一个理想的检测器是什么样的呢?只要当用户说“嘿Siri”时,它就启动,而不是在其他时间启动。我们用两种错误来描述检测器的准确性:在错误的时间启动,和在正确的时间未启动。错误接受率(FAR或假警报率)是每小时(或激活期间的平均小时数)的虚假激活次数,而假拒绝率(FRR)是尝试激活但失败的比例。(请注意,我们用于测量FAR的单位与FRR所使用的单位不同。甚至连维度也是不同的,所以没有相等的错误率这样的概念。)

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

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

起初我们使用的是来自“嘿Siri”的一些用户在按下Home键时说下的语音,但是这些用户并不试图抓住Siri的注意,按钮和麦克风一样,都只能是在一臂之内的范围才可以使用。而我们希望“嘿Siri”的工作范围能够涵盖一个房间。我们在不同的条件下制作了特别的录音,比如在厨房里(不管是近距离的还是远的),汽车,卧室,餐馆等,这些都是由各种语言的母语使用者录的。

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

人工智能siri的使用方法(苹果最新ML研究详解)(8)

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

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

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

我们不断地对“嘿Siri”进行评估和改进,以及通过使用本文描述的各种方法对其进行训练和测试以强化它的能力。我们用多种语言进行训练并在一系列条件下进行测试。

下次你说“嘿Siri”时,你可能会想到它会对那个短语所作出所有可能回应,但我们所希望只不过是它能够“正常工作”就好了。

,