语音识别入门课——week5(GMM-HMM)

1.背景知识回顾

1.1特征提取

  • 数字信号的基本知识
  • MFCC/Fbank特征

1.2混合高斯模型GMM

  • GMM模型
  • EM算法

1.3隐马尔科夫模型

  • HMM的三个基本问题(概率问题,预测问题,学习问题)

2.GMM-HMM语音识别框架与概念

终极目的:让机器听懂

首先要出三个概念:

  • 对齐:“音频wav”和“文本txt“的对应关系
  • 训练:已知对齐(wav和txt),迭代计算模型参数
  • 解码:根据训练得到的模型参数,由wav推出txt

3.内容提要

3.1基于孤立词的GMM-HMM语音识别系统

  • 训练(前向后向训练/Viterbi训练)
  • 解码

3.2基于单音素的GMM-HMM语音识别系统

  • 音素/词典
  • 训练
  • 解码

3.3基于三音素的GMM-HMM语音识别系统

  • 三音素
  • 决策树
  • 训练
  • 解码

3.4基于GMM-HMM语音识别系统流程

4.基于孤立词的GMM-HMM语音识别系统

  • 孤立词的概念:所谓孤立词就是对于训练数据和测试数据,语音数据仅包含一个数字或者一个词
  • 考虑一个最简单的从0~9这样的一个语音识别系统
    • 数据准备
    • 建模
    • 如何训练
    • 如何测试(解码)

  • 从上图中很明显可以看出,对于每个数字,我们都要建立一个对应的模型,对于训练数据中的语音数据,通常会提取其MFCC特征向量

4.1目标

X_{test}测试特征,P_w(X)是词w的概率模型,vocab是词表(在该实例中为0~9 10个数字)

  • 为每个词都建立了一个模型P_{one}(X),P_{two?(X)},P_{three}(X)...
  • 计算在每个词上的概率
  • 选择所有词中概率最大的此作为识别结果

但是对于该语音任务具有的特性,序列性、不定长性,又该如何建模?

4.2建模

词(语音)是一个序列,P_w(X)可以用HMM的概率问题来进行描述,并且语音经过MFCC特征提取后也会变成连续概率密度分布

回想一下GMM-HMM

  • GMM概率密度建模
  • HMM序列建模

这时候对于这十个词,我们可以为每个词建立一个GMM-HMM模型

语音识别中的GMM与之前学习的GMM有何区别?

  • 语音识别中的GMM为对角的,因为其协方差矩阵为对角阵
  • 为什么协方差矩阵为对角阵?因为MFCC特征之间相互独立,作了去相关,直接使用对角阵就可以描述
  • 对角的GMM模型参数量更少,计算也更少一些

语音识别中的HMM

  • 3状态 , 为什么?前人的经验。
  • 左右模型(上一个状态只能去往下一个状态或者自跳,不可逆),为什么?和人发音类似,都是不可逆的过程
  • 拓扑结构(s1,s2,s3为状态)

如何结合起来

每个状态都有一个对应的GMM,每个词又有对应的HMM,给出一段未知序列的时侯,就会在HMM上计算一下观测概率、转移概率,也就是做一个Viterbi算法,计算一个序列在HMM-GMM上的概率

4.3训练

  • 从系统的角度思考
    • 输入:词w和w所对应的训练数据
    • 输出:词w的HMM-GMM模型,也就是其参数
  • 关键点
    • 任务:训练数据X_{w1},X_{w2},X_{w3}...中训练P_w(X),估计HMM-GMM参数
    • 准则:最大似然
    • 方法:Vertibi学习(Viterbi训练)、Baum-Welch算法(前向后向训练)
  • 回忆一下GMM-HMM都有哪些参数?
    • 初始概率,因为是从左到右模型,初始时刻看到在第一个状态上
    • 转移参数,一个状态只有两个概率,自跳概率和跳向下一个状态的概率
    • 观测参数(对角GMM模型)
      • 混合系数
      • 均值
      • 方差

count(hard)这部分的话count只能是0或者1,确定值

count(soft)这部分只能说count是一定的概率,不确定

4.3.1Viterbi训练

  • 类比问题:性别已知,求男生的平均身高
  • E步(hard count)
    • Viterbi算法得到最优的状态序列(对齐alignment),在t时刻处于状态i的概率非0即1,假设观测和状态对应上了,概率就是1,否则为0
    • GMM模型中在t时刻处于状态i第k个分量的概率(依旧是个soft count)
  • M步(normalize)
    • 更新转移参数、GMM参数(混合系数、均值、方差)
  • 重复E/M步
  • 此处学习见学习笔记四:HMM-Viterbi学习算法

拿到每个状态对应的所有特征之后更新GMM参数

