语音识别HTK代码学习手册资料教程.doc 立即下载
2024-12-03
约3.6万字
约94页
0
1.3MB
举报 版权申诉
预览加载中,请您耐心等待几秒...

语音识别HTK代码学习手册资料教程.doc

语音识别HTK代码学习手册资料教程.doc

预览

免费试读已结束,剩余 89 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

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



2-1
当N=5,T=100时大概需进行次乘法!
b.前向算法
定义t时刻的前向变量(forwardvariable),可以通过迭代的方法来计算各个时刻的前向变量:
1)初始化(Initialization)
当t=1时
2-2
2)递归(Induction)
当时

即:2-3
3)终结(Termination)
2-4
乘法次数大约为:N2T
c.后向算法
定义t时刻的后向变量(backwardvariable),可以通过迭代的方法来计算各个时刻的后向变量:
1)初始化(Initialization)
当t=T时
,2-5
2)递归(Induction)
当时

即:,2-6
3)终结(Termination)
2-7
乘法计算次数约为:N2T
2.已知观察序列和模型参数,在最佳意义上确定一个状态序列。
定义一个后验概率变量(posterioriprobabilityvariable)
2-7
则最优序列可以通过,2-7
求得。不过,这样求得的最优序列有些问题。如果,那么这个最优序列本身就不存在。这里讨论的最佳意义上的最优序列,是使最大化时的确定的状态序列。即,使最大化时确定的状态序列。
定义为t时刻沿一条路径,且,输出观察序列的最大概率,即:2-8
下面介绍迭代计算的Viterbi算法:
1)初始化(Initialization)
,
回溯变量:,
2)递归(Induction)

即:2-8
2-9
3)终结(Termination)
2-10
2-11
4)回溯状态序列
,2-12
3.已知观察序列和模型参数,如何调整模型参数使最大。
定义3.1给定训练序列和模型,时刻Markov链处在状态和时刻处在状态的概率定义如下
3-1
定义3.2给定训练序列和模型,时刻Markov链处在状态的概率定义如下
3-2
定义3.3给定训练序列和模型,从状态转移出去的概率为
定义3.4给定训练序列和模型,从状态转移到状态的概率为
利用Baum-Welch重估算法可以得到使局部最大时的参数更新公式。
1.Baum-Welch重估公式的理论基础
引理3.1设,,为正实数,,,为非负实数,那么,由对数函数的凹特性,有如下结论
3-3
定义辅助函数如下
3-4
其中,为更新前模型参数,为更新后模型参数,为训练序列,为可能的状态序列。
利用和引理3.1易得
3-5
式3-5构成了重估公式得理论基础,对辅助函数,只要能够找到,使,从而,这样,更新后的模型在拟和训练序列方面就比更新前的模型要好,使最大而得到的的参数更新公式就称之为Baum-Welch重估公式。
引理3.2,,在的约束条件下,函数的唯一最大值点为。
证明如下


求最大值
令得:

,同理可证:
利用凹函数特性可知此最大值唯一。
2.离散HMM模型的重估公式



HTK内存管理
一、HTK内存管理概述
C语言编程中,遇到的关于内存分配和释放的问题主要有如下两个方面。
第一是指针维护问题。试想,你写的一个程序执行了一系列内存空间分配(通常是由malloc函数完成)操作,为了能够在以后适当的时候(通常是你不再需要那些内存时)可以将分配的内存空间释放(通常是由free函数完成),你必须小心谨慎的维护好这些指向分配的内存空间的指针。有经验的程序员大概都会有这样的感受,维护这些指针并非易事!特别是当程序比较复杂时,尤为如此。如果你一不小心(其实这很容易)丢掉了某些指针,那么操作系统将无法回收那些内存(这便是我们常说的内存泄漏问题),除非你的程序死了。
第二就是关于内存分配释放操作本身。如果你的程序会相当频繁的执行malloc和free函数,那么程序将会费去大量的CPU时间来执行它们。
为了解决以上两个问题,尽可能的提高内存利用率,HTK设计了一个内存管理子系统,利用自定义的堆结构(Heap)来进行内存分配和释放。HTK内存分配和释放的主要思想是一次向操作系统要大一些的内存块,然后在将它分成小块供上层程序使用,不需要时只需释放那个大内存块。
HTK把堆结构分为三大类:
1.M-HEAPS:元素大小固定,new/free操作执行次序无限制,可全局重置(globalreset)。
2.M-STACK:元素大小可变,最后分配的空间必须先
查看更多
王子****青蛙
实名认证
内容提供者
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

语音识别HTK代码学习手册资料教程

文档大小:1.3MB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用