如何用Kur训练百度的DeepSpeech模型?

你想要训练一个可用于语音识别的深度神经网络吗?


我也是。两年前我获得了密歇根大学的博士学位成了一名粒子物理学家。我懂一些 C/C++和 Python,并且认识 Noah Shutty。我和 Noah 联合创建了 Deepgram,Noah 是一个精力充沛、学习速度极快的人。我们俩都没有语音识别背景知识,但是懂一点编程和机器学习应用的知识,有大量鼓捣数据处理/系统的经验。我们确实很清楚一件事——如何快速解决问题(一个建造深度地下暗物质探测器时练就的本领)。


那时,我们发现自己建造了世界上第一个基于深度学习的语音搜索引擎。为了发展我们需要一个可以理解语音的 DNN。我们成功了,现在你也可以。


项目地址:http://blog.deepgram.com/how-to-train-baidus-deepspeech-model-with-kur/


下面是基本问题:


Screen-Shot-2017-02-03-at-8.56.51-PM.png


将下面这段音频:


一段普通人说:「I am a human saying human things」的声谱。


转换成下面这句文本:


Screen-Shot-2017-02-02-at-12.51.52-PM.png

听到了「I am a human saying human things」音频文件的一个 DNN 的预测结果


该怎么做?


kur_quick_demo_stamp-1.gif

在易于使用的 Kur 框架中训练一个 DNN


我们为什么这样做


你可以这么想:我们正在一个搜索音频的谷歌,我们需要一个用于语音识别的深度学习模型来完成这一目标。两年前我们开始的时候,百度首次公开了关于 Deepspeech 的论文,这对我们来讲是一件大好事。这将帮助我们搞明白深度学习可以如何用于搜索语音。


照片中是吴恩达,站在深度语音 RNN 的前面,看起来像是电影《A.I.》里的大坏蛋。


NVIDIA_Baidu_Deep_Speech_Neural_Network_600-1.jpg

在英伟达的 GTC 大会上,来自百度的吴恩达正在做关于 Deepspeech 的演讲


第一步就是建立一个端对端的深度学习语音识别系统。我们已经做这个超过一年了,现在我们拿出来共享,就像当初百度共享给我们一样(好吧,事实上百度共享给了全世界)。


我们将给每一个人一个完全有效的 Deepspeech DNN。在 Deepgram 的开源 Python 软件包 Kur 中:http://kur.deepogram.com/


我们不是东拼西凑胡搞一通让它工作的。我们打造了一个运行在 TensorFlow 上的高质量抽象框架,使深度学习变的真正容易起来。


插播一句:为了 Deepgram 的生存我们不得不打造 Kur。现在人工智能领域已是一片红海,除非胸有成竹,否则你不可能快速建立前沿的模型。


从前,运行 DNN 很麻烦,现在,这变的简单起来。我们的系统从基础做起,一步一步使其简单起来,使你可以描述模型,并且无需做繁杂的工作即可使其运转。


Kur 软件包刚刚发布。它免费且开源,以第一个神话之中的龙(dragon)来命名,Kur 由 Deepgram 人工智能小组全体成员倾力打造,希望你们会喜欢它。


我们要创造一些人工智能


四个轻松的部分:


1. 安装 Kur

2. 运行 Deepspeech 示例

3. 观察你的计算机如何学习人类语音

4. 你变成了邪恶的人工智能统领,请放声大笑


简介结束,现在进入实际操作!


一些小的说明:当你看到这起效时,你会认为自己是上帝。学习语音的训练网络是一种变革性的东西。考虑一下这种情况:你在自己的计算机上创造出来的人工智能现在能理解人类说出的话。你的所作所为要负责任。


额外补充:训练端到端的语音识别深度学习模型需要很多计算。你需要耐心。毕竟你自己也不是在几分钟之内就学会了听人说话。如果你耐心有限,可以使用强大的 GPU——Kur 支持。


下载并安装 Kur(这很简单)


对于安装,如果你已经安装了 Python3.4 或以上版本,你就只需要在你的终端运行$ pip install kur 即可。如果你需要指导,或者一个轻松的操作环境,请访问 kur.deepgram.com 查看完整的安装指导。


运行 Deepspeech 例子


安装 Kur,运行$ kur -v train speech.yml,该文件应该保存在 kur/examples/目录中。如果你想要直接训练而不显示目前的工作状态,可以省略-v。当然,加入-v 可以让你了解 Kur 的工作方式,如果你希望了解更多的细节,请用-vv。


