熊華煜,余 勤,任 品,雒瑞森
(四川大學(xué) 電氣工程學(xué)院,四川 成都 610065)
音頻信息的種類在多媒體技術(shù)發(fā)展下變得越發(fā)多樣化,如不同風(fēng)格、樂器演奏的音樂,各地方言人聲等。因而語料庫質(zhì)量的好壞對系統(tǒng)的影響巨大。標(biāo)準(zhǔn)語料庫訓(xùn)練出的語音模型在這些干擾下識別率會大大降低,需適當(dāng)?shù)念A(yù)處理技術(shù)進(jìn)行改善。
因此,音頻分類技術(shù)具有非常巨大的理論價值和實際意義[1]。預(yù)分類為對應(yīng)的音頻處理算法模型的使用提供指導(dǎo),能提高處理的效率和準(zhǔn)確度;音頻檢索方面,已分類音頻可作為帶標(biāo)簽音頻數(shù)據(jù)庫,方便用作音頻處理模型訓(xùn)練素材;日常生活中,音頻分類可以為實時語音進(jìn)行識別、目標(biāo)場景分析等應(yīng)用提供精確化預(yù)處理支持,可驅(qū)動更多音頻信息處理任務(wù)的優(yōu)化發(fā)展。
本文所涉及分類模型使用音頻的MFCC(melscale frequency cepstral coefficients)作為特征向量,分別輸入到支持向量機(jī)、貝葉斯分類器、全連接神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)中以探究各個模型的二分類和多分類準(zhǔn)確度。
梅爾倒譜系數(shù)(MFCC)是用數(shù)字形式表征音頻信號的常用特征,其詳細(xì)定義請參見文獻(xiàn)[2],運(yùn)用在語音相關(guān)系統(tǒng)中時可賦予系統(tǒng)良好的魯棒性與識別率,與基于線性預(yù)測的倒譜相比較可以更好模擬人的聽覺感知效果。
支持向量機(jī)(support vector machine,SVM)是一種經(jīng)典的監(jiān)督式學(xué)習(xí)模型及相關(guān)的分類算法。以二分類為例,其原理是在得到一些待分類數(shù)據(jù)點的情況下,找到一個滿足分類要求的最優(yōu)超平面,使所有正分類點到該平面的距離與所有負(fù)分類點到該平面的距離的總和達(dá)到最大,這個平面就是最優(yōu)分類超平面。
樸素貝葉斯分類器(簡稱BYS)[3]具有將先驗知識綜合的特性,它提供了推理的一種概率手段,即基于待考察的量遵循某概率分布且根據(jù)這些概率以及已觀察數(shù)據(jù)進(jìn)行推理這一假定,以求作出最優(yōu)的決策。
人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN)是一種類人腦神經(jīng)連接結(jié)構(gòu)的計算模型,其詳細(xì)定義參見文獻(xiàn)[4]。結(jié)構(gòu)中的每個神經(jīng)元都是對信息進(jìn)行處理的最小結(jié)構(gòu),其經(jīng)過組合形成的系統(tǒng)具有非線性、自適應(yīng)[5]信息處理特征。神經(jīng)元布局如圖1所示。
圖1 神經(jīng)網(wǎng)絡(luò)基本結(jié)構(gòu)[6]
在訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)時常采用逆誤差傳播算法(error backpropagation,BP),其執(zhí)行一般包含以下4步:
(1)按輸入層到輸出層方向,計算輸出值;
(2)按輸出層到輸入層方向,計算誤差值;
(3)計算每個權(quán)重的梯度;
(4)使用梯度下降算法更新權(quán)重。
全連接神經(jīng)網(wǎng)絡(luò)(fully connected neural network,F(xiàn)C)即神經(jīng)網(wǎng)絡(luò)中除輸出層外每層每個神經(jīng)元都與上一層所有神經(jīng)元相連,每個連接都有一個權(quán)值,第N-1層神經(jīng)元輸出是第N層神經(jīng)元的輸入。
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)是一種利用卷積突出數(shù)據(jù)特征的神經(jīng)網(wǎng)絡(luò),詳細(xì)定義參見文獻(xiàn)[7]。它使用3種方法強(qiáng)化模型訓(xùn)練效果:一是局部連接,神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)不再是每一層的所有神經(jīng)元都與上一層所有神經(jīng)元相連;二是權(quán)值共享,在神經(jīng)網(wǎng)絡(luò)中一組連接可以用同樣的權(quán)重,不再是每一個連接都有一個不同的權(quán)重;三是通過池化層的下采樣,這種方式不僅可以減少該層的樣本數(shù)量,而且還有助于該模型魯棒性的提高。
循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)的詳細(xì)定義參見文獻(xiàn)[8],與卷積神經(jīng)網(wǎng)絡(luò)最大的不同在于,前者輸入數(shù)據(jù)都是獨(dú)立的,在訓(xùn)練過程中彼此之間不存在聯(lián)系,而循環(huán)神經(jīng)網(wǎng)絡(luò)先后輸入數(shù)據(jù)在訓(xùn)練過程中存在聯(lián)系,因此可更好地處理包含順序信息的數(shù)據(jù)。
本文設(shè)計以各種分類算法模型的基本框架為基礎(chǔ),不斷調(diào)整參數(shù)以觀察音頻的分類準(zhǔn)確度。在經(jīng)典的機(jī)器學(xué)習(xí)算法中,調(diào)整輸入特征尺寸,不斷改變訓(xùn)練與測試樣本的比例,并反復(fù)進(jìn)行測試觀察模型的準(zhǔn)確度波動,在先進(jìn)的神經(jīng)網(wǎng)絡(luò)算法中,不斷調(diào)整網(wǎng)絡(luò)層數(shù)以及迭代次數(shù)以觀察準(zhǔn)確度波動,之后在同樣的樣本訓(xùn)練及測試條件下橫向?qū)Ρ雀鱾€模型的準(zhǔn)確度以尋求出最適合音頻分類的模型,最后研究了正則化參數(shù)對以上得出的最優(yōu)模型準(zhǔn)確度的影響,得到了最合適的參數(shù)。
本文的模型構(gòu)建使用Python語言完成,采用PyCharm作開發(fā)環(huán)境,音頻庫采用GTZAN的genres數(shù)據(jù)集,包括5種不同風(fēng)格(布魯斯、古典、鄉(xiāng)村、迪斯科、嘻哈)音樂,每種100條,每條30 s。
由于樣本數(shù)量較少,考慮通過對音頻進(jìn)行剪切實現(xiàn)數(shù)據(jù)擴(kuò)充,因此將音頻每9 s剪成一段,每兩段間有4 s的重合,從而將每段30 s的音頻剪切成為5段9 s的音頻,成功將樣本數(shù)量擴(kuò)大了5倍。最終擴(kuò)展成每類500條數(shù)據(jù)。
使用Python庫librosa中feature.mfcc函數(shù)提取音頻的前20維MFCC特征參數(shù),通過numpy中ndarry.flatten將20*388的特征參數(shù)平鋪成一維長度為7760的向量。當(dāng)使用支持向量機(jī)和貝葉斯分類器進(jìn)行分類時,可僅使用一位數(shù)作為標(biāo)簽代表音頻的種類,當(dāng)使用神經(jīng)網(wǎng)絡(luò)進(jìn)行分類時,使用One-shot編碼作為特征向量的標(biāo)簽,以匹配神經(jīng)網(wǎng)絡(luò)輸出層神經(jīng)元的個數(shù)。最終得到帶標(biāo)簽的特征向量矩陣。
2.3.1 模型實現(xiàn)
支持向量機(jī)模型主要使用了sklearn庫,在得到帶標(biāo)簽的特征向量矩陣之后,先將各特征向量打亂順序,再使用sklearn中的train_test_split函數(shù)選擇一部分?jǐn)?shù)據(jù)作訓(xùn)練集,剩下部分作測試集。使用svm.SVC構(gòu)建支持向量機(jī)模型,使用fit函數(shù)進(jìn)行訓(xùn)練,predict函數(shù)進(jìn)行測試,最后通過classification_report函數(shù)和accuracy_score函數(shù)得到支持向量機(jī)的分類效果。
2.3.2 多分類效果
當(dāng)使用20%的數(shù)據(jù)為測試集,剩下的數(shù)據(jù)為訓(xùn)練集時,該模型的分類準(zhǔn)確度為0.837。
重復(fù)執(zhí)行程序,得到分類結(jié)果見表1。
表1 重復(fù)運(yùn)行支持向量機(jī)模型所得數(shù)據(jù)
觀察到分類準(zhǔn)確度在0.8左右,但波動較大,推測原因是測試樣本量過大,同支持向量機(jī)小樣本訓(xùn)練產(chǎn)生過擬合的特性相矛盾。
2.4.1 模型實現(xiàn)
貝葉斯分類器的實現(xiàn)通過sklearn庫實現(xiàn),使用sklearn.naive_bayes中的GaussianNB搭建一樸素貝葉斯分類器,其它與支持向量機(jī)相同。
2.4.2 多分類效果
使用20%數(shù)據(jù)為測試集,剩下的為訓(xùn)練集時,模型分類準(zhǔn)確度為0.84。重復(fù)執(zhí)行結(jié)果見表2。
表2 重復(fù)運(yùn)行貝葉斯分類器模型所得數(shù)據(jù)
觀察到分類準(zhǔn)確度在0.8左右,且波動較小。
2.5.1 模型實現(xiàn)
全連接神經(jīng)網(wǎng)絡(luò)模型的實現(xiàn)基于Keras框架,使用keras.models中Sequencial模塊建立序列模型,通過keras.layers中Dense和Activation函數(shù)添加全連接層和激活函數(shù),通過model.compile函數(shù)添加adam優(yōu)化器,使用交叉熵?fù)p失函數(shù),以分類準(zhǔn)確度作衡量指標(biāo),使用model.fit 函數(shù)進(jìn)行訓(xùn)練,最后通過model.evaluate輸入測試集數(shù)據(jù)檢驗分類效果。
2.5.2 多分類效果
使用含5層隱藏層的神經(jīng)網(wǎng)絡(luò),輸入genre數(shù)據(jù)集,選擇64%的數(shù)據(jù)作為訓(xùn)練集,16%的數(shù)據(jù)作驗證集,20%的數(shù)據(jù)作為測試集,迭代35次,得到分類準(zhǔn)確度為0.709。
更改迭代次數(shù),得到程序分類準(zhǔn)確度隨迭代次數(shù)的變化如圖2所示。
圖2 不同迭代次數(shù)對應(yīng)的分類準(zhǔn)確度
觀察分類準(zhǔn)確度的變化,可以發(fā)現(xiàn)迭代30次時分類準(zhǔn)確度最高,為0.757,控制迭代次數(shù)為30次,修改隱藏層的層數(shù),對每種情況重復(fù)3次實驗取平均值,觀察分類準(zhǔn)確度的變化如圖3所示。
圖3 不同隱藏層層數(shù)對應(yīng)的平均分類準(zhǔn)確度
觀察到神經(jīng)網(wǎng)絡(luò)層數(shù)的變化對分類準(zhǔn)確度的影響并不大,其中當(dāng)隱藏層層數(shù)為4時,分類準(zhǔn)確度相對較高,為0.755。
2.6.1 模型實現(xiàn)
卷積神經(jīng)網(wǎng)路模型構(gòu)建亦基于Keras框架,使用keras.models中的Sequencial模塊建立序列模型,不同之處在于使用卷積神經(jīng)網(wǎng)絡(luò)時,先將輸入數(shù)據(jù)轉(zhuǎn)化為三維形式,其深度設(shè)為1,然后通過Conv2D函數(shù)實現(xiàn)卷積操作,MaxPooling2D函數(shù)實現(xiàn)池化層下采樣,最后通過全連接層得到分類結(jié)果。
2.6.2 多分類效果
輸入genres數(shù)據(jù)集,讓數(shù)據(jù)先通過兩個卷積層加池化層的組合,再通過一個全連接層,迭代20次,得到分類準(zhǔn)確度為0.758。改變迭代次數(shù),得到分類效果及相應(yīng)花費(fèi)時間見表3。
表3 不同迭代次數(shù)對應(yīng)的分類準(zhǔn)確度及時間
考察分類準(zhǔn)確度隨迭代次數(shù)的變化,可得如圖4所示。
圖4 卷積神經(jīng)網(wǎng)絡(luò)分類準(zhǔn)確度隨迭代次數(shù)的變化
一開始分類準(zhǔn)確度隨迭代次數(shù)增加而增加,30次之后漸趨于平穩(wěn),最終分類準(zhǔn)確度在0.83左右。
2.7.1 模型實現(xiàn)
循環(huán)神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建同樣使用Keras框架實現(xiàn),在建立模型時使用了SimpleRNN函數(shù)建立循環(huán)層,然后再接入全連接層,輸出分類結(jié)果。
2.7.2 多分類效果
輸入genres數(shù)據(jù)集,調(diào)整迭代次數(shù),每種次數(shù)運(yùn)行3次,得到平均分類效果如圖5所示。
圖5 多分類準(zhǔn)確度隨迭代次數(shù)的變化
觀察到隨著迭代次數(shù)的變化,分類準(zhǔn)確度在0.68到0.72之間上下波動,總體變化不大。
綜合結(jié)果,得各模型分類準(zhǔn)確度如圖6所示。
圖6 5種模型多分類準(zhǔn)確度對比
從圖6可觀察到,使用genres數(shù)據(jù)集考察各模型多分類效果時,準(zhǔn)確度最高的是卷積神經(jīng)網(wǎng)絡(luò),其次是支持向量機(jī)和貝葉斯分類器,其中兩者的平均分類準(zhǔn)確度相仿,但多次執(zhí)行程序發(fā)現(xiàn),支持向量機(jī)分類準(zhǔn)確度方差高于貝葉斯分類器,因此綜合來看,貝葉斯分類器分類優(yōu)于支持向量機(jī),之后是全連接神經(jīng)網(wǎng)絡(luò),最后是循環(huán)神經(jīng)網(wǎng)絡(luò)??砂l(fā)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)分類效果最好,因此接下來將基于卷積神經(jīng)網(wǎng)絡(luò)處理genres數(shù)據(jù)集使用Dropout正則化對實驗過程進(jìn)行優(yōu)化,以達(dá)到更好的分類效果。
觀察模型訓(xùn)練過程可發(fā)現(xiàn),訓(xùn)練集與驗證集的分類效果良好,但測試集效果較差,這是泛化能力不足的體現(xiàn),如何減少泛化誤差則成為一大關(guān)鍵問題。正則化可通過使模型復(fù)雜度降低從而具有更好泛化能力,Dropout正則化便是其中一種方法,可通過每個訓(xùn)練案例中隨機(jī)省略一半特征檢測器來減少神經(jīng)網(wǎng)絡(luò)過度擬合[9]。即將一半隱藏層節(jié)點設(shè)置為0,降低隱藏層節(jié)點間影響,讓模型具有更強(qiáng)泛化性。使用Dropout正則化時,并不局限于省略一半隱藏層節(jié)點,而可根據(jù)實際需求人為確定省略掉的隱藏層節(jié)點數(shù)量的比例,以提高模型泛化性。
在卷積神經(jīng)網(wǎng)絡(luò)中仍通過Keras實現(xiàn)Dropout,在模型訓(xùn)練時屏蔽掉一些神經(jīng)元,讓神經(jīng)元輸出乘以1/(1-p)進(jìn)行放大,p為神經(jīng)元被屏蔽概率(Dropout率)。該處放大操作是防止訓(xùn)練時結(jié)果不穩(wěn)定增加的補(bǔ)償,使輸入同樣數(shù)據(jù)情況下輸出期望也相同。
分別在卷積神經(jīng)網(wǎng)絡(luò)的隱藏層中最后一層池化層及全連接層激活函數(shù)后面加上Dropout語句,設(shè)置迭代次數(shù)為40,更改p值,得到效果如圖7所示。
圖7 分類準(zhǔn)確度隨Dropout率的變化
可觀察到,當(dāng)Dropout率設(shè)置為0.3時5類音頻的分類準(zhǔn)確度最高,達(dá)到0.882。設(shè)定Dropout率為0.3,增加迭代次數(shù),得到效果如圖8所示。
圖8 分類準(zhǔn)確度隨迭代次數(shù)的變化
可觀察到,當(dāng)?shù)鸀?0次時,分類準(zhǔn)確度最佳,為0.894,比使用Dropout之前提高了6%。
音頻分類,在生活中有巨大理論與實際意義,在音頻檢索或音頻管控系統(tǒng)領(lǐng)域均有廣泛的應(yīng)用。
本文對常見分類模型的音頻分類進(jìn)行了探究,搭建了支持向量機(jī)、貝葉斯分類器、全連接網(wǎng)絡(luò)、卷積網(wǎng)絡(luò)、循環(huán)網(wǎng)絡(luò)5種分類模型,輸入數(shù)據(jù)集后得到每種模型分類效果,并對數(shù)據(jù)進(jìn)行了對比與討論,確定了卷積神經(jīng)網(wǎng)絡(luò)在用于音頻多分類時是較為理想的機(jī)器學(xué)習(xí)模型,在對5類音頻進(jìn)行分類時,準(zhǔn)確率接近0.9,并通過實驗得到了最佳的網(wǎng)絡(luò)正則化優(yōu)化參數(shù)0.3與迭代次數(shù)70。
如何將最優(yōu)模型的可分類數(shù)進(jìn)一步擴(kuò)展,探索平衡分類精度、分類速度的更加效率的模型結(jié)構(gòu),并將模型應(yīng)用在更多更具體實用領(lǐng)域(例如音樂應(yīng)用中的定向風(fēng)格音樂推薦[10],或是應(yīng)用在非法廣播監(jiān)控中提前分離出音樂過多的條目以減少干擾等),將會是本文未來的工作目標(biāo)。