原文来源:machinelearning.apple.com

作者:Apple Siri Team

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

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

Siri的免提方式


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

图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:

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

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

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

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

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

其中:

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

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

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

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

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

图3:以图形描述方程式

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

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

图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个隐藏单元。

图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的多种语言,以及用来表示背景声音(尤其是语音)和可能是一个用户与他人对话时所说的短语等。我们之所以需要这么多的数据,是因为我们正试图将假警报率的评估值尽可能的降低,直到为一周一次。(如果在负数据中出现了目标短语,我们将其标记为如下这样,这样我们就不会将其响应视为错误)

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

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

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

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

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

回复「转载」获得授权,微信搜索「ROBO_AI」关注公众号

中国人工智能产业创新联盟于2017年6月21日成立,超200家成员共推AI发展,相关动态:

中新网:中国人工智能产业创新联盟成立

ChinaDaily:China forms 1st AI alliance

证券时报:中国人工智能产业创新联盟成立 启动四大工程搭建产业生态“梁柱”

工信部网站:中国人工智能产业创新联盟与贵阳市政府、英特尔签署战略合作备忘录

点击下图加入联盟

下载中国人工智能产业创新联盟入盟申请表

关注“雷克世界”后不要忘记置顶

我们还在搜狐新闻、雷克世界官网、腾讯新闻、网易新闻、一点资讯、天天快报、今日头条、雪球财经……

↓↓↓点击阅读原文查看中国人工智能产业创新联盟手册

苹果最新机器学习研究,详解「嘿Siri」语音触发器背后的深度神经网络相关推荐

  1. 应用架构、业务架构、技术架构和业务流程图详解「建议收藏」

    应用架构.业务架构.技术架构和业务流程图详解「建议收藏」 应用架构(ApplicationArchitecture)是描述了IT系统功能和技术实现的内容.应用架构分为以下两个不同的层次:企业级的应用架 ...

  2. SOME/IP协议详解「总目录」

    SOME/IP协议详解「总目录」 欢迎大家来到雪云飞星的<SOME/IP协议详解>,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习SOME/IP协议知识点的参考.下面蓝字都是传 ...

  3. 一文详解「群体机器人」中的「实体进化」到底是什么?

    原文来源:frontiers 作者:Nicolas Bredeche.Evert Haasdijk.Abraham Prieto 「雷克世界」编译:嗯~阿童木呀.KABUDA 本文概述了适用于机器人群 ...

  4. 一分钟详解「手眼标定」基本原理

    原文首发于[3D视觉工坊]知识星球:传送门. 一 前言 机器人的视觉系统分为固定场景视觉系统和运动的「手-眼」视觉系统.摄像机与机器人的手部末端,构成手眼视觉系统.根据摄像机与机器人相互位置的不同,手 ...

  5. 一分钟详解「本质矩阵」推导过程

    文章目录 前言 一 本质矩阵如何推导 二 本质矩阵的意义 三 本质矩阵的求解 四 扩展--基本矩阵 前言 两幅视图存在两个关系:第一种,通过对极几何,一幅图像上的点可以确定另外一幅图像上的一条直线:另 ...

  6. SOME/IP协议详解「2.0·服务化通信概述」

    SOME/IP协议详解「2.0·服务化通信概述」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.0·服务化通信概述」 1 SOME/IP服务的组成 2 Method| ...

  7. SOME/IP协议详解「3.1.1·服务发现报文的格式」

    SOME/IP协议详解「3.1.1·服务发现报文的格式」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「3.1.1·服务发现报文的格式」 1 SD的SOME/IP格式头 ...

  8. SOME/IP协议详解「2.2.1·SOME/IP的传输方式」

    SOME/IP协议详解「2.2.1·SOME/IP的传输方式」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.2.1·SOME/IP的传输方式」 1 基础传输 2 N ...

  9. SOME/IP协议详解「2.1.1·SOME/IP的格式头」

    SOME/IP协议详解「2.1.1·SOME/IP的格式头」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.1.1·SOME/IP的格式头」 1 SOME/IP报文 ...

最新文章

  1. 数据库限制内存使用方法
  2. iOS开发之Objective-C与JavaScript的交互
  3. 呼叫我,或异步REST
  4. 操作系统磁盘调度_磁盘调度| 操作系统
  5. 280. Wiggle Sort
  6. 常用Java API 熟悉 方法 从记不得到忘不掉 java1.8.61为例
  7. jpa 原生sql 查询返回一个实体_spring data系列之jpa
  8. java小数换成字符实现加法_第一、二次笔记总结
  9. 自建服务器同步软件,自建Syncthing中继服务器(私密传输或造福大众)
  10. 9-9 原生安装-1
  11. 顺序表的简单操作代码(c++实现)
  12. 软件测试用例的书写方式以及测试模板
  13. 逝去的2018年,年度总结
  14. SpringCloud核心组件概述(五大神兽)
  15. 扫描中如何实现自动纠偏
  16. 详解冬奥冠军背后的AI黑科技
  17. 初入职场“荒野求生”,五条靠谱的生存指南
  18. miscellaneous_7
  19. 测试工程师-yy面试 cvte面试总结
  20. HTTPS为啥子安全?

热门文章

  1. php中dump怎么使用,php中var_dump()方法的用法简介
  2. android 设置动画时长,XamarinAndroid组件教程设置动画的时长参数
  3. linux shell获取时间戳
  4. CAD中如何更改文字标注的颜色?
  5. 仿华为系统自带天气预报UI---线条圆圈控件
  6. 搜索引擎重视原创内容的原因是什么?
  7. O缺缺缺缺氧 O缺缺氧
  8. linux系统双网卡选路,Linux下双网卡绑定七种模式图解教程
  9. Java学习之自定义异常和抛出异常
  10. AutoCAD VBA多段线操作