論文筆記:Emotion Recognition From Speech With Recurrent Neural Networks


動機(Motivation)

在自動語音識別(Automated Speech Recognition, ASR)中,只是把語音內容轉成文字,但是人們對話過程中除了文本還有其它重要的信息,比如語調,情感,響度。這些信息對於語音的理解也是很重要的。本文關注其中一個點,如何識別出語音的情感,即語音情感識別(Speech Emotion Recognition, SER)。


語音情感識別的三個難點

1. 感情是主觀的:不同人對於同一段語音,理解出的情感不盡相同,而且存在一定的文化差異。
2. 感情在語音中的划分:給出一句語音,不一定包含一種情感,可能包含多種情感。
3. 收集數據是個問題:如果從大量電影收集,不同電影類型的語音情感存在偏差。如果從新聞收集,大部分新聞的情感都是中立的。可以人工地收集,為了天然地收集,讓專業演員來演繹不同的情感語音。還有其它問題,比如語音的情感應該被划分為幾類,如何評估語音的情感類別,這些都沒有統一的標准。

**1. **第一個難點是天然存在的,沒法解決。只能按數據集給定的情感標簽,沒法兼容不同人的理解差異。
**2. **第二個難點,本文通過CTC損失函數來解決,CTC可以識別語音中的情感和沒有情感的部分。
**3. **第三個難點,通過選定合適的數據集后解決,選定數據集后就選定了一個情感標簽和划分和評估標准


相關工作(Related works)

大部分工作將語音情感識別視作一個分類問題,一個utterance分配一個label,utterance就是一小段語音,是語音的最小單元。

深度學習之前,大多是提取低層的手工特征,用傳統分類器做,比如HMM(隱馬爾可夫模型)或GMM(高斯混合模型)。另外有對局部低層特征計算全局統計量,然后用SVM,決策樹,KNN分類。

深度學習出現后,有人把utterance分幀計算低層特征,用三層全連接層,對輸出概率聚合成utterance水平的特征(用簡單的統計量,比如最大值,最小值,平均值等),最后用ELM(Extreme Learning Machine)分類。 還有人在前面這種方法的基礎上把全連接層換成RNN或LSTM。這兩種方法的缺點是只使用了簡單的聚合和ELM,對於后者,Yann Lecun曾對其做了批判。

后面出現了純深度學習和端到端的架構模型。有人使用Attention CNN,有人用DBN,還有人用遷移學習把語音識別的任務(數據集)遷移到語音情感識別中。

本文提出來的模型效果可以和這些模型分庭抗禮。


數據集和預處理(Data and preprocessing)

IEMOCAP(Interactive Emotional Dyadic Motion Capture)被選作數據集,因為它有詳盡的獲取方法,免費的學術許可,較長的語音時長和良好的標注。

大約包括12個小時,含有視頻,音頻和人臉關鍵點的數據。由南加利福尼亞大學戲劇系的10位專業演員表演所得。評估者對每個utterance給出評價(10個情感選項),當一半以上的評估者對某個utterance的評估一致時,該utterance才分配到評估的感情。本文中選取其中4種情感用於分析(生氣,興奮,中立和傷心),只有這些樣本才被考慮到本文工作中,下圖是標簽分布。

原始信號的采樣率是16kHz,直接使用計算量很大,需要盡量保持信息的同時減小計算量。本文對utterance進行分幀,幀長為200ms,幀移為100ms(關於分幀我在筆記:語音信號和語音情感識別簡述中有介紹),在幀上計算聲學特征(用了哪些聲學特征見下文介紹),然后把這些特征合在一起作為utterance的特征輸入到模型。關於幀長的選取,論文從30ms到200ms都做過實驗發現效果差別不大,而較長的幀可以導致比較少的幀,能減小計算量,所以使用了200ms。

對於語音信號的特征主要有三種,一是聲學特征,也就是聲波的一些屬性;二是音律特征,指的是停用詞,韻律(押韻,平仄),響度,這個特征依賴於說話人,所以沒有用這類特征;三是語義學特征,就是語音對應的文字內容的信息。

本文只使用了聲學特征,使用的是python庫PyAudioAnalysis的API提供的34個特征,主要包括3個時域特征(過零率,能量,能量熵),5個譜特征,13個MFCC特征,13個音階特征。也就是一幀的聲音用34維的向量來表示。


方法

因為一個utterance只對應一個標簽,但是有很多幀,有些幀是不包含情感的,所以輸入序列和輸出序列難以一一對應,為了應對這個問題,可以使用CTC(Connectionist Temporal Classification)的方法。