4.3.2前向后向训练(Baum-Welch训练)

  • 类比问题:知道每个人属于男生的概率,求男生的平均身高
  • E步(soft count)
    • 前向+后向算法,在t时刻处于状态i的概率
    • 在t时刻处于状态i且为GMM第k个分量的概率
  • M步(normalize)
    • 更新转移参数、GMM参数(混合系数、均值、方差)
  • 重复E/M步
  • 此处学习见学习笔记四:HMM-Baum-Welch学习算法

Viterbi训练和Baum-Welch训练的区别在于如何计算t时刻处于状态i的概率

4.4解码

  • 从系统的角度思考
    • 输入
      • 各个词的HMM-GMM模型
      • 未知的测试语音X_{test}
    • 输出
      • X_{test}是哪个词
  • 关键点
    • 概率问题对所有的w,如何计算P_w(X_{test})
    • 方法:前向算法、Viterbi算法(可以回溯到最优的状态序列)

只需要加一条从E->S的线就可以识别one-two字符串

5.基于单因素的GMM-HMM语音识别系统

  • 孤立词系统的缺点:
    • 建模单元数、计算量和词典大小成正比
    • 词的状态数不应该是固定的3状态,词的长度不一样(a/accomplishment)
    • OOV(Out of Vocabulary)的问题,词典中没有这个词,但我想识别出来
  • 此时,可以考虑将一个语言的基本发音单元为建模单元来进行建模

5.1音素

  • 由此,引出发音的基本单元:音素
  • 静音Silence(SIL)没有发音的时候使用

5.2词典

词到音素序列的映射(文件),比如0~9 10个数字的词典如下:

5.3单因素的HMM拓扑结构

  • 每个音素使用经典的3状态结构

5.4训练

现在假设一句话里面包含一个单词,例如one(W AA N)

  • 如何做Viterbi训练?
  • 如何做前向后向训练?

就是将孤立词里面的词3状态,转变为每个因素3状态,做一个HMM的平滑连接,相当于一个9状态的HMM,再去使用Viterbi训练或者前向后向训练

单音素GMM-HMM语音识别系统流程

词 --> 音素序列,3状态变成拼接的多状态

5.5解码

  • 基于单因素的解码图

6.基于三音素的GMM-HMM语音识别系统

  • 单音素系统的缺点
    • 建模数量少
      • 一般英文音素在30~60个
      • 一般中文音素大约100
    • 音素的发音受其上下文的影响(协同发音)
      • 连读 not at all,he is
      • 吞音 first time

6.1三音素

  • 针对协同发音,提出解决措施,考虑音素的上下文,一般,考虑前一个/后一个,称之为三音素,表示为A-B+C
  • 例如keep K IY P => #-K+IY k-Iy+P IY-P+#
  • Q1:假设由N个音素,一共有多少个三音素? N^3
  • Q2:有的三音素训练数据少或者不存在,怎么办?
  • Q3:有的三音素在训练中不存在,但在测试中存在怎么办?
  • 似乎,三音素又带来了新的问题

6.2绑定

  • 基本思想:上下文发音相近的三音素共享参数
  • 这样的话就减少了建模数量,且增加了一些训练数据
  • 自底向上 :聚类
  • 自顶向下:决策树 (三音素绑定的实际解决方案 )

6.3决策树

  • 决策树
    • 是一个二叉树
    • 每个非叶子节点上都会有一个问题
    • 叶子节点是一个绑定三音素的集合
    • 绑定的粒度为状态
      • A-B+C和A-B+D的第一个状态绑定在一起,并不意味着其2/3个状态也要在一起
      • 也就是说B的每个状态都有一颗小的决策树
    • zh-zh+zh 这个三音素应该落在上图的NNN这条路径上,和其他的三音素共享参数

6.4问题集

刚刚说每个非叶子节点都是一个问题,这些问题都是些什么?

  • 常见问题
    • 元音(Vowel):AA AE AH AO AW AX AXR AY EH ...
    • 爆破音(Stop):B D G P T K
    • 鼻音(Nasal):M N NG
    • 摩擦音(Fricative):CH DH F JH S SH TH V Z ZH
    • 留音(Liquid):L R W Y
  • 位置:左/右
  • 问题及的构建
    • 语言学家的定义
    • Kaldi中通过自顶向下的聚类自动构建问题集

6.5基于状态的绑定

这是基于状态的绑定,而不是整个三音素的绑定

6.6决策树的构建(最优问题)

  • 总结:
    • 1.初始状态(一个结点)
    • 2.选择一个结点
      • 从问题集中选择似然增益最大的问题作为该节点问题
      • 建立该节点左右子节点,并将该节点上的统计量分为两部分
    • 3.重复2 ,直至
      • 达到一定数量的叶子结点
      • 似然增益小于某个阈值,表示子节点和父结点之间的差别不大,可以停止了

你可能感兴趣的:(语音识别,人工智能)