圖 1:論文標題及作者截圖
「語音識別」已經跟隨著手機語音助手和智慧音響的普及變成了普通人日常生活的一部分,然而儘管包括谷歌、微軟在內的諸多公司紛紛宣稱其模型可以在標準資料集上「詞錯率降低到 6% 以下」、「水平超過普通人」乃至「水平超過專業速記員」,但是真實的場景裡有很多標準資料集上不會出現的情況:遠場問題、雞尾酒會問題、中英文夾雜問題等等,這些情況的存在導致現實生活中,語音識別模型的效果還遠遠達不到人類的期望,亟待解決的問題還有很多。
人聲分離是雞尾酒會問題中一個比較難的分支,特指那些所有訊號由同一麥克風收錄,因此無法通過多個不同方向的麥克風解決的雞尾酒會問題。人聲分離問題的設定也有很多種,簡而言之,是從有多個說話人同時發聲的一段音訊中,將不同人的聲音區分開,以便對其中的某個(或每個)語音內容進行識別。現有的人聲分離技術面臨著三大挑戰:
首先,現有人聲分離演算法幾乎全部假設說話人數量已知,而在真實生活裡,輸入音訊中同時說話的人的數量是未知的。
其次,在訓練人聲分離系統的過程中,如何保證置換不變性(Permutation Invariant),即確保時間軸上每一個點的說話者身份都與上一個點一致,對於經典的人聲分離演算法來說,也是一大難點。
最後,即使將不同說話者的聲音成功分開,輸出為多個人聲頻道,究竟哪一個頻道是「有用的」目標頻道,仍然需要設計額外的演算法進行挑選。常用的做法是挑選音量最大的頻道,但是在多種實際場景下,例如干擾者與目標說話者同樣接近麥克風時,這種方法就有較大概率會失效。
VoiceFilter 用了「四兩撥千斤」的一招處理了人聲分離問題,他們請來了一位強有力的「外援」:聲紋識別編碼器(圖 2 紅色部分)。
VoiceFilter 網路的輸入,除了含有噪聲的人聲時頻譜(spectrogram)之外,還有一段代表目標說話者的嵌入碼(embedding,又稱 d-vector)。這段嵌入碼是由聲紋識別編碼器從一段來自目標說話者的無噪聲參考音訊編碼而成的。系統最終會根據這段嵌入碼,定向地分離出有噪聲時頻譜中目標說話者的聲音,效果如下。視訊中分別展示了兩段含有噪聲的輸入、目標說話者參考音訊、以及分離後的效果。
VoiceFilter 網路(圖 2 藍色部分)由一個 8 層的卷積網路、一個 1 層的 LSTM 迴圈網路和一個 2 層的全連線網路組成。
輸入訊號的時頻譜經過卷積層後,參考音訊的嵌入碼會被逐幀拼接到卷積層的輸出上,一同輸入 LSTM 層,最終,網路的輸出是一段與輸入時頻譜維度相同的掩碼(mask)。將輸出掩碼與輸入時頻譜相乘,即可得到輸出音訊的時頻譜。
圖 2:谷歌 VoiceFilter 的系統架構圖。
VoiceFilter 系統分別在公開資料集 LibriSpeech 和 VCTK 上進行了試驗。將訓練好的 VoiceFilter 網路同時作用於多人環境與單人環境的測試集。在固定語音識別器不變的情況下,VoiceFilter 將多人環境下的語音識別詞錯率(Word Error Rate)從 55.9% 降至 23.4%,提升率超過 50%!在單人環境下,VoiceFilter 的詞錯率也維持在了正常波動範圍內:從 10.9% 變化到了 11.1%。而在 VCTK 資料集上,VoiceFilter 則同時降低了多人環境與單人環境下的詞錯率。
圖 3:實驗結果
此外,文中還給出了人聲分離領域常用的指標 SDR(source-to-distortion ratio)。SDR 衡量的是分離後的訊號中,包含的目標訊號能量與噪聲能量之比,以分貝為單位,越高越好。相同的神經網路架構下,VoiceFilter 的 SDR 能夠達到 17.9 分貝,高於置換不變性訓練方法下的 17.2 分貝。
聲紋識別是一項已經發展非常成熟的技術,在 Pixel 手機與 Google Home 上,均有聲紋識別系統的部署。這些裝置中都有現成的目標說話者嵌入碼(d-vector),VoiceFilter 系統部署到這類產品中時,不需要使用者進行任何額外的互動。換言之,VoiceFilter 可以在沒有為使用者帶來任何額外使用成本的前提下,實現無論使用者的語音命令來自何種環境,被幾個麥克風收音,都能在維持單人環境詞錯率不變的情況下,降低多人環境詞錯率。
原文連結:https://arxiv.org/abs/1810.04826
更多音訊樣本:https://google.github.io/speaker-id/publications/VoiceFilter