Sphinx用于汉语连续数字语音识别的研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sphinx用于汉语连续数字语音识别的研究
王韵,张雪英
太原理工大学信息工程学院,太原(030024)
E-mail:312118847@
摘要:本文介绍了一个基于Sphinx的汉语连续数字语音识别系统,其声学模型采用SphinxTrain训练生成,语言模型由cmuclmtk统计语言模型生成,识别引擎采用PocketSphinx 工具。实验证明该系统对于非特定人不定长数字串的句子识别率为89.583%,词识别率为97.20%,说明该系统有良好的性能。
关键词:Sphinx;语音识别;声学模型;语言模型
中图分类号:TN912.34
1.引言
作为汉语语音识别的一个重要分支,非特定人连续数字识别有着广阔的应用前景。它在语音电话拨号、数字家电遥控、移动通信、电话证券交易等众多实用化领域[1]都给人们带来极大的便利。连续数字识别是一个小词汇量的语音识别系统,识别对象仅包括0~9十个数字,但由于汉语的单音节及易混淆性使得识别率同实际应用还存在一定差距。
本文利用卡内基梅陇大学(CMU)开发的嵌入式识语音识别引擎PocketSphinx,声学模型训练工具SphinxTrain,语言模型生成工具cmuclmtk[2]构建了一个汉语数字识别系统。PocketSphinx是CMU开发的一款用于快速语音识别的嵌入式语音识别引擎,它对于小词汇量的英语连续语音有很高的识别率。这里我们借助此识别引擎,通过训练汉语数字的声学模型和语言模型来构建一个高性能的汉语连续数字语音识别系统。这些工具的源代码都是公开的,通过改进算法,在汉语连续数字识别方面取得了一定的成效。
2.系统结构
连续语音识别系统主要由特征提取,声学模型,语言模型,识别引擎四部分组成如图1。以下会根据本文构建的数字连续语音系统对这四部分分别介绍。
图1 连续语音识别系统的基本结构
2.1 特征提取
SphinxBase是卡内基梅隆大学著名的Sphinx语音识别工程的公用库,主要用MFCC实现了语音识别系统的前端特征提取,其流程如图2示:
图2 MFCC 流程图
输入信号为16bit 的音频数据流。采样率为16KHz ,语音分帧的帧长为25.6ms ,帧叠为10ms 。对于每帧语音信号求出12维美尔倒谱系数和功率谱系数并对其归一化。现用x(t)表示时刻t 的倒谱向量,x(t)表示功率谱系数。经过一阶二阶差分后得到51维向量作为语音识别输入的四个特征流[3]:
MFCC 系数x(t):归一化倒谱向量 (12维) 一阶差分系数12()()(2)(2),()(4)(4)x t x t x t x t x t x t x t ΔΔ=+−−Δ=+−−: (24维) 二阶差分系数()(1)(1)x t t t ΔΔΔ+−Δ−: (12维) 功率谱向量0000()(),(),()x t x t x t x t ΔΔΔ: (3维)
2.2 改进的声学模型训练
主流语音识别系统多采用HMM 进行建模,本系统采用半连续HMM 模型进行声学模型训练,声学模型的输入是由特征提取模块提取的特征。
由于数字识别系统词汇量非常小,这里我们选择把每个词的发音(即拼音)作为声学模型的训练单元。由于连续语音中存在协同发音的情况,所以本文采用的声学单元是上下文相关的三元音子[4](triphone )。所谓上下文相关三元音子,是指考虑一个音素与其左右相邻音素的相关情况后选取的音素。对于数字串“yi1 er4 san1 wu3”,使用triphone 表示为如下序列:
sil sil-yi1+er4 yi1-er4+san1 er4-san1+wu3 san1-wu3+sil sil
句首的sil 表示句子开始的静音段,句尾的sil 表示句子结束时的静音段。
每个音素模型都采用具有相同的5状态贝叶斯拓扑结构的HMM 。每个特征码书的半连续声学模型都含有256个密度分量。聚类后的状态称为senone ,每个senone 都有其独立完整的高斯混合模型,这也是解码过程的最基本的单元。
本文采用CMU 开发的sphinxtrain 工具进行声学模型的训练。训练步骤如下:
(1) 确定建模单元(11个:ling2 yao1 yi1 er4 san1 si4 wu3 liu4 qi1 ba1 jiu3 )和模型的拓扑结构(5状态贝叶斯拓扑结构);建立字典文件,音素文件,音频文件及存储路径,确保各个文件一一对应。
(2) 从语音文件中统计全局的均值和方差,并用这些全局的均值和方差初始化所有上下文无关(Context-independent ,CI )模型的均值和方差,并使用Baum-Welch 算法训练CI 模型。
(3) 结合训练的发音词典,构建词间三元音子的句子HMM 串。基于Baum-Welch 算法,训练未聚类的上下文相关(Context-dependent ,CD )模型。
(4) 构建CI 模型的各个状态所对应的决策树;对得到的决策树根据事先设定的Senone
数目进行裁剪,并利用裁剪后的决策树进行声学模型的状态聚类。
(5) 训练聚类后的CD模型,得到输出概率分布是单高斯的CD模型。
(6) 从单高斯的CD模型开始,不断地分裂高斯密度函数分布,增加高斯混合的数目,并且利用Baum-Welch算法训练分裂后的CD模型直至其收敛。不断地重复该高斯分裂步骤直到高斯混合数目满足要求为止[5]。
(7) 删除插值是声学模型训练的最后步骤,目的是减少过度拟合的影响。它是一个在CI 和CD之间反复插值的过程。数据被分为两个集合,其中一个集合的数据用来估计另一集合已训练得到的CI和CD之间的最优插值因子。随后两个集合交换,并把得到的插值因子作为当前操作的初始值,交换直至插值因子收敛为止。
最终我们得到解码端需要的声学模型文件:特征参数文件feat.params,模型定义文件mdef,均值文件means,方差文件variances,转移矩阵transition_matrices,状态分布sendump,噪声词典noisedict,混合权重mixture_weight。
2.3 语言模型训练
本文采用cmuclmtk工具训练语言模型,通过统计大量文本数据得到以单个数字建立的N-Gram模型。在训练中主要采用2-Gram和3-Gram模型,即某个词出现的概率仅依赖于前一个或者前两个词。语言模型生成的基本流程[6]如图3,其输入是文本数据text,输出包括两个语言模型文件:语言模型arpa和语言模型转储文件arpa.DMP。
图3 语言模型训练流程图
2.4 识别引擎
PocketSphinx可以对wave格式存储的语音文件进行识别。待识别的语音可以麦克风输入,也可读取wave格式语音文件得到,最后输出的识别结果以文字形式显示。识别引擎算法集中分为四个部分:声学特征计算,高斯函数计算,高斯混合模型计算和Viterbi搜索。解码端的搜索算法主要采用ViterbiBeam[7]搜索算法。在搜索过程中不断地寻找可能的最优状态子序列,记录相应的信息,根据不同层次的裁剪门限进行裁剪,直到处理完所有的特征矢量,最后进行回溯得到最优的词序列。