(转) 机器学习颇有趣Part6:怎样使用深度学习进行语音识别

 

本文转自:http://www.jiqizhixin.com/article/2321web

 

机器学习颇有趣Part6:怎样使用深度学习进行语音识别

2017-02-19 13:20:47    
0  0

还记得machine learning is fun吗?本文是该系列文章的第六部分,博主通俗细致地讲解了神经网络语音识别的整个过程, 是篇很是不错的入门级文章。算法

 

语音识别正闯入咱们的生活。它内置于咱们的手机、游戏机和智能手表。它甚至正在让咱们的家庭变得自动化。只须要 50 美圆,你就能够买到亚马逊的 Echo Dot——一个能容许你订购比萨饼,得到天气报告,甚至购买垃圾袋的魔法盒——只要你大声说:「Alexa,订购一个大披萨!」数据库

 

 

1-z2BKMXtFGhsW6_NFfguecg.jpeg

Alexa, order a large pizza!数组

 

Echo Dot 在这个假期很受欢迎,亚马逊彷佛没有 Echo Dot 的库存了。网络

 

语音识别已经存在数十年了,可是为何如今才刚刚开始成为主流呢?缘由是深度学习让语音识别足够准确,可以让语音识别在须要精心控制的环境以外中使用。机器学习

 

吴恩达早就预测,当语音识别的准确率从 95%达到 99%时,语音识别将成为人与计算机交互的主要方式。4%的准确性差距就至关于「难以容忍的不可靠」到「使人难以置信的有用性」之间的差别。因为有深度学习,咱们正在走向顶峰。ide

 

让咱们学习怎样利用深度学习进行语音识别!post

 

机器学习并不老是黑箱学习

 

若是你知道神经网络机器翻译怎样工做,你可能会猜到:咱们能够简单地将声音录音输入神经网络,而后训练神经网络来生成文本:大数据

 

 

1-nJNxFmJaHxyJTtVFkhGTlg.png

 

这是用深度学习进行语音识别的核心,但咱们尚未彻底作到(至少在我写这篇文章的时候没作到——我打赌,在将来的几年咱们能够作到)。

 

最大的问题是语音会随着速度变化。一我的可能很快地说出「Hello!」,而另一我的可能会很缓慢说「heeeelllllllllllllooooo!」。这就产生了一个更长的声音文件和更多的数据。这两个声音文件本应该被识别为彻底相同的文本「hello!」而事实证实,把各类长度的音频文件自动对齐到一个固定长度的文本是很难的一件事情。

 

为了解决这个问题,咱们必须使用一些特殊的技巧和一些除了深度神经网络之外的额外处理。让咱们看看它是如何工做的吧!

 

将声音转换成「字节」

 

语音识别的第一步是很显而易见的——咱们须要将声波输入到计算机。

 

