基于HTK的孤立词语音识别

2019-08-29 09:15杜宇斌
关键词:特征提取语法语音

杜宇斌,赵 磊

(山东理工大学 计算机科学与技术学院, 山东 淄博 255049)

语音识别( Speech Recognition)是指让机器听懂人说的话,即准确地识别出语音的内容,根据其表达的信息来执行人的各种意图。它与计算机技术、语音语言处理、声音信号处理、人工智能和概率统计学都有密切的联系。近20年来,语音识别技术取得显著进步,已经开始走向市场[1]。但其远不能达到人们理想的使用状态,只能在特定的领域发挥作用。这也使得语音识别技术的发展充满前景和应用价值。

语音识别技术的研究始于20世纪50年代,由美国AT&T Bell实验室最先实现了可识别10个英文数字的第一个语音识别系统Audrey。但真正取得实质性进展,并将其作为一个重要的课题开展研究则是在60年代末70年代初。这一时期的语音识别主要基于模型匹配原理,研究的领域局限在特定人、小词汇表的孤立词识别,实现了基于线性预测倒谱和DTW(Dynamic Time Warping,动态时间归整)技术的特定人孤立词语音识别系统;同时提出了矢量量化(VQ—Vector Quantization)和隐马尔科夫模型(HMM)理论[2],李开复博士于1988年发表了第一个基于隐马尔科夫模型的语音识别系统Sphinx。最高水平的语音识别技术应该是非特定人类无限量词汇的连续语音识别系统。本文在研究孤立词语音识别的同时,也是为大词汇量语音识别和连续语音识别奠定基础。本文研究语音识别的原理、方法和工具,运用语音开发工具包HTK搭建非特定人、汉语小词汇量的孤立词语音识别系统。

1 语音识别的理论基础

1.1 语音识别的一般过程

语音识别的主要方式,是将一段段的语音信号转换成相应的电脑能识别的符号或文本信息。语音识别系统主要由特征提取、声学模型、语言模型和解码四部分组成,如图1所示。

图1 语音识别组成部分Fig.1 Composition of speech recognition

1)特征提取:人所发出的语音信号无法直接被计算机识别利用,需要进行一系列的预处理。将声音中最有效的信息提取出来,把其他无用的信息除掉(背景噪音、情绪等等)。尽可能地将具有辨识度的声音保留下来,为后面的模型训练提供可以处理的特征向量。预处理工作包括对所采集的声音信号进行预加重,分帧,加窗等操作,将语音信号从时域转换到频域[3]。利用DCT(Discrete Cosine Transform,离散余弦变换)等手段提取特征参数。

2)声学模型:每一个单词的发音方式都有所不同,需要对不同的单词分别建立其声学模型。将上一步中提取的特征参数放入合适的声学模型中,声学模型根据声学特性计算每一个特征向量在声学特征上的参数值。经过训练,得到每个单词所对应的声学模型。

3)语言模型:人的交流都遵循一定的语法规则,语言模型可以告知计算机如何理解人的说话方式。根据语言学相关的理论和语法规则,计算该声音信号对应词组序列的概率。根据建立好的字典和语料库,对词组序列进行解码,输出声学模型最有可能对应的字符序列。

4)解码:将待识别的语音信号进行特征提取,与声学模型和语言模型进行对比匹配得到识别结果。

1.2 特征提取的方法

特征提取作为语音识别的首要步骤,提取出的特征参数对模型训练和匹配解码有直接影响。梅尔倒谱系数(Mel-scale Frequency Cepstral Coefficients,简称MFCC)作为特征提取的重要方法,在语音识别领域有很好的表现。它的优势在于做到了基于人耳的听觉特性,先将线性频谱映射到基于听觉感知的梅尔非线性频谱中,然后转换到倒谱上。由于该特征不依赖于信号的性质,不会对输入信号做出任何假设和限制[4]。因此,MFCC参数可以更好地保留语音信号中的有效信息,并且稳定。自20世纪90年代以来一直应用于语音信号的特征提取。

梅尔频率倒谱系数的提取主要有以下几个步骤:

1)对原始信号进行预加重、分帧和加窗的预处理工作。

2)每一个所加的短时分析窗,通过傅里叶变换(FFT)得到对应的频谱。

