Ref

强烈建议先看完以上资料

语音识别的原理

语音识别的过程可以理解为找路:

一个朋友告诉你他从杭州站走到杭州东经过了水、桥、广场,想让你猜猜他走的是哪条路,你该怎么办呢?

那我们就找这些特征所对应的建筑吧,分别是公园、高架桥、娱乐广场,啊,在图上最可能的就是蓝色的这条线了! 于是我们就从朋友的特征描述得到了他的行走路径,这就相当于从音频得到了发出这些音频的文字,即语音识别。

上述过程有几个问题,包括

这些特征对应的建筑有很多,水可以是公园也可以是池塘、湖、海等等;朋友也不可能先跑到火星再坐飞船到杭州东,所以我们找的时候是在较为可能的范围内找的,这对应了语音识别中的语言模型,它限定了我们语音识别的范围。

包含上述水、桥、广场特征的路径有很多,我们需要将特征最可能对应的建筑给找出来,这对应了语音识别中的声学模型,它描述了我们发特定音对应某个单词的概率,例如我发音是 偷猫肉 ,显然,对应的单词是tomorrow的概率比tomato更大。

Observe值

在语音识别中,朋友告诉你的特征被称作Observe值,观测值,其提取的流程如下图所示

流程示意

音频波形 => (每一帧的)频域特征序列 => (每一帧的)Observe值

上图中这些圈圈是什么意思呢?

HMM:发音可能的路径

举一个具体的例子,比如我发了Hi这个单词(在计算机里面使用音素phone来表明这个单词是如何发音的,Hi对应于sil-h-ay-sil,sli指silence),下图为计算发音为sil-h-ay-h-ay-sil-h-ay-sil的概率

首先我们需要规定发音可能的路径,对Hi这个单词而言,发音只可能是(sil-h)-(ay-sil)的组合,比如我把H拖得比较长,说的是HHHHHHi那就是(sil-h)(sil-h)(sil-h)…-(ay-sil)啦,前面一长串的重复对应于上图中箭头指向自己,Hiiiiiiiii~~~同理。使用上图这种链式的HMM就可以表示出这种发音的路径。真正的识别当然不止Hi这一条路径,还有Hello,Hey,Apple等等,是所有可能的状态路径的集合,语音识别就是从中找出一个对应于Observe序列最可能的状态路径出来(这里的状态相当于找路中的建筑)。那么怎么知道哪个是最可能的呢?这里先提出HMM相关的3个问题。

关于HMM的3个问题

问题1:已知模型和状态序列,求产生特定观测序列的概率

计算过程

解释一下上图中符号的含义:

π表示进入到这条路径的概率,朋友已经告诉你是从杭州站出发了,所以π=1

o表示观测值,即朋友告诉你的特征,“水”,“广场”等等;b(o)则代表这个特征属于某个建筑的概率,如在公园里出现水的概率比较大,则b公园(水)=0.8,b公园(广场)=0.2等

a则表示从一个状态走到下一个状态的概率,如公园之后更容易走到广场去,则a公园->广场=0.7

回到这个问题本身。最简单的,直接根据概率相乘计算;然后,其实这个直接算的过程可以优化,于是有了Forward Algorithm,向前算法,或者 Backward Algo,向后算法。后续的Baum-Welch Algo也会用到这个算法。

问题2:已知模型和观测序列,求这个观测序列对应的状态序列

相当于语音中的解码问题。最简单的,暴力破解,根据问题1算出所有状态序列产生这个观测序列的概率,找一个最大的。采用动态规划优化之后的算法为Viterbi Algo,维特比算法。

问题3:已知多个观测序列,求模型(即求模型的a b π参数)

若已知对应的状态序列,则为监督算法,根据频数进行估计。

监督学习

若并不知道对应的状态序列,则为无监督算法,Baum-Welch Algo。

GMM:特定Observe值对应于某一状态的概率b(o)

GMM对应于上图中的函数曲线b(o),是多个正态分布的叠加(如虚线所示),应用GMM进行计算的过程如下图所示(这里是问题1:已知模型和状态序列,求产生特定观测序列的概率):

计算过程

注意这里的0.7 0.4(就是a啦)对应于HMM部分中状态转移的概率(箭头上的概率),通过以上计算过程我们就能分别计算出Hi,Hello,Hey这些单词的概率来了,概率最大的就是识别出来的文本啦。

这里仅仅展示了Hey这一个单词的计算过程,而不同的单词概率密度函数(pdf)是不同的,如HTK Book里面的这张图所示:

不同的单词

针对所有待识别的单词需要都构建这样的一串函数(即图中的模型)然后才能选出最大概率的作为最终识别结果。

再来一个总体的图方便大家理解。

Yes对应的概率计算

HMM-GMM如何被构建出来?

以上过程有两个问题:

路径是如何画出来的?

函数是如何拟合出来的?

这里便对应问题3:已知多个观测序列,求模型,需要我们通过语料库里的语音进行训练,由Baum-Welch Algo得到整个模型的参数。它也是个EM算法,需要先设定一个初始值,HTK里面的做法是先将观测值均分,和整个句子的所有状态近似对应,计算出初始值,然后进行迭代得到更好的值,使在该模型下产生这个观测值的概率提高,最终状态值和观测值就能更好地对齐在一起(句子里面每个单词的状态对准到了相应的语音特征)。其中迭代优化的值包括π a b,还有一个中间参数Lj(t),他表示t时刻观测值对应于状态j的概率,这就和对齐alignment联系上啦。更详细的介绍参考HTK Book。

维特比(Viterbi)解码

