参考文章:

http://blog.csdn.net/quheDiegooo/article/details/60873999

http://blog.csdn.net/quhediegooo/article/details/61202901

在发音过程中,因为协同发音的影响,同一个音素在不同的位置,其发音变化很大,如下图所示:

同样的元音[eh]在不同的单词中的发音在频域上区分非常明显。

因为单音素monophone 是上下文独立的(context-independent)

为了能够表示这种区别,因此提出了triphone的概念,triphone是根据左右音素来确定的,因此是上下文相关的(context-dependent)

上图中:W对应的是词组;Q对应的是monophone;L对应的就是triphone;P对应聚类或者状态绑定之后的triphone

接下来本文就要讨论triphone聚类/状态绑定的过程。

聚类过程有2中,一种是居于数据驱动的聚类过程,第二种是基于决策树的聚类过程

一、基于数据的过程

HMM状态绑定过程如下:

步骤为:

1)用flat-start方式创建 monophone集合,每个状态的输出概率密度函数为单高斯概率密度,均值,方差为训练数据的全局均值和方差(上图1);(该单音素对应的所有训练数据,求均值和方差);

2)用EM算法迭代3-4次,对高斯参数重新进行估计(上图1);(该单音素对应的所有训练数据,EM迭代训练);

3)每个单高斯monophone q被克隆一次,用来初始化那些在训练数据出现的,未被绑定的triphone: x-q+y(上图步骤2);(单音素拷贝到3音素,完成初始化)

4)对这些triphone,用EM算法再次迭代(这里),来高斯参数重新进行,同时状态j的占用数γ被计算出来(上图步骤2);(三音素的个例单独训练,如图,不是相同中心音素的训练成一个模型)

5)来自同一个monophone的三音素集合,相应的状态被聚类,在每个聚好的类中,选择一个状态作为典型,同类中的状态绑定到这个状态(上图步骤3);

6)绑定完成之后,对步骤5中的所有triphone的高斯参数再次进行EM迭代同时增加高斯混合模型中的分量(components),直到分量个数达到设定的预期或者性能达到测试预期。(上图步骤4)

上面过程简单总结就是:

monophone训练->monophone克隆->同样的状态进行绑定->增加混合高斯模型个数到设定值

基于data-driven的方法是根据状态的均值和方差进行聚类,这种方法的缺点是训练数据中未出现过的的triphone没有办法处理

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、triphone决策树聚类

基于data-driven的聚类算法,如KNN,有个缺点,就是无法处理训练数据中没有出现过的triphone,基于决策树的聚类可以解决这个问题。

基于决策树的聚类过程中,把任意一个phone分裂成2类,其log 似然必然会增加,因为分裂后同样的个数的数据,其参数增加一倍,因此,选择不同的question对phone集合进行分裂,使得分裂后的log 似然增加最大。具体描述如下:

1)初始所有的状态都在一个类别中,作为tree的root节点;

2)找到一个question,使得分裂后的2个类别的log 似然增加最大,把当前的question作为当前tree节点的问题;

3)从上到家重复这个过程,直到分裂后,增加的log 似然小于某个给定的阈值;

4)最后,对不同父亲节点的两个叶子节点的类别成一个类,计算其减少的log 似然是否小于给定的阈值,如果小于这个阈值,则合并,否则不合并。

其中log似然计算公式如下:s表示HMM中的状态,F代表训练数据中的帧,γ代表占用数(state occupation counts)

实际中通过monophone训练triphone的过程综合了状态绑定和决策树聚类的过程,核心步骤如下所示:

1)用flat-start方式创建 monophone集合,每个状态的输出概率密度函数为单高斯概率密度,均值,方差为训练数据的全局均值和方差(该单音素对应的所有训练数据,求均值和方差);

2)用EM算法迭代3-4次,对高斯参数重新进行估计(该单音素对应的所有训练数据,EM迭代训练);

3)对train data中出现的所有x-q+y音素,拷贝monophone q的状态的参数给triphone x-q+y,这样创建了上下文相关音素x-q+y,这步也是对triphone进行初始化的过程(单音素拷贝到3音素,完成初始化)

