【9A文】语音识别HTK代码学习手册

【9A文】语音识别HTK代码学习手册

ID:40084362

大小:1007.50 KB

页数:93页

时间:2019-07-20

【9A文】语音识别HTK代码学习手册_第1页
【9A文】语音识别HTK代码学习手册_第2页
【9A文】语音识别HTK代码学习手册_第3页
【9A文】语音识别HTK代码学习手册_第4页
【9A文】语音识别HTK代码学习手册_第5页
资源描述:

《【9A文】语音识别HTK代码学习手册》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、【MeiWei_81重点借鉴文档】HMM的理论基础一、HMM定义1.N:模型中状态的数目,记t时刻Markov链所处的状态为2.M:每个状态对应的可能的观察数目,记t时刻观察到的观察值为3.:初始状态概率矢量,,,4.A:状态转移概率矩阵,,,5.B:观察值概率矩阵(适用于离散HMM),,,;对于连续分布的HMM,记t时刻的观察值概率为一个离散型的HMM模型可以简约的记为。二、关于语音识别的HMM的三个基本问题1.已知观察序列和模型参数,如何有效的计算。a.直接计算2-1【MeiWei_81重点借鉴文档】【MeiWei_81重点

2、借鉴文档】当N=5,T=100时大概需进行次乘法!b.前向算法定义t时刻的前向变量(forwardvariable),可以通过迭代的方法来计算各个时刻的前向变量:1)初始化(Initialization)当t=1时2-22)递归(Induction)当时即:2-33)终结(Termination)2-4乘法次数大约为:N2Tc.后向算法定义t时刻的后向变量(backwardvariable),可以通过迭代的方法来计算各个时刻的后向变量:【MeiWei_81重点借鉴文档】【MeiWei_81重点借鉴文档】1)初始化(Initial

3、ization)当t=T时,2-52)递归(Induction)当时即:,2-63)终结(Termination)2-7乘法计算次数约为:N2T2.已知观察序列和模型参数,在最佳意义上确定一个状态序列。定义一个后验概率变量(posterioriprobabilitRvariable)2-7则最优序列可以通过,2-7【MeiWei_81重点借鉴文档】【MeiWei_81重点借鉴文档】求得。不过,这样求得的最优序列有些问题。如果,那么这个最优序列本身就不存在。这里讨论的最佳意义上的最优序列,是使最大化时的确定的状态序列。即,使最大化

4、时确定的状态序列。定义为t时刻沿一条路径,且,输出观察序列的最大概率,即:2-8下面介绍迭代计算的Viterbi算法:1)初始化(Initialization),回溯变量:,2)递归(Induction)即:2-82-93)终结(Termination)2-102-11【MeiWei_81重点借鉴文档】【MeiWei_81重点借鉴文档】4)回溯状态序列,2-123.已知观察序列和模型参数,如何调整模型参数使最大。定义3.1给定训练序列和模型,时刻Markov链处在状态和时刻处在状态的概率定义如下3-1定义3.2给定训练序列和模型

5、,时刻Markov链处在状态的概率定义如下3-2定义3.3给定训练序列和模型,从状态转移出去的概率为定义3.4给定训练序列和模型,从状态转移到状态的概率为利用Baum-Welch重估算法可以得到使局部最大时的参数更新公式。1.Baum-Welch重估公式的理论基础引理3.1设,,为正实数,,,为非负实数,那么,由对数函数的凹特性,有如下结论3-3【MeiWei_81重点借鉴文档】【MeiWei_81重点借鉴文档】定义辅助函数如下3-4其中,为更新前模型参数,为更新后模型参数,为训练序列,为可能的状态序列。利用和引理3.1易得3-

6、5式3-5构成了重估公式得理论基础,对辅助函数,只要能够找到,使,从而,这样,更新后的模型在拟和训练序列方面就比更新前的模型要好,使最大而得到的的参数更新公式就称之为Baum-Welch重估公式。引理3.2,,在的约束条件下,函数的唯一最大值点为。证明如下求最大值令得:【MeiWei_81重点借鉴文档】【MeiWei_81重点借鉴文档】,同理可证:利用凹函数特性可知此最大值唯一。2.离散HMM模型的重估公式HTK内存管理一、HTK内存管理概述C语言编程中,遇到的关于内存分配和释放的问题主要有如下两个方面。第一是指针维护问题。试想

7、,你写的一个程序执行了一系列内存空间分配(通常是由malloc函数完成)操作,为了能够在以后适当的时候(通常是你不再需要那些内存时)可以将分配的内存空间释放(通常是由free函数完成),你必须小心谨慎的维护好这些指向分配的内存空间的指针。有经验的程序员大概都会有这样的感受,维护这些指针并非易事!特别是当程序比较复杂时,尤为如此。如果你一不小心(其实这很容易)丢掉了某些指针,那么操作系统将无法回收那些内存(这便是我们常说的内存泄漏问题),除非你的程序死了。第二就是关于内存分配释放操作本身。如果你的程序会相当频繁的执行malloc和

8、free函数,那么程序将会费去大量的CPU时间来执行它们。为了解决以上两个问题,尽可能的提高内存利用率,HTK设计了一个内存管理子系统,利用自定义的堆结构(Heap)来进行内存分配和释放。HTK内存分配和释放的主要思想是一次向操作系统要大一些的内存块,然后在将它

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。