李 越,徐文龍
(中國計量大學 信息工程學院,浙江 杭州 310018)
咳嗽是一系列呼吸道系統(tǒng)疾病的常見癥狀,在疾病診斷方面具有重要的臨床價值[1]。常見的呼吸道疾病有支氣管炎、肺炎、哮喘和百日咳等。咳嗽作為這些疾病的初始癥狀,通過這一特征表現(xiàn),在某種程度上能夠反映出患者的疾病類型和嚴重程度,更為客觀且方便地輔助醫(yī)生進行疾病篩查和診斷[2]。
咳嗽聲學特性可描述為呼吸道系統(tǒng)的狀態(tài)??人月暤淖詣幼R別和分類,主要借鑒語音識別方面的技術與研究。此外,一些硬件設備比如便攜式咳嗽監(jiān)測儀的出現(xiàn)提高了咳嗽識別的及時性和有效性[3]。
目前,咳嗽聲的識別主要通過機器學習的方法,如隱馬爾科夫、分類樹等模型來實現(xiàn)[4]。此外,深層模型相對于傳統(tǒng)模板匹配和淺層神經網絡有很大程度的提高。有效的特征提取方法是實現(xiàn)高準確度咳嗽識別的重要因素,研究者一般采取梅爾頻率倒譜系數(shù)(Mel frequency cepstrum coefficient, MFCC)方法進行咳嗽自動識別和計數(shù)。Swarnkarv等[5]選取MFCC、峰度系數(shù)、過零率三者結合的特征提取方式,以Logistic作為分類模型,最終完成兒科患者干濕咳聲音分類;Matos等[6]通過咳嗽數(shù)據(jù)訓練HMM模型來檢測咳嗽音信號,識別準確提升到了82%;Justice等[7]通過訓練卷積神經網絡(convolutional neural network, CNN)和遞歸神經網絡(recursive neural network, RNN)完成高精度咳嗽信號的檢測;MITTAL等[8]則通過評估各類聲學特征,使用支持向量機進行咳嗽檢測,獲得了更好的識別性能。
咳嗽識別方法大多數(shù)是在小樣本數(shù)據(jù)集下完成測試的,高準確度的研究方法還在進一步研究當中[9]。采用傳統(tǒng)的特征提取方法往往可能會使提取到的特征參數(shù)缺乏良好的區(qū)分性,從而導致效果并不理想[10]。針對此問題,本文提出一種基于非負矩陣分解(nonnegative matrix factorization, NMF)的特征提取方法,在維數(shù)簡約的前提下減少了模型訓練時間。此外,在設計的咳嗽數(shù)據(jù)集上,提取咳嗽信號的短時能量特征,將兩者的組合參數(shù)作為輸入特征,通過多種評估指標來反映不同特征提取方式的識別性能??紤]到部分數(shù)據(jù)的不平衡性,模型方面構建非線性SVM分類器來實現(xiàn)咳嗽信號和非咳嗽信號的自動分類。
在語音信號處理中,非負矩陣分解常用于對信號的頻譜進行分解??人孕盘柕念l域特征由短時傅里葉變換得到[11],將一個大矩陣分解為幾個較小矩陣。分解后的矩陣通常會包含正負元素,但在圖像等矩陣中負值元素會使得特征值沒有意義。因此,NMF矩陣分解后的非負元素更有利于探索咳嗽的內在特征且具有現(xiàn)實意義。
NMF算法的基本思想可以簡單描述為:對于任意給定的一個非負矩陣A,能夠找到一個非負矩陣W和一個非負矩陣H,從而將一個非負矩陣分解為左右兩個矩陣的乘積,滿足條件A=WH,即
Am×n=Wm×rHr×n。
(1)
其中,W為m×r維矩陣,稱為基向量矩陣;H為r×n維矩陣,稱為系數(shù)矩陣;r代表基向量數(shù)。
式中,矩陣A表示為咳嗽信號經過短時傅里葉變換后的幅度譜或功率譜組成的信息矩陣,本文選取功率譜矩陣。m和n分別表示信號的頻點和時間幀。
非負矩陣分解使分解后的所有分量均為非負值(要求純加性的描述),同時實現(xiàn)非線性的維數(shù)約減。輸入特征參數(shù)的維數(shù)過高,會導致咳嗽識別模型訓練過長和內存資源大等問題[12]。該分解算法能夠實現(xiàn)特征參數(shù)的降維處理,用分解后的系數(shù)矩陣H代替原始矩陣,有效提取咳嗽聲信號的局部特征,從而改善分類器的各項性能,大大節(jié)省計算機的存儲空間。
非負矩陣分解算法可以理解為一個優(yōu)化問題,目的是最小化矩陣W、矩陣H間乘積與原始矩陣A的差異。利用迭代的方法不斷優(yōu)化矩陣A、矩陣W和矩陣H歐氏距離的平方,從而使得乘積矩陣盡可能地接近原始矩陣。目標函數(shù)可以表示為
‖A-WH‖2=∑(Aij-(WH)ij)2。
(2)
由目標函數(shù)式(2)可知,當A-WH有且為0時,min(A-WH)=0,此時為式子的最優(yōu)解。
對于NMF目標函數(shù)的算法優(yōu)化問題,采用梯度下降法求解,算法過程如下。
Step1:初始化矩陣W和H。
Step2:設置迭代次數(shù)上限和誤差閾值。
Step3:依據(jù)迭代法則更新迭代W和H,直到全部收斂為止。
Step4:迭代結束后,用系數(shù)矩陣H代替原始矩陣,實現(xiàn)降維運算。
算法更新迭代公式如式(3)。
(3)
當矩陣達到收斂,誤差值達到穩(wěn)定[13]。此時說明原始矩陣分解成功,算法結束。
支持向量機在語音識別尤其是針對小樣本數(shù)據(jù)集中表現(xiàn)出優(yōu)秀的序列建模能力,同樣也適用于咳嗽聲識別。具體識別原理與方法如下。
SVM作為一種二分類學習模型,其基本模型是定義在特征空間上的最大間隔線性分類器。學習的基本思想是求解能夠正確劃分訓練數(shù)據(jù)集和幾何間隔最大化的分類超平面[14]。假設給定一個訓練數(shù)據(jù)集T,此樣本集是線性可分的,所有在這個超平面上的點x均滿足
ω·x+b=0。
(4)
當訓練樣本集為線性可分時,需要引入非負松弛變量εi[15]。將求解的優(yōu)化超平面轉換為凸二次規(guī)劃問題,并選取合適的的參數(shù)C。C的大小用于表示對錯誤分類的懲罰程度,轉化公式如下:
(5)
將二次規(guī)劃問題轉換為求極大值問題,并構造拉格朗日函數(shù)來得到分類決策函數(shù)如下:
f(x)=sign(w*·x+b*)。
(6)
其中,sign是符號函數(shù),x代表訓練樣本,b*是訓練樣本經過訓練后的閾值。
對于線性不可分的情況,把實際問題轉化為某個高維空間的線性問題,將二維線性不可分樣本映射到高維空間中,使得樣本點線性可分。方法是通過非線性變換來實現(xiàn),即用SVM模型中核函數(shù)k(x,y)取代x和y的內積。
核函數(shù)的選取對咳嗽聲的識別效果起關鍵性作用,目前常用的核函數(shù)及其表達式如表1。
表1 SVM常用核函數(shù)
本文實驗數(shù)據(jù)主要來源于醫(yī)院門診和住院部,包含不同呼吸道疾病患者咳嗽錄音和各種環(huán)境音(哭聲、尖叫聲)。經過醫(yī)師和病人同意,使用索尼PCM-D100錄音筆對患者咳嗽聲進行連續(xù)時間的單聲道采樣,采樣頻率設為44.1 kHZ。對每個文件的咳嗽類型進行標記,利用Audacity軟件截取清晰的咳嗽和非咳嗽片段,將每段音頻保存為WAV格式數(shù)據(jù),保存在數(shù)據(jù)庫中。最終得到400個咳嗽樣本和350個非咳嗽樣本。
針對兩類數(shù)據(jù)樣本以一定比例劃分訓練集和測試集,用于后續(xù)咳嗽識別實驗。隨機抽取2/3的數(shù)據(jù)作為訓練樣本集,1/3作為測試樣本。
本實驗大致流程為:首先對咳嗽樣本進行預處理操作;再對咳嗽信號和非咳嗽信號進行特征參數(shù)提取[16];最后構建SVM分類系統(tǒng)完成咳嗽音自動識別。本文咳嗽識別系統(tǒng)框架如圖1。
圖1 咳嗽識別系統(tǒng)框架圖
3.1.1 去噪技術
由于采集的部分咳嗽聲包含噪聲干擾,需要利用去噪技術消除信號間的一系列噪音,改進語音質量[17]。本研究采用基于小波分解的語音去噪技術,實現(xiàn)多分辨率解析,提高了時域和頻域表征局部信息的能力。
信號f(x)的連續(xù)小波變換定義如下:
(7)
(8)
其中:參數(shù)a為非零實數(shù),稱為伸縮因子;b為平移因子。
咳嗽音的小波去噪具體處理過程如下。
首先,將含噪咳嗽聲信號在不同尺度下進行小波分解,選擇小波分解層次N=6,計算信號每層的分解系數(shù)。
其次,從1~N的每一層,設定一個閾值,幅值低于該閾值的小波系數(shù)置為0,高于閾值的信號完全保留。
最后,對處理后的小波系數(shù)進行重構,根據(jù)小波分解的低頻系數(shù)和修改后的1~N層高頻系數(shù),計算咳嗽信號的小波重構。
采用本節(jié)小波去噪方法進行實驗,去噪后的咳嗽效果如圖2。利用此方法有效地去除了咳嗽聲以外的噪音干擾,為后續(xù)特征提取做準備。
圖2 降噪前后效果圖Figure 2 Before and after noise reduction renderings
3.1.2 分幀加窗
在短時分析的基礎上對咳嗽音進行短時處理。將聲音片段分割為幀信號,分割后的每一小段稱為一幀,幀長取30 ms。使用交疊分段的方法,使得幀與幀之間平滑連續(xù),前一幀和后一幀的交疊部分為幀移,一般為窗長的1/2[18]。該技術通過窗函數(shù)間的平滑移動來實現(xiàn),本文選取漢明窗,能夠避免波形丟失和遺漏現(xiàn)象,反映咳嗽信號間的幅度變化規(guī)律。
漢明窗表達式如下:
(9)
3.2.1 NMF特征提取
NMF算法實現(xiàn)了咳嗽信號的頻譜分解。通過NMF矩陣分解,一方面將描述咳嗽信號的矩陣維數(shù)進行削減,另一方面也可以對大量的數(shù)據(jù)特征進行壓縮和概括,經過預處理后的咳嗽特征具有良好的抗噪性能。從數(shù)據(jù)樣本中劃分的訓練集和測試集進行實驗,測試樣本不包含訓練樣本。
利用所述NMF特征提取方法,對每幀咳嗽信號的特征參數(shù)進行提取,特征參數(shù)的計算流程如圖3。
圖3 NMF特征提取流程圖
計算過程具體為以下步驟。
步驟1:預處理后的咳嗽信號X(n)通過快速傅里葉變換得到頻域數(shù)據(jù)X(k)。
步驟2:求取譜線能量E(k),計算方法為取模的平方。
步驟3:對能量譜矩陣進行NMF矩陣分解,得到非負基向量矩陣W和系數(shù)矩陣H。以系數(shù)矩陣H代替原始矩陣,形成所需要的12維特征參數(shù)。
3.2.2 短時能量特征提取
短時能量大小可以有效反映信號能量的變化規(guī)律且具有代表性?;诳人远虝盒?、突發(fā)性的特點[19],短時能量能夠描述音頻信號隨時間的變化情況。短時能量的計算公式為下式:
(10)
式(10)中,x(m)為輸入的咳嗽聲信號,ω(n)為所選漢明窗。
圖4為咳嗽信號與普通語音信號的短時能量對比圖。
圖4 短時能量對比圖
3.2.3 特征參數(shù)組合
為了構造更有效的咳嗽特征參數(shù),本文提出一種新的特征參數(shù)組合方式:將NMF算法分解的咳嗽特征與短時能量進行參數(shù)組合作為模型輸入。兩者組合之后從不同的角度反映了咳嗽音與其他音頻信號的特征差異。另外,特征維數(shù)方面不會明顯增加,運算復雜度大大降低。
實驗選取NMF特征參數(shù)12維,短時能量特征1維,前后組合連接成13維特征參數(shù)。最后將組合的特征參數(shù)作為非線性SVM模型的輸入進行訓練與識別。
3.3.1 實驗環(huán)境
實驗以pycharm為開發(fā)環(huán)境,在相同實驗條件下,將本文實驗結果分別與隱馬爾可夫、MLP模型識別結果進行對比。其次,特征提取方面,將本文提出的NMF+E特征組合方式與最新文獻方法進行比較實驗,以驗證本文算法的優(yōu)越性。
作為對比的隱馬爾可夫模型包括3個隱含狀態(tài),每個狀態(tài)包含3個高斯元,通過自左向右的HMM模型實現(xiàn)。采用K均值算法實現(xiàn)高斯混合模型參數(shù)初始化,咳嗽訓練算法采用Baum-Welch,識別過程則使用Viterbi算法。
多層感知機(MLP)則分別通過輸入層、隱藏層和輸出層進行咳嗽識別。首先隨機初始化所有參數(shù),然后進行迭代訓練,計算梯度值并更新參數(shù),直到滿足某個條件為止(比如誤差足夠小、迭代次數(shù)足夠多)。
3.3.2 實驗結果分析
運用本文算法進行咳嗽識別,分類模型采取支持向量機,選用適應性強的徑向基核函數(shù),根據(jù)實驗確定最優(yōu)參數(shù)。訓練樣本選取150個咳嗽信號和150個非咳嗽信號訓練最佳分類模型,測試集選擇100個咳嗽信號和130個非咳嗽信號完成測試。實驗結果如表2。其中,咳嗽識別準確率=正確識別的咳嗽個數(shù)/咳嗽總數(shù)×100%,非咳嗽的識別準確率=正確識別的非咳嗽個數(shù)/非咳嗽總數(shù)×100%。
由表2可知,該分類系統(tǒng)對于咳嗽聲的識別率達到93.75%,誤識別率僅為7.3%,獲得良好的分類效果。本文算法能夠準確地將咳嗽音從其它音頻信號中分離,反映了算法的可適用性。
表2 識別結果
以咳嗽識別準確率作為指標,得到本文評估曲線如圖5。由評估曲線可以看出,采用SVM分類的咳嗽識別準確率和模型可擴展性均表現(xiàn)出較好的效果。因此,SVM分類器在小樣本數(shù)據(jù)集情況下的泛化能力較強[20],能夠有效提高系統(tǒng)的性能。
圖5 SVM模型性能評估曲線
為驗證本文特征提取方法的有效性,將所述NMF+E特征提取算法分別與傳統(tǒng)MFCC、MFCC+E進行對比實驗。以特異性、靈敏度、準確度作為評估指標,模型均采用非線性SVM,實驗結果如圖6,其中,特異性=正確識別的非咳嗽聲個數(shù)/非咳嗽聲總數(shù)×100%,靈敏度=正確識別的咳嗽聲個數(shù)/咳嗽聲總數(shù)×100%。
圖6 不同特征參數(shù)結果對比
由圖6可以看出,四種特征提取方式中,采用本文特征提取算法的實驗效果最佳,SVM模型各方面咳嗽識別性能最好,準確度最高達93.75%。相比其他三種特征提取方式,本文咳嗽識別效果更顯著,而采用傳統(tǒng)MFCC識別效果最低,咳嗽識別準確度僅為83%。由此,采用本文特征組合的方式更能增強特征提取的表達能力。
為了選取咳嗽識別系統(tǒng)的最佳識別算法及其特征組合,我們將采集的咳嗽數(shù)據(jù)集用于特征選擇和模型評估。實驗采用五折交叉驗證的方法分別使用非線性SVM、隱馬爾可夫(HMM)、隨機森林(random forest, RF)和多層感知機(multi-Layer perceptron, MLP)四種模型進行咳嗽識別實驗。特征參數(shù)同樣選取不同的方法進行,在測試集上對咳嗽識別性能進行測試,得到如表3所示的評估結果對比??人宰R別算法分別選用本文方法、文獻[21]、文獻[22]和研究者常用的幾種參數(shù)結合方式,由表3可以看出,非線性SVM模型在特異性、靈敏度、準確度方面都表現(xiàn)出明顯的優(yōu)勢。測試集下的咳嗽識別準確度最高達到94.75%,錯誤率僅為4.9%,相對于HMM、隨機森林、MLP等分類模型咳嗽識別性能更為優(yōu)越,這表明SVM能使數(shù)據(jù)樣本可分性更強。
表3 不同算法咳嗽識別結果
將表3不同特征提取算法和模型的咳嗽識別結果進行對比,可以發(fā)現(xiàn),采用本文NMF+E的特征參數(shù)組合方法和SVM模型識別效果最突出,準確率達到93.4%。此外,采用MFCC+ZCR+E的特征組合方法識別效果較好,但特征維數(shù)較高,而本文識別算法實現(xiàn)了特征向量的降維運算。綜上所述,本文咳嗽識別系統(tǒng)能夠對咳嗽聲進行準確計數(shù)和自動識別,從而改善分類器的各項性能。
為了提高咳嗽信號的識別率,本文提出了一種非負矩陣分解(NMF)和短時能量(E)特征參數(shù)結合的方法。該識別算法綜合考慮了咳嗽音的各方面特性,提取的咳嗽特征更加全面且具有代表性??紤]到咳嗽音識別過程中特征參數(shù)維數(shù)高的特點,對初始特征矩陣進行降維分解,從而減少系統(tǒng)開銷。以特異度、準確度和靈敏度作為衡量指標判別其識別性能,由實驗結果可知,采用NMF+E的特征提取算法和傳統(tǒng)方法相比效果得到進一步提升,咳嗽識別準確度由89.87%提高到93.75%。下一步的研究重點是進一步擴大咳嗽樣本,研究如何更好地消除數(shù)據(jù)中的噪聲干擾,進一步提高特征魯棒性和模型分類性能。