4) 对这些triphone,用EM算法再次迭代,来高斯参数重新进行,同时状态j的占用数(state occupation counts)γ被计算出来  (三音素的单独训练,如图,不是相同中心音素的训练成一个模型)

5) 把这些trephine用上述介绍的决策树聚类算法进行聚类。

6)最后对每个类增加高斯混合模型的component,并用EM重新估算高斯参数,直到节点个数到达给定的阈值。

以上就完成了monophone生成triphone的过程。

[转]data-driven与决策树聚类的两种方法的更多相关文章

  1. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  2. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  3. 选中没有选中的复选框,匹配含有某个字符串的正则,json取值的两种方法,把变量定义在外面跟里面的区别

    一.筛选没有选中的复选框:not("input:checked") 二.匹配有VARCHAR的字符串:".*VARCHAR.*?" 三.json取值的两种方法 ...

  4. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  5. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  6. BW增强数据源的两种方法

    BW增强数据源的两种方法 2009-04-01, by SAPBI 前言:我们经常会遇到系统标准的数据源,或者我们自建的数据源无法满足要求的情况,这个时候在数据源中添加几个相关的字段,可能就能满足我们 ...

  7. C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...

  8. Linux安装MySQL的两种方法

    转载:http://blog.csdn.net/superchanon/article/details/8546254/ 1.       运行平台:CentOS 6.3 x86_64,基本等同于RH ...

  9. hive权威安装出现的不解错误!(完美解决)两种方法都可以

    以下两种方法都可以,推荐用方法一! 方法一: 步骤一: yum -y install mysql-server 步骤二:service mysqld start 步骤三:mysql -u root - ...

随机推荐

  1. adobe cc最新版 软件安装与激活

     adobe cc最新版 软件安装与激活:https://m.weike.fm/lecture/4912961 说明#:Adobe CC2017的所有软件都可以按照以上方法进行安装,如:Premier ...

  2. 一个RTSP/RTP over TCP 的丢包引起的问题

    背景知识:可以查看https://www.cnblogs.com/lidabo/p/4483497.html RTSP/RTP over TCP TCP承载RTSP/RTP   When you us ...

  3. unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度

    var arr = [1, 2]; arr.unshift(0); //result of call is 3, the new array length //arr is [0, 1, 2] arr ...

  4. 29.Hibernate-二级缓存和session管理.md

    目录 1.概念 1.1一级缓存: 1.2二级缓存: 2.使用方法 3.策略 3.1缓存策略 3.2集合缓存 3.3查询缓存 5. Seesion管理 1.概念 Hibernate提供的缓存 有一级缓存 ...

  5. Python学习—基础篇之基本数据类型(一)

    数据类型 在python中,能够直接处理的基本数据类型主要有数字类型.字符串类型.字节类型.布尔类型.列表.元组.字典.集合等. 一.数字类型 1.1 数字类型的创建 # 数字类型 a = 10 b ...

  6. c++ 面试题(网络类)

    1,若服务器方单独终止之后,客户端继续发数据会怎么样? https://blog.csdn.net/Nick_666/article/details/78342442 https://www.zhih ...

  7. 20175314 《Java程序设计》第六周学习总结

    20175314 <Java程序设计>第六周学习总结 教材学习内容总结 第七章:内部类与异常类 内部类:内部类就是在一个类中再定义一个类,这个在类中定义的类就叫做内部类,而包含内部类的类叫 ...

  8. [Java核心技术]第四章-对象与类(4.1-4.6总结)

    4.1面向对象程序设计概述 OOP(面向对象编程Object Oriented Programming) OOP中数据第一位,算法第二位. 类 封装:关键在于不能让其他方法直接访问类的实例域,程序仅通 ...

  9. 关于react的一些东西

    Facebook 官方推出Create-React-App脚手架,基本可以零配置搭建基于webpack的React开发环境,内置了热更新等功能. 使用的原因以及特性: 无需配置:集成了对 React, ...

  10. java命令分析线程死锁以及内存泄漏

    一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...