3)将上面的频谱通过梅尔滤波器组得到梅尔频谱。

4)对梅尔频谱进行倒谱分析,获得梅尔频率倒谱系数MFCC作为该帧语音的特征参数。

1.3 隐马尔科夫模型

隐马尔科夫模型( Hidden Markov Model, HMM)属于统计学和概率学的混合模型,用于描述具有隐含未知参数的马尔科夫过程,是结构最简单的动态贝叶斯网络。由于HMM在语音识别中具有良好的稳定性和识别率,被视为经典模型一直沿用。

隐马尔科夫模型模拟的是双重随机过程,与语音信号相似,包括可观测的随机过程和隐藏的随机过程,如图2所示。

图2 隐马尔可夫模型的随机过程Fig.2 Stochastic process of Hidden Markov Model

上面空白圆圈xt-2,xt-1,xt表示每个时刻的隐含状态,下面阴影圆圈yt-2,yt-1,yt表示每个时刻的可见状态,上面的空白圆圈构成了隐含随机状态链,也就是隐马尔科夫链;下面的阴影圆圈构成了可见状态链,也就是马尔科夫链。上方的横向箭头代表了隐含状态之间的转换概率,而下方的纵向箭头则代表由隐含状态到可见状态的转换概率。HMM可以用5个元素来描述,包括2个状态集合(隐含状态、可观测状态)和3个概率矩阵(初始状态概率矩阵、隐含状态转移概率矩阵、观测状态转移概率矩阵)[5]。

在HMM中,按观测状态转移概率分布可分为离散HMM(Discrete HMM,DHMM)和连续HMM(Continuous HMM,CHMM):DHMM符合上文所述的HMM基本结构,观测状态转移概率是按观测状态离散分布的,对应于一个转移概率矩阵;而CHMM则有所不同,它的状态转移概率分布是连续值,可以用概率密度函数表示。在孤立词的语音识别中,HTK采用连续HMM,用高斯概率密度函数表示转移概率。

2 系统的实现

2.1 建立语料库

语音样本的录制和标记采用了HTK提供的HSLab函数,它提供了一个集成的声音处理工具,可以将语音样本保存为sig格式文件。 在界面中显示录制好的声音波形,其中幅值较高的部分是共振峰,保存了语音的关键信息。通过语音标记,将其中的有效信息截取出来进行模型训练。每一条语音需要做3个标记:以单词“启动”的声音为例,3个标记分别为语音段的标记“qidong”和其前后各一个静音段的标记“sil”。在作标记的过程中语音段不能重叠,否则在模型训练中该样本数据无法被用来训练。本系统对每个单词采样10次,每个单词由4人参与录制,共20个单词总计200个样本。标记好的语音数据如图3所示。

图3 语音的标注Fig.3 Voice annotation

2.2 特征提取

在HTK中提取的特征参数是梅尔频率倒谱系数(MFCC),一共需要定义39个特征参数,包括13个MFCC系数,13个一阶差分系数和13个二阶差分系数。在特征提取之前需要编写特征参数配置文件analysis.conf,具体内容如下:

SOURCEFORMAT=HTK #指定输入语音的格式

TARGETKIND=MFCC_0_D_A #定义梅尔倒谱参数

WINDOWSIZE=250000.0 #定义窗长为25 ms

TARGETRATE=100000.0 #定义相邻窗的滑动长度

NUMCEPS=13 #定义13个MFCC特征参数

USEHAMMING=T #定义窗函数为汉宁窗

PREEMCOEF=0.97 #设置预加重系数

NUMCHANS=26 #设置梅尔频谱的频道数量

CEPLIFTER=22 #设置倒谱所用梅尔滤波器个数

HTK采用Hcopy函数进行特征提取,在命令行输入Hcopy-A-D-C analysis.conf-S targetlist.txt完成对目标语音数据的特征提取工作。其中,analysis.conf是MFCC参数配置文件,targetlist.txt是数据位置配置文件。将所要提取的语音文件的路径名和提取后文件的存放路径一同写入文件targetlist.txt中,Hcopy函数依据此文件中的路径名抽取相应位置的语音文件,将提取出的特征参数以特定的数据格式储存为MFCC文件,保存在targetlist.txt文件所指定的位置。需要对录制的200个样本都进行特征提取,得到200个特征文件。HTK生成的MFCC文件由头文件和数据域组成,数据域中包括帧数、采样周期、每一帧的字节数、参数类型和参数值等[6]。