CTC的闡述需要比較大的篇幅,為了簡潔起見,我把CTC的介紹單獨寫在這篇文章CTC(Connectionist Temporal Classification)介紹中,詳情見這篇文章。

CTC模型中的LSTM的輸入時間步和輸出時間步T為78,因為每個語音樣本划分成了78幀。情感標簽有4個,加上空白符,得到大小為5的字符集合。真實輸出只有一個標簽,所以在這些長度為78的輸出序列中,經過B轉換后能得到一個真實情感標簽的那些序列才是我們要的序列,用CTC的方法來使得這些序列產生的概率最大。


實驗

度量指標:有兩種,一種就是(全局)准確率(Overall accuracy),預測正確的樣本數量除以所有的樣本數,第二種就是平均類別准確率(Mean class accuracy),分別對每個類單獨求一個准確率然后取平均。

Framewise:第一種方法是以一幀作為一個樣本,是從每個utterance中挑兩個“最大聲”的幀,給它們分配utterance的情感標簽。預測時根據用多數投票法決定一個utterance的情感歸屬。分類器用的隨機森林。實驗發現在短utterance上表現還行,但是在長utterance上會顯得不穩定,表現曲線呈現鋸齒狀。

One-Label:第二個方法是一個utterance作為一個樣本,該方法是一個序列到標簽的學習,與之相比的CTC方法是序列到序列的學習。前面說了每一幀用34維的特征表示,但是每個utterance有多少個幀是不同的,為了保持相同,短的用0填充,長的縮短,使得每個utterance都由78幀組成(這個78是數據集中”90%“的百分位數得來的)。 使用LSTM作為模型,Adam進行梯度下降。

CTC:和One-Label的方法一樣,保持每個utterance長度相同,使用78x34維的向量表示一個utterance。也使用LSTM作為模型,輸出是78x5維的向量(代碼中計算損失時去掉了前兩個值,變成76x5,認為RNN的前兩個輸出沒什么作用),5表示4種情感加1個空白符,使用CTC計算損失函數。另外,這里計算的時候使用原始輸入序列的長度(不考慮那些padded的位置)。


實驗比較
使用了分組的交叉驗證方法(Grouped cross-validation),即每個樣本有額外的一個組標簽,在划分時同一個組的樣本不能同時出現在訓練集和測試集中。在IEMOCAP中,10個人的語音是通過兩人對話錄制而成,使用“兩人對話”來作為組划分依據,可以留出20%的數據作為測試集。這么做可以防止訓練集對說話人的特定說話方式過擬合。

對幾個方法進行的了實驗對比,下面是五折的分組交叉驗證結果。其中Dummy表示每次都用訓練集中最多標簽的類。FramewiseOne-label作為baseline,human performance是作者實驗室幾個人的人工預測結果。


結果分析

CTC模型的結果分析
IEMOCAP的評估中,在sadness識別中語音信號起到主要作用。而angry和excitement通過視頻信號更容易預測。而CTC方法中也發現了sadness的准確率更高,這很符合IEMOCAP的評估,如下圖所示。

如下圖,橫坐標表示專家意見(對於情感標注)不一致的個數,顏色越深表示錯誤率越大。可以看到專家意見越不一致,錯誤率越大。作者做了實驗,當只考慮專家意見(對於情感標注)一致的樣本時,准確率可以從54%提升到65%。

作者另外做了實驗,如下圖所示,其中17%的意思是,最終被標記為anger的標簽中有一些不一致標簽,這些標簽有17%落在四個情感中。51%的意思是模型的答案和專家的不一致答案相一致的百分比。可以看到,被錯分到其它三類的占比越大,模型錯分到其它三類的百分比也越大。可以看到模型犯錯並不是隨機的,如果是隨機的話模型錯分到其他三類的百分比應該是33%,這說明了模型的犯錯和人類的犯錯具有相似性。


人類表現結果分析
可以看到,人類分辨語音情感也只到達了70%,再次說明了情感帶有主觀性,模型也很難分類到百分百正確,而且它其實很難超過人類的准確率70%。從上表看出模型的犯錯並不是隨機的。但是模型犯錯的機制是不清楚的,比如很難混淆生氣和傷心,但是興奮和開心卻很難分。

這給了我們一個啟示,模型的好壞不僅要看它的正確概率,還要看它的錯誤結構是否和人類判斷相似。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM