深度学习进行语音识别-简单语音处理

吴恩达教授曾经预言过,当语音识别的准确度从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」是一个合理的行为,但有时你会碰到令人讨厌的情况:你的手机就是不能理解你说的有效的语句。这就是为什么这些语音识别模型总是处于再训练状态的原因,它们需要更多的数据来修复这些少数情况。

[深度学习概念]·深度学习进行语音识别-简单语音处理相关推荐

  1. [深度学习概念]·深度学习中人脸识别开发解析

    深度学习中人脸识别开发解析 目录 人脸识别介绍 人脸识别算法 实战解析 参考文献 人脸识别介绍 人脸识别是什么 人脸识别问题宏观上分为两类:1. 人脸验证(又叫人脸比对)2. 人脸识别. 人脸验证做的 ...

  2. 再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

    目录 1.神经网络训练过程 2.基础概念 3.数据预处理手段 4.数据处理库

  3. 什么是强化学习?(主要的强化学习概念)

    文章目录 什么是强化学习?(主要的强化学习概念) 4.主要的强化学习概念 4.1 基于模型与无模型(Model-based vs. Model-free) 4.2 预测(prediction)和控制( ...

  4. 干货丨机器学习和深度学习概念入门

    对于很多初入学习人工智能的学习者来说,对人工智能.机器学习.深度学习的概念和区别还不是很了解,有可能你每天都能听到这个概念,也经常提这个概念,但是你真的懂它们之间的关系吗?那么接下来就给大家从概念和特 ...

  5. 【机器学习】机器学习和深度学习概念入门

    机器学习和深度学习概念入门(上) 作者:谭东  来源:机器学习算法与自然语言处理 目  录 1   人工智能.机器学习.深度学习三者关系 2   什么是人工智能 3  什么是机器学习 4  机器学习之 ...

  6. 专访微软邓力:语音识别与非监督深度学习、增强学习、词嵌入、类脑智能

    在俞栋接受CSDN专访解读基于深度学习的语音识别技术及CNTK开源软件的同时,<解析深度学习-语音识别实践>一书的另一位作者.微软人工智能首席科学家邓力也接受CSDN专访,以另外的视角诠释 ...

  7. 深度学习与人类语言处理-语音识别(part1)

    深度学习与人类语言处理课程笔记,上节回顾深度学习与人类语言处理-introduction.这节课将会简单介绍语音识别的最新研究方法,请看正文 语音识别该何去何从? 1969年,J.R. PIERCE: ...

  8. 【深度学习】深度学习概念的理解(一)

    [深度学习]深度学习的理解(一) 写在最前面的话:设置[深度学习]栏,主要是为了扫盲深度学习的各个知识点,希望通过这种方式来给自己的基础打扎实,从头开始学习!如果有写得不对的地方,请指正!!!谢谢 深 ...

  9. 【深度强化学习】强化学习的基本概念

    文章目录 前言 第一章:强化学习的基本概念 学习--监督, 无监督与强化学习 强化学习的体系与联系 Reward 奖励 Agent Environment Actions Observation 马尔 ...

最新文章

  1. 用shell解决ddos攻击实例
  2. 多彩浏览器win10版 隐私声明
  3. android-解决 Android N 上 报错:android.os.FileUriExposedException
  4. salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)
  5. Ghost in IE6.web标准网页IE6中的幽灵。
  6. 【Clickhouse】Clickhouse 分析函数 window functions 窗口函数
  7. 如何通过jQuery动态设置元素CSS的样式,以及HTML中CSS “内联式”、“嵌套式”、“外联式”使用方法
  8. 如何使用Xcode的Targets来管理开发和生产版本的构建
  9. 网络共享计算机无法登录,局域网共享文件夹访问无法出现用户登陆窗口怎么办?...
  10. 什么是ISO 21434?给汽车软件开发人员的合规贴士
  11. 情人节的自娱自乐——情书事件
  12. 自媒体如何多平台发文章?
  13. 低代码时代的团队分工有哪些?
  14. 家用计算机按键不灵怎么修,电脑键盘两个ctrl键失灵怎么回事?ctrl键失灵的修复方法...
  15. 转换固态+机械硬盘分区表格式为GPT,UEFI启动,重装WIN10+Ubuntu18.04双系统
  16. Vue整合ElementUI
  17. css-doodle 学习第一天
  18. 泰无聊服务器维护,泰无聊网站6年一线编辑实战分享:接地气的软文是…
  19. python常用英语单词(初学,英语不好的适用)
  20. 论文学习笔记《SWA Object Detection》

热门文章

  1. android 社交类ui设计,社交类APP个人主页UI设计
  2. ADS42LB69使用记录
  3. 我的世界java如何加好友进世界_我的世界中国版怎么添加好友 好友开黑联网方法...
  4. 怎样将PNG格式的图片转成PDF格式
  5. 计算机页面格式,计算机基础教案 word排版(三)页面格式设置.doc
  6. php composer failed to open file: phar://composer.phar/bin........问题解决
  7. 中国企业面临严峻的数字化人才短缺挑战,高达86%的受访企业面临招聘困难 | 美通社头条...
  8. 【路径规划】基于拓展随机树(RRT)算法的路径规划问题(Matlab代码实现)
  9. 智能无线投屏 RK3036 SDK 特性
  10. 【设计模式】【27】规格模式