2.3 模型训练

2.3.1 模型初始化

HTK采用隐马尔科夫模型进行建模,需要定义模型的5个基本元素:观测状态、隐含状态、初始概率矩阵、隐含状态转移矩阵、观测状态转移矩阵[7]。在本系统中,每一个训练样本MFCC文件为一个观测状态,包含39维的特征向量;隐含状态由模型初始化定义,与观测状态对应;因HTK要求有一个初始状态节点,所以初始概率矩阵无需给出;隐含状态转移矩阵表示10个隐含状态之间的转移概率,可按要求设定其值;观测状态转移矩阵由高斯分布的均值矩阵和方差矩阵替代,每个状态只包含1个高斯分布,由模型训练得到高斯密度函数[8]。

模型训练需要手工对每一个单词建立HMM初始模型。除此之外,语音中的静音部分也需要建立1个模型。为每个模型创建一个文件,共21个模型文件,将其保存在hmm0文件夹中。以单词“启动”为例,以文本文件(.txt)方式写入,保存为hmm_qidong(无后缀)文件。文件内容如下:

~o 39 #定义输入特征参数的维数

~h "qidong" #模型的名称

#开始HMM模型的定义

10 #定义隐含状态数。每个单词有10个训练样本,每个样本是1个观测状态(39维的特征向量),10个隐含状态对应10个观测状态。

2 #隐含状态1默认为空,从隐含状态2开始定义。每一个单词模型需要定义与隐含状态数相同的隐含状态,除去状态1默认为空,每个文件需要定义9个隐含状态。由于篇幅原因,在这里以状态2为例,其余状态定义与此相同。

39 #定义均值向量矩阵,每个状态每一维特征对应1个均值,表示这一维向量从状态1到本状态的均值。初始化为0.0表示此状态均值没有计算。

39 #定义方差向量矩阵,每个状态每一维特征对应1个方差,表示这一维向量从状态1到本状态的方差,由均值向量矩阵提供参数进行计算。初始化为1.0表示每个状态之间处于离散状态,不存在联系。

10 #定义隐含状态转移概率矩阵。在10个状态定义完成后再定义,参数表示隐含状态之间的转换概率。第i行j列表示第i个状态到第j个状态之间的转换概率。根据参数值进行强制初始化(但是矩阵的每行之和为1,最后一行规定为不允许转换),在训练过程中,参数值将被修改。

#定义完成

由此可以具体得知HMM模型的拓扑结构,并且可以通过修改其结构来优化语音识别系统的性能。

2.3.2 迭代训练

在整个语音识别系统中,迭代训练出的声学模型将直接影响系统的识别率及稳定性。HTK中HMM的迭代训练,对每个训练样本及其对应的单词或句子,采用维特比算法,不断迭代更新HMM矩阵参数及其状态转移概率,最后达到收敛。迭代过程如图4所示。

图4 迭代训练过程Fig.4 Iterative training process

模型参数估计采用HRest工具,每调用该工具1次则完成一轮的参数重新估计。本系统进行3次迭代训练,需要调用3次HRest命令。以单词“启动”的训练为例,在命令行输入HRest-A-D-T 1-S trainlist.txt-M hmms/hmm1-H hmm0/hmm_qidong-l qidong-L lab qidong。

与targetlist.txt不同,单独建立配置文件trainlist.txt,只存放每个样本的MFCC文件路径名。由此文件寻找“启动”相应的10个训练样本,投入文件夹hmm0里对应qidong的模型中训练。将10个qidong样本1次迭代训练后的模型文件hmm_qidong保存在hmm1的文件夹中。每一个单词投入10个样本进行训练,共200个样本分别对20个单词进行训练。共进行3次迭代训练,最后得到的模型文件hmm_qidong保存在hmm3文件夹中,该文件夹中的21个模型是每一个单词(包括静音模型)迭代3次后的收敛模型。收敛后的模型文件可通过记事本方式打开,初始化的模型参数经过迭代训练已经被修改。迭代训练中的参数收敛如图5所示。