你的模型会开始训练


一开始输出的基本是乱码,随后,它的表现将会越来越好。


训练 1 小时后:


  • 真实转录: these vast buildings what were they

  • DNN 预测:he s ma tol ln wt r hett jzxzjxzjqzjqjxzq


训练 6 小时后:


  • 真实转录:the valkyrie kept off the coast steering to the westward

  • DNN 预测:the bak gerly cap dof the cost stkuarinte the west werd


训练 24 小时后:


  • 真实转录:it was a theatre ready made

  • DNN 预测:it was it theater readi made


经过训练,模型输出了真正的英语。


在这个示例中,我总共训练了 48 小时。还记得「i am a human saying human things」文件吗?让我们看看人工智能对它的预测。



训练 48 小时后:


  • True transcript: i am a human saying human things

  • DNN prediction:i am a human saying human things


仅仅诞生 48 个小时,它就可以和人一样听懂别人说的话了!


看看这个表格吧:


loss-kur-up.png

在 Kur speech.yml 例子中训练和验证数据的 loss 和 batch 的函数


就这样,你训练出了目前最先进的语音识别模型。


很棒不是吗?


为什么会如此简单?


这是因为我们为这项任务深度优化了整个模型,这就是 Kur 带来的提升。另一些优势则来自于 Kur 的可描述性。在这里,你可以直接表达自己想要的东西,它就会实现。阅读 Deepspeech Kurfile,你就会明白这是什么意思。


Screen-Shot-2017-02-02-at-10.15.51-AM.png

事例中 Deepspeech 的超参数


这些是构造 DNN 所需的超参数,有一个一维 CNN 对 FFT 输出的时间片进行操作。然后有一个 3 层的 RNN 组,每个有 1000 个节点。词汇的尺度取决于我们的选择(在本例中是 a 到 z,外加空格和撇号——总共有 28 种字符)。


超参数在 Kurfile 的模型部分(speech.yml)中被抓取。CNN 层就是这样构建的。


Screen-Shot-2017-02-02-at-10.20.24-AM.png

CNN 层的规格


在这里,整流线性单元(ReLU)激活层上的几个明显的超参数直击单个 CNN 层。这些超参数使用 Jinja2(http://jinja.pocoo.org/docs/2.9/)模板引擎填充。


RNN 层的堆栈是由一个 for 循环中构建的,因为 depth 超参数而有三个层。


Screen-Shot-2017-02-09-at-5.05.32-PM.png

RNN堆栈规格


其中,批规范化层用来保持权重分布的稳定,提高训练速度。RNN sequence 超参数只意味着你想要在输出文本与测时按顺序输出(语音片段时间顺序)。


Quick Summary:CNN 层采集 FFT 输入,然后连接到 RNN,最终形成一个完整的、可预测 28 个字符的层。这就是 Deepspeech。


工作方式概述


当训练语音 DNN 时,你通常会将音频分为每个约 20 毫秒的小块,使用像快速傅里叶变换(FFT)这样的方法将这些分块按顺序输入 DNN 里,并生成对当前块的预测。这个过程不断持续,直到结束这个序列,处理完整个文件(其中的所有预测都被保存)。


这就是 Deepspeech 在 Kur 中运行的方式。


Kur 需要使用 wav 音频文件,它会抓取文件的频谱图(时间 FFT),并将其同 CNN 层和三个 RNN 层的堆叠一同插入 CNN 层里。输出拉丁语字符的概率预测,从而形成单词。


在模型训练时,将会有验证步骤为你提供随机音频文件的即时预测。你能看到系统每一步的预测。你可以观看当前预测输出的文本,了解神经网络是如何被训练的。


一开始,它会先学习空格,随后它会了解元音和辅音的比例关系,从而开始学会一些简单词的表述(如 the、it、a、good),开始具有自己的词汇量。这是一个令人着迷的过程。


Screen-Shot-2017-02-02-at-12.21.53-PM.png

输入语音片段,预测即将出现的字母,从左到右以时间顺序排列。


相关链接:


  • The most cited deep learning papershttps://github.com/terryum/awesome-deep-learning-papers

  • Kur:Descriptive Deep Learninghttps://github.com/deepgram/kur

  • KurHub:http://www.kurhub.com/


原文链接:http://blog.deepgram.com/how-to-train-baidus-deepspeech-model-with-kur/

工程语音识别工程Deepspeech深度神经网络
暂无评论
暂无评论~