原文地址:https://medium.com/@ageitgey/machine-learning-is-fun-part-6-how-to-do-speech-recognition-with-deep-learning-28293c162f7a

How to do Speech Recognition with Deep Learning

如何用深度学习做语音识别

Andrew Ng 说语音识别从让人恼怒的不可靠到令人难以置信的有用中间只有4%的距离,是深度学习让这一切成为可能。

机器学习的过程不总是黑盒,我们将语音记录喂给神经网络,就可以得到纯文本输出。其过程如下如所示:

但问题是,每个人发音的习惯不同,同样说‘Hello’,有人语速极快,有人说的很慢。因此建立可靠的识别模型就需要一些小技巧。

一、将声音转换成比特

我们可以记录声波,然后将其用数字形式表示,并形成二维数组。

上面是最终效果。但声音被采集的原始形式是声波,比如下图就是‘Hello’的声音片段。

‘Hello’的声音片段比较复杂,先看一个简单的声音片段:

虽然声音是一维的,但加上时间属性后,我们可以将它转为二维图像:

这就是“采样”。我们对样本进行每秒千次的阅读便可以准确的记录它的数据。下图是“Hello”的前100个采样数据:

但又有一个问题,采样的数据就一定等于原数据吗?

理论上来说,只要以我们所需采集的数据最高频的两倍来采集数据,就可以完美呈现近似原音的效果。很多人以为采集数据次数越多,数据点越紧密效果越高,其实这是错误的。

二、预处理声音数据

拿到数据后,我们要对其进行预处理,这个过程会面临很多问题。比如,声音片段并不都是纯粹的标准样本,现实环境复杂多变,说话者可能是在嘈杂的环境下讲话,并且伴有严重的连读和口音,这都给语音识别增加了困难。

首先来看看我们以1/16,000次每秒为间隔采集到的数据:

在坐标系里绘制这些点集,可以得到近似原声波的图:

这个声音片段是由不同频率的声音复杂组合而成。为了使它更容易被神经网络处理,我们将其分离出低音部分,再分离出下一个低音部分,以此类推。然后将(从低到高)每个频段(frequency band)中的能量相加,我们就为各个类别的音频片段创建了一个指纹(fingerprint)。就像把一段音乐分离成一个个单独的音符一般。

这时需要借助傅里叶变换,它将复杂的声波分解为简单的声波,每一份频段所包含的能量不同,将能量相加,就能得到从低音到高音,每个频率范围的重要程度。以每 50hz 为一个频段的话,我们这 20 毫秒的音频所含有的能量从低频到高频就可以表示为下面的列表:

将其绘成声音图谱:

重复这个过程,最终会得到一个频谱图:

这样你能更清楚的发现声音模式,神经网络也更容易接收它。

三、从短声音里识别字符

经过处理的声音数据更容易被训练。将20毫秒的声音切片喂给神经网络,它会输出单个字母:

我们使用循环神经网络来处理数据,它具有预测功能。当我们将每个声音切片都依次喂给循环神经网络后,会得到如下映射:

其中每一列的红色块代表了每个声音切片最有可能对应的字母。

然后我们拿到的数据可能是这样的:

  • HHHEE_LL_LLLOOO becomes HE_L_LO
  • HHHUU_LL_LLLOOO becomes HU_L_LO
  • AAAUU_LL_LLLOOO becomes AU_L_LO

先去掉下划线:

  • HE_L_LO becomes HELLO
  • HU_L_LO becomes HULLO
  • AU_L_LO becomes AULLO

剩下的三种可能输出都是神经网络对于声音纯粹的解读。此时我们需要用到自然语言处理的数据库,基于大数据做训练匹配,从而选出出现可能性最大的词。但有时,可能性最大的词也许并不是你想要的结果。因此,此处仍有待完善的地方。

四、训练自己的语音识别模型

你得克服几乎无穷无尽的挑战:劣质麦克风、背景噪音、混响和回声、口音差异等等。你的训练数据需要囊括这所有的一切,才能确保神经网络可以接受它们。

