Chapter1-4_Speech_Recognition(HMM)

文章目录

    • 1 HMM用在哪里
    • 2 HMM的state
    • 3 改造成DNN
      • 3.1 Tandem
      • 3.2 DNN-HMM Hybrid

本文为李弘毅老师【Speech Recognition - HMM (optional)】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。其中也涉及到了部分李琳山老师关于HMM的详解(讲得非常清楚,请务必先搞懂HMM,再看这篇)。

下文中用到的图片均来自于李宏毅老师和李琳山老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 1-3 CTC, RNN-T and more

下篇 - 1-5 Alignment of HMM, CTC and RNN-T

总目录

1 HMM用在哪里

没有深度学习的语音识别系统可以用下面这幅图来表示,不过很多用到深度学习的也基本是把其中的一些模块替换调成了DNN而已。要输出一段声音信号,得到对应的文字,需要四个东西:

  • 声音特征(Feature Vectors)。这个我们之前也有提到过,忘了的可以看下这里,一般会用一个叫做MFCC的方法,把声音信号转化成长度为TTT,特征维度为39维的向量。
  • 声学模型(Acoustic Models)。这里是用到HMM(Hidden Markov Model)的地方,就是输入Feature Vectors,得到每个Feature Vector对应的state是什么,而这里的state一般是指比Phoneme(发音的基本单元,比如th-ih-s-ih-z-s-p-ih-ch)更小的基本单元。
  • 词典(Lexicon)。用来把声学模型得到的一串state转换成对应的单词,比如(th-ih-s) → this。
  • 语言模型(Language Model)。这个就是把得到的单词变成一个完整通顺的句子的模型。

ch1-4-1

我们这篇主要讲的就是这个声学模型(Acoustic Models),其他的部分暂时不去关心。

上面这个是李琳山老师的说法,李弘毅老师讲的更抽象一些,但本质是一样的。如下图所示,比如我们有一个模型可以计算给定声音信号XXX,得到输出序列YYY的概率P(Y∣X)P(Y|X)P(YX),那么我们只需要遍历所有的YYY,然后找到使得P(Y∣X)P(Y|X)P(YX)的概率最大的那个YYY就可以了。但是,YYY的可能性太多了,这样的计算消耗太大了,这个方案,这里不讨论。

学过贝叶斯定理的都知道,这个条件概率是可以变一变的,经过如下图所示的变化后,我们只需要找到一个YYY,使得P(X∣Y)P(Y)P(X|Y)P(Y)P(XY)P(Y)最大就可以了,而这里的P(X∣Y)P(X|Y)P(XY)就是我们的声学模型(Acoustic Models),这里的P(Y)P(Y)P(Y)就是我们的语言模型(Language Model),P(X)P(X)P(X)和我们要找的YYY没有关系,可以直接扔掉。有时P(Y)P(Y)P(Y)也可以不用考虑。而这里的P(X∣Y)P(X|Y)P(XY)可以用很机智的演算法去求解。

其实李弘毅老师讲的P(X∣Y)P(X|Y)P(XY)就是李琳山老师讲的声学模型(Acoustic Models)和词典(Lexicon)的结合。
ch1-4-2

2 HMM的state

HMM里需要一个叫做state的东西,如上文所述,它在我们的声学模型里,就是一个比Phoneme更小的东西,那它究竟有多小呢?答案就是,它可以任意小,只要我们的计算资源足够就可以。首先,Phoneme会根据上下文被拆分成Tri-phone,Tri-phone就是说,我们今天的"uw"的这个音在不同的上下文中是不一样的,可以是"d-uw+y"的"uw",也可以是"y-uw+th"的"uw",把句子中前一个Phoneme和后一个Phoneme都加进来,就变成了Tri-phone。而我们的state比Tri-phone还要小,一个Tri-phone可以拆成多个state,这个state人已经无法分辨了,具体要拆成几个state,就看我们的计算资源有多少了。

为什么要拆的这么小呢?因为在计算HMM的时候,我们希望人在发出每个state所对应的音的时候,是可以用高斯混合模型(GMM)去模拟它的分布的,而不同的人说同一个词时,发出的音时不一样的,所以希望这个state可以代表非常细的音。

所有的YYY都可以转换成state,所以,我们我们今天要求的P(X∣Y)P(X|Y)P(XY),就可以转变为求P(X∣S)P(X|S)P(XS)

ch1-4-3

可以想象,按这种做法的话,我们的state会非常多,比如Phoneme有30个,最后把每个Tri-phone再切成3个单元的话,我们将会有303×330^3\times3303×3个state。这意味着什么?Emmm~这意味着我们要很多的高斯混合模型(GMM)。我们先来讲下HMM的计算中需用到的几个概率函数。

