Nikko Strom,现任亚马逊首席科学家,是 Echo 和 Alexa 项目的创始成员,在语音识别技术相关领域有着资深的研究及从业经验:
以下是 Nikko Strom 在本次大会上的演讲,雷锋网在不改变愿意的基础上有删减和补充。
先简单介绍下我们的产品。如果你买了 Amazon Echo,意味着你可以通过 Alexa 语音识别系统控制它,并与它对话,而且不需要拿遥控器。左边(下图)是 Holiday Season,是我们新加入的白色Echo和Dot,相信在座应该有很多人比较偏爱白色的电子产品。
Echo 还可以与没有内置 Alexa 系统的家电进行连接,如灯具、咖啡机、恒温器等,只需要唤醒Alexa,就可以让这些家电设备执行一些命令。此外,开发者还可以通过工具包 Alexa Skills Kit,打造个性化的功能。
现如今,Echo已经进入了数百万用户的家中,每天它都在被大量地使用着,也让我们得到了无法想象的数据量。
深度学习基础框架
事实上,人耳并非每时每刻都在搜集语音信息,真正在“听”的时间大约只占 10%,所以一个人成长到 16岁时,他/她所听到的语音训练时间大概有 14016 个小时。
回到 Alexa,我们把数千个小时的真实语音训练数据存储到 S3 中,使用 EC2 云上的分布式 GPU 集群来训练深度学习模型。
训练模型的过程中发现,用 MapReduce 的方法效果并不理想,因为节点之间需要频繁地保持同步更新,不能再通过增加更多的节点来加速运算。也可以这样理解,就是GPU集群更新模型的计算速度非常之快,每秒都会更新几次,每次的更新大约是模型本身的大小。也就是说,每一个线程(Worker)都要跟其它线程同步更新几百兆的量,而这在一秒钟的时间里要发生很多次。所以,MapReduce的方法效果并不是很好。
我们在 Alexa 里的解决方法就是,使用几个逼近算法(Approximations)来减少更新规模,将其压缩 3个量级。这里是我们一篇 2015 年论文里的图表,可以看到,随着GPU线程的增加,训练速度加快。到 40 个 GUP 线程时,几乎成直线上升,然后增速有点放缓。80 GPU 线程对应着大约 55 万帧/秒的速度,每一秒的语音大约包含 100 帧,也就是说这时的一秒钟可以处理大约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为这些特征找到目标值。之后,我们在数据库中,搜索到最佳片段组合序列,然后播放出来。
(来源:雷锋网)