趙 莉 付世鳳
(湖南信息職業技術學院,湖南 長沙 410083)
聲紋是攜帶語音特征信息的圖譜,具有特定性且蘊含豐富的個人信息,因為其具有偽造難度高、辨識性強等特點,所以常用于身份識別領域[1]。隨著人工智能等技術的發展,聲紋識別的準確性、及時性得到提高,聲紋識別技術廣泛應用于軍事、金融等領域。語音作為日常交流的主要媒介,可以傳達思想,還可以表達說話人的情感狀態,其中傳達的語義內容、說話音量的高低都反映人們的情緒。語音情感識別就是對隱藏在語音中的信息進行分析和挖掘,識別其情感趨向(高興、傷悲)或者得出其觀點是“贊同”還是“反對”,甚至還可以得出情感隨時間的演化規律,情感識別的結果可以作為重要的決策依據。例如,在醫療保健系統中,可以將其作為心理分析的工具;在人機交互系統中,可以以此為依據精確把握用戶需求;在教育行業,可以根據情感識別結果對青少年的心理問題進行干預。綜上所述,語音情感識別具有廣泛的應用前景[2]。
語音情感識別的目標是從語音中識別人的情感狀態,需要從語音信號中提取語音特征,從而對語音情感分類模型進行訓練,分類模型訓練好后就可以識別語音的情感類別,語音情感識別主要包括語音特征提取、分類模型訓練以及語音情感類別預測3個階段。
首先,語音特征提取的起點是采集樣本音頻,其目的是將原始的語音模擬信號轉化為語音信號數字形式。其次,經過分幀、加窗以及短時傅里葉變換等標準化處理后,得到高/中/低頻幅度相當的語音幀序列。再次,標注預先定義好的情緒類別標簽,并提取MFCC特征數學矩陣[3],將數學矩陣與情緒類別標簽綁定形成數據集合,再將集合轉換為特征數學矩陣,這樣就可以從特征數學矩陣中逐一讀取行向量作為語音情感分類模型的輸入,從而對分類模型進行訓練。最后,為了對訓練好的分類模型進行評估驗證,還要按一定比例將數學矩陣劃分為訓練集和驗證集(訓練集模型訓練,驗證集模型評估),具體過程如圖1所示。

圖1 語音特征提取過程
語音信號屬于連續的模擬信號,需要對原始信號進行采樣,采樣原理如下:按照一定頻率對連續模擬量進行電壓數值抽取,抽取頻率也就是采樣頻率,根據聲波波形對采樣所得的電壓波形進行數字化處理,將離散數值分級量化為對應的數字信號,由于獲取的語音信號通常都有噪聲,因此還需要通過濾波處理來過濾噪聲,這樣語音信號就轉化為時間軸上離散、幅度連續的無噪信號[3]。
語音信號在一個長的時間段內是變化的,但是在一個極短的時間段,其是接近穩定不變的,可以將語音信號分割成若干幀,每幀的時間長度約為20 ms~30 ms,這樣每幀的語音信號都是穩定的,為了讓處理后的語音信號與實際語音信號接近,還需要加上幀移,分幀后語音信號變成有限信號,語音信號音頻譜波形會隨時間而變化,語音信號特征在較短的時間內不會發生變化,但是在較長時段內語音信號特征是會發生變化的,因此需要在相鄰兩幀之間預留重疊部分,以保證音頻譜波形能夠平滑過渡,分幀后還要通過添加1個窗函數來進行加窗處理。加窗使用的窗函數一般有矩形窗以及漢明窗,矩形窗函數、漢明窗函數如公式(1)、公式(2)所示。
式中:w(n)為加窗函數;M為矩形窗長度;n為0~M的整數;N為漢明窗長度,也是傅里葉變換長度。
卷積神經網絡屬于前饋神經網絡,是一種經典的深度學習架構,一個卷積神經網絡通常包括輸入層、中間層(卷積層、采樣層和全連接層)和輸出層。卷積層負責特征提取,采樣層負責特征選擇,全連接層負責根據特征進行語音情感分類。對輸入向量和卷積層中的卷積核進行卷積計算,完成特征提取后,通過下采樣函數在采樣層進行降維運算,以完成特征選擇任務,最后在全連接層將前面提取到的所有特征矩陣轉化為一維的特征大向量,全連接層在卷積神經網絡結構中的最后,并對語音情感進行分類。一般全連接層的參數是最多的,中間層的每層都由二維平面組成,每個二維平面都包括若干個神經元節點[3],采樣神經元系統大部分的計算量都集中在卷積層,是整個卷積神經網絡中最重要的部分,通過卷積計算可以提取各種情感語譜圖中的聲紋特征(為后續的分類處理奠定基礎)。卷積神經網絡模型的具體結構如圖2所示。