计算HMM的时候,我们需要知道三个概率,一个叫做转移概率(Transition Probability),一个叫做发射概率(Emission Probability),还有一个叫做初始概率(initial state probabilities)。李弘毅老师在讲的时候没有提到初始概率,那我们就默认是所有的state初始概率都是相等的吧。

  • 转移概率:从一个state变到任意另一个state的概率。
  • 发射概率:每个state产生该time step对应的特征向量的概率,如P(X1∣"t−d−uw1")P(X^1|"t-d-uw1")P(X1"tduw1")
  • 初始概率:最开始从某个state开始的概率。

其中的发射概率就是说我们的每个state都要有一个高斯混合模型(GMM),也就是我们要303×330^3\times3303×3个GMM!更难处理的是,有些state在数据中出现的是很少的,我们称为rare state,很难学好。这个时候,一种方法是把这些rare state映射到其他相近的state的GMM上,另一种就是2010年提出的Subspace GMM。Subspace GMM这里简单说一下,就是说我们现在所有的state都有一个公用的池子(Pool),每个state要计算发射概率的时候,从Pool里捞几个GMM出来就可以了。

好,现在假设我们已经有了转移概率和发射概率,但我们仍旧无法把P(X∣S)P(X|S)P(XS)计算出来,因为我们并不知道每个XiX^iXi是由哪个state产生的。李弘毅老师说,states的个数往往小于声音特征向量XXX的长度。因此,如果按顺序用完所有的state的话,可以有很多条路径,HMM做的就是把所有路径的概率加起来。

这个从路径对应到特征向量的操作,就叫做对齐(alignment)。这个在下节课会详细介绍。
ch1-4-4

3 改造成DNN

3.1 Tandem

Tandem没有改变原来的整套方案,只是在对于输入的特征进行了一个分类,使得每个time step的acoustic feature都有预测出来的对应于每一个state的概率。然后把这个DNN的输出当作新的acoustic feature,再放进原来的模型里去跑就可以了。
ch1-4-5

3.2 DNN-HMM Hybrid

HMM里面是有一个GMM的模型的,也就是上文所说的发射概率的计算模型。DNN-HMM Hybrid就是把这个GMM模型换成了DNN去做。DNN可以是CNN或者LSTM这些。

之前GMM模型是计算出P(x∣a)P(x|a)P(xa),也就是给定state aaa发射出特征xxx的概率。现在的DNN能计算P(a∣x)P(a|x)P(ax),也就是给定特征xxx,则xxx是state aaa的概率。然而,这两个东西不一样呀。于是就需要用条件概率转换一下,得到
P(x∣a)=P(a∣x)P(x)P(a)P(x|a)=\frac{P(a|x)P(x)}{P(a)} P(xa)=P(a)P(ax)P(x)

然后这里,P(a∣x)P(a|x)P(ax)就是DNN的输出,P(a)P(a)P(a)可以从数据中统计出来,P(x)P(x)P(x)不用去管它。。。
ch1-4-6

为什么要用DNN来替换GMM呢?有人认为P(x∣a)P(x|a)P(xa)是generative learning,而P(a∣x)P(a|x)P(ax)是discriminative learning,然后大家认为后者比较厉害,这样。也有人认为DNN的参数比较多,比较厉害,这样。而实际证明,这种方法,很强。

我仔细想了下,感觉这个和Tandem的区别其实并不大。它们其实都是要有一个DNN的state classifier。

不过,这个state classifier怎么train呢?我们都知道,trainDNN的模型是需要标签的,然而我们并不知道现在的XiX^iXi分别属于哪一个state。这该咋办?实际操作的时候,用了类似于半监督的方法,就是利用HMM+GMM来train一个模型,然后拿这个train好的模型的结果来当作标签去train这个DNN的模型。然后再把train的DNN的结果当作标签,训练一个新的DNN,一直反复这样下去。这样的方法很强,train出来的模型结果和人类接近!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Express 结合 multer 上传图片

一、 Multer 模块介绍 Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用 于上传文件。 它是写在 busboy 之上非常高效。 注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。 https://www.npmjs.com…

ad19pcb设置恢复默认_条码打印机-斑马产品常用恢复出厂设置

当我们手上拿到条码打印机,遇到一下无法挽回的时候,我们可以选择恢复下出厂设置,这样使打印机还原到出厂,或许是很好的选择,接下来我们看下斑马条码打印机操作方法如下:Zebra 条码打印机恢复出厂1、有面板的…

Chapter1-5_Speech_Recognition(Alignment of HMM, CTC and RNN-T)

