机器学习实例:深度学习如何做语音识别!

文章讲的是 机器学习实例:深度学习如何做语音识别,语音识别正在「入侵」我们的生活。我们的手机、游戏主机和智能手表都内置了语音识别。他甚至在自动化我们的房子。只需50美元,你就可以买到一个Amazon Echo Dot,这是一个可以让你订外卖、收听天气预报、甚至是买垃圾袋的魔术盒,而这一切你只需要大声说出:

  

  Aleax,给我订一个pizza!

  Echo Dot 在2015年的圣诞假期一经推出就大受欢迎,在亚马逊上面立刻售罄。

  但其实语音识别已经存在很多年了,那为什么现在才成为主流呢?因为深度识别终于将语音识别在非受控环境下的准确度提高到了一个足以投入实用的高度。

  吴恩达教授曾经预言过,当语音识别的准确度从95%提升到99%的时候,它将成为与电脑交互的首要方式。

  下面就让我们来学习与深度学习进行语音室识别吧!

  机器学习并不总是一个黑盒

  如果你想知道神经机器翻译是如何工作的,你应该猜到了我们可以简单地将一些声音送入神经网络,然后训练它使之生成文本:

  

  这是使用深度学习进行语音识别的最高追求,但是很遗憾我们现在还没有完全做到这一点(至少在笔者写下这一篇文章的时候还没有–我敢打赌,再过几年我们可以做到)

  一个大问题是语速不同。一个人可能会很快的说出”Hello!”,而另一个人可能非常缓慢的说”heeeelllllllllllllooooo’!’,产生了一个拥有更多数据也更长的声音文件。这两个文件都应该被识别为同一个文本–“Hello!”。而事实证明,把各种长度的音频文件自动对齐到一个固定长度的文本是很难的一件事情。

  为了解决这个问题,我们必须使用一些特殊的技巧,并进行一些深度神经网络以外的特殊处理。让我们看看它是如何工作的吧!

  将声音转换为比特(Bit)

  显然,语音识别的第一步是–我们需要将声波输入到电脑中。

  我们应该怎么将声波转换为数字呢?让我们使用我说的「hello」这个声音片段举个例子:

  

  声波是一维的,它在每个时刻都有一个基于其高度的值。让我们把声波的一小部分放大看看:

  

  为了将这个声波转换成数字,我们只记录声波在等距点的高度:

  这被称为采样(sampling)。我们每秒读取数千次,并把声波在该时间点的高度用一个数字记录下来。这基本上就是一个未压缩的 .wav 音频文件。

  “CD 音质”的音频是以 44.1khz(每秒 44100 个读数)进行采样的。但对于语音识别,16khz(每秒 16000 个采样)的采样率就足以覆盖人类语音的频率范围了。

  让我们把“Hello”的声波每秒采样 16000 次。这是前 100 个采样:

  

  每个数字代表声波在一秒钟的16000分之一处的振幅。

  数字采样小助手

  因为声波采样只是间歇性的读取,你可能认为它只是对原始声波进行粗略的近似估计。我们的读数之间有间距,所以我们必然会丢失数据,对吧?

  

  但是,由于采样定理(Nyquist theorem),我们知道我们可以利用数学,从间隔的采样中完美重建原始声波——只要我们的采样频率比期望得到的最高频率快至少两倍就行。

  我提这一点,是因为几乎每个人都会犯这个错误,并误认为使用更高的采样率总是会获得更好的音频质量。其实并不是。

  预处理我们的采样声音数据

  我们现在有一个数列,其中每个数字代表 1/16000 秒的声波振幅。

  我们可以把这些数字输入到神经网络中,但是试图直接分析这些采样来进行语音识别仍然很困难。相反,我们可以通过对音频数据进行一些预处理来使问题变得更容易。

  让我们开始吧,首先将我们的采样音频分成每份 20 毫秒长的音频块。这是我们第一个 20 毫秒的音频(即我们的前 320 个采样):

  

  将这些数字绘制为简单的折线图,我们就得到了这 20 毫秒内原始声波的大致形状:

  

  虽然这段录音只有 1/50 秒的长度,但即使是这样短暂的录音,也是由不同频率的声音复杂地组合在一起的。其中有一些低音,一些中音,甚至有几处高音。但总的来说,就是这些不同频率的声音混合在一起,才组成了人类的语音。

  为了使这个数据更容易被神经网络处理,我们将把这个复杂的声波分解成一个个组成部分。我们将分离低音部分,再分离下一个最低音的部分,以此类推。然后将(从低到高)每个频段(frequency band)中的能量相加,我们就为各个类别的音频片段创建了一个指纹(fingerprint)。

  想象你有一段某人在钢琴上演奏 C 大调和弦的录音。这个声音是由三个音符组合而成的:C、E 和 G。它们混合在一起组成了一个复杂的声音。我们想把这个复杂的声音分解成单独的音符,以此来分辨 C、E 和 G。这和语音识别是一样的道理。

  我们需要傅里叶变换(Fourier Transform)来做到这一点。它将复杂的声波分解为简单的声波。一旦我们有了这些单独的声波,我们就将每一份频段所包含的能量加在一起。

  最终得到的结果便是从低音(即低音音符)到高音,每个频率范围的重要程度。以每 50hz 为一个频段的话,我们这 20 毫秒的音频所含有的能量从低频到高频就可以表示为下面的列表:

  

  但是把它们画成图表时会更容易理解:

  

  你可以看到,在我们的 20 毫秒声音片段中有很多低频能量,然而在更高的频率中并没有太多的能量。这是典型「男性」的声音。

  如果我们对每个20毫秒的音频块都重复这个过程,我们最后会得到一个频谱图(从左到右每一列都是一个29毫秒的音频块)

  频谱图很酷,因为你可以在音频数据中实实在在地看到音符和其他音高模式。对于神经网络来说,相比于原始声波,从这种数据中寻找规律要容易得多。因此,这就是我们将要实际输入到神经网络中去的数据表示方式。

  从短音频中识别字符

  现在我们已经让音频转变为一个易于处理的格式了,现在我们将要把它输入深度神经网络。神经网络的输入将会是 20 毫秒的音频块。对于每个小的音频切片(audio slice),神经网络都将尝试找出当前正在说的声音所对应的字母。

  

  我们将使用一个循环神经网络——即一个拥有记忆,能影响未来预测的神经网络。这是因为它预测的每个字母都应该能够影响它对下一个字母的预测。例如,如果我们到目前为止已经说了「HEL」,那么很有可能我们接下来会说「LO」来完成「Hello」。我们不太可能会说「XYZ」之类根本读不出来的东西。因此,具有先前预测的记忆有助于神经网络对未来进行更准确的预测。

  当通过神经网络跑完我们的整个音频剪辑(一次一块)之后,我们将最终得到一份映射(mapping),其中标明了每个音频块和其最有可能对应的字母。这是我说那句「Hello」所对应的映射的大致图案:

  

  我们的神经网络正在预测我说的那个词很有可能是「HHHEE_LL_LLLOOO」。但它同时认为我说的也可能是「HHHUU_LL_LLLOOO」,或者甚至是「AAAUU_LL_LLLOOO」。

  我们可以遵循一些步骤来整理这个输出。首先,我们将用单个字符替换任何重复的字符:

  · HHHEE_LL_LLLOOO 变为 HE_L_LO

  · HHHUU_LL_LLLOOO 变为 HU_L_LO

  · AAAUU_LL_LLLOOO 变为 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」怎么办?这个词的确存在。也许「Hello」是错误的转写!

  当然可能有人实际上说的是「Hullo」而不是「Hello」。但是这样的语音识别系统(基于美国英语训练)基本上不会产生「Hullo」这样的转写结果。用户说「Hullo」,它总是会认为你在说「Hello」,无论你发「U」的声音有多重。

  试试看!如果你的手机被设置为美式英语,尝试让你的手机助手识别单词「Hullo」。这不行!它掀桌子不干了,它总是会理解为「Hello」。

  不识别「Hullo」是一个合理的行为,但有时你会碰到令人讨厌的情况:你的手机就是不能理解你说的有效的语句。这就是为什么这些语音识别模型总是处于再训练状态的原因,它们需要更多的数据来修复这些少数情况。

  我能建立自己的语音识别系统吗?

  机器学习最酷炫的事情之一就是它有时看起来十分简单。你得到一堆数据,把它输入到机器学习算法当中去,然后就能神奇地得到一个运行在你游戏本显卡上的世界级 AI 系统…对吧?

  这在某些情况下是真实的,但对于语音识别并不成立。语音识别是一个困难的问题。你得克服几乎无穷无尽的挑战:劣质麦克风、背景噪音、混响和回声、口音差异等等。你的训练数据需要囊括这所有的一切,才能确保神经网络可以应对它们。

  这里有另外一个例子:你知不知道,当你在一个嘈杂的房间里说话时,你会不自觉地提高你的音调,来盖过噪音。人类在什么情况下都可以理解你,但神经网络需要训练才能处理这种特殊情况。所以你需要人们在噪音中大声讲话的训练数据!

  要构建一个能在 Siri、Google Now! 或 Alexa 等平台上运行的语音识别系统,你将需要大量的训练数据 。如果你不雇上数百人为你录制的话,它需要的训练数据比你自己能够获得的数据要多得多。由于用户对低质量语音识别系统的容忍度很低,因此你不能吝啬。没有人想要一个只有八成时间有效的语音识别系统。

  对于像谷歌或亚马逊这样的公司,在现实生活中记录的成千上万小时的人声语音就是黄金。这就是将他们世界级语音识别系统与你自己的系统拉开差距的地方。让你免费使用 Google Now!或 Siri,或是只要 50 美元购买 Alexa 而没有订阅费的意义就是:让你尽可能多地使用它们。你对这些系统所说的每一句话都会被永远记录下来,并用作未来版本语音识别算法的训练数据。这才是他们的真实目的!

  不相信我?如果你有一部安装了 Google Now! 的 Android 手机,请点击这里收听你自己对它说过的每一句话:

  

  你可以通过 Alexa 在 Amazon 上找到相同的东西。然而,不幸的是,苹果并不让你访问你的 Siri 语音数据。

  因此,如果你正在寻找一个创业的想法,我不建议你尝试建立自己的语音识别系统来与 Google 竞争。相反,你应该想个办法,让人们把自己讲了几个小时的录音交给你。这种数据可以是你的产品。