图5 迭代训练中的参数收敛Fig.5 Parameter convergence in iterative training

其中,每一次迭代后,变量change都会减小,说明模型训练的似然值在收敛。当change值不再变化时,模型的参数训练完成。若change值在一次迭代中没有收敛为0,则说明模型中的参数训练还存在误差,还需再一次的迭代训练,直到change值变为0,说明已经收敛。当然,训练的样本越多,意味着需要迭代的次数也越多,训练出来的模型的稳定性和识别率将会越好。

2.4 设计语法

建立语法网络是实现语音识别系统人机交互的最后一步,对于任意一个语音识别系统需要定义该识别任务的语法,并生成待识别的网络,识别网络包括所有可能识别的单词或句子。在连续语音识别中,还需要建立语言模型。语言模型是根据上下文推测单词或句子可能表达的含义,其作用在于消除语言中的多音字和同音词的问题,在声学模型给出发音语序之后,从候选的文字字典中寻找出概率最大的字符串序列[9]。孤立词的语音识别中,不涉及连续语音中上下文推测语义的问题,主要包括建立语法规则和词典及创建任务网络三部分的任务。

2.4.1 建立语法规则

在绑定单词模型之前,要定义语法识别器的基本结构。孤立词的语法定义格式为:停顿(静音),说出单词,再停顿(静音)。HTK中提供了编写语法的一般规则,需要将编写好的语法保存为文本文件gram.txt。本文定义的语法文件内容如下:

$WORD=启动 | 关闭 | 导航 | 音乐 | 空调 | 微信 | 泊车 | 无人驾驶 | 天窗 | 右转 | 左转 | 倒车 | 直行 | 接听 | 远光灯 | 近光灯 | 打电话 | 车内照明 | 道路信息 | 车窗锁闭;

({START_SIL}[$WORD]{END_SIL})

其中$WORD表示可以替换的单词,在本系统中有20个命令词,下面的{START_SIL}[$WORD]{END_SIL}表示输出的语法规范,也就是上文所提到的,前后为停顿(静音),中间为发出的单词语音。花括号表示里面的单词所绑定的模型可以出现很多次,方括号表示所绑定的单词模型只能出现一次。

2.4.2 建立词典

词典的建立是为了将最终识别的结果与隐马尔科夫模型描述的单词名称建立对应关系,也就是将单词与训练好的模型绑定。HTK中词典文件dict.txt绑定模型的格式如下:

导航 daohang

音乐 yinyue

空调 kongtiao

微信 weixin

左边是单词,右边是与之绑定的模型名称(本系统中模型的命名是单词拼音或拼音缩写)。

2.4.3 创建任务网络

任务语法网络是单词识别的网络,计算机将语音信号采样并提取特征后通过任务网络找出匹配的单词。在HTK中运用Hparse函数来创建语法网络。在DOS窗口中输入Hparse -A -D -T 1 dict.txt gram.txt net.slf, 用上文中编写好的词典文件dict.txt和语法文件gram.txt构建出任务网络并写入net.slf文件。net.slf文件中生成的语法网络结构如图6所示。

图6 语法网络结构Fig.6 Syntax network structure

2.5 交互识别

孤立词识别的过程在隐马尔科夫模型中属于评估问题,而连续语音的识别过程属于解码问题。在HTK中,评估问题和解码问题都是采用Hvite函数进行识别,但对应的算法有所不同,孤立词的识别采用前向后向算法来寻找匹配输入语音的最大概率模型。对于输入的原始语音先进行信号处理,提取其特征参数。通过前向后向算法计算出最有可能生成此语音的HMM模型,也就是找到概率最大的HMM模型作为该语音的输出模型。依据已经写好的语法规则将与此模型绑定好的单词输出到DOS命令窗口。HTK提供了交互操作的方式,将收集到的语音信号自动进行计算分析,直接输出识别结果。输入命令Hvite-A-D-T 1-C directin.conf-g-H hmmsdef.mmf-w net.slf dict.txt hmmlist.txt。

directin.conf是处理输入语音信号的文件,用于设置特征提取的相关参数。directin.conf与上文中提取样本特征参数的配置文件analysis.conf略有不同,需要额外配置如下参数:

