熊華煜,余 勤,任 品,雒瑞森
(四川大學 電氣工程學院,四川 成都 610065)
音頻信息的種類在多媒體技術發展下變得越發多樣化,如不同風格、樂器演奏的音樂,各地方言人聲等。因而語料庫質量的好壞對系統的影響巨大。標準語料庫訓練出的語音模型在這些干擾下識別率會大大降低,需適當的預處理技術進行改善。
因此,音頻分類技術具有非常巨大的理論價值和實際意義[1]。預分類為對應的音頻處理算法模型的使用提供指導,能提高處理的效率和準確度;音頻檢索方面,已分類音頻可作為帶標簽音頻數據庫,方便用作音頻處理模型訓練素材;日常生活中,音頻分類可以為實時語音進行識別、目標場景分析等應用提供精確化預處理支持,可驅動更多音頻信息處理任務的優化發展。
本文所涉及分類模型使用音頻的MFCC(melscale frequency cepstral coefficients)作為特征向量,分別輸入到支持向量機、貝葉斯分類器、全連接神經網絡、卷積神經網絡、循環神經網絡中以探究各個模型的二分類和多分類準確度。
梅爾倒譜系數(MFCC)是用數字形式表征音頻信號的常用特征,其詳細定義請參見文獻[2],運用在語音相關系統中時可賦予系統良好的魯棒性與識別率,與基于線性預測的倒譜相比較可以更好模擬人的聽覺感知效果。
支持向量機(support vector machine,SVM)是一種經典的監督式學習模型及相關的分類算法。以二分類為例,其原理是在得到一些待分類數據點的情況下,找到一個滿足分類要求的最優超平面,使所有正分類點到該平面的距離與所有負分類點到該平面的距離的總和達到最大,這個平面就是最優分類超平面。
樸素貝葉斯分類器(簡稱BYS)[3]具有將先驗知識綜合的特性,它提供了推理的一種概率手段,即基于待考察的量遵循某概率分布且根據這些概率以及已觀察數據進行推理這一假定,以求作出最優的決策。
人工神經網絡(artificial neural network,ANN)是一種類人腦神經連接結構的計算模型,其詳細定義參見文獻[4]。結構中的每個神經元都是對信息進行處理的最小結構,其經過組合形成的系統具有非線性、自適應[5]信息處理特征。神經元布局如圖1所示。

圖1 神經網絡基本結構[6]
在訓練多層神經網絡時常采用逆誤差傳播算法(error backpropagation,BP),其執行一般包含以下4步:
(1)按輸入層到輸出層方向,計算輸出值;
(2)按輸出層到輸入層方向,計算誤差值;
(3)計算每個權重的梯度;
(4)使用梯度下降算法更新權重。
全連接神經網絡(fully connected neural network,FC)即神經網絡中除輸出層外每層每個神經元都與上一層所有神經元相連,每個連接都有一個權值,第N-1層神經元輸出是第N層神經元的輸入。
卷積神經網絡(convolutional neural network,CNN)是一種利用卷積突出數據特征的神經網絡,詳細定義參見文獻[7]。它使用3種方法強化模型訓練效果:一是局部連接,神經網絡的結構不再是每一層的所有神經元都與上一層所有神經元相連;二是權值共享,在神經網絡中一組連接可以用同樣的權重,不再是每一個連接都有一個不同的權重;三是通過池化層的下采樣,這種方式不僅可以減少該層的樣本數量,而且還有助于該模型魯棒性的提高。
循環神經網絡(recurrent neural network,RNN)的詳細定義參見文獻[8],與卷積神經網絡最大的不同在于,前者輸入數據都是獨立的,在訓練過程中彼此之間不存在聯系,而循環神經網絡先后輸入數據在訓練過程中存在聯系,因此可更好地處理包含順序信息的數據。
本文設計以各種分類算法模型的基本框架為基礎,不斷調整參數以觀察音頻的分類準確度。在經典的機器學習算法中,調整輸入特征尺寸,不斷改變訓練與測試樣本的比例,并反復進行測試觀察模型的準確度波動,在先進的神經網絡算法中,不斷調整網絡層數以及迭代次數以觀察準確度波動,之后在同樣的樣本訓練及測試條件下橫向對比各個模型的準確度以尋求出最適合音頻分類的模型,最后研究了正則化參數對以上得出的最優模型準確度的影響,得到了最合適的參數。
本文的模型構建使用Python語言完成,采用PyCharm作開發環境,音頻庫采用GTZAN的genres數據集,包括5種不同風格(布魯斯、古典、鄉村、迪斯科、嘻哈)音樂,每種100條,每條30 s。
由于樣本數量較少,考慮通過對音頻進行剪切實現數據擴充,因此將音頻每9 s剪成一段,每兩段間有4 s的重合,從而將每段30 s的音頻剪切成為5段9 s的音頻,成功將樣本數量擴大了5倍。最終擴展成每類500條數據。
使用Python庫librosa中feature.mfcc函數提取音頻的前20維MFCC特征參數,通過numpy中ndarry.flatten將20*388的特征參數平鋪成一維長度為7760的向量。當使用支持向量機和貝葉斯分類器進行分類時,可僅使用一位數作為標簽代表音頻的種類,當使用神經網絡進行分類時,使用One-shot編碼作為特征向量的標簽,以匹配神經網絡輸出層神經元的個數。最終得到帶標簽的特征向量矩陣。
2.3.1 模型實現
支持向量機模型主要使用了sklearn庫,在得到帶標簽的特征向量矩陣之后,先將各特征向量打亂順序,再使用sklearn中的train_test_split函數選擇一部分數據作訓練集,剩下部分作測試集。使用svm.SVC構建支持向量機模型,使用fit函數進行訓練,predict函數進行測試,最后通過classification_report函數和accuracy_score函數得到支持向量機的分類效果。
2.3.2 多分類效果
當使用20%的數據為測試集,剩下的數據為訓練集時,該模型的分類準確度為0.837。
重復執行程序,得到分類結果見表1。