圖2 卷積神經網絡的結構圖
卷積神經網絡的訓練屬于有監督學習,它的工作原理與普通神經網絡類似,是通過學習訓練集中輸入向量和輸出向量之間的映射關系得到端到端的分類模型,模型的訓練可細分為前向傳播階段和反向傳播階段[4]。
前向傳播階段從訓練集中逐一選取樣本并輸入網絡,在輸入層經過逐級變換傳至輸出層,從而得到相應的實際輸出[4]。
對卷積層來說,一個卷積核(濾波器)與前一層的特征數據進行卷積計算,卷積計算的形式如公式(3)、公式(4)所示。
對采樣層來說,對上一層卷積操作得到的特征圖進行采樣降維處理(減少特征的維度),一般會在不影響訓練效果的情況下盡可能減少網絡訓練過程中的計算量,從而達到提高訓練速度的目的,也在一定程度上避免了訓練過程中的過擬合現象,具體計算如公式(5)所示。
對全連接層(第l層)來說,其輸入為第l-1的輸出,經過激活函數處理后,得到的輸出如公式(6)所示。
式中:xl為全連接層輸出;(σ)為全連接層的激活函數;wl為全連接層權值;bl為全連接層偏置;xl-1為第l-1層的輸出。
對輸出層(第L層)來說,其輸入為第L-1層的輸出,經過激活函數Softmax處理后,得到的輸出如公式(7)所示。
反向傳播階段的關鍵是根據預測輸出和實際輸出之間誤差來調整各個神經元權值和偏置,新的值不斷迭代舊的值,直到迭代后某次誤差損失足夠小就可以停止,具體思路如下:1) 初始化各神經元權值和偏置。2) 讀取訓練集樣本中的輸入向量和目標輸出向量。3) 計算中間層和輸出層神經元的輸出。4) 計算目標輸出和實際輸出的偏差e。5)判定偏差e是否小于閾值。6) 判定結果為否,進入步驟七,判定結果為是,結束訓練。7) 計算各神經元誤差。8) 計算誤差敏感度。9) 更新權值和偏置,回到步驟三。具體過程如圖3所示。

圖3 反向傳播階段權值和偏置更新過程
各個神經元權值和偏置修正的變化率都是不同的,為了方便計算和理解,可以定義一個中間項(誤差敏感度δ),也是反向傳播反回神經元的靈敏度,可以反映每個神經元的相對基的變化率,輸出層(第L層)的神經元的誤差敏感度如公式(8)所示。
式中:δL為輸出層的誤差敏感度;f'為激勵函數的導函數的值;uL為輸出層經過線性處理后的結果;y為輸出層實際輸出;o為輸出層的預測輸出。
通過求導可以得到其他各層的誤差敏感度,利用梯度下降方法對權值和偏置進行修正[4],可以使用損失函數衡量誤差,將損失函數記為J,具體計算如公式(9)、公式(10)所示。
式中:bl為第l層偏置;η為學習率;?b為偏置的更新值;為損失函數對偏置求偏導;wl為第l層的權值;η為學習率;?w為權值的更新值;為損失函數對權值求偏導。
全連接層的反向求導過程如公式(11)、公式(12)所示。
當接采樣層的下一層為卷積層時,該采樣層的誤差敏感度如公式(13)所示。
當接卷積層的下一層為采樣層時,該卷積層的誤差敏感度如公式(14)所示。
在卷積神經網絡的最后一層,通常使用Softmax分類器對語音情緒進行分類。具體可以通過Softmax函數求解并統計所有向量x屬于類別j的條件概率p(y=j∣x),其中1≤j≤N條如果j為1~N的整數k時條件概率最大,即認為向量x為分類為類別k,這樣就將分類問題轉化為條件概率問題,如公式(15)所示。
式中:p(y=j|x)為樣本向量x屬于第j個類別的概率;K為線性函數的個數;wj為類別j的權值。
在Tensorflow框架中對多個MFCC特征矩陣和音頻樣本進行訓練。試驗過程如下:1) 使用Python讀取樣本音頻文件,調用FFmpeg、liborosa等工具包中的相關方法讀取音頻文件的MFCC特征矩陣以及音頻文件的標注信息,并將讀取的數據存入數據集。2) 打亂數據集,這樣可以讓數據集中的數據隨機排列,防止因數據分布不均勻而對結果造成不良影響,按照7∶3的比例,將數據集分為訓練集和驗證集。3) 增加輸入層,并定義輸入層的數據的維度。4) 增加若干中間層(包括卷積層、采樣層等),并指定中間層激活函數(中間層激活函數一般使用ReLU等),指定中間層Dropout參數(防止過擬合),中間層的層數根據需要調整。5) 增加平化層。6) 增加全連接層,并在全連接層定義l1、l2等正則項參數,防止過擬合。增加全連接層的激活函數(一般使用Softmax)。7) 定義收斂方法以及收斂方法所含參數(收斂方法主要包括RMSProp以及Adam等,收斂方法所含參數主要包括學習率)。8) 定義損失函數(主要包括categorical_crossentropy、binary_crossentropy等)。9) 配置其他次要參數,并按照指定輪次開始訓練。在訓練過程中,Tensorflow框架會在每個輪次用驗證集去驗證并記錄相關數據。10) 訓練完成,生成模型文件以及相關中間數據。讀取中間數據并評估模型是否符合要求、是否發生過擬合,網絡設置是否不當,數據集是否有問題。如果模型不符合要求,就修改上述訓練過程中的激活函數、訓練輪次等參數和網絡配置(例如中間層層數),重新訓練,直到產生符合提交件語音情緒分類模型為止。具體結果見表1。

表1 神經網絡模型評估結果
該文采用Tensorflow框架進行訓練,從而得到音頻輔助識別預測模型,基于所述情緒分析模型通過程序腳本自動處理加人工輔助處理的方式對測試集上的樣本進行評估驗證,得到所述測試樣本的分析結果,比較所述分析結果和所述測試樣本的情緒類別標簽是否一致,如果不一致,那么判斷所述測試樣本數據和對應的情緒類別標簽是否準確,如果所述測試樣本數據不準確,就舍棄所述測試樣本;如果所述測試樣本對應的情緒類別標簽不準確,就重新標注標簽,并將重新標注標簽后的測試樣本放入訓練集。在訓練過程中不斷調整Tensorflow訓練參數(包括激活函數、中間層層數以及訓練輪次等),重新對調整后的訓練集和參數進行訓練,直到測試集上樣本的準確率滿足設定閾值。驗證發現,當訓練輪次為1000輪、中間層層數為6層且激活函數選擇ELU 時,判定準確率較高。