SOURCERATE=625.0 #采样率是16 kHz(16 000个采样点/s,1个点是1/160 000 s=625*100 ns,100 ns是HTK的时间单位。在前面的特征提取中采样率默认为16 kHz,本文件需要特别说明)

SOURCEKIND=HAUDIO #采样的文件种类是HTK所录制的语音文件

hmmsdef.mmf是所有模型参数的集合文件,将hmm3文件中每个收敛模型的参数复制到1个新建文本中并保存为MMF文件。hmmlist.txt是HMM模型列表,将21个模型名(相应命令的拼音或缩写)写入此文件。net.slf和dict.txt是之前所建立的语法网络和词典。命令输入后,操作者每说出1个单词,计算机屏幕将自动显示所识别的结果。

3 实验展示和性能测试

3.1 实验展示

语音识别系统搭建完成后,就可对计算机讲话进行识别。运行交互识别的命令后,命令行会出现“READY[1]>”,此时便可以通过麦克风等设备进行声音录入,然后按任意键结束录音,程序会自动进行识别并将结果显示在屏幕上,再出现“READY[2]>”等待下一次录音及识别。例如,对麦克风说出“启动”,再按下回车,识别结果如图7所示。

图7 “启动”识别结果Fig.7 The result of recognition for “QiDong”

由此可见,前面的“START_SIL”和后面的“END_SIL”是之前定义的静音模型名称,在开始识别的静音为“START_SIL”,说出命令后的静音为“END_SIL”。中间便是系统所识别出的HMM模型对应的单词。

3.2 性能测试

影响语音识别系统识别率的主要因素是训练模型[10],根据隐马尔科夫模型的特点,进行如下测试内容:在理想说话环境(无噪音,26 dB)和噪音环境(实验室外,54 dB)下,将作为训练样本的说话人(第一组)进行测试,再随机找出4个非训练样本的说话人(第二组)进行测试。20个命令词每人轮流说一遍。测试结果见表1—表4。

表1 理想说话环境下第一组测试结果
Tab.1 Test results of the first group under the ideal speaking context

说话人正确错误总计正确率/%男一(山东)20020100男二(山东)1822090男三(广东)1642080女一(河南)1912095

表2 噪音环境下第一组测试结果
Tab.2 Test results of the first group under the noise environment

说话人正确错误总计正确率/%男一(山东)1282060男二(山东)1192055男三(广东)10102050女一(河南)7132035

表3 理想说话环境下第二组测试结果
Tab.3 Test results of the second group under the ideal speaking context

说话人正确错误总计正确率/%男一(浙江)1642080男二(云南)1732085女一(山西)1732085女二(山东)1642080

表4 噪音环境下第二组测试结果
Tab.4 Test results of the second group under the noise environment

说话人正确错误总计正确率/%男一(浙江)8122040男二(云南)10102050女一(山西)5152025女二(山东)7132035

此外,再针对每一个单词做一次纵向比较。在正常说话语境(含低频噪音,35 dB)下,随机找出10个人轮流说一遍20个单词,测试结果见表5。

表5 单词识别测试结果
Tab.5 Test results of word recognition

单词正确错误正确率/%启动9190关闭9190导航8280音乐100100空调9190微信7370泊车9190天窗7370右转8280左转6460倒车8280直行100100接听9190远光灯7370近光灯5550打电话7370车内照明9190道路信息8280车窗锁闭7370无人驾驶8280

4 结论

1)本系统实现了非特定人、汉语孤立词的语音识别。在正常说话语境下,单词的平均识别率为80%。

2)经过训练的说话人作为语音样本的识别率在90%左右,比一般说话人高10个百分点。

3)对于单词集合中发音差异大的单词识别率明显更高,近音词对识别有一定干扰。

4)在孤立词识别中,HMM在正常的语音环境下的识别率具有良好的稳定性。但在噪音环境下,识别率会急剧下降。

猜你喜欢
特征提取语法语音
魔力语音
基于Gazebo仿真环境的ORB特征提取与比对的研究
基于MATLAB的语音信号处理
基于MQ3与MP3的价廉物美的酒驾语音提醒器
跟踪导练(二)4
对方正在输入……
基于Daubechies(dbN)的飞行器音频特征提取
Bagging RCSP脑电特征提取算法
参考答案
基于MED和循环域解调的多故障特征提取