美文网首页深度学习
Siri:一个基于深度卷积网络的个人语音助手

Siri:一个基于深度卷积网络的个人语音助手

作者: Apple技术产品粉 | 来源:发表于2017-12-02 21:04 被阅读259次

    用户喊一声“Hey,Siri”就可以叫出Siri,Siri识别器使用的就是深度卷积网络,这个网络负责把你声音特征转换成发音相似度最高的词,所以这个网络会计算一个相似度,当你喊出“Hey,Siri”的时候,如果这个相似度够高,Siri就会被启动。

    iPhone上的Siri流程

    Siri流程如下图所示:

    Siri流程

    整个系统有几部分组成。Siri最重要的就是云识别,数据包会被上传到服务器中,服务器进行自动解析,包括语音识别、自然语言解析和不同的信息服务,然后将模型数据传给识别器中,识别器再将结果传给Siri客户端,由客户端完成工作。

    "Hey,Siri"语音识别器

    iPhone或者Apple Watch上的麦克风将你的语音转换成音波,频率为每秒16000,一种识别机制将输入的音波样本转换成序列化的架构,每一个代表0.01秒的声音图谱,每次约20个(0.2s)样本被送到声音模型(一个可以将声音样本转换成声音序列集合的深度卷积网络)中。

    说到这个神经网络,主要是由矩阵乘法和非线性逻辑组成的。每一个隐藏层都是神经网络在训练将输入的语音转换成声音模型时所发掘的中间状态,最后由SoftMax函数来结尾。整个网络结构如下图所示:

    DNN结构

    当Siri识别器运行时系统会选择每一个隐藏层的单位个数来适应计算资源的大小,有32个,或者128个,或者192个,个数的多少由内存和性能约束。iPhone上有两个网络,一个用于初始化并识别,另外一个用于检查,第二个网络使用的单位要远远多于第一个网络。

    神经网络在训练并进行反馈时用的是以下公式:

    其中Fi,t 为模型第i个的相似度最终得分,qi,t 为模型原来输出的值,si 为停留在i的损失,mi 为从i移走的损失。(有点像反向传播神经网络的味道啊)公式可以用下图形象的表示:

    每一个积累的相似度得分都是由前一个序列提供并带上带标签的,并经过最大值操作。最终的相似度得分是由N个这样的序列合起来计算出来的。这个相似度得分就是文章开头所说的用于启动Siri客户端的那个得分。

    Siri识别器的反应速度和性能

    Siri识别器的首要目标是尽可能快,而不是尽可能准确,所以需要尽可能减少内存占用和处理器占用。为了避免主处理器一天啥事不干,就用来监听“Hey,Siri”,苹果使用了AOP(Always On Processor,一个低功耗的处理器)处理器来运行识别器和较小的神经网络,当相似度得分达到了启动Siri的门槛以后,AOP处理器会唤醒主处理器来运行较大的那个神经网络进行解析(也就是咱们平常用Siri定闹钟,锻炼等事件)。一般AOP处理器的神经网络是5层*32个隐藏单位,主处理器是5层*192个单位。

    在Apple Watch上遇到了更大的问题,那就是电池要比手机小得多,手表上用的是一个网络的Siri识别器,这个识别器的神经网络大小介于iPhone 的那两个(一大一小)之间,这个Siri识别器只在屏幕处于唤醒状态下才进行工作。

    Siri识别器个人化

    为了避免别人说“Hey,Siri”然后打开你的Siri这种尴尬场景出现,每次在开机时候会让你说五次“Hey,Siri”。目的何在?就是为了获得你的声音特征来训练Siri识别器的神经网络,储存为样本。这样产生了用于将声音图谱转化成固定长度的向量的时间信息,这个信息是通过平均每一次你说“Hey,Siri”下的序列得到的。既然是固定,也就是说,别人的声音转化过来肯定不是你转化过来的那个长度的向量,所以自然而然,别人也就不能启动你的Siri客户端,从而保证了个人化这个目标。

    Siri识别器训练成果

    直接上图吧

    Siri识别器训练误差百分比

    相关文章

      网友评论

        本文标题:Siri:一个基于深度卷积网络的个人语音助手

        本文链接:https://www.haomeiwen.com/subject/dyfobxtx.html