3 月 18 日,由美中技术与创新协会(Association of Technology and Innovation,ATI)主办的第一届“AI NEXT”大会在西雅图召开。本次会议的主要嘉宾包括微软首席 AI 科学家邓力、微软院士黄学东、Uber 深度学习负责人 Luming Wang 等。华人之外,还有亚马逊 Alexa 首席科学家 Nikko Strom、微软 Cortana 架构师 Savas Parastatidis 等业内知名专家。
大会主题是“探索 AI 的潜力,把 AI 技术应用于实用专案和服务”,对 CV、NLP、智慧助手、深度学习框架均做了专题报告。其中,亚马逊首席科学家 Nikko Strom 再次以“Alexa 是怎样练成的”为主题,讲述了 Alexa 的深度学习基本架构、声学模型、语音合成等内容,雷锋网整理如下:
Nikko Strom,现任亚马逊首席科学家,是 Echo 和 Alexa 专案的创始成员,在语音辨识技术相关领域有资深研究及从业经验:
- 1997 年于瑞典皇家理工学院语音通讯实验室获得博士学位,后担任MIT电脑科学实验室研究员。
- 2000 年加入语音技术初创公司 Tellme Networks。
- 2007 年随着 Tellme Networks 被微软收购,加入微软,推进商业语音辨识技术的前廊研究。
- 2011 年加入亚马逊,担任首席科学家,领导语音辨识及相关网域的深度学习专案。
以下是 Nikko Strom 在大会上的演讲,雷锋网在不改变原意的基础上略删减和补充。
先简单介绍一下我们的产品。如果你买了 Amazon Echo,意味着你可以透过 Alexa 语音辨识系统控制它,并与它对话,而且不需要拿遥控器。左边(下图)是 Holiday Season,是我们新加入的白色Echo 和 Dot,相信应该有很多人较偏爱白色的电子产品。
Echo 还可以与没有内建 Alexa 系统的家电进行连线,如灯具、咖啡机、恒温器等,只需要唤醒 Alexa,就可以让这些家电装置执行一些指令。此外,开发者还可以透过工具包 Alexa Skills Kit,打造个性化的功能。
如今,Echo 已进入数百万用户的家中,每天都被大量使用,也让我们得到无法想像的资料量。
深度学习基础框架
事实上,人耳并非随时都在搜集语音资讯,真正在“听”的时间大约只占 10%,所以一个人成长到 16岁时,他/她所听到的语音训练时间大概有 14,016 个小时。
回到 Alexa,我们把数千个小时的真实语音训练资料储存到 S3 中,使用 EC2 云上的分散式 GPU 集群来训练深度学习模型。
训练模型的过程中发现,用 MapReduce 的方法效果并不理想,因为节点之间需要频繁保持同步更新,无法再透过增加更多节点来加速运算。也可以这样理解,就是 GPU 集群更新模型的计算速度非常快,每秒都会更新几次,每次更新大约是模型本身的大小。也就是说,每一个执行序(Worker)都要跟其他执行序同步更新几百兆的量,而这在 1 秒内要发生很多次。所以,MapReduce 的方法效果并不是很好。
我们在 Alexa 的解决方法就是,使用几个逼近算法(Approximations)来减少更新规模,将其压缩 3 个量级。这里是我们一篇 2015 年论文里的图表,可以看到,随着 GPU 执行序的增加,训练速度加快。到 40 个 GUP 执行序时,几乎成直线上升,然后增速有点放缓。80 GPU 执行序对应着大约 55 万帧/秒,每秒语音大约包含 100 帧,也就是说现在这 1 秒钟可以处理大约 90 分钟的语音。前面我提到一个人要花 16 年的时间来学习 1.4 万小时的语音,而用我们的系统,大约 3 个小时就可以学完。
这就是 Alexa 大致的深度学习基础架构。
声学模型
大家都知道,语音辨识系统框架主要包括四大块:讯号处理、声学模型、解码器和后端处理。
首先我们会将从麦克风收集来的声音,进行一些讯号处理,将语音讯号转化到频域,从每 10 毫秒的语音中提出一个特征向量,提供给后面的声学模型。声学模型负责把声讯分类成不同音素。接下来就是解码器,可以得出概率最高的一串词串,最后一步是后端处理,就是把单词组合成容易读取的字档。
在这几个步骤中,或多或少都会用到机器学习和深度学习。我今天主要讲声学模型的部分。
声学模型就是一个分类器(classifier),汇入向量,汇出语音类别的概率。这是一个典型的神经网络。底部是汇入资讯,隐藏层将向量转化到最后一层里的音素概率。
这是一个美式英语的 Alexa 语音辨识系统,所以会汇出美式英语中的各个音素。在 Echo 初发表时,我们录了几千个小时的美式英语语音来训练神经网络模型,这成本很高。当然,世界上还有很多其他语言,比如我们在 2016 年 9 月发行德语版 Echo,如果重头来一遍用几千个小时德语语音来训练,成本还是很高。所以,这个神经网络模型一个有趣的地方,就是可以“迁移学习”,你可以保持原有网络中其他层不变,只把最后一层换成德语。
两种不同的语言,音素有很多不一样,但仍然有很多相同的部分。所以,你可以只使用少量德语的训练资料,在稍作改变的模型上最终可得到不错的结果。
锚定嵌入
在一个充满很多人的空间里,Alexa 需要弄清楚到底谁在说话。开始比较简单,用户说一句唤醒词“Alexa”,Echo 对应方向的麦克风就会开启,但接下来就比较困难了。比如在一个鸡尾酒派对,一个人说“Alexa,来一点爵士乐”,但如果他/她身边有同伴一起交谈,在很短的时间里都有说话,那么要弄清楚到底是谁发出指令就比较困难。
这个问题的解决方案来自 2016 年的一份论文《锚定语音侦测》(Anchored Speech Detection)。一开始,我们得到唤醒词“Alexa”,使用一个 RNN 从中撷取一个“锚定嵌入”(Anchor embedding),这代表唤醒词里包含语音特征。接下来,我们用另一个不同的 RNN,从后续要求叙述中撷取语音特征,基于此得出一个端点决策。这就是我们解决鸡尾酒派对难题的方法。
双连音片段
Alexa 里的语音合成技术,也用在 Polly 里。语音合成的步骤一般包括:
第一步,将字档规格化。如果你还记得,这一步骤恰是对“语音辨识”里的最后一个步骤的逆向操作。
第二步,把字素转换成音素,由此得到音素串。
第三步是关键的一步,也是最难的一步,就是将音素生成波形,也就是真正的声音。
最后,就可以把声讯播放出来了。
Alexa 拥有连续的语音合成。我们录下数小时的人类自然发音的声讯,然后将其切割成非常小的片段,由此组成一个资料程式库。这些切割片段称为“双连音片段”(Di-phone segment),双连音由一个音素的后半段和另一个音素的前半段组成,当最终把语音整合起来时,声音听起来的效果就比较好。
建立这个资料程式库时,要高度细致,保证整个资料程式库里片段的一致性。另外一个重要环节是算法方面,如何选择最佳片段串列结合在一起形成最终的波形。首先要弄清楚目标函数是什么,来确保得到最合适的“双连音片段”,以及如何从庞大的资料程式库里搜寻到这些片段。比如,我们会把这些片段标签上属性,我今天会谈到三个属性,分别是音高(pitch)、长度(duration)和密度(intensity),我们也要用 RNN 为这些特征找到目标值。之后,我们在资料程式库中,搜寻到最佳片段组合串列,然后播放出来。
(本文由 雷锋网 授权转载;首图来源:Amazon)