[翻译]Review——How to do Speech Recognition with Deep Learning的更多相关文章

  1. 论文翻译:2015_DNN-Based Speech Bandwidth Expansion and Its Application to Adding High-Frequency Missing Features for Automatic Speech Recognition of Narrowband Speech

    论文地址:基于DNN的语音带宽扩展及其在窄带语音自动识别中加入高频缺失特征的应用 论文代码:github 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never ...

  2. 论文阅读笔记“Attention-based Audio-Visual Fusion for Rubust Automatic Speech recognition”

    关于论文的阅读笔记 论文的题目是“Attention-based Audio-Visual Fusion for Rubust Automatic Speech recognition”,翻译成中文为 ...

  3. 论文翻译:2020_TinyLSTMs: Efficient Neural Speech Enhancement for Hearing Aids

    论文地址:TinyLSTMs:助听器的高效神经语音增强 音频地址:https://github.com/Bose/efficient-neural-speech-enhancement 引用格式:Fe ...

  4. Utterance-Wise Recurrent Dropout And Iterative Speaker Adaptation For Robust Monaural Speech Recognition

    单声道语音识别的逐句循环Dropout迭代说话人自适应     WRBN(wide residual BLSTM network,宽残差双向长短时记忆网络) [2] J. Heymann, L. Dr ...

  5. FPGA 17最佳论文导读 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 后面陆续写一些关于神经网络加 ...

  6. Speech Recognition Grammar Specification Version 1.0 JavaScript TTS 文本发音

    Speech Recognition Grammar Specification Version 1.0 https://www.w3.org/TR/speech-grammar/ W3C Recom ...

  7. Speech Recognition Java Code - HMM VQ MFCC ( Hidden markov model, Vector Quantization and Mel Filter Cepstral Coefficient)

    Hi everyone,I have shared speech recognition code inhttps://github.com/gtiwari333/speech-recognition ...

  8. C#的语音识别 using System.Speech.Recognition;

    using System; using System.Collections.Generic; using System.Linq; using System.Speech.Recognition; ...

  9. 第三篇:ASR(Automatic Speech Recognition)语音识别

    ASR(Automatic Speech Recognition)语音识别: 百度语音--语音识别--python SDK文档: https://ai.baidu.com/docs#/ASR-Onli ...

随机推荐

  1. jquery事件三 -- load(), ready(), resize()以及bind()事件

    例子1 ready() DOM加载完毕 load() 元素加载完毕 resize() 浏览器窗口的大小发生变化 <!DOCTYPE html> <html lang="en ...

  2. jxl获取excel中的合并的单元格(主要是方法介绍)

    Range[] rangeCells = sheet.getMergedCells();// 返回sheet中合并的单元格数组 for (Range r : rangeCells) {//对数组遍历拿 ...

  3. Objective-C语法基础:面向对象编程特点的总结

    1.类的声明与实现 Objective-C类的声明要写在@interface 与 @end之间,实现要写在@implementation 与 @end之间 2.类的-方法和+方法 类的-方法即类的实例 ...

  4. nginx高性能WEB服务器系列之七--nginx反向代理

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  5. Q467 环绕字符串中唯一的子字符串

    把字符串 s 看作是"abcdefghijklmnopqrstuvwxyz"的无限环绕字符串,所以 s 看起来是这样的:"...zabcdefghijklmnopqrst ...

  6. Linux平台总线设备驱动

    1. 平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备(没有挂到真实总线的设备)与驱动进行了管理,这样提高了程序的可移植性. 2. 平台总 ...

  7. V1-bug Alpha阶段发布说明

    V1-bug Alpha阶段发布说明 欢迎使用WEDO创意社区(部署IP为:60.205.230.0) WHAT'S WEDO 这是一个致力于创意发布.合作开发的网站. 模块 功能 注册 添加新账号 ...

  8. 转 zabbix 用户建立和中文化

    1. 1 登陆和配置用户   简介 本章你会学习如何登陆Zabbix,以及在Zabbix内建立一个系统用户. 登陆 这是Zabbix的“欢迎”界面.输入用户名 Admin 以及密码 zabbix 以作 ...

  9. UNIX SHELL基础知识总结(二)

    1. vim,vi及ex的关系 vim不需要安装,vi为ex的“Visual Mode”,Vim是vi的高级版本: 2. Unix Shell 快捷键 Ctrl+a/e将光标定位到 命令的头/尾 Ct ...

  10. Python操作Excel(将父子级表头生成树状结构)

    import re class Node: ''' 容器,用来存储前后节点信息 ''' __slot__=[] def __init__(self,val,next_,pre,name,no): se ...