用語音mfcc參數作為特徵,利用SVM來進行分類判斷聲音是否是嬰兒哭聲?

第一次在知乎發帖求助,希望能得到大神門的指導

我在做嬰兒哭聲檢測的項目,提取語音段的mfcc參數後,想用SVM進行分類,請問該是用一幀(32ms 1*24行向量)語音參數作為一個樣本,還是用一段語音(m*24矩陣)作為一個樣本,我覺得用一段語音才更能反映哭聲的特點,但此時怎麼解決語音時長不定(m不定)的問題呢?

我在調試使用SVM分類器進行分類時,訓練樣本用10折交叉驗證可以得到很高的正確率,可以到95%以上,為什麼實際測試效果卻很還是很差,難道在沒有進行實際測試前不是通過這個交叉驗證正確率來調試分類器嗎,請問這是什麼原因?

機器學習基礎不好,正在跟著吳恩達教授的課程學習,可是項目已經很急了,上司在催,還望知乎大們能指點一下


首先需要明確這是一個檢測類任務還是識別類任務。檢測是指給一大段音頻,裡面只有幾聲嬰兒哭聲,需要給出嬰兒哭聲的精確的起止時間點;識別是指給你一小段聲音的音頻,讓你判斷這個是不是嬰兒哭聲,只需要給出yes/no的答案。

如果是檢測任務,則@靈劍 的方案更合適。TA提了兩種方案,核心都是逐幀處理,找到哭聲並確定其位置。一種是逐幀分類後再加後處理找邊界,一種是用HMM動態找邊界。

如果是識別任務,則可用@王贇 Maigo 的方案,把所有幀的特徵一次性處理進行分類。用GMM之類的模型來解決不定長的問題。當然,對識別任務也可以用@靈劍 的方法,此時因為不用動態掃描會更簡單。

檢測問題也可以用@王贇 Maigo 的方案,此時需要先用端點檢測一類的方法把疑似哭聲的段切出來,然後再做分類。如果你的音頻比較乾淨背景噪音不大,這種流程相對比較高效,因為靜音被切掉不用處理。


你的問題可以抽象成說話人驗證(speaker verification)問題——「嬰兒哭聲」是你的目標說話人,其它聲音是冒充者。

說話人識別中一般用一整段語音作為識別的單位。語音長度不定的問題,一般是這樣解決的:把一段語音中各幀的特徵看成數據點,找一個分布來擬合它。

最常用的分布是高斯混合分布(Gaussian mixture model, GMM)。在此基礎上,還可以再提取supervector和i-vector,性能會更魯棒。

分類器方面,目前的state-of-the-art似乎是PLDA(probabilistic linear discriminant analysis),不過你要用SVM也行。


用一幀語音作為特徵。簡單的方法是將訓練材料當中所有有意義的(比如響度超過閾值的)幀全部放進SVM裡面訓練,得到一個分類器;識別的時候,將每一幀的特徵輸入分類器之後,可以得到一個似然值的估計,計算出每一幀的似然值,然後求幾何平均值(相乘,再開m次方;或者說,取對數,然後取平均值),然後跟預設的閾值比較,如果超過閾值則認為有哭聲。調整閾值的大小可以影響漏檢/虛警的比例。

如果考慮更複雜的模型,跟 @王贇 Maigo 的說話人識別模型相比,我倒是想推薦一個經典的用於語義識別的模型:HMM

我們可以考慮嬰兒啼哭的這個過程,它從發音開始、發音途中、發音結束,語音幀的特徵是不太一樣的,這可以看成是一個隱含馬爾科夫過程,每一幀有可能跟上一幀停留在同一個狀態,也有可能轉移到下一個狀態,每種轉移都有個概率值,最高似然值的路徑就是檢測出的結果。

這個模型可以這樣構建:將所有的哭聲訓練材料中有意義的幀的特徵值用K-Mean之類的方法進行聚類,選擇合適的分類數量(不要太多),讓聚類的效果比較好,然後給每個分類定一個狀態;觀察材料當中每種狀態的特性,還有這幾個狀態的出現順序,如果順利的話,會有一個比較清晰的轉移圖;利用這個轉移圖訓練HMM模型;識別時,利用訓練好的HMM模型計算似然值,然後和閾值比較。算是前面方法的加強版。

不過考慮到嬰兒哭聲一般比較單調,可能還是前面的簡單的方法更實用……後一個方法的好處是也許可以用來識別哭聲的不同種類、或者進一步識別笑聲之類的。


意外從360手機助手上搜到一款HiBaby軟體,檢測到寶寶哭後可以翻譯寶寶哭聲,這下省了不少事,讓我這個新媽媽做的得心應手,你可以看看效果


除了GMM-UBM建模提ivector特徵外,處理變長問題,還可以提取高維functionals特徵,這樣特徵都是定長,或者用RNN將變長輸入encode成定長的vector representation再分類。

關於實際效果不好的原因,可能是訓練樣本與實際樣本差異較大,你可以聽一聽感受下。增大訓練樣本添加噪音,另外做cross validation的時候,把train和evaluate集分成差異較大的兩組,不要隨機分成包含近似的,這樣都可以提高模型的泛化能力。


推薦閱讀:

在機器學習的項目中,特徵是如何被找出來的?
像微博這種短文本的分析,用什麼方法提取特徵比較好呢?
有哪些利用高維空間及特性解決低維空間的問題的方法和例子?

TAG:語音識別 | SVM | 特徵提取 |