文章目录1 为什么需要Alignment2 穷举所有的alignment2.1 HMM的对齐2.2 CTC的对齐2.3 RNN-T的对齐3 小结本文为李弘毅老师【Speech Recognition - Alignment of HMM, CTC and RNN-T (optional)】的课程笔记,课程视频youtube地址,点这里👈(需翻…

mongoose 入门以及 mongoose 实现数据 的增、删、改、查

一、mongoose 介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。 Mongoose 有两个特点 : 1、通过关系型数据库的思想来设计非关系型数据库 2、基于 mongodb 驱动&…

64位处理器_电脑操作系统的32位和64位有什么区别

想买个新电脑,不知道买 64 位还是 32 位?买了一套视频剪辑软件,发现电脑根本安装不了?这些到底是为什么?对于 Windows7 及以上版本,我们能够很明显知道自己电脑操作系统是 64 位还是 32 位。如果你还不知道…

Chapter1-6_Speech_Recognition(RNN-T Training)

文章目录1 一个alignment概率的计算2 所有alignments概率的计算3 Training4 Inference5 小结本文为李弘毅老师【Speech Recognition - RNN-T Training (optional)】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来…

Mongoose 预定义模式修饰符 Getters 与 Setters 自定义修饰符

一、mongoose 预定义模式修饰符 lowercase、uppercase 、trim mongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化。 var UserSchemamongoose.Schema({ name:{ type:String, trim:true }, age:Number, status:{ type:Number, default:1 } })二…

微信可以远程控制电脑吗_用微信就能远程控制电脑,这款神器有些厉害

「本期内容标签」安卓 iOS 电脑 小程序 网站 游戏 教程微信确实一步步改变生活,尤其是微信小程序面世以来,可谓是神器一个接一个的出现,很多功能已经和手机app旗鼓相当了。那么,今天说的这款刚推出的微信小程序,实现远…

开源的excel读取库libxls在windows下的编译,且支持中文,全网首发

转载请注明出处:http://www.cnblogs.com/superbi/p/5482516.html 到目前为止,网络和官网上并没有关于libxls在windows下支持中文的教程,也没有现成的二进制文件。 想直接得到结果的请直接拉到最后获取成果,想自己以后遇到类似问题…

Chapter1-7_Speech_Recognition(Language Modeling)

文章目录1 为什么需要Language Model2 N-gram3 Continuous LM3 NN-based LM4 RNN-based LM5 合并LAS和LM5.1 shallow fusion5.2 deep fusion5.3 cold fusion本文为李弘毅老师【Speech Recognition - Language Modeling】的课程笔记,课程视频youtube地址,…

Mongoose 索引、Mongoose 内置 CURD 方 法、扩展 Mongoose Model 的静态方法和 实例方法

一、Mongoose 索引 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更 快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询 优化技巧。 mongoose 中除了以前创建索引的方式,我们…

winre drv分区干嘛用的_都2020年了,还在给硬盘分区?看完你就知道有没有必要了...

电脑硬盘,到底该不该分区?很多人买了新电脑或者在电脑中安装了SSD硬盘之后,第一个步骤就是:开机-给硬盘分区。但是,大家有没有考虑过,硬盘是否真的需要分区呢?这不最近有人就在程序员社区V2EX上…

php 系列

1.给 跑在windows 环境下的php, 安装redis 拓展。(installing Redis & Redis extension in PHP on XAMPP on windows.) step 1: 安装redis server(windows) http://fellowtuts.com/php/install-redis-redis-extens…

搞懂RNN

文章目录1 什么是RNN2 LSTM3 Training3.1 Learning Target3.2 为什么难train4 应用举例4.1 Many To One4.2 Many To Many4.3 其他本文为李弘毅老师【Recurrent Neural Network(Part I)】和【Recurrent Neural Network(Part II)】的课程笔记,课程视频来源于youtube(需…

bp神经网络预测_股指期货价格变动趋势往往反映的是股票价格的走势,因此BP神经网络对股指期货价格的准确预测就是对股票价格的准确预测。...

一只猫の生活态度对于投资者而言,利用BP神经网络模型对股指期货价格进行准确预测,可以帮助投资者构建较佳的投资组合,从而获取较好的投资收益,规避系统风险;对于国家而言,准确预测股指期货价格走势&#xf…

Mongoose aggregate 多表关联查询

1. 查询每个order订单中的所有orderItem(多表关联查询) order.js: var mongoose require(./db.js)var OrderSchema mongoose.Schema({order_id: String,uid: Number,trade_no: String,all_price: Number,all_num: Number })var OrderModel mongoose…

搞懂Transformer

文章目录1 内容简述2 seq2seq的常用模块3 Self-attention4 Multi-head Self-attention5 Positional Encoding6 Transformer参考资料文为李弘毅老师【Transformer】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自…

excel计算二元线性回归_怎么看懂Excel线性回归参数

虽然之前用python做线性回归的时候看上去好像很简单,但是直到我在excel上实践了线性回归,发现有很多指标值得去参考,对于在python上实现有指导作用。打开excel2016,先找个数据我们这里直接选择做线性回归,在菜单栏选择…

冲刺阶段 day 6

项目进展:学生管理这部分已经进展的差不多了,调试了几遍,改了几个小Bug之后就没有什么问题了,基本完成,如若后续还有一些新的功能到时候再自行加入。明天开始教师部分。 存在问题:我觉得我们的项目还是比较课堂,比较中…

Chapter2-1_Voice Conversion(Feature Disentangle)

文章目录1 什么是Voice Conversion2 实际实现中的细节3 根据数据集分类4 Feature disentangle5 训练技巧本文为李弘毅老师【Voice Conversion - Feature Disentangle】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均…