近日,百度将 Deep CNN 应用于语音识别研究,使用了 VGGNet ,以及包含 Residual 连接的深层 CNN 等结构,并将 LSTM 和 CTC 的端对端语音识别技术相结合,使得识别错误率相对下降了 10% (原错误率的 90%)以上。
机器之心对百度语音技术部识别技术负责人,同时也是 Deep Speech 中文研发负责人李先刚博士进行了独家专访,李先刚博士详细解读了 Deep CNN 中的各项技术以及研究思路,并表示此次语音识别技术的提升将在接下来用于语音搜索产品。而百度正在努力推进 Deep Speech 3 ,这项研究不排除将会是 Deep Speech 3 的核心组成部分。以下是采访内容:
李先刚:百度这次利用深层卷积神经网络技术(Deep CNN)应用于语音识别声学建模中,将其与基于长短时记忆单元(LSTM)和连接时序分类(CTC)的端对端语音识别技术相结合,大幅度提升语音识别产品性能。该技术相较于工业界现有的 CLDNN 结构(CNN+5LSTM+DNN)的语音识别产品技术,错误率相对降低 10% 。该技术借鉴了图像识别在近些年的成果,以及语音与图像在利用 CNN 模型训练的共通性,是在端对端语音识别技术的革新之后取得的新的技术突破。
其实最早 CNN 在语音领域是有应用的,这两年语音研究专注的主要是 RNN ,而图像领域专注的 CNN 。在语音领域的研究者把 LSTM 和 RNN 做的很好之后,发现 CNN 的发展在语音领域是可以借鉴和有所帮助的。
比如从 ImageNet 竞赛中就可以看出深层卷积神经网络方面的进展。这些网络结构有一个明显的发展趋势,就是越来越深的卷积神经网络层级(CNN):从最初的 8 层网络,到 19 层,22 层,乃至 152 层的网络结构。ImageNet竞赛的错误率也从 12 年的 16.4% 逐步降到了 3.57% 。
在这个背景下,深层 CNN 成为今年语音领域前沿研究中最火的东西,很多公司都在做这方面研究。而我们这次做 CNN 有个很好的点是有个 baseline ,这是基于 Deep Speech 2 端对端基础上,进一步通过引入 CNN 来实现更好效果,这是我们的研究背景。
在这个情况下,我们做了一些非常有意思的实验和希望得到最好性能的工作。为什么说最好性能呢?因为我们做的工作都是大数据,调参时有上万小时,做产品时甚至有 10 万小时。我们希望通过这些来验证,Deep CNN 是真的可以发挥作用,因为你会发现,现在很多基于数据集做的算法在大数据时可能就没用了,但我们发现它是有用的,在端到端框架下也是有用的,这可能算是我们的一个突破点和贡献。
李先刚:微软这次研究更加学术,是在一些标准数据库上做的,是一个口语数据库,叫做 switchboard ,数据库只有 2,000 小时。这个工作是微软研究院做的,他们的关注点是基于这样一个数据库最终能做到什么样的性能。而我们的关注点是我们的语音技术能够深入到大家的日常应用中,去把语音识别服务做到更好,我们的数据是数万小时。
李先刚:在 ImageNet 竞赛得到广泛关注的 DeepCNN 结构,包括 VGGNet ,GoogleNet 和 ResNet 等。其中 ResNet ,可以通过 Residual 连接,训练得到一百多层的 CNN 网络,这样的网络虽然能够显著提升性能,由于其无法实现实时计算,使得其难以在产品模型得到应用。但是我们可以借鉴 Residual 连接的思想,训练一个数 10 层的包含 Residual 连接的 DeepCNN ,以用于工业产品中。
因此,百度做了以下的对比试验:1)HMM 框架中基于 VGGNet 结构的声学模型;2)在 HMM 框架中包含 Residual 连接的 CNN 网络结构的声学模型;3)在 CTC 框架中使用纯 VGGNet 实现端对端建模;4)在 CTC 框架中,在 CLDNN(CNN+5LSTM+DNN)结构中的 CNN 借鉴图像领域的研究成果,尝试 VGGNet ,包含 Residual 连接的深层 CNN 等结构。
我们发现,深层 CNN 结构,不仅能够显著提升 HMM 语音识别系统的性能,也能提升 CTC 语音识别系统的性能。仅用深层 CNN 实现端对端建模,其性能相对较差,因此将如 LSTM 或 GRU的 循环隐层与 CNN 结合是一个相对较好的选择。可以通过采用 VGG 结构中的 3*3 这种小 kernel ,也可以采用 Residual 连接等方式来提升其性能,而卷积神经网络的层数、滤波器个数等都会显著影响整个模型的建模能力,在不同规模的语音训练数据库上,百度需要采用不同规模的 DeepCNN 模型配置才能使得最终达到最优的性能。
因此,我们认为:1)在模型结构中,DeepCNN 帮助模型具有很好的在时频域上的平移不变性,从而使得模型更加鲁棒(抗噪性);2)在此基础上,DeepLSTM 则与 CTC 一起专注于序列的分类,通过 LSTM 的循环连接结构来整合长时的信息。3)在 DeepCNN 研究中,其卷积结构的时间轴上的感受野,以及滤波器的个数,针对不同规模的数据库训练的语音识别模型的性能起到了非常重要的作用。4)为了在数万小时的语音数据库上训练一个最优的模型,则需要大量的模型超参的调优工作,依托多机多 GPU 的高性能计算平台,才得以完成工作。5)基于 DeepCNN 的端对端语音识别引擎,也在一定程度上增加了模型的计算复杂度,通过百度自研的硬件,也使得这样的模型能够为广大语音识别用户服务。
李先刚:语音识别建模是需要对语音信号和文字内容间的关系建模。通常情况下,语音识别都是基于时频分析后的语音谱完成的,而其中语音时频谱是具有结构特点的。要想提高语音识别率,就是需要克服语音信号所面临各种各样的多样性,包括说话人的多样性(说话人自身、以及说话人间),环境的多样性等。卷积神经网络,由于其局部连接和权重共享的特点,使得其具有很好的平移不变性。将卷积神经网络的思想应用到语音识别的声学建模中,则可以利用卷积的不变性来客服语音信号本身的多样性。从这个角度来看,则可以认为是将整个语音信号分析得到的时频谱当作一张图像一样来处理,采用图像中广泛应用的深层卷积网络对其进行识别。
2013 年过后,语音领域开始做 RNN ,图像领域做 CNN 。卷积操作是一种相较于全连接更加通用的计算形式,在 2013 年之后有很多进展,从 ImageNet 就可以看出来,首先发现 VGG 模型很有用,这种结构使用的是 3*3 这种小 kernel ; 此外 GoogleNet 结构,里面设计了一个 Inception 模块,也是基于 CNN 来实现的;比较有趣的是,微软 2015 年做的残差网络直接把十几层一下拉到 152 层,但 100 多层在工业上肯定没法用,因为算不过来。但这告诉大家,通过这种方式可以非常简单直接的提升性能,也就是提出了 residual 连接。
从这几个方面来看,CNN 在语音领域都没得到充分的研究,但大家能意识到这是我们可以探索的一个方向。有了这个出发点之后,我们就有好几个点可以做,比如说 VGGNet 里的 3*3 的 kernel 在语音领域应该怎么做;residual 连接怎么融合进来。我们在语音识别最早用的 CLDNN 结构是一层卷积,我把其做到 10 层,变成 VGG 结构,再加上一些残差连接,通过做一些大量实验模型的结构调整,最终得到性能提升。
从另外一个角度来看,如果你把语音当成一个图像,把语音视频信号分析过后就是一张图像,所以图像和语音是可以相互借鉴的。
李先刚:在深度学习兴起以前,机器感知算法(如语音识别,说话人识别,图像识别,等)通常都会包含以下几个部分:特征提取及学习,模式分类等。研究者们发现,在这样的级联系统里面,特征学习起到了非常关键的作用。在深度学习中,特征学习和模式分类两个模块则通常联合起来优化,从而使得通常意义下,深度学习的模型至少有两层。从而也带来了一个新的研究趋势:减少流水线中的模块,使用一个单独的学习算法来完成从任务的输入端到输出端的所有过程,也就是所谓的端对端学习的兴起。
端对端学习使用一个算法将输入和输出联系了起来,通常采用的是一个深层的神经网络。端对端学习推崇更少的人工特征设计,更少的中间单元。端对端学习的系统包括:基于 CTC 的语音识别,基于注意机制的机器翻译,都已经在工业界得到了应用。
李先刚:我对 Stanford CTC 了解不多,但不管是哪种,我相信都是对 CTC 这种算法的功能实现,都是加速的问题。TensorFlow 不太一样,它是深度学习框架,不是针对 CTC 来做,客观来说,它的好处是方便研究者做实验预研。但坏处是速度慢。你可以在实验室里很快的尝试一个新的网络结构,做个 100 小时的实验,但如果规模上去了,TensorFlow 是不够的。
李先刚:n 元文法技术相对较老,但它可以很好的把规模弄上去,百度是一个文本大数据公司,在这样的背景下,你会发现基于大数据做一个很好的 n 元文法是很容易的,而且性能很好。通过这样一个大模型,通过海量数据,加上工程师做解码器的特别优化,使得系统在很好的实时性下的情况去达到很好的识别率。
说到语言模型,还有一个研究比较多的是神经网络语言模型。对于神经网络语言模型,我们也希望能做到 first-pass decoding ,神经网络语言模型还有一些工程上的东西需要突破,我们都是把它放在第二遍 second-pass rescoring 上。总之,两者相比的话,神经网络语言模型的计算量特别大,优势是性能好。这个需要做很多工程方面的工作。
李先刚:训练模型的根本还是精确标注的数据,这是决定整个性能的基础。一般来说可以有这样的结论:数据增加十倍,性能提升10%,这是针对精准人工标注的数据。一般情况下,在获取什么样的精确标注数据的问题上,我们也会结合主动学习的思想,去收集那些对识别率影响更加直接的数据拿来人工精标。那为什么还要用模拟数据呢?所谓的模拟数据就是在精准标注的基础上做些信号变化,加一点背景噪声、混响的冲击响应,加上这些数据以后,会使模型能够见过更加多样的数据,这样对于模型的推广性和性能有一定程度的帮助,这算是一个保证模型具有更强能力的方法。所以,从根本上来说还是那 10 万小时。
李先刚:百度开源了 Warp-CTC ,CTC 算法本质是一个前向后向算法在里面,要实现它的并行化还是比较难的,Warp-CTC 在这方面做的比较好。我们在做实验时发现,有了 Warp-CTC 这样一个高速的算法,还有我们自己内部有一个非常高效的多机训练的平台。使得我们整个模型训练的规模性比较好,当我们从一台机器扩展到十台机器,我们训练速度上的提升基本可以接近线性。有了这样的平台,才能使我们的近十万小时的模型才能做实验。否则连实验也做不了。
此外,基于百度自主研发的硬件,才使得这样的计算复杂度更好的 Deep CNN 技术得以成为线上的服务。只有这些硬件技术的不断升级,才给了我们声学建模研究更大的空间。
李先刚:大约是在 2011、2012 年开始将深度学习用于语音研究,最早是用最简单的前馈 DNN 模型,发现比 GMM 有 30% 的提升,大家就意思到这是一个划时代的突破。2013 年,研究者开始尝试做一些激活函数(例如ReLU,Maxout),其中的 Maxout 发现对 low-resource 的任务有帮助,对真实的大数据库不一定有显著帮助;2013-2014 年,大家开始做 CNN ,而非深层的;2014 年开始做 RNN ,尤其是 LSTM 。2014 年底 2015 年初,Hinton 的博士后 Alex Graves ,把以前做手写体识别的 LSTM 加 CTC 的系统应用在了语音识别领域,在 TIMIT 上做了结果。紧接着谷歌认为这个很有前途,就开始把这些技术推广在大数据上面。LSTM 和 CTC 引入进来之后,相较于之前的 DNN ,LSTM 能够更好的帮助模型来捕捉输入中的重要的点,CTC 打破了隐马尔科夫的假设,把整个模型从静态分类变成了序列分类,这是很重要的。百度在 2015 年中期开始做,年底 LSTM 和 CTC 上线。现在的 Deep CNN 是在我们整个研究框架中把 CNN 的潜力挖掘的更彻底。其实 CNN 和 LSTM 有相通也有不一样的地方,如果 CNN 在时间上做卷积的话,和 LSTM 有很多相似之处。而不同在于 LSTM 擅长做整个时间域信息的整合,而 CNN 要想达到同样效果做的配置就要更加复杂。但 CNN 有很强的平移的不变性,对于整个语音识别任务来说,要获得更好的鲁棒性,CNN 比 LSTM 做的好。
李先刚:这项技术会在搜索产品,如手机百度的语音搜索先使用,然后再推广到其他产品。近一年来,手机百度上的语音识别的准确率提升了 20% 以上,效果感觉完全不一样。这次会带来效果的再次提升。
李先刚:有各方面的问题,首先,识别率如果从现在的 97% 达到 99% ,那肯定会不一样。其次,产品上也有很多问题,你要做好一个输入法,或者语音搜索,是要把很多方面结合在一起的。像我们的语音搜索很早也具备了语音纠错功能,语音纠错对整个语音输入和搜索非常关键,仅仅做好一个识别率还不错,怎么样让你的产品体验更好,还有很多事情要做。因此,一方面是从研究的角度提高准确度,另一个是从产品角度提升用户体验。还有一个是用户习惯的养成,我们发现小孩对语音输入的接受程度很高。此外,之前百度硅谷人工智能实验室和斯坦福合作过一篇论文,在实验中,相比于在手机屏幕上打字,人类能够语音识别能更快、更准确的组织文本消息。
李先刚:此前,百度语音每年的模型算法都在不断更新,从 DNN ,到区分度模型,到 CTC 模型,再到如今的 Deep CNN 。基于 LSTM-CTC 的声学模型也于 2015 年底已经在所有语音相关产品中得到了上线。比较重点的进展如下:1)2013 年,基于美尔子带的 CNN 模型;2)2014年,Sequence Discriminative Training(区分度模型);3)2015 年初,基于 LSTM-HMM 的语音识别 ;4)2015 年底,基于 LSTM-CTC 的端对端语音识别;5)2016 年,Deep CNN 模型。
在识别精度提升方面,通常在海量数据库上稳定提升 10% 以上就可以称作显著进步(significant improvement),这次我们就达到了这样一个效果。举个例子,我们语音技术部最开始用 CTC 提升了 15% ,这次用 Deep CNN 又提升了 10% 。
我们正在努力推进 Deep Speech 3 ,这项研究不排除将会是 Deep Speech 3 的核心组成部分。而在工程领域,我们一直在做一些语音识别应用,手机百度和输入法要提升性能。我们希望在未来的几年内,将语音识别的准确率在某些任务上做到 99% ,从现在来看是有希望的。同时还有一些周边技术也在研究,包括说话人切分、远场语音识别应用等。