当训练过程完成之后,要使用这个模型便对应问题2:已知模型和观测序列,求这个观测序列对应的状态序列,亦即已知wav文件对应的特征序列,求其对应的状态,而状态是单词的更小级别的展开,最终可以转换为单词实现语音识别。

Viterbi解码的算法如下图所示,

Viterbi算法

1代表开始的状态,6代表结束的状态,我们的任务就是沿着一条最可能发生的路径从1走到6,而路径上每个黑点的概率都是知道的,Viterbi算法便可以通过动态规划的方式找出这条道路。不过Kaldi里面有另外一种解码的方式,Lattice,这个后续再说。

总结

一张图作为收尾和下一章的开始:

HMM结构

b(o)特定观测值对应某一状态的概率不仅可以用GMM的方式计算,还可以通过DNN的方式,这就是声学模型。而Kaldi里用到的转移模型便是WFST,这又究竟是个什么呢?

Kaldi(A1)语音识别原理相关推荐

  1. 基于Kaldi的语音识别

    cnblog: https://www.cnblogs.com/ye-buaascse/ 第二十九届"冯如杯"学生学术科技作 品竞赛项目论文 基于Kaldi的语音识别 摘要 近年来 ...

  2. 语音识别的原理_语音识别原理_语音识别原理框图 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 深入浅出地介绍了基于hmm的语音识别的原理,不注重公式的细节推导而是着重阐述公式背 ...

  3. 30年时间让科技与人对话,什么是机器人语音识别原理

    电销机器人核心技术是语音是识别,了解一台机器人语音识别原理,可以说就能知道电话机器人好不好用,能否帮助企业完成拓客需求. 作为人工智能的产物,电销机器人还蒙着一层神秘的色彩.电销机器人如何做到语音识别 ...

  4. 【AI 全栈 SOTA 综述 】这些你都不知道,怎么敢说会 AI?【语音识别原理 + 实战】

    章目录 前言 语音识别原理信号处理,声学特征提取识别字符,组成文本声学模型语言模型词汇模型 语音声学特征提取:MFCC和LogFBank算法的原理 实战一 ASR语音识别模型系统的流程基于HTTP协议 ...

  5. 语音识别原理与应用:第三章 语音特征提取 3.1预处理

    今天开始学习洪青阳老师编写的语音识别原理与应用,把书中的内容用代码复现下,系统的进行学习 3.1预处理 (1)预加重 这里实际上是设计了一个一阶高通滤波器 原始语音信号图"蓝天白云碧绿的大海 ...

  6. 【NLP】ESPNet语音识别——原理、实现过程

    文章目录 引言 一.语音识别概述 1.模板匹配,例如:DTW(动态时间规整) 2.统计模型,例如:GMM-HMM(混合高斯模型和马尔科夫模型)等 3.深度学习,例如:DNN-HMM.End-to-En ...

  7. 随想录(从kaldi学习语音识别)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 语音识别是一个技术活.之前一直不是很了解,特别是听到梅尔倒谱系数.GMM.HMM.DNN.NLP ...

  8. GMM-HMM语音识别原理详解 - 全文

    本文简明讲述GMM-HMM在语音识别上的原理,建模和测试过程. 1. 什么是Hidden Markov Model? HMM要解决的三个问题: 1) Likelihood 2) Decoding 3) ...

  9. 【RV1126】移植kaldi实时语音识别

    文章目录 算法 一.环境 1.1 硬件环境--RV1126开发板 1.2 交叉编译器 1.3 需要Cmake版本大于3.1以上 二.交叉编译sherpa 2.1 下载sherpa 2.2 编译sher ...

最新文章

  1. oracle 统计一年中每个月数据总和_excel表格有每月数据 怎样统计全年的-用excel公式怎样计算每年每个月的数据总和?...
  2. 实现超长焦梦想的捷径——试用适马150-500毫米F5-6.3 OS镜头
  3. 《Essential ASP.NET 2.0中文版》
  4. ASP.Net 页面和后台执行的先后顺序
  5. android 二次点击退出,android返回二次退出
  6. LVS的三种负载均衡以及高可用原理(VS/NAT、VS/TUN、VS/DR)
  7. java就是我的幸福,嫁给幸福
  8. 工作总结17:组件封装思想
  9. start-dfs.sh\stop-dfs.sh启动失败
  10. excel在线_如何把pdf转excel将文档保持原有格式
  11. 进销存excel_Excel仓库进销存管理系统,全函数库存,查询汇总自动生成超简单...
  12. 精简版Android ProtoBuf入门
  13. Computer Science Theory for the Information Age-2: 高维空间中的正方体和Chernoff Bounds
  14. HTTP代理的代理形式
  15. mysql升级 增删改查询
  16. linux内核max函数实现
  17. 十大编程语言,每一个都不容易学,但每一个又很有用,黑客必备
  18. 弘辽科技:淘宝直通车ROI怎么提升?直通车ROI多少正常?
  19. SharePoint Online:软件边界和限制
  20. swfobject.js 2.2 使用方法

热门文章

  1. 【解决】client does not support authentication
  2. java项目中build path的设置
  3. ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢?
  4. Oracle查看被锁的表和解锁[转]
  5. Javascript 通用Excel导出函数
  6. HDU2076 夹角有多大【水题】
  7. UVA12468 Zapping【水题】
  8. ZOJ1222 Just the Facts【大数+模除】
  9. ICPC程序设计题解书籍系列之五:吴永辉:《数据结构编程实验》(第2版)
  10. 多元高斯分布及多元条件高斯分布