《自然语言处理技术》——实训17 单句语音内容识别.docx
项目6熟悉常见语音处理技术单句语音内容识别1实训目标(1) 熟练掌握通过python_speech_features库的mfcc函数进行MFCC特征提取。(2) 能够通过hmmlearn库中HMM模块实现HMM语音识别模型的构建。(3) 熟练掌握HMM模型的训练和测试。2实训环境环境版本说明Windows1064电脑操作系统Python3.8.5Python语言版本pandas1.3.0主要用于数据读取、清洗等操作NumPy1.21.6主要用于Python中的数值计算jieba0.42.1主要用于文本分词Gensim4.2.0主要用于检索文本、计算文本相似度、训练词向量、建模主题等Matplotlib3.3.0主要用于数据可视化PaddlePaddle2.4.2是一个深度学习框架,提供了高效的计算框架和优化算法PaddleSpeech1.2.0主要用于语音和音频中的各种关键任务的开发scikit-learn1.0.2广泛地用于统计分析和机器学习建模等数据科学领域Librosa0.8.1主要用于分析一般的音频信号,是一个非常强大的Python语音信号处理的第三方库NETK3.5是一个常用的自然语言处理工具包,可用于文本处理、语义分析、词性标注等SciPy1.7.3是一个科学计算工具包,可用于数学、科学、工程学等领域pyttsx32.9.0主要用于将文本转换成语音3实训说明单句语音内容识别是一种语音识别任务,它的目标是从一个语音信号中识别出一个短语、句子或命令等特定的文本内容,通常应用于语音交互式系统、语音控制系统、语音助手等领域。基于HMM模型的单句语音内容识别是一种经典的语音识别方法。其基本思路是将语音信号转换成一系列状态,然后通过对状态序列的统计建模,将其与文本序列进行匹配,从而实现语音到文本的转换,通用流程图如图3-1所示。4实训步骤4.1 数据读取及特征提取在单句语音识别中,数据读取和特征提取是两个非常关键的步骤。它们对于整个语音识别系统的性能和准确度具有重要影响。对于语音识别任务来说,首先需要获取原始的音频数据。数据读取是将原始音频文件转换成计算机可以处理的数字信号的过程。特征提取是从原始音频信号中提取对语音识别任务有用的特征的过程。训练集使用一共100个音频数据,中文发音从1-10的单音节数据,数据格式为wav文件,部分数据如图4-1所示。OOOOO0OOOOO00O1_1.wav1_2,wav1_3.wavl_4.wav1_5.wav1_6.wav1_7.wav1_8,wav1_9.wav1_10.wav2_1.wav2_2,wav2_3.wav2_4,wavO0O0OOOO0OOOOO2_5.wav2_6.wav2_7.wav2_8.wav2_9.wav210.wav3_1.wav3_2.wav33.wav3_4.wav3_5.wav3_6.wav3_7.wav3_8WaVOOOOOOOO0OOOOO3-9.wav3J0.wav4_1.wav4_2.wav4_3.wav4.4.wav4_5.wav46.wav4_7.wav4_8.wav4_9.wav4J0.wav5J.wavSZwavOOOO0OO00O0OOO5_3.wav5_4.wav5_5,wav5_6,wav5_7.wav5_8.wav5_9,wav5_10.wav6_1.wav6_2.wav6_3.wav6_4,wav6_5,wav6_6,wavO000OOOO0OOOOO6_7.wav6_8.wav6_9.wav610.wav7_1.wav7_2.wav73.wav7_4,wav7_5.wav7_6.wav77WaV7_8.wav7_9.wav710.wavOOOOOOOOO0OOOO8_1.wav8_2.wav8_3.wav8_4.wav8_5.wav8_6.wav8_7.wav8_8.wav89.wav8_10.wav9Jwav9_2,wav9_3.wav94.wavO0O00OOO0OOO0O9_5.wav9_6.wav9_7,wav9_8.wav9_9.wav9_10.wav10_1.wav10_2.wav10_3.wav10_4.wav10_5.wav10_6.wav10_7.wav10_8.wav图4-1音频数据在数据准备阶段,生成字典存储路径信息和存储标签信息,这是在构建训练集和测试集中必须的准备步骤,如代码4-1所示。代码4-1生成字典存储路径信息和存储标签信息frompython_speech_featuresimportmfccfromscipy.ioimportwavfilefromhmmlearnimporthmmimportjoblibimportnumpyasnpimportosimportwarningswarnings.filterwarnings(''ignore")defgen_wavlist(wavpath):#定义一个空字典,用于存储.wav文件的路径信息,key为文件名,ValUe为文件的完整路径wavdict二#定义一个空字典,用于存储标签信息,key为文件名,VaIUe为该文件的标签Iabeldict=for(dirpath,dirnames,filenames)inos.walk(wavpath):#遍历所有的文件forfilenameinfilenames:#若文件扩展名为wav,则执行以下操作iffilename.endswith('.wav'):# 生成文件的完整路径filepath=os.sep.join(dirpath,filename)# 获取文件名作为字典的keyfileid=filename.StripC.wav')# 将文件的完整路径存储到字典中,以文件名为keywavdictfileid=filepath# 将文件的标签信息存储到字典中,以文件名为keylabel=fileid.split('J)llabeldictfileid=label#返回存储了.wav文件路径信息和标签信息的两个字典returnwavdict,Iabeldict#准备训练所需数据CATEGORY=','2','3','4','5','6','7','8','9','10'wavdict,Iabeldict=gen_wavlist('trainmg_data')PrintC路径字典:W,wavdict)PrintC标签字典:nIabeldict)运行代码4-1,得到的部分结果如下。路径字典:'4_4':,training-data4-4.wav','7_3':'trainmg_data/7_3.wav','7_6':'training_data/7_6.wav','6_4':'training_data/6_4.wav','7_5':'training_data/7_5.wav','5_5':'training_data/5_5.wav','trainingdata/2Lwav','37/trainingdata/3LWaV','54':'trainingdata/54.wav','trainmg_data/5_10.wav'林签字典:'4_4':'4','7_3':'3','7_6':'6','6_4':'4','7_5':'5','5_5':'5',',','5_4':'4','3_6':'6','10_9':'9','4','1_6':'6','9_9':'9',','6_9':'9','5_7':'7','8_2':'2',','9_6':'6','6_8':'8','7_4':'4','4_5':'5','3_2':'2','2_3':'3','10.4':'4','2_2':'2','2_6':'6,10J':','7','3J0':'10','5_10':'10,在Python中,除了可以通过项目5介绍到的IibroSa库实现MFCC特征提取之外,还可以利用python_speech_features库实现。python_speech_features库主要关注基本语音特征提取,相对简单且计算速度较快,而Iibrosa库提供了更广泛的音频处理功能和参数选项,具有更高的易用性和适应不同应用场景的能力。本任务主要通过python_speech_features库的mfcc函数进行MFCC特征提取。更换构建MFCC特征提取函数如代码4-2所示。代码4-2MFCC特征提取代码defcompute_mfcc(file):# 读取音频文件fs,audio=wavfile.read(file)# 使用mfcc函数计算音频文件的特征mfcc_feat=mfcc(audio,SamPIerate=(fs2),numcep=26)# 返回MFCC特征returnmfcc_feat在代码4-2中,mfcc函数的常用参数说明如表4-1所示。表4-1mfcc函数的常用参数及其说明参数名称参数说明signal接收NUmPy,表示正则化参数。无默认值samplerate接收int或float,表示音频信号的采样率,以HZ为单位。无默认值numcep接收int,表示提取的MFCC的个数,即MFCC的维度。默认为13代码4-2所编写的函数compute,mfcc集成到后续HMM语音识别模型的类中,便于对音频特征进行提取,在训练测试阶段直接调用。4.2构建HMM语音识别模型HMM语音识别模型包括了4个模块,如图4-2所示。图4-2HMM语音识别模型读者可以将HMM语音识别模型的模块集成到Model类中,如代码4-3所示。代码4-3HMM语音识别模型#特征提取,feat=compute-mfcc(wadictwavid)defcompute_mfcc(file):# 读取音频文件fs,audio=wavfile.read(file)# 使用mfcc函数计算音频文件的特征mfcc_feat=mfcc(audio,samplerate=(fs2),numcep=26)# 返回MFCC特征returnmfcc_featclassModel():definit_(self,CATEGORY=None,n_comp=3,n_mix=3,cov-type='diag',n_iter=1000):初始化模型