出處:https://mp.weixin.qq.com/s?__biz=MzI1NDc5MzIxMw==&mid=2247490781&idx=1&sn=6e5e09693e07215f955be4ee313eb144
導讀語音機器人是58同城TEG技術工程平臺群AI Lab自主研發的具有自動電話撥打、多輪語音互動、智慧意向判斷等多種功能的智慧對話機器人。可應用於自動電話銷售、產品服務推廣、資訊稽核、語音通知等多種業務場景。語音機器人接收到的語音訊號後,為了避免非正常訊號如環境音、嘈雜人聲等聽不清的語音訊號影響語音識別效果造成意圖識別錯誤,語音機器人中聲音類別分類模組會將分類為聽不清的語音訊號進行過濾,從而提升意圖識別效果。
背景
語音機器人接收到使用者語音後,先進行語音斷句VAD,再透過語音識別ASR轉成文字,將得到的文字送入自然語音理解(NLU)和對話管理器(DM)模組,對話管理器根據不同的策略會返回相應的文本回復,最後將透過文字轉語音(TTS)模組轉成的語音傳送給使用者。在實際情況下,語音機器人存在收到很多噪音、機器音等聽不清型別的語音,此類語音透過ASR將轉譯成錯誤的文字,從而影響整個語音互動對話的使用者體驗,為了解決此類問題,提升對話質量,需要識別出語音機器人接收語音中的聽不清語音,也就是要對接收到的聲音類別進行分類,對於聽不清類別的語音,對話管理模組(DM)將提供相應的策略進行應對。目前聲音類別分類模型效果的準確率在92%左右,召回率在77%左右。
聲音特徵提取
要進行聲音類別分類,首先離不開對語音特徵的瞭解。語音作為一種資訊傳播的媒介,有其獨特的特徵。人耳一般能聽到的音訊範圍是20hz—20khz,但是實際生活電話溝通中,為了節省傳輸頻寬,通常將音訊範圍限制在4khz以下,採用8khz的取樣率對語音訊號進行取樣。
聲音的特徵提取一般流程如下圖所示。
首先會對語音訊號進行分幀和加窗,其次對加窗後的各幀訊號進行短時傅立葉變換(STFT)再求模獲得幅度譜,然後根據人耳的接收特性進行梅爾濾波,對梅爾濾波器的輸出取對數後就得到了聲音的FBank特徵,最後進行離散餘弦變換(DCT),得到聲音的梅爾頻率倒譜系數(MFCC)[1]。
接下來,我們簡要介紹下上述聲音特徵的提取流程。
加窗和分幀
語音在其持續過程中,其包含 的頻率成分一般是隨時間變換而變化的,分幀的主要目的是將語音訊號切分成一段一段的短時間語音幀,在一段短時語音幀中,可以認為其包含的頻率成分是穩定的,這樣就可以透過傅立葉變換來分析其內部的各頻率成分,也就是其內部特徵資訊。 加窗的主要目的是減小其頻域的頻譜洩漏,加窗與分幀過程如下所示。
(圖片 https://ithelp.ithome.com.tw/articles/10206570 )
短時傅立葉變換
短時傅立葉變換就是傅立葉變換,傅立葉變換是訊號處理的重要基石。因為語音訊號是頻率時變訊號,但是在短時間內可以認為其頻率是時不變的,這樣就能對其進行傅立葉分析。透過短時傅立葉變換能夠得到各語音幀訊號的頻譜,求模之後就能獲得幅度譜,幅度譜是語音訊號的重要特徵,它揭示了該語音訊號背後的各基頻成分的強弱大小。經過傅立葉變換之後,在頻域就能很清晰地展示出各語音幀的各頻率成分,而這在時域是很難辦到的。如下圖,兩個基頻,一個3khz,另一個5khz,透過麥克風之後合成的時域訊號,在時域幾乎看不出來原始訊號的基頻成分,但是透過傅立葉變換之後,在頻域能很清晰地看到,在3khz和5khz的兩個頻率處展示出兩個明顯的尖峰。
(圖片https:/ /medium.com/@y1017c121y/python-computer-vision-tutorials-image-fourier-transform-part-1-4e91e4e74724)
梅爾濾波
研究發現,人耳對聲音訊率變化的敏感程度是不一致的。在低頻區域,聲音訊率稍加變化,人耳就能察覺出來。但是在高頻區域,需要比低頻區域變化一個更大的頻率,人耳才能感知到聲音訊率發生了變化。
(圖片https://www.cancerresearchuk.org/about-cancer/head-neck-cancer/cancer-of-the-ear/middle-inner-about)
梅爾濾波首先將聲音的頻率轉換到梅爾刻度,具體公式和函式影象分別如下所示。在梅爾刻度上(縱座標)進行均勻劃分,這樣對應的頻率間隔(橫座標)就是不斷增大的,符合人耳對於聲音的接收特性。
(圖片 https://wiki.aalto.fi/display/ITSP/Cepstrum+and+MFCC)
梅爾濾波器的傳遞函式和頻譜圖分別如下圖所示,梅爾濾波器三個主要引數為最低頻率、最高頻率和濾波器個數。
(圖片 https://wiki.aalto.fi/display/ITSP/Cepstrum+and+MFCC )
可以看到,梅爾濾波器是由多個三角濾波器組成,每一個三角濾波器並行與語音幀頻譜進行內積(相乘求和),這樣一幀語音訊號的頻譜經過梅爾濾波後就能獲得M個點,M為梅爾濾波器的個數。具體的濾波示意可如下圖所示。
(圖片 http://www.inf.ed.ac.uk/teaching/courses/asr/2018-19/asr02-signal-handout.pdf )
FBank 特徵
對梅爾濾波後的訊號取對數即可得到語音訊號的FBank特徵,取對數的目的是壓低頻譜在幅值上的大小差異,FBank特徵表徵了模擬人耳能區分的各頻率範圍內語音訊號的能量大小。
MFCC 特徵
Fbank特徵取DCT變換之後,即可獲得語音的MFCC特徵,一般捨棄DCT變換後的第1階直流成分,取第2到第13階係數,MFCC特徵簡單來說代表了連線語音各共振峰的包絡資訊,不同語音訊號的包絡形狀通常會不相同。
VGGish簡介Google的聲音理解團隊於2017年在YouTube影片音軌組成的資料集上訓練得到類VGG模型,該模型中生成128維的embedding,這個基於tensorflow 的VGG模型,稱為VGGish。VGGish能從音訊波形中提取具有語義的128維embedding特徵向量,其具體網路結構如下圖所示。
聲音型別分類
聲音型別分類的初步版本採用的網路結構如下圖所示,先將語音分幀,提取各語音幀的聲學特徵,將提取到的Fbank特徵送入VGGish網路,得到128維特徵向量,再經過Bi-LSTM和Attention層,最後由softmax進行分類。
上圖中我們使用了谷歌原生的VGGish預訓練模型,聽不清聲音的識別準召率和F1值見於下表。
召回率很低,為了提升召回,我們嘗試將聲學特徵由Fbank改為MFCC特徵,網路結構保持不變,遺憾的是模型效果很不理想,準確率降低了60%左右,具體的準確率、召回率和F1值見於下表。
計算公式為:幀權重 = 幀頻譜算術平均 / 幀頻譜幾何平均造成這個結果的原因是由於MFCC只保留了連線語音各共振峰之間的包絡資訊,而丟棄了其他的高頻細節資訊,而這些細節恰恰是識別聲音聽清與否的重要特徵。
幀權重 = 幀頻譜算術平均 / 幀頻譜幾何平均
透過加權,可以相對加強聲音幀的頻譜幅值,同時相對壓低噪聲幀的頻譜幅值。依然提取 FBank 聲學特徵,實踐結果的如下表所示。
此時的召回率依然很低,於是我們決定嘗試改進網路結構。VGGish的網路結構是谷歌的預訓練模型,該模型的訓練資料是基於YouTube上的各種音訊訓練而成,音訊種類包括人聲、動物聲、樂器聲等等,而這與我們的電話音訊場景大相徑庭,於是我們想到,能否基於當前場景的標註資料,訓練一個新的VGGish。為了節省訓練時間和規模,我們去掉了VGGish後面的Bi-LSTM和Attention層,簡單的將VGGish的輸出經過簡單的FC和softmax之後進行分類。此時的網路結構變為下圖所示結構。
實驗效果印證了我們之前的猜想,相比之前的預訓練模型,召回率提升了38%,具體結果如下表所示。這個結論說明,模型最好還是基於當前的場景資料進行訓練,而不能生搬硬套,除非對於某些大型網路結構,不具備訓練條件。使用其他場景的預訓練模型,即使預訓練模型後面接入了rnn層和Attention層,效果也不能提升多少。
為了進一步改進,我們將網路去掉的Bi-LSTM和Attention層重新加到網路中,進行新的訓練,看能否進一步提升模型效果。這次的提升效果不是很明顯,召回率僅提高了1%左右,這也說明了網路對於語音特徵的學習集中在了網路的前半部分,網路的後半部分僅起到了錦上添花的作用。
除了在特徵和網路結構上進行最佳化嘗試,我們還在原資料上加入了一批新的標註資料,因為新標註的資料數量有限,量級大約為原訓練資料的十分之一。在上述 VGGish + BiLSTM + Attention 網路結構上進行新的訓練,發現數據帶來的模型效果提升不明顯,在準確率持平的基礎上,召回率大約能夠提升 0.5 個百分點。
總結
本文簡要介紹了語音特徵提取流程,VGGish網路在聲音類別分類上的實踐應用,並論述了在聲學特徵和網路結構上的種種最佳化嘗試。相比MFCC特徵,FBank特徵使得識別準確率極大提升,這是因為MFCC特徵只保留了語音各共振峰之間的包絡資訊,而丟棄了其他高頻細節資訊,而這些細節恰恰是識別聲音聽清與否的重要依據。利用語音機器人場景音訊資料訓練的VGGish網路效果要優於預訓練的VGGish網路。在資料與算力允許的條件下,可以嘗試利用當前任務資料訓練的網路取代預訓練的網路。另外RNN與Attention網路在本任務上有正面效果,但影響不明顯。
後續我們將繼續在網路結構和聲學特徵上進行最佳化探索,語音特徵組合,將各語音幀的Fbank、MFCC和Delta特徵組合起來,將組合特徵輸入到VGGish網路。網路結構上,使用增強版的VGGish,在VGGish中的各CNN層之後均加入Batch Normalization,Global pooling 層取代flatten層,減少FC層的神經元個數等進行進一步的嘗試。
部門簡介:
58 同城 TEG 技術工程平臺群 AI Lab ,旨在推動 AI 技術在 58 同城的落地,打造 AI 中臺能力,以提高前臺業務人效和使用者體驗。 AI Lab 目前負責的產品包括:智慧客服、語音機器人、智慧寫稿、智慧語音分析平臺、智慧營銷系統、 AI 演算法平臺、語音識別等,未來將持續加速創新,拓展 AI 應用。
參考文獻:
[1] Speech Processing for Machine Learning: Filter banks, Mel-Frequency Cepstral Coefficients (MFCCs) and What\'s In-Between
出處:https://mp.weixin.qq.com/s?__biz=MzI1NDc5MzIxMw==&mid=2247490781&idx=1&sn=6e5e09693e07215f955be4ee313eb144