# Boosting Objective Scores of a Speech Enhancement https://arxiv.org/abs/2006.10296 ###### tags: `Speech Enhancement`,`Artificial Inteligence`,`MetricGAN`,`NoiseReduction`,`ConferenceNote` ## Abstract * 在 NLP 的領域中 Transformer 跟其他的 NN 比起來有較好的表現 * 此篇研究調整了 NLP Transformer 的架構 : 1. 位置解碼 **(Positional encoding)** 資訊對於這種 Transformer 來說可能非必要,所以此部分被卷積層 **(Convolutional layer)** 取代 2. 另外為了增加 **語音增強的語音品質感知評估分數** (PESQ),L1 pre-trained 的 Transformer 會使用 MetricGAN 架構去微調 3. MetricGAN 可被當作一個下游任務的模組,並藉此提升客觀分數 4. 使用的資料集是 Deep Noise Suppression (DNS) Challenge 組織人員所提供 * 實驗結果有達到 Challenge baseline,且主客觀評估都有良好的效益 ## Introducton * 語音增強(SE)除了包含降低背景噪音外,會更近一步**增強語音** * 傳統的 SE 都會有一些前提: 1. 如 Wiener Filter 在很多環境下表現都很好,但輸入必須穩定平緩,這種輸入類型與真實世界的狀況大相徑庭 * 有部分 SE 的時-頻聲學特性是使用短時傅立葉獲得(STFT) * Lu 等人使用 deep denoising autoencoder(DDAE) 做 SE ,但它最大的缺點就是沒有考慮**全時域的資訊**,僅以**鄰近的架構**去預測增強模型的架構。所以很多人都會使用 sequential model 去做: 1. Weninger 等、Mass 等優化 SE 系統所使用的 RNNs,更進一步讓 ASR (Automatic Speech recognition)系統大幅進步 2. 雖然 RNN 跟 GRU 可以學習到 Sequence 之間的關聯性,但 RNN 長期記憶不好,GRU gate 之間運算其實沒有很有效率(因為 gate 之間會有一些時效性的問題),其他詳情可見 RNN / LSTM / GRU [讀書筆記](https://hackmd.io/@lannyyuan/BkcYKJp5o) * 使用 Transformer 來做 NLP 是目前最先進的做法: 1. 使用平行運算的 attention mechanism 大幅改善了長期記憶的問題,且在訓練與推理上也有更好的效率 2. Kim 等人認為 Transformer 在 SE 上沒顯著的助益,所以他們提出使用 Gaussian-weighted self-attention 可以大幅超越 LSTM based 的模型。而本篇研究也提出位置資訊的編碼對於 SE 任務來說可能非必要(所以在這邊被更換成卷積層) * 為了增加 SE 的客觀分數這篇論文**使用 Modified Transformer 作為 MetricGAN 的 Generator** * 在成功收斂之前 , SE model(Generator) 會先使用傳統的 loss function 去 pre-trained ,而 Discriminator 的**替代 loss** 會把 Generator 的訓練導向更好的結果 1. 過去也有使用過類似架構去促進 SE 的表現,如 : 把 BLSTM 跟 convolutional BLSTM 作為 MetricGAN 的 Generator ## 一般的語音增強的 Transformer model * 原始的 Transformer: 1. 執行 seq2seq 學習時包含兩個部分:Encoder、Decoder 2. 在 SE 這個任務中通常會忽略 Decorder 因為輸入跟輸出的長度是一致的 3. 為了在架構中加入一些相對的位置資訊,會選擇利用卷積層(而不是 Positional Encoding)。Positional Encoding 有很多選擇做法,分別為**學習法與固定法**: * **學習來的 Positional Encoding** : 輸入要是固定長度的 Sequence,如此一來就不能夠適應比 **Training 時所遇更長之 Sequence** * **固定的 Positional Encoding** : 雖然可輸入不同長度的 Sequence ,但這種手動設定的 feature 可能會讓 embedding 不夠多元 * 所以,為了兼顧模型彈性與兼容性,卷積層被選來捕捉位置資訊。最後,在這種 multi-head self-attention (MHSA)更使用了 **future masking 的機制去做出[可伸縮的 dot-product attention](https://ithelp.ithome.com.tw/articles/10206148)** (所以對於未來的架構 weight 都會變成 0,只參考現在跟之前),具體演算如下: 1. 三個線性層會把參數轉為 Q、K、V(=queries, keys, value)。T, h, dk = sequence length, head index, feature 的規模,這個**遮蔽的 dot-product 可以這樣算 :**![](https://i.imgur.com/AoMvIH9.jpg) 2. M 是一個[上三角矩陣](https://ithelp.ithome.com.tw/articles/10293435?sc=pt)(用來做 future masking),靠上的都被設定為負無限大(除了對角線)![](https://i.imgur.com/YBLoyuj.jpg) 3. 所以藉由上面這個矩陣,對角線以上 entries 的會與未來架構相關,但因內容為負,經過 softmax 後 attention 會為 0。 * 所以這個 Transformer 架構如下圖,解說有以下參考: 1. 有 N 個 attention block, block 中第一個子層是 masked MHSA,接下來是有兩個 fully connected layers 的 [FNN](https://zh.wikipedia.org/zh-tw/前馈神经网络) ([第二個子層](https://ithelp.ithome.com.tw/articles/10194255))。這兩個子層都還有再做 [resdual connection](https://towardsdatascience.com/what-is-residual-connection-efb07cab0d55) (從 input 連到 layer normalization,這個 layer normalization 只針對輸出 channel dimension 計算,setting 也很普通) * Transformer 在最後 output 會在轉為 frequency dimension (使用 fully connected layer w't ReLU )![](https://i.imgur.com/tVXpHLb.jpg) ### 實做 * 取樣頻率 : 16 kHz * STFT : [Hamming window](https://blog.csdn.net/ZhikangFu/article/details/47658961) 大小為 32 ms,hop size 16 ms。經過 STFT 後,會把波轉為 257 ponts 的 spectral feature ([Hamming and Hann](https://www.twblogs.net/a/5eed7182210de7f528fd8076)) * 在作者稍早的實驗中發現,當把係數壓到更緊密的範圍內,整體表現會更好。所以這邊光譜圖的大小是使用 log1p function (log1p(x)=log(1+x)) * 在實驗中,被增強的頻譜特徵會由反 STFT 搭配 overlap-add 重新合成 * 吵雜訊號段會被用來做 waveform generation * 使用 Adam + learing rate 5e-5 去 optimize * early stop 是 based on validation set ,目的是為了避免 overfitting ## 使用 MetricGAN 去微調語音增強模型 * 在語音質量評估的這項任務上,通常是使用用戶的主觀評估([ITU-T P.808](https://standards.globalspec.com/std/10401746/ITU-T%20P.808))。若使用跟品質相關的 loss function 去訓練 SE 也是一個好選擇。但是大部分跟語音質量相關的評估指標都太過複雜(如:[PESQ](https://en.wikipedia.org/wiki/Perceptual_Evaluation_of_Speech_Quality#:~:text=Perceptual%20Evaluation%20of%20Speech%20Quality%20(PESQ)%20is%20a%20family%20of,862%20in%202001.)),以至於無法直接作為客觀評估。 1. 所以之前有人使用深度模型去學習 PESQ 的表現,稱為 [Quality-Net](https://arxiv.org/abs/1808.05344) 。 Quality-Net 會代替 PESQ 去增強模型學習,雖然 **Quality-Net loss 會進一步提升被增強語音的 PESQ ,但它只有前幾個 learning iteration 是準的** * 所以出現了另一個方法 [MetricGAN](https://arxiv.org/abs/1905.04874) (**它長得像 GAN 是 Quality-Net 的進化版,目標是優化黑盒子的指標分數**) 1. 函數 Q'(I) 代表著常模化的評估指標(數值在 0 到 1 之間) ,I 是我們的 input 2. 呈第一點,對 PESQ 和 STOI 來說這個 I 是成對的增強語音(G(x)),這個 G(x) 是我們想要評估的,他所對應的乾淨語音為 y 3. 所以我們會做出一個 Discriminator network (D),這個 (D) 我們希望他表現得跟 Q' 像一些,所以這個客觀的 D 函數被設定為:![](https://i.imgur.com/0IT4fZQ.jpg) 4. 另外的 Generator network 可以完全 rely on **addversial loss**,式子中的 s 是我們所希望的分數,這邊**希望產生乾淨語音,所以簡單的把 s 設定為 1**! ![](https://i.imgur.com/CEycyLa.jpg) * 本篇文獻就是使用一些小技巧去微調 Transformer model,並更進一步提升 PESQ ![](https://i.imgur.com/EXcE04N.jpg) ## 實驗 ### 資料集 * 使用 Deep Noise Suppression Challenge 的資料集,從中隨機選取 10000 訓練模型 * 合成測試集(沒有混響狀況的)會被選來做為 validation set,用來評估各個模型之間的不同 * 主觀的語音評估是基於盲測集進行 1. DNS 提出的 P.808 主觀評估,10 個評審會評分這個資料集 (這資料集評分下來信賴區間 95% ) 2. 反正這個盲測還會被割成三種狀況:吵雜語音沒混響、吵雜真實情境、吵雜混響語音,[MOS ](https://en.wikipedia.org/wiki/Mean_opinion_score)分數如下圖(反正就是 Transformer + MetricGAN 表現最好) : ![](https://i.imgur.com/3NaDswC.png) ### 模型結構 * 預訓練(使用 L1-based signal approximation)的 Transformer * Discriminator 是一個有四個 2-D 卷積層的 CNN , filter 跟 kernel 大小分別是[15,(5,5)], [25,(7,7)], [40,(9,9)], [50(11,11)] 1. 為了要適應不同長度的輸入,這邊也加入了一個 2-D global pooling layer ,feature 固定在 50 維 (50 前幾層 feature map 的數量) 2. 還連接了三層 fully connected layer(分別有 50 個 LeakyReLU nodes、10 個 LeakyReLU nodes、1 個 Linear node) 3. 為了讓 Quality-Net 平滑好看,還多做了一個 spectral normalization,把它限縮成 1-Lipschitz continuous ### 實驗結果 ![](https://i.imgur.com/Sc7R3Is.png) * Transformer + MetricGAN 在語音增強任務上,表現會較 NSNet、Transformer + fixed positional encoding(PE)、Proposed Transformer 來得好 * 為了確認說這個架構是有效的,PESQ function(分數從 -0.5 到 4.5)用來評估語音品質;STOI (0 到 1)用於評估語音清晰度。兩個評估指標都是分數越高品質越好 * 這邊的運算負荷以及模型大小上都是一樣的,因為此篇研究者僅微調模型上的參數 * 若使用 Transformer(使用 L1 loss train 出來的),起初 PESQ 分數僅能收斂到 2.97,但加入 MetricGAN 後,整體可以提昇約 0.13 分 ![](https://i.imgur.com/xnNiHg2.png) * 若比較聲譜圖可發現單純使用 Transformer(使用 L1 loss train 出來的)可以有效移除背景噪音,但仍有一些噪音存在,加入 MetricGAN 後,殘餘的噪音更能夠被移除 ![](https://i.imgur.com/FJhG4QM.png) ## 討論與結論 * 為了避免額外的干擾(研究者發現當使用 PESQ 、STQI 當作 Q' 時,Transformer 可能會產出一些高頻噪音,這是因為這兩個 function 都忽略高頻域的訊號差異),所以研究者建議未來的後處理最好可以加入以深度模型為底的遮罩估計(Mask estimation)