表1 重復運行支持向量機模型所得數據
觀察到分類準確度在0.8左右,但波動較大,推測原因是測試樣本量過大,同支持向量機小樣本訓練產生過擬合的特性相矛盾。
2.4.1 模型實現
貝葉斯分類器的實現通過sklearn庫實現,使用sklearn.naive_bayes中的GaussianNB搭建一樸素貝葉斯分類器,其它與支持向量機相同。
2.4.2 多分類效果
使用20%數據為測試集,剩下的為訓練集時,模型分類準確度為0.84。重復執行結果見表2。

表2 重復運行貝葉斯分類器模型所得數據
觀察到分類準確度在0.8左右,且波動較小。
2.5.1 模型實現
全連接神經網絡模型的實現基于Keras框架,使用keras.models中Sequencial模塊建立序列模型,通過keras.layers中Dense和Activation函數添加全連接層和激活函數,通過model.compile函數添加adam優化器,使用交叉熵損失函數,以分類準確度作衡量指標,使用model.fit 函數進行訓練,最后通過model.evaluate輸入測試集數據檢驗分類效果。
2.5.2 多分類效果
使用含5層隱藏層的神經網絡,輸入genre數據集,選擇64%的數據作為訓練集,16%的數據作驗證集,20%的數據作為測試集,迭代35次,得到分類準確度為0.709。
更改迭代次數,得到程序分類準確度隨迭代次數的變化如圖2所示。

圖2 不同迭代次數對應的分類準確度
觀察分類準確度的變化,可以發現迭代30次時分類準確度最高,為0.757,控制迭代次數為30次,修改隱藏層的層數,對每種情況重復3次實驗取平均值,觀察分類準確度的變化如圖3所示。

圖3 不同隱藏層層數對應的平均分類準確度
觀察到神經網絡層數的變化對分類準確度的影響并不大,其中當隱藏層層數為4時,分類準確度相對較高,為0.755。
2.6.1 模型實現
卷積神經網路模型構建亦基于Keras框架,使用keras.models中的Sequencial模塊建立序列模型,不同之處在于使用卷積神經網絡時,先將輸入數據轉化為三維形式,其深度設為1,然后通過Conv2D函數實現卷積操作,MaxPooling2D函數實現池化層下采樣,最后通過全連接層得到分類結果。
2.6.2 多分類效果
輸入genres數據集,讓數據先通過兩個卷積層加池化層的組合,再通過一個全連接層,迭代20次,得到分類準確度為0.758。改變迭代次數,得到分類效果及相應花費時間見表3。

