谷歌语音转录背后的神经网络

  由于“记忆单元”的优势,LSTM RNNs已经应用于Google、百度、科大讯飞的语音处理之中。最近,Google在其技术博客中自述了使用LSTM模型取代GMM模型实现语音转录的过程。文章尚未披露训练模型的具体步骤,但介绍了数据源的解决、建模的思想,并对目前尚未解决的问题进行解析,如错认“噪音”和转录标点符号,对希望尝试LSTM的团队有借鉴意义。

  在过去的几年中,深度学习在世界计算机科学难题中表现出了卓越的成就,从图像分类、字幕添加到机器翻译,再到可视化模型技术。最近,我们宣布了在谷歌语音转录上使用长短期记忆递归神经网络(LSTM RNNs)所取得的成就(然而其他神经网络也在提升服务性能)。我们想更详细地讲述我们是怎么做到这些的。

  从2009年上线以来,谷歌语音转录一直使用高斯混合模型(GMM)的声音模型,30多年来,它们在语音识别领域独占鳌头。用复杂的技术(比如将模型运用于人声)增广相对简单的建模方法。

  到了2012年左右,深度神经网络(DNNs)彻底改变了语音识别领域。这些多层的网络可以比GMMs更好地分辨声音,它们采用了“判别训练”的方式,将各个语音单位区分开而不是单独对某个进行建模。

  2012年5月份,谷歌语音转录第一次在安卓的语音识别上使用,使用递归神经网络(RNNs)的确可以迅速提高性能,特别是LSTM RNNs。和DNNs相比,LSTM RNNs有额外的递归连接和记忆单元,可以让神经元“记住”它们已经处理过的数据,跟你在听到一句话然后口译时候记住的单词数目相当。

  链接:深入浅出LSTM神经网络

  但是,仍在使用GMMs的谷歌旧版语音信箱系统已经远远落后了。所以我们决定利用我们使用LSTM RNNs所积累的经验,从头开始设计它。但现在我们面临着一些挑战。

  一个LSTM的记忆单元。显示了它存储、交流信息的闸门机制。供图:Alex Graves

  在音频处理中,语音识别比识别单个声音要考虑更多的因素:声音序列需要匹配现有的文字,文字序列需要有现实意义。这叫做“语言建模”。语言模型通常用超大语料库进行训练,它们通常比语音数据要多出几个数量级。找到大量的文本信息很容易,但是要找到与自然语言匹配的数据源却并非易事。17世纪莎士比亚的戏剧中使用的英语不会对开发语音信箱系统有所帮助。

  现在我们决定重新训练声音和语言模型,并且用现有的语音邮件来训练。我们已经收集了一小部分由用户捐赠用于研究的语音邮件,我们将用这些数据对转录进行训练和测试,但重新训练语言模型则需要更多的数据。所以我们要求用户捐赠大量的语音邮件,并且向他们保证这些消息不会被任何人阅读和窃听,它们只被计算机及其学习算法使用。然而,在没有人为确认和手工转录的情况下,我们又该怎样来训练模型呢?

  我们不能单单使用旧版的转录模块,因为它们已经用识别错误——无用数据输入输出——进行训练了。恰恰相反我们开发了一套精巧的迭代管道来训练模型。使用改进的声音模型,我们能够在离线情况下识别现有的语音邮件,得到更新的、更好的转录信息,这些信息将作为重新训练语言模型的数据,有了更好的语言模型之后,我们就可以重新识别同样的数据,然后重复上述过程。经过多步之后,识别错误率降低了,最终在原始系统的基础上将识别错误率降低将近一半。这确实是个意外的惊喜。

  但也存在其他的“惊喜”(不是那么好的)。比如,有时候识别器会跳过整个语音片段;就好像是睡着了一样,几秒过后又醒来了。结果表明这个声音模型偶尔会碰到bug,它会认为用户接下来不会继续说话了,然后将它听到的作为噪声,所以停止输出。当我们重新训练那些相同的数据的时候,我们会认为这些语音的确应该被忽略,这样会强化模型继续使用这种做法。将这种处理方式从识别器中剥离出来需要谨慎微调。

  同样,正确转录标点符号也是件困难的工作。老系统依赖于手动配置的规则或者语法,这种做法不能正确理解文本语境。比如,在之前的测试中,我们使用的算法将“I got the message you left me”(我收到了你留给我的信息)转录成了“I got the message, You left me”(我收到了信息,你离开了我)。为了修正这点,我们再次挖掘神经网络,教LSTM在正确的位置插入标点符号。虽然结果并不是很完美,但是我们不断尝试各种方法来增加准确性。