作者: 小数点

来源:IT168

原文链接:机器学习实例:深度学习如何做语音识别!

时间: 2024-10-24 03:49:28

机器学习实例:深度学习如何做语音识别!的相关文章

机器学习和深度学习的最佳框架大比拼

在过去的一年里,咱们讨论了六个开源机器学习和/或深度学习框架:Caffe,Microsoft Cognitive Toolkit(又名CNTK 2),MXNet,Scikit-learn,Spark MLlib和TensorFlow.如果把网撒得大些,可能还会覆盖其他几个流行的框架,包括Theano(一个10年之久的Python深度学习和机器学习框架),Keras(一个Theano和TensorFlow深度学习的前端),DeepLearning4j(Java和Scala在Hadoop和Spark

简单读懂人工智能:机器学习与深度学习是什么关系

引言:随着AlphaGo战胜李世石,人工智能和深度学习这些概念已经成为一个非常火的话题.人工智能.机器学习与深度学习这几个关键词时常出现在媒体新闻中,并错误地被认为是等同的概念.本文将介绍人工智能.机器学习以及深度学习的概念,并着重解析它们之间的关系.本文将从不同领域需要解决的问题入手,依次介绍这些领域的基本概念以及解决领域内问题的主要思路. 本文选自<Tensorflow:实战Google深度学习框架>. 从计算机发明之初,人们就希望它能够帮助甚至代替人类完成重复性劳作.利用巨大的存储空间和

入门级攻略:机器学习 VS. 深度学习

楔子:      机器学习和深度学习现在很火,你会发现突然间很多人都在谈论它们.如下图所示,机器学习和深度学习的趋势对比(来自Google trend,纵轴表示搜索热度):   本文将会以简单易懂的语言及示例为大家详细解释深度学习和机器学习的区别,并介绍相关用途. 机器学习和深度学习简介 机器学习      Tom Mitchell 关于机器学习的定义被广泛引用,如下所示: 对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而不断自我完善,那么我们称这个计算机程序在从经

一篇文章搞懂人工智能、机器学习和深度学习之间的区别

概述 2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源.这两年在不管在国内还是在国外,人工智能.机器学习仿佛一夜之前传遍大街小巷.机器学习作为人工智能的一种类型,可以让软件根据大量的数据来对未来的情况进行阐述或预判.如今,领先的科技巨头无不在机器学习下予以极大投入.Facebook.苹果.微软,甚至国内的百度,Google 自然也在其中. 去年早些时候 Google DeepMind 的 AlphaGo 项目在举世瞩目的围棋比赛中一举击败了韩国选手李世石,媒体就是

人工智能、机器学习、深度学习的区别在哪?

有人说,人工智能(Artificial Intelligence)是未来.人工智能是科幻小说.人工智能已经是我们日常生活的一部分.所有这些陈述都 ok,这主要取决于你所设想的人工智能是哪一类. 例如,今年早些时候,Google DeepMind 的 Alphago 程序击败了韩国围棋大师李世乭九段.人工智能.机器学习和深度学习这些词成为媒体热词,用来描述 DeepMind 是如何获得成功的.尽管三者都是 AlphaGo 击败李世乭的因素,但它们不是同一概念. 区别三者最简单的方法:想象同心圆,人

机器学习,深度学习和AI:有什么区别?

文章讲的是机器学习,深度学习和AI:有什么区别,当谈到新的数据处理技术时,我们常常会听到很多不同的术语.有人说他们正在使用机器学习,而另一个人称之为人工智能.还有一些人可能会声称自己在做深度学习,这都是什么意思? 虽然这些术语中都有相对特定的含义,但在某些方面既有重叠,也有一些区别,不过都离不开大数据.伴随在数据处理真正的突破,也势必会带来一些不可避免的炒作.而正确的理解这些术语便于我们正确的使用它们. 机器学习 在最基本的层面上,机器学习是指任何类型的计算机程序,可以自己"学习",而

确定不收藏?十张机器学习和深度学习工程师必备速查表!

本文讲的是十张机器学习和深度学习工程师必备速查表,对于初学者,机器学习和深度学习课程会很困难,此外各类深度学习库也十分难理解.我在Github上创建了一个本地库(https://github.com/kailashahirwar/cheatsheets-ai ),里面包含了从不同渠道收集的速查表,可以直接下载.尽管拿去用吧,同时欢迎补充完善! 1. Keras Karas是Theano和TensorFlow平台上一款强大易用的深度学习库.它为发展和训练深度学习模型提供高阶神经网络API接口. 来

良心推荐!机器学习和深度学习最佳框架

文章讲的是良心推荐!机器学习和深度学习最佳框架,机器学习框架和深度学习框架之间是有区别的.本质上,机器学习框架涵盖用于分类,回归,聚类,异常检测等各种学习方法,并且其可以不包括神经网络方法.深度学习或深度神经网络(DNN)框架涵盖具有许多隐藏层的神经网络拓扑.层越多,可用于聚类和分类的特征越复杂. Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow是深度学习框架.Scikit-learning和Spark MLlib是机器学习框架.而Theano跨越

《Web安全之机器学习入门》一 1.1 人工智能、机器学习与深度学习

1.1 人工智能.机器学习与深度学习 如今,人工智能.机器学习与深度学习几乎成了家喻户晓的名词,究竟这三者之间有什么联系和区别呢? 通常认为,机器学习是实现人工智能的主要方式,人类基于机器学习以及海量的数据,逐步实现人工智能,其中深度学习是机器学习的一个分支.如果用同心圆来表示三者的范围,那么人工智能是最外面的一个圆,深度学习是最里面的圆.人可以在1秒以内做出的判断,都可以用机器来实现,而且机器可以同时完成成百上千人1秒内可以做出的判断,这就是人工智能.