表3 不同迭代次數對應的分類準確度及時間
考察分類準確度隨迭代次數的變化,可得如圖4所示。

圖4 卷積神經網絡分類準確度隨迭代次數的變化
一開始分類準確度隨迭代次數增加而增加,30次之后漸趨于平穩,最終分類準確度在0.83左右。
2.7.1 模型實現
循環神經網絡模型的構建同樣使用Keras框架實現,在建立模型時使用了SimpleRNN函數建立循環層,然后再接入全連接層,輸出分類結果。
2.7.2 多分類效果
輸入genres數據集,調整迭代次數,每種次數運行3次,得到平均分類效果如圖5所示。

圖5 多分類準確度隨迭代次數的變化
觀察到隨著迭代次數的變化,分類準確度在0.68到0.72之間上下波動,總體變化不大。
綜合結果,得各模型分類準確度如圖6所示。

圖6 5種模型多分類準確度對比
從圖6可觀察到,使用genres數據集考察各模型多分類效果時,準確度最高的是卷積神經網絡,其次是支持向量機和貝葉斯分類器,其中兩者的平均分類準確度相仿,但多次執行程序發現,支持向量機分類準確度方差高于貝葉斯分類器,因此綜合來看,貝葉斯分類器分類優于支持向量機,之后是全連接神經網絡,最后是循環神經網絡。可發現卷積神經網絡分類效果最好,因此接下來將基于卷積神經網絡處理genres數據集使用Dropout正則化對實驗過程進行優化,以達到更好的分類效果。
觀察模型訓練過程可發現,訓練集與驗證集的分類效果良好,但測試集效果較差,這是泛化能力不足的體現,如何減少泛化誤差則成為一大關鍵問題。正則化可通過使模型復雜度降低從而具有更好泛化能力,Dropout正則化便是其中一種方法,可通過每個訓練案例中隨機省略一半特征檢測器來減少神經網絡過度擬合[9]。即將一半隱藏層節點設置為0,降低隱藏層節點間影響,讓模型具有更強泛化性。使用Dropout正則化時,并不局限于省略一半隱藏層節點,而可根據實際需求人為確定省略掉的隱藏層節點數量的比例,以提高模型泛化性。
在卷積神經網絡中仍通過Keras實現Dropout,在模型訓練時屏蔽掉一些神經元,讓神經元輸出乘以1/(1-p)進行放大,p為神經元被屏蔽概率(Dropout率)。該處放大操作是防止訓練時結果不穩定增加的補償,使輸入同樣數據情況下輸出期望也相同。
分別在卷積神經網絡的隱藏層中最后一層池化層及全連接層激活函數后面加上Dropout語句,設置迭代次數為40,更改p值,得到效果如圖7所示。

圖7 分類準確度隨Dropout率的變化
可觀察到,當Dropout率設置為0.3時5類音頻的分類準確度最高,達到0.882。設定Dropout率為0.3,增加迭代次數,得到效果如圖8所示。

圖8 分類準確度隨迭代次數的變化
可觀察到,當迭代為70次時,分類準確度最佳,為0.894,比使用Dropout之前提高了6%。
音頻分類,在生活中有巨大理論與實際意義,在音頻檢索或音頻管控系統領域均有廣泛的應用。
本文對常見分類模型的音頻分類進行了探究,搭建了支持向量機、貝葉斯分類器、全連接網絡、卷積網絡、循環網絡5種分類模型,輸入數據集后得到每種模型分類效果,并對數據進行了對比與討論,確定了卷積神經網絡在用于音頻多分類時是較為理想的機器學習模型,在對5類音頻進行分類時,準確率接近0.9,并通過實驗得到了最佳的網絡正則化優化參數0.3與迭代次數70。
如何將最優模型的可分類數進一步擴展,探索平衡分類精度、分類速度的更加效率的模型結構,并將模型應用在更多更具體實用領域(例如音樂應用中的定向風格音樂推薦[10],或是應用在非法廣播監控中提前分離出音樂過多的條目以減少干擾等),將會是本文未來的工作目標。