在第 3 章中(https://medium.com/@ageitgey/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks-f40359318721#.tvzicp8bh),咱们学习了如何把图像处理成数字序列,以便咱们能直接将其输入进神经网络进行图像识别:

 

 

1-zY1qFB9aFfZz66YxxoI2aw.gif

图像仅是图片中每一个像素值的数字编码数组

 

声音以波的形式传播。咱们怎样将声波转换成数字呢?让咱们使用我说的「hello」这个声音片断做为例子:

 

1-6_q1VIVJuavYa-9Uby_L-A.png

音频「Hello」的波形

 

声波是一维的。在每一个时刻,它有单一的高度值对应。让咱们放大声波的一个小部分,看看:

 

 

1-dqWhWUIzIyOLIqVReTBaiA.png

 

为了将这个声波转换成数值,咱们只记录波在等间隔点的高度值:

 

1-dICZCcmEm_EWWx0yA6B3Cw.gif

 

 

声波采样

 

这被称为「采样」。咱们采起每秒读取数千次的方式,并把声波在对应时刻的高度值记录下来。这基本上是一个未被压缩的.wav 音频文件。

 

「CD 音质」以 44.1kHZ(每秒读取 44100 次)进行采样。可是对于语音识别,16kHz 的采样频率足以覆盖人类语言的频率范围。

 

让咱们用 16kHz 的方式对「Hello」音频采样,这是前 100 个样本:

 

 

1-BG4iFbx7qhb5v_JTr958PQ.png

每一个数字表明声波在第 1/16000 间隔处时刻的高度值。

 

数字采样快速入门助手

 

你可能会认为:采样只是对原始声波的粗略近似,由于它只是间歇性读取数据,咱们的读数之间有差距,因此咱们丢失了数据,对吗?

 

 

1-KkWfr3a6HtRSZ8-4LUw0kg.png

 

数字采样可否完美重现原始声波?如何处理那些间距?

 

借鉴奈奎斯特定理 (Nyquist theorem),咱们能够利用数学从间隔的采样中完美地重建原始声波——只要以咱们但愿获得的最高频率的两倍来进行采样就能够实现。

 

我提到这一点,是由于几乎每一个人都会犯这个错误:认为使用更高的采样率老是能得到更好的音频质量。

 

采样声音数据的预处理

 

咱们如今有一个数值数组,每一个数值表明声波在间隔为 1 / 16,000 秒的时刻时的高度值(振幅)。

 

咱们能够将这些数值输入神经网络。可是试图经过直接处理这些样原本识别语音模式是困难的。相反,咱们能够经过对音频数据预处理来简化问题。

 

让咱们将采样的音频以 20 毫秒时间段长进行分组。这是咱们第一个 20 毫秒的样本音频,即咱们的前 320 个样本。

 

 

1-_qUExEvllTKFhsrITxsa-A.png

 

将这些数值绘制为简单的线图,给出了对于 20 毫秒时间段的原始声波的粗略近似:

 

 

1-ZMxcyjNFqIOVzJRM9BCMWw.png

 

虽然这段录音只有 1/50 秒的时长,但即便这样短暂的时长也包含不一样频率的声音。有低音、中音,甚至高音混在一块儿。但总的来讲,这些不一样频率的声音混合在一块儿构成了人类复杂的语音。

 

为了使这些数据更容易进行神经网络处理,咱们将这复杂的声波分红不一样部分。咱们将一步步分离低音部分,下一个最低音部分,以此类推。而后经过将每一个频带(从低到高)中的能量相加,咱们就为各个类别(音调)的音频片断建立了一个指纹。

 

想象你有一段某人在钢琴上弹奏 C 大调的音频。这段音频是由三个音符组合而成的 - C,E 和 G – 他们混合在一块儿组成一个复杂的音频。咱们想把这个复杂的音频分解成单独的音符:C,E 和 G。这和咱们语音识别的想法同样。

 

咱们可使用数学中的傅里叶变换来完成。傅里叶变换将复杂的声波分解成简单的声波,一旦咱们获得了这些简单声波,咱们将每个声波包含的能量加在一块儿。

 

最终结果是从低音(即低音音符)到高音,每一个频率范围的重要程度。下面的每一个数字表示在咱们的 20 毫秒音频剪辑中每一个 50Hz 频带中的能量:

 

 

1-2Vg8z3--moE-E7KybJlUPg.png

表中的每一个数值表示每一个 50Hz 频带中的能量

 

当你把它以图表形式画出,你更容易看出:

 

 

1-A4CxgdyqYd_nrF3e-7ETWA.png

 

你能够看出,咱们的 20 毫秒的声音片断中有不少低频能量,高频能量较少。这是典型的「男性」的声音。

 

若是咱们以每 20 毫秒的音频块重复这个过程,咱们最终会获得一个频谱图(每一列从左到右都是一个 20 毫秒的块):

 

 

1-bhd7B-s-Qnds3HGV6LOo8A.png

「hello」声音片断的完整频谱图

 

频谱图很棒,由于你能够从音频数据中看到音符和其余音高模式。相比于原始声波,神经网络能够更加容易地从这种数据中找到规律。所以,这(频谱图)就是咱们将实际输入到神经网络的数据表征方式。

 

从短声音中识别字符

 

有了易于处理音频形式,咱们将把它输入到深度神经网络。神经网络的输入是 20 毫秒的音频块,对于每一个小的音频切片,神经网络都会试图找出与声音对应的字母。

 

 

1-z1Nf0ES1YVUfdZZGW0PSdQ.png

 

咱们将使用循环神经网络——便是具备能影响将来预测的记忆的神经网络。由于它预测的每一个字母都将影响它对下一个字母的预测。例如,若是咱们已经说出「HEL」,那么接下来咱们极可能说出「LO」以说出「Hello」。咱们不太可能会说像「XYZ」这种根本没法发音的词。所以,具备先前预测的记忆将有助于神经网络对将来进行更准确的预测。

 

当咱们在神经网络上运行咱们的整个音频剪辑(一次一块)后,咱们最终将获得与每一个音频块最可能对应的字符的一个映射。这是一个看起来像是我说」Hello」时的映射:

 

 

1-d1ktMdOnFOJRKKyjFP6sqQ.png

 

咱们的神经网络可能预测到我说的是「HHHEE_LL_LLLOOO」,也多是「HHHUU_LL_LLLOOO」或甚至「AAAUU_LL_LLLOOO」。

 

咱们用几个步骤来整理输出结果。首先,咱们会用单个字符替换重复的的字符:

 

  • HHHEE_LL_LLLOOO becomes HE_L_LO

     

  • HHHUU_LL_LLLOOO becomes HU_L_LO

     

  • AAAUU_LL_LLLOOO becomes AU_L_LO

 

而后,咱们将移除全部空白

 

  • HE_L_LO 变成 HELLO

     

  • HU_L_LO 变成 HULLO

     

  • AU_L_LO 变成 AULLO

 

这让咱们获得三种可能的转录 -「Hello」,「Hullo」和「Aullo」。若是你大声说出这些单词,这些转录的声音都相似于「Hello」。由于它每次只预测一个字符,神经网络会得出一些试探性的转录。例如,若是你说「He would not go」,它可能会给一个可能转录「He wud net go」

 

技巧是将这些基于发音的预测与基于书写文本(书籍,新闻文章等)的大数据库的似然分数相结合。你抛出看起来最不多是真的的转录,并保持转录看起来最现实。

 

 

在咱们可能的转录「Hello」、「Hullo」和「Aullo」中,显然「Hello」在文本数据库中更频繁地出现(更不用说在咱们原始的基于音频的训练数据中),所以多是正确的。因此咱们选择「Hello」做为咱们的最后的转录。这就完成了!

 

等一下!

 

可是若是有人说「Hullo」那又怎么样?「Hullo」是一个有效的词。也许「Hello」是错误的转录!

 

 

1-YzVDel59VoKFmZDKhPE-cQ.jpeg

 

固然实际上可能有人说的是「Hullo」而不是「Hello」。可是这样的语音识别系统(基于美式英语训练)基本上不会将「Hullo」做为转录。相比」Hello「,用户不太可能说「Hullo」,便是你在说」Hullo「ullo,它也老是会认为你在说「Hello」,不管你发「U」的声音有多重。

 

试试看!若是你的手机设置为美式英语,尝试让你的手机的数字助理识别「Hullo」。你不能达到目标!它会拒绝!它老是会理解为「Hello」。

 

不识别「Hullo」是合理的,但有时你会发现使人讨厌的状况:你的手机就是不能理解你说的语句。这就是为何这些语音识别模型总须要更多的数据训练来处理这些少数状况。

 

我能创建本身的语音识别系统吗?

 

机器学习最酷的事情之一就是它有时看起来十分简单。你获得一堆数据,将把它输入到机器学习算法当中去,而后就能神奇的获得一个运行在你的游戏笔记本电脑显卡上的世界级人工智能系统... 对吧?

 

有些状况下的确是这样,可是语音识别却并不如此简单。语音识别是一个难题,你必须克服无限的挑战:质量差的麦克风、背景噪声、混响和回声、口音变化等等。这些问题都须要呈如今你的训练数据中,以确保神经网络能够处理它们。

 

还有另外一个例子:你知道当你在一个大房间里说话时,你会不自觉地提升你的音调以便掩盖噪音吗?人类在什么状况下均可以理解你,但神经网络须要特殊训练来处理这些状况。因此你须要获得人们在噪音中大声说话的训练数据!

 

要构建一个达到 Siri、Google Now!或 Alexa 等水平的语音识别系统,你须要获得大量的训练数据,若是没有雇佣成百上千的人为你记录数据,你很难作到。用户对低质量语音识别系统的容忍度很低,所以你不能吝啬语音数据。没有人想要一个只有 80% 的时间有效的语音识别系统。

 

像谷歌或亚马逊这样的公司,现实生活中记录的成千上万小时的口语音频,对他们来讲就是「黄金」。这就是将他们世界级语音识别系统与你本身的系统拉开差距的法宝。在手机上无偿使用 Google Now! 和 Siri 或是不收取转录费且售价 50 美圆的 Alexa,都是为了让你尽量地使用它们。你说的每句话都将被这些系统所记录,而后这些数据将被用于训练将来的语音识别算法。

 

不相信我?若是你有一部安装了 Google Now!的安卓手机,点击这里去收听你对它说过的每一句话:

 

 

1-lwfLuSOFH032tbttD52Evw.png

 

你能够经过 Alexa 在亚马逊上找到相同的东西。然而不幸的是,苹果手机并不容许你利用你的 Siri 语音数据。

 

因此,若是你正在寻找创业的想法,我不建议你创建本身的语音识别系统与 Google 竞争。相反,你应该找到一种能让人们将他们几个小时的录音给予你的方法。这种数据能够是你的产品。

 

学习更多

 

这个被用来处理不一样长度音频的算法被称为 Connectionist Temporal Classification(CTC)。你能够阅读来自 2006 年的原始文章:

http://www.cs.toronto.edu/~graves/icml_2006.pdf。

 

百度的 Adam Coates 在湾区深度学习学校作了关于「用深度学习作语音识别」的精彩演讲。你能够在 YouTube 上观看这段视频(https://youtu.be/9dXiAecyJrY?t=13874,他的演讲从 3 分 51 秒开始)。强烈推荐。

 

原文连接:https://medium.com/@ageitgey/machine-learning-is-fun-part-6-how-to-do-speech-recognition-with-deep-learning-28293c162f7a#.34p9sntcc

声明:本文由机器之心编译出品,原文来自medium,做者Adam Geitgey,转载请查看要求,机器之心对于违规侵权者保有法律追诉权。

参与成员:

  • 机器之心

相关文章

模型学习全面概述:利用机器学习查找软件漏洞

模型学习全面概述:利用机器学习查找软件漏洞

机器学习颇有趣Part6:怎样使用深度学习进行语音识别

机器学习颇有趣Part6:怎样使用深度学习进行语音识别

5 个Python 库,照亮你的机器学习之路

5 个Python 库,照亮你的机器学习之路

评论

共有0条评论,点击展开

 
相关文章
相关标签/搜索