自然語言及語音處理項目式教程 實訓指導 實訓17 單句語音內容識別_第1頁
自然語言及語音處理項目式教程 實訓指導 實訓17 單句語音內容識別_第2頁
自然語言及語音處理項目式教程 實訓指導 實訓17 單句語音內容識別_第3頁
自然語言及語音處理項目式教程 實訓指導 實訓17 單句語音內容識別_第4頁
自然語言及語音處理項目式教程 實訓指導 實訓17 單句語音內容識別_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《自然語言處理技術》項目6熟悉常見語音處理技術——單句語音內容識別實訓目標熟練掌握通過python_speech_features庫的mfcc函數進行MFCC特征提取。能夠通過hmmlearn庫中HMM模塊實現HMM語音識別模型的構建。熟練掌握HMM模型的訓練和測試。實訓環境環境版本說明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語音信號處理的第三方庫NLTK3.5是一個常用的自然語言處理工具包,可用于文本處理、語義分析、詞性標注等SciPy1.7.3是一個科學計算工具包,可用于數學、科學、工程學等領域pyttsx32.9.0主要用于將文本轉換成語音實訓說明單句語音內容識別是一種語音識別任務,它的目標是從一個語音信號中識別出一個短語、句子或命令等特定的文本內容,通常應用于語音交互式系統、語音控制系統、語音助手等領域。基于HMM模型的單句語音內容識別是一種經典的語音識別方法。其基本思路是將語音信號轉換成一系列狀態,然后通過對狀態序列的統計建模,將其與文本序列進行匹配,從而實現語音到文本的轉換,通用流程圖如REF_Ref131194461\h圖31所示。圖STYLEREF2\s3SEQ圖\*ARABIC\s21基于HMM的單句語音內容識別流程實訓步驟數據讀取及特征提取在單句語音識別中,數據讀取和特征提取是兩個非常關鍵的步驟。它們對于整個語音識別系統的性能和準確度具有重要影響。對于語音識別任務來說,首先需要獲取原始的音頻數據。數據讀取是將原始音頻文件轉換成計算機可以處理的數字信號的過程。特征提取是從原始音頻信號中提取對語音識別任務有用的特征的過程。訓練集使用一共100個音頻數據,中文發音從1-10的單音節數據,數據格式為wav文件,部分數據如REF_Ref133081407\h圖41所示。圖STYLEREF2\s4SEQ圖\*ARABIC\s21音頻數據在數據準備階段,生成字典存儲路徑信息和存儲標簽信息,這是在構建訓練集和測試集中必須的準備步驟,如REF_Ref133081387\h代碼41所示。代碼STYLEREF2\s4SEQ代碼\*ARABIC\s21生成字典存儲路徑信息和存儲標簽信息frompython_speech_featuresimportmfccfromscipy.ioimportwavfilefromhmmlearnimporthmmimportjoblibimportnumpyasnpimportosimportwarningswarnings.filterwarnings("ignore")defgen_wavlist(wavpath):#定義一個空字典,用于存儲.wav文件的路徑信息,key為文件名,value為文件的完整路徑 wavdict={}#定義一個空字典,用于存儲標簽信息,key為文件名,value為該文件的標簽 labeldict={}for(dirpath,dirnames,filenames)inos.walk(wavpath):#遍歷所有的文件forfilenameinfilenames:#若文件擴展名為.wav,則執行以下操作iffilename.endswith('.wav'):#生成文件的完整路徑filepath=os.sep.join([dirpath,filename])#獲取文件名作為字典的keyfileid=filename.strip('.wav')#將文件的完整路徑存儲到字典中,以文件名為keywavdict[fileid]=filepath#將文件的標簽信息存儲到字典中,以文件名為keylabel=fileid.split('_')[1]labeldict[fileid]=label#返回存儲了.wav文件路徑信息和標簽信息的兩個字典returnwavdict,labeldict#準備訓練所需數據CATEGORY=['1','2','3','4','5','6','7','8','9','10']wavdict,labeldict=gen_wavlist('training_data')print('路徑字典:\n',wavdict)print('標簽字典:\n',labeldict)運行REF_Ref133081387\h代碼41,得到的部分結果如下。路徑字典:{'4_4':'training_data/4_4.wav','7_3':'training_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','2_1':'training_data/2_1.wav','3_1':'training_data/3_1.wav','5_4':'training_data/5_4.wav',……,'training_data/5_10.wav'}標簽字典:{'4_4':'4','7_3':'3','7_6':'6','6_4':'4','7_5':'5','5_5':'5','2_1':'1','3_1':'1','5_4':'4','3_6':'6','10_9':'9','1_4':'4','1_6':'6','9_9':'9','5_1':'1','6_9':'9','5_7':'7','8_2':'2','6_1':'1','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','10_1':'1',……,'1_7':'7','3_10':'10','5_10':'10'}在Python中,除了可以通過項目5介紹到的librosa庫實現MFCC特征提取之外,還可以利用python_speech_features庫實現。python_speech_features庫主要關注基本語音特征提取,相對簡單且計算速度較快,而librosa庫提供了更廣泛的音頻處理功能和參數選項,具有更高的易用性和適應不同應用場景的能力。本任務主要通過python_speech_features庫的mfcc函數進行MFCC特征提取。更換構建MFCC特征提取函數如REF_Ref65514933\h代碼42所示。代碼STYLEREF2\s4SEQ代碼\*ARABIC\s22MFCC特征提取代碼defcompute_mfcc(file):#讀取音頻文件 fs,audio=wavfile.read(file)#使用mfcc函數計算音頻文件的特征 mfcc_feat=mfcc(audio,samplerate=(fs/2),numcep=26)#返回MFCC特征 returnmfcc_feat在REF_Ref65514933\h代碼42中,mfcc函數的常用參數說明如REF_Ref133086728\h表41所示。表STYLEREF2\s4SEQ表\*ARABIC\s21mfcc函數的常用參數及其說明參數名稱參數說明signal接收NumPy,表示正則化參數。無默認值samplerate接收int或float,表示音頻信號的采樣率,以Hz為單位。無默認值numcep接收int,表示提取的MFCC的個數,即MFCC的維度。默認為13REF_Ref65514933\h代碼42所編寫的函數compute_mfcc集成到后續HMM語音識別模型的類中,便于對音頻特征進行提取,在訓練測試階段直接調用。構建HMM語音識別模型HMM語音識別模型包括了4個模塊,如REF_Ref130744222\h圖42所示。圖STYLEREF2\s4SEQ圖\*ARABIC\s22HMM語音識別模型讀者可以將HMM語音識別模型的模塊集成到Model類中,如REF_Ref130742810\h代碼43所示。代碼STYLEREF2\s4SEQ代碼\*ARABIC\s23HMM語音識別模型#特征提取,feat=compute_mfcc(wadict[wavid])defcompute_mfcc(file):#讀取音頻文件 fs,audio=wavfile.read(file)#使用mfcc函數計算音頻文件的特征 mfcc_feat=mfcc(audio,samplerate=(fs/2),numcep=26)#返回MFCC特征 returnmfcc_featclassModel():def__init__(self,CATEGORY=None,n_comp=3,n_mix=3,cov_type='diag',n_iter=1000):"""初始化模型CATEGORY:類別標簽列表,如['apple','banana','orange']n_comp:HMM-GMM模型的組件數量n_mix:HMM-GMM模型的混合數量cov_type:協方差類型:paramn_iter:迭代次數"""super(Model,self).__init__()self.CATEGORY=CATEGORYself.category=len(CATEGORY)self.n_comp=n_compself.n_mix=n_mixself.cov_type=cov_typeself.n_iter=n_iter#關鍵步驟,初始化models,返回特定參數的模型的列表self.models=[]forkinrange(self.category):model=hmm.GaussianHMM(n_components=self.n_comp,n_mix=self.n_mix,covariance_type=self.cov_type,n_iter=self.n_iter)self.models.append(model)#模型訓練deftrain(self,wavdict=None,labeldict=None):"""使用給定的音頻數據和標簽進行模型訓練wavdict:音頻數據字典,鍵為文件名,值為音頻數據labeldict:標簽數據字典,鍵為文件名,值為類別標簽"""forkinrange(10):subdata=[]model=self.models[k]forxinwavdict:iflabeldict[x]==self.CATEGORY[k]:mfcc_feat=compute_mfcc(wavdict[x])model.fit(mfcc_feat)#使用特定的測試集合進行測試deftest(self,wavdict=None,labeldict=None):"""使用給定的音頻數據和標簽進行模型測試wavdict:音頻數據字典,鍵為文件名,值為音頻數據labeldict:標簽數據字典,鍵為文件名,值為類別標簽"""result=[]forkinrange(self.category):subre=[]label=[]model=self.models[k]forxinwavdict:mfcc_feat=compute_mfcc(wavdict[x])#生成每個數據在當前模型下的得分情況re=model.score(mfcc_feat)subre.append(re)label.append(labeldict[x])#匯總得分情況result.append(subre)#選取得分最高的種類result=np.vstack(result).argmax(axis=0)#返回種類的類別標簽result=[self.CATEGORY[label]forlabelinresult]print('識別得到結果:\n',result)print('原始標簽類別:\n',label)#檢查識別率為:正確識別的個數/總數totalnum=len(label)correct=sum([1foriinrange(totalnum)ifresult[i]==label[i]])recognition_rate=correct/totalnumprint('識別率:{:.2f}'.format(recognition_rate))在REF_Ref130742810\h代碼43中,HMM模型可以通過hmmlearn庫中HMM模塊的GaussianHMM函數進行實現。GaussianHMM函數的常用參數說明如REF_Ref132188480\h表42所示。表STYLEREF2\s4SEQ表\*ARABIC\s22GaussianHMM函數的常用參數及其說明參數名稱參數說明n_components接收int,表示隱狀態(狀態數)的個數。默認為1n_iter接收int,表示最大迭代次數。默認為10covariance_type接收str,表示協方差矩陣的類型,可選值有"diag"(對角線協方差矩陣,默認值)、"full"(完整協方差矩陣)和"tied"(所有狀態共享一個協方差矩陣)。默認為"diag"n_mix接收int,表示高斯混合模型的數量。默認為1模型訓練與測試調用構建好的Model函數,對HMM模型進行訓練并輸出訓練集上的識別表現,如REF_Ref130742821\h代碼44所示。代碼STYLEREF2\s4SEQ代碼\*ARABIC\s24訓練HMM模型并輸出訓練集上的識別表現#進行訓練與測試models=Model(CATEGORY=CATEGORY)models.train(wavdict=wavdict,labeldict=labeldict)models.save()運行REF_Ref130742821\h代碼44,得到的識別結果如下。識別得到結果:['4','3','6','4','5','5','1','1','4','4','9','4','4','9','1','9','7','2','1','6','8','4','5','2','3','4','2','4','1','2','9','10','8','9','7','9','8','7','1','7','1','2','3','3','8','6','10','2','7','2','1','3','4','3','5','3','6','5','10','10','3','2','3','7','8','2','5','2','7','4','1','5','8','3','9','8','4','4','5','4','1','10','9','4','10','9','8','8','9','4','7','7','9','9','6','5','8','7','10','10']原始標簽類別:['4','3','6','4','5','5','1','1','4','6','9','4','6','9','1','9','7','2','1','6','8','4','5','2','3','4','2','6','1','2','10','10','8','9','7','9','8','7','1','7','1','2','3','3','8','5','10','2','7','2','1','3','4','3','5','3','6','5','10','10','